I really liked this book. It is modeled after the very useful "Unix Power Tools" that was first published 15 years ago. Since Java was first introduced it has grown from a simple web page enhancement language to one that does all kinds of useful computing work. The proliferation of tools and acronyms that have grown up around it have been quite frustrating to me. Usually you are faced with a book about a particular tool and having to decide if this entire book is worth opening your wallet. Instead, this book is organized around tasks and then goes into detail on what tools you need to do the job. There is plenty of detailed technical information on how to use the tool and why to do things a particular way. The book is organized as follows:
Build Tools - Used to coordinate, federate, and binds the other SDLC (Software Design Lifecycle) tools together into a single, coherent process. The build tool ensures that your project can be built on any machine, in any environment, if possible. Two tools dominate this area, and both are examined. The first is Ant, the traditional Java build tool, which uses a straightforward procedural approach and benefits from a very large user base and a rich set of extensions. The second is Maven 2, which uses a powerful, declarative approach to project build management and goes much further than being a simple build tool.
Version Control Tools- A version control system provides critical backups of your source code and enables developers to work together on the same project without interfering with one another. Version control systems also allow you to identify versions and coordinate releases and (if necessary) rollbacks. CVS and Subversion are the tools covered.
Unit Testing - Correct unit testing helps ensure that your code works and fosters cleaner, more modular, and better designed code. Automated unit testing takes this a step further. By simply integrating your unit tests into your standard build process, and running them automatically with every build, you can go a long way toward increasing the quality and reliability of your code. Test coverage tools help you check how much of your application is actually being executed during your unit tests. This in turn helps you identify untested code and improve the overall quality of your tests. JUnit 4, TestNG, and Cobertura are the tools covered here.
Integration, Load, and Performance Testing - This section examines other testing techniques such as integration, load and performance, and user interface testing. All of these are important, and all can benefit from being integrated into the build process. This section illustrates how to integrate performance tests into your unit tests, how to load-test your application, and how to automatically test web services as well as your web interfaces and the functioning of your Swing apps.
Quality Metrics Tools - It is important to be able to measure the quality of your code in objective terms. Code quality has a direct bearing on the number of bugs and the ease of maintenance later on. Code quality metrics will make inexperienced developers familiar with coding conventions and best practices. This section looks at a range of automated tools that measure different aspects of code quality, including CheckStyle, PMD, FindBugs, and Jupiter.
Technical Documentation Tools - A significant part of documentation can be generated automatically from source code and comments. This section describes tools that can help you generate good technical documentation.
Issue Management Tools - Issue tracking systems are used by testers to uncover bugs and by developers to document bug fixes. They can also be used to help organize and document releases, to plan iterations, and to assign work tasks to team members. The first tool discussed is Bugzilla, the original open source issue tracking system. The second is Trac, which contains some innovative project management and wiki features.
Continuous Integration Tools - In software development, the longer you wait to integrate your code, the more difficult the task becomes. Continuous Integration is based on the idea that you can greatly facilitate this process by committing small changes regularly, and then running automatic builds whenever code changes are committed. All of the tools and techniques discussed so far can benefit from being run automatically on a regular basis. Although this sort of integration is certainly possible with a shell script and a cron job, nowadays there are a lot of new tools that can save you a great deal of time and effort in this area. This section examines the open source tools of Continuum, CruiseControl, LuntBuild, and Hudson.
This book is not really tailored for managers looking for overviews. It is for programmers looking for solutions. Highly recommended.