Free Trial

Safari Books Online is a digital library providing on-demand subscription access to thousands of learning resources.


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.

© Copyright Pearson Education. All rights reserved.

Subscriber Reviews

Average Rating: 4.592592592592593 out of 5 rating Based on 27 Ratings

"Much more than just about legacy code..." - by C developer on 26-FEB-2013
Reviewer Rating: 1 star rating2 star rating3 star rating4 star rating5 star rating
Very good introduction in Unit Testing idea and Dependency Injection technics. One of the best manuals how to get started carrying about your code quality.
Report as Inappropriate

"The book with the solution we needed!" - by Christopher on 02-APR-2011
Reviewer Rating: 1 star rating2 star rating3 star rating4 star rating5 star rating
Where I am we have been working with a codebase that has not been developed by TDD and, consequently, has quality problems.  The size of the produce is at a point where it is becoming harder and harder to manage without breaking something.  The title caught my eye since we certainly are working with legacy code, but the definition he gives that legacy code is "code without tests" gave us the "kick in our complacency" that we needed.  While we are just beginning to utilize these techniques to bring our product under control, must promise is shown.  We have often leaned on heroic effort to refactor our code by making broad changes at once using many hands, but that is dangerous (has backfired), so can rarely be done.  Now we have a way to reverse the rot safely, allowing us to change our code without busting things, and ultimately regaining client confidence.  If you are working with code without tests, then you need to read this book.  It will show you the way!
Report as Inappropriate

"Practical and Useful" - by Anton Ivanov on 28-FEB-2011
Reviewer Rating: 1 star rating2 star rating3 star rating4 star rating5 star rating
Despite the fact that this book is quite old it is no less actual now than it was when it was first published. Nowadays everyone is aware of test-driven development and that writing tests is good, there are plenty of books and presentations that show how to start building software incrementally together with tests that verify its behavior and guide the design and implementation process. What is often lacking is any mentions that many projects were not written with tests from the beginning and there are some inherent problems in trying to implement new functionality test-first in such systems. This book tackles many real life problems and describes practical recipes that you will most likely use in your work right away. The software you are working on will less likely be broken after your changes and will gradually become covered with tests and its internal design will be naturally improved. A must-read.
Report as Inappropriate

Table of Contents