Further Reading

The most difficult thing in giving reading references is surely what to leave out. Therefore, our first recommendation is, Read all tutorials and articles and visit all Web links listed here! But because this may be difficult for some readers due to a lack of time, the following notes are an attempt to limit our reading suggestions to some highlights of more recent literature.

Extreme Programming

The undisputed cradle of the test-first approach is Extreme Programming. There are currently almost a dozen tutorials about XP. Kent Beck's Extreme Programming Explained [Beck00a] is still the seminal work. From the programmer's view, Extreme Programming Installed [Jeffries00] is the right continuation, while Planning Extreme Programming [Beck00b] offers details about the planning issue for the fledgling XP enthusiast.

Readers interested in the current state of discussion about XP should visit the Yahoo! group "ExtremeProgramming" [URL:YahooXP] and Ron Jeffrie's Web site [URL:XProgramming].

Test-First and JUnit

With his latest work, Test-Driven Development: By Example [Beck02], test-first guru Kent Beck has written the undisputed basis for test-driven programming. You will also find an extensive test-first example—using JUnit— in Extreme Programming in Practice [Newkirk01]. Shorter examples are found in [Fowler99], [Jeffries00], and [Wake01]. The technical side of JUnit is discussed in several tutorials, including [Hightower01]. Readers looking for advanced material about test-first design will also find them in some Web articles. We particularly recommend the articles of Michael Feathers—[Feathers00, 01a, 01b]—and Jeff Langr [Langr01], because they also discuss less obvious issues. There is no lack of online JUnit introductions, for example [URL:JUnit], where you will find both the latest version to download and a tutorial, as well as a large number of articles and a list of all JUnit expansions.

Extensive—although unstructured—material is available from Ward Cunningham's Wiki Web site. A good starting-point are the pages "Unit-Tests" [URL:WikiUT] and "TestFirstDesign" [URL:WikiTFD]. Another Yahoo! group [URL:YahooJUnit] is again our first choice for discussions and exchange of experience.

Testing Object-Oriented Software

The seminal work on OO testing is Testing Object-Oriented Systems by Rober Binder [99]. This tutorial offers an overwhelming amount of material in 1200 pages such that readers may find it difficult to identify a pragmatic entry. Let's say it in Kent Beck's words: "The biggest problem is that it doesn't balance the cost and benefits of tests." A Practical Guide to Testing Object-Oriented Software [McGregor01] is a much smaller volume. This tutorial is oriented to practice, easy to read, and it also discusses testing from the developer's perspective.

Of course, there are a great many resources on testing on the Web. One good start is [URL:Testing]. This Web site maintained by Brian Marick includes the test-first approach and can serve as a starting-point for indepth studies. Starting from here you can also arrive at the home of "Agile Testing" [URL:TestingAgile], which is dedicated to the pragmatic way of testing as needed in agile development.


The overall context and the question, "How can I conduct software projects successfully?" is just as important for each developer as in-depth learning of a special field in software development. Considering that each project is different and no team is identical, there is a need to adapt your approach to each single project. In his latest tutorial entitled, Agile Software Development [Cockburn01], Alistair Cockburn carved this out excellently. He managed to represent both the theoretical fundamentals, and to show practitioners what they can immediately change in their projects.

Pete McBreen examines the same problem in Software Craftsmanship [McBreen01] and expands Cockburn's thoughts by the aspect of knowledge transfer from the master to the journeyman to the apprentice.