Earlier this week I blogged about the TDD Workshop that Justin Gordon is running tomorrow (July 25) in Chicago: link. I have a recommended book list to go with this session:
xUnit Test Patterns: Refactoring Test Code (The Addison-Wesley Signature Series) by Gerard Meszaros
Automated testing is a cornerstone of agile development. An effective testing strategy will deliver new functionality more aggressively, accelerate user feedback, and improve quality. However, for many developers, creating effective automated tests is a unique and unfamiliar challenge.
xUnit Test Patterns is the definitive guide to writing automated tests using xUnit, the most popular unit testing framework in use today. Agile coach and test automation expert Gerard Meszaros describes 68 proven patterns for making tests easier to write, understand, and maintain. He then shows you how to make them more robust and repeatable--and far more cost-effective.
Loaded with information, this book feels like three books in one. The first part is a detailed tutorial on test automation that covers everything from test strategy to in-depth test coding. The second part, a catalog of 18 frequently encountered "test smells," provides trouble-shooting guidelines to help you determine the root cause of problems and the most applicable patterns. The third part contains detailed descriptions of each pattern, including refactoring instructions illustrated by extensive code samples in multiple programming languages.
Topics covered include:# Writing better tests--and writing them faster# The four phases of automated tests: fixture setup, exercising the system under test, result verification, and fixture teardown# Improving test coverage by isolating software from its environment using Test Stubs and Mock Objects# Designing software for greater testability# Using test "smells" (including code smells, behavior smells, and project smells) to spot problems and know when and how to eliminate them# Refactoring tests for greater simplicity, robustness, and execution speed
This book will benefit developers, managers, and testers working with any agile or conventional development process, whether doing test-driven development or writing the tests last. While the patterns and smells are especially applicable to all members of the xUnit family, they also apply to next-generation behavior-driven development frameworks such as RSpec and JBehave and to other kinds of test automation tools, including recorded test tools and data-driven test tools such as Fit and FitNesse.
Working Effectively with Legacy Code (Robert C. Martin Series) by Michael Feathers
Get more out of your legacy systems: more performance, functionality, reliability, and manageability
Is your code easy to change? Can you get nearly instantaneous feedback when you do change it? Do you understand it? If the answer to any of these questions is no, you have legacy code, and it is draining time and money away from your development efforts.
In this book, Michael Feathers offers start-to-finish strategies for working more effectively with large, untested legacy code bases. This book draws on material Michael created for his renowned Object Mentor seminars: techniques Michael has used in mentoring to help hundreds of developers, technical managers, and testers bring their legacy systems under control.
The topics covered include:# Understanding the mechanics of software change: adding features, fixing bugs, improving design, optimizing performance# Getting legacy code into a test harness# Writing tests that protect you against introducing new problems# Techniques that can be used with any language or platform—with examples in Java, C++, C, and C## Accurately identifying where code changes need to be made# Coping with legacy systems that aren't object-oriented# Handling applications that don't seem to have any structure
This book also includes a catalog of twenty-four dependency-breaking techniques that help you work with program elements in isolation and make safer changes. Next Generation Java Testing: TestNG and Advanced Concepts by Cédric Beust and Hani Suleiman
Enterprise Java developers must achieve broader, deeper test coverage, going beyond unit testing to implement functional and integration testing with systematic acceptance. Next Generation Java™ Testing introduces breakthrough Java testing techniques and TestNG, a powerful open source Java testing platform.
Cédric Beust, TestNG's creator, and leading Java developer Hani Suleiman, present powerful, flexible testing patterns that will work with virtually any testing tool, framework, or language. They show how to leverage key Java platform improvements designed to facilitate effective testing, such as dependency injection and mock objects. They also thoroughly introduce TestNG, demonstrating how it overcomes the limitations of older frameworks and enables new techniques, making it far easier to test today's complex software systems.
Pragmatic and results-focused, Next Generation Java™ Testing will help Java developers build more robust code for today's mission-critical environments.
This book: # Illuminates the tradeoffs associated with testing, so you can make better decisions about what and how to test# Introduces TestNG, explains its goals and features, and shows how to apply them in real-world environments# Shows how to integrate TestNG with your existing code, development frameworks, and software libraries# Demonstrates how to test crucial code features, such as encapsulation, state sharing, scopes, and thread safety# Shows how to test application elements, including JavaEE APIs, databases, Web pages, and XML files# Presents advanced techniques: testing partial failures, factories, dependent testing, remote invocation, cluster-based test farms, and more# Walks through installing and using TestNG plug-ins for Eclipse, and IDEA# Contains extensive code examples
Whether you use TestNG, JUnit, or another testing framework, the testing design patterns presented in this book will show you how to improve your tests by giving you concrete advice on how to make your code and your design more testable.
Test Driven: TDD and Acceptance TDD for Java Developers by Lasse Koskela
In test driven development, you first write an executable test of what your application code must do. Only then do you write the code itself and, with the test spurring you on, you improve your design. In acceptance test driven development (ATDD), you use the same technique to implement product features, benefiting from iterative development, rapid feedback cycles, and better-defined requirements. TDD and its supporting tools and techniques lead to better software faster.
Test Driven brings under one cover practical TDD techniques distilled from several years of community experience. With examples in Java and the Java EE environment, it explores both the techniques and the mindset of TDD and ATDD. It uses carefully chosen examples to illustrate TDD tools and design patterns, not in the abstract but concretely in the context of the technologies you face at work. It is accessible to TDD beginners, and it offers effective and less well known techniques to older TDD hands.
What's Inside:# Learn hands-on to test drive Java code# How to avoid common TDD adoption pitfalls# Acceptance test driven development and the Fit framework# How to test Java EE components-Servlets, JSPs, and Spring Controllers# Tough issues like multithreaded programs and data access code
Refactoring Databases: Evolutionary Database Design by Scott Ambler and Pramodkumar J. Sadalage
Refactoring has proven its value in a wide range of development projects–helping software professionals improve system designs, maintainability, extensibility, and performance. Now, for the first time, leading agile methodologist Scott Ambler and renowned consultant Pramodkumar Sadalage introduce powerful refactoring techniques specifically designed for database systems.
Ambler and Sadalage demonstrate how small changes to table structures, data, stored procedures, and triggers can significantly enhance virtually any database design–without changing semantics. You’ll learn how to evolve database schemas in step with source code–and become far more effective in projects relying on iterative, agile methodologies.
This comprehensive guide and reference helps you overcome the practical obstacles to refactoring real-world databases by covering every fundamental concept underlying database refactoring. Using start-to-finish examples, the authors walk you through refactoring simple standalone database applications as well as sophisticated multi-application scenarios. You’ll master every task involved in refactoring database schemas, and discover best practices for deploying refactorings in even the most complex production environments.
The second half of this book systematically covers five major categories of database refactorings. You’ll learn how to use refactoring to enhance database structure, data quality, and referential integrity; and how to refactor both architectures and methods. This book provides an extensive set of examples built with Oracle and Java and easily adaptable for other languages, such as C#, C++, or VB.NET, and other databases, such as DB2, SQL Server, MySQL, and Sybase.
Using this book’s techniques and examples, you can reduce waste, rework, risk, and cost–and build database systems capable of evolving smoothly, far into the future.