I cannot recommend this book too highly.
Java Power Tools, by John Ferguson Smart and published by O’Reilly is almost exactly the book I would have written, had I the capability. It contains descriptions and examples using almost every tool I know of (and many I didn’t) for ensuring code quality. It talks through the build, version control, continous integration, unit/functional/ui/performance testing, static analysis, and issue tracking processes in logical order and covers the major open source tools for each category.
The tools are covered in depth, with not only technical details but commentary, insightful opinions (clearly labeled as such), and sprinkled with common sense reality checks that everyone knows, but sometimes forgets when they find a tool that’s so good at what it does (like code coverage, for instance.)
In fact, I could not provide a better description of what it is I do. The book reads almost as a blueprint for my job description, and if someone asked me “what services do you offer at One Shore?”, I could just hand them a copy of Java Power Tools (but then probably not get their business, since all they’d need to do is read the book.)
The one thing I would change — but “change” isn’t the right word, “do differently if I’d written it” is better –instead of going to so much breadth and depth– is picking certain tools and providing a demonstration, a step by step narrative example more in like with the Pragamatic Programmer series, showing a real project with specific tools and real implementations such as a build script, ci project, unit and functional test cases, deployment scripts, etc.
Also, I wouldn’t have limited it to just java tools, but realize you need a focus. I have a power point presentation I’ve been working on that has been gradually morphing into an opinion essay that looks quite a bit like the outline of Java Power Tools, but lacks the focus and breath.
Having both the focus and the breadth of detail is quite an achivement, and I commend the author for pulling it off. Besides the logical flow, the book also makes a great reference and you can flip right to the chapter or section on a specific tool and see how to integrate it into your process.
I found particularly helpful the areas on Eclipse integration. It’s been a weak point of mine, and I admit to being an IDE weenie who prefers a simple text editor, while realizing the power of the IDE but just not being able to take full advantage of it myself.
Another favorite of mine is the Maven details. I’ve cursed maven and never really understood it. Sometimes it’s magic that just works great — when it works, and sometimes it feels like a straightjacket and a mystifying puzzle. I skipped over most of it, but I’m hoping a more serious read will help me to learn to love (or hate a little less) this powerful tool.
One thing I would change (of course) is to have more information of testing tools. I think a section on Selenium RC and integration with JUnit or TestNG is necessary, and mention of WATIR (or WATIJ, since this is Java) would be nice, as well as Canoo, for those who want to test the web API, but not the UI.
I actually found the book when I stumbled across a post on John’s blog about FindBugs. When I saw he had a whole chapter about this tool (that I’d just discovered) I immediately went to Safari and made room on my bookshelf for it. Immediately after that, I saw he had a whole section of CI servers, covering the 4 that I’m interested in (CruiseControl, Continuum, Luntbuild, and Hudson) and knew I’d found the book I wanted. Actually, I remembered recently having read his review of them on JavaWorld as well.
Get the book, read it, and then call me to do your build, deployment, and testing using the tools described in Java Power Tools (because I could really use the work.)
Maybe I’ll try to write a shorter booklet about PHP or Ruby (particularly rake and sprouts) using Java Power Tools as a pattern, or work on that narrative that describe a project start to finish with emphasis on tools to help improve quality.