Agile Java: Crafting Code with Test-Driven Development
Master Java 5.0, object-oriented design, and Test-Driven Development (TDD) by learning them together. Agile Java weaves all three into a single coherent approach to building professional, robust software systems. Jeff Langr shows exactly how Java and TDD integrate throughout the entire development lifecycle, helping you leverage today's fastest, most efficient development techniques from the very outset.
Langr writes for every programmer, even those with little or no experience with Java, object-oriented development, or agile methods. He shows how to translate oral requirements into practical tests, and then how to use those tests to create reliable, high-performance Java code that solves real problems. Agile Java doesn't just teach the core features of the Java language: it presents coded test examples for each of them. This TDD-centered approach doesn't just lead to better code: it provides powerful feedback that will help you learn Java far more rapidly. The use of TDD as a learning mechanism is a landmark departure from conventional teaching techniques.
Review By: Noreen Dertinger
06/15/2010Agile Java contains a set of fifteen fundamental lessons in Java and test-driven development (TDD). The book walks the reader through progressively complex concepts and examples dealing with Java and TDD. If you follow the book and the examples through in sequence you will be given a good grounding in Java development as well as Langr’s approach to TDD techniques. Agile development is less focused on written documentation; it is more accommodating to change. In TDD, the programmer writes the test before the code is written. Langr notes that there is more than one way to do TDD and that it is ok to do what makes sense as long as it fits into the basic way that the Agile Java concepts, as presented in his book, are taught.
This book is geared to those who are complete beginners either with Java or with TDD, or vice versa. It covers Java 2 Standard Edition version 5.0. A companion Web site, http://www.langrsoft.com/, allows readers to download the sample code for each lesson. However, anyone wishing to really learn the concepts herein thoroughly will be better served by typing in and working with the code examples as presented in the book. The companion Web site does provide a list of the errata for Agile Java. Detailed instructions on setting up the Java environment are covered before the author delves into the lessons. For additional information, he points readers to Sun's official Web site which is currently http://java.sun.com.
The main lessons, based on a student information system, provide material with which most learners can identify. The manner in which these lessons are presented provides a level of continuity that is most helpful when you are attempting to learn one or both Java and TDD. The exercises at the end of each chapter are based on a chess game, but here, too, the continuity is maintained throughout the book.
Agile Java is written clearly and thus readable. For the most part, I did not find reading the book tedious. The author highlights pertinent concepts without preaching to the reader or being condescending. When tips or hints are given, one really has the impression that the author is drawing on his extensive experience in the areas at hand and steers the reader away from potential problem areas.
While the content of this book is more likely to be of great appeal to developers looking to improve the quality of their code, I found it interesting from a software testing perspective as well. As agile concepts gain more use in the development world, it is helpful to have an understanding, from a software tester’s perspective, what the issues are and how the developers are dealing with them.
This book will help me build on the agile knowledge I have gained to date. While I agree with the author’s statement that this is not a Java certification book, I do believe that I have learned some good fundamental techniques and improved my knowledge base. The book has encouraged me to continue down the path to a more advanced understanding of Java, knowledge that I believe I can apply to my advantage when carrying out my responsibilities as a software tester.