Home > Store > Software Development & Management > Testing

larger cover

Add To My Wish List

Working Effectively with Legacy Code

Register your product to gain access to bonus material or receive a coupon.

  • Description
  • Extras
  • Reviews
  • Sample Content

Product Author Bios

MICHAEL C. FEATHERS works for Object Mentor, Inc., one of the world's top providers of mentoring, skill development, knowledge transfer, and leadership services in software development. He currently provides worldwide training and mentoring in Test-Driven Development (TDD), Refactoring, OO Design, Java, C#, C++, and Extreme Programming (XP). Michael is the original author of CppUnit, a C++ port of the JUnit testing framework, and FitCpp, a C++ port of the FIT integrated-testing framework. A member of ACM and IEEE, he has chaired CodeFest at three OOPSLA conferences.


© Copyright Pearson Education. All rights reserved.

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.

Related Articles

Kicking the Code Monkey: Migrating Your Ancient Code for Fun and Profit

Saving Money with Legacy Data

Saving Money with Legacy Source Code

Links

Untitled Document Visit this link for more information related to this title.

Customer Reviews

58 of 59 people found the following review helpful
5.0 out of 5 stars No more fairy-land, October 20, 2004
This review is from: Working Effectively with Legacy Code (Paperback)
The average book on Agile software development describes a fairyland of greenfield projects, with wall-to-wall tests that run after every few edits, and clean & simple source code.

The average software project, in our industry, was written under some aspect of code-and-fix, and without automated unit tests. And we can't just throw this code away; it represents a significant effort debugging and maintaining. It contains many latent requirements decisions. Just as Agile processes are incremental, Agile adoption must be incremental too. No more throwing away code just because it looked at us funny.

Mike begins his book with a very diplomatic definition of "Legacy". I'l skip ahead to the undiplomatic version: Legacy code is code without unit tests.

Before cleaning that code up, and before adding new features and removing bugs, such code must be de-legacified. It needs unit tests.

To add unit tests, you must change the code. To change the code,... Read more
Help other customers find the most helpful reviews 
Was this review helpful to you? Yes No


82 of 88 people found the following review helpful
5.0 out of 5 stars a wealth of practical information and solutions, October 13, 2004
By 
J.J. Langr (United States) - See all my reviews
This review is from: Working Effectively with Legacy Code (Paperback)
Martin Fowler's book on Refactoring showed us how to improve the design of our code. We learned to make changes safely, by taking small, rote steps, and by ensuring that we ran our tests after each small change. But what if we're working on the typical ugly system with no tests? In Working Effectively With Legacy Code, Michael Feathers tackles the problem that most of us end up dealing with.

Feathers does an excellent job of articulating the problems and scenarios, using clear examples from C, C++, Java, and C#. Many of the code examples look a lot like real examples I come across all the time--they don't appear to be fabricated.

Working Effectively With Legacy Code contains a catalog that provides a wealth of solutions. The catalog shows how to resolve concerns like, "I'm changing the same code all over the place" and "how do I safely change procedural code?"

The book is highly entertaining and comes across as a conversation with a really sharp,... Read more
Help other customers find the most helpful reviews 
Was this review helpful to you? Yes No


33 of 34 people found the following review helpful
5.0 out of 5 stars excellent reference and guide, November 11, 2004
By 
This review is from: Working Effectively with Legacy Code (Paperback)
"Working Effectively with Legacy Code" is a very valuable resource. The author defines "legacy code" as "code without tests." It doesn't matter whether the code was written last week or ten years ago. There is more emphasis on old code that nobody understands, mainly because it is messier and harder to work with.

The examples in the book are mainly in C, C++ and Java, but there are a couple in C# and Ruby. While it is essential to know one of these languages, the author provides enough information to understand the others. When a technique only applies to a certain language, it is clearly indicated.

The author shows how different diagrams can help you learn how to understand code. In addition to UML, there are dependency and effect sketches. The author uses these to show how to think about understanding and refactoring. Other tools, such as refactoring browsers and mocks are explained.

Speaking of refactoring, there are "dependency breaking... Read more
Help other customers find the most helpful reviews 
Was this review helpful to you? Yes No


Share your thoughts with other customers:
 See all 52 customer reviews...

Online Sample Chapters

Changing Software and Legacy Code

Testing Effectively With Legacy Code

Table of Contents

Preface.

Introduction.

I. THE MECHANICS OF CHANGE.

  1. Changing Software.

  2. Working with Feedback.

  3. Sensing and Separation.

  4. The Seam Model.

  5. Tools.

II. CHANGING SOFTWARE.

  6. I Don’t Have Much Time and I Have To Change It.

  7. It Takes Forever To Make a Change.

  8. How Do I Add a Feature?

  9. I Can’t Get This Class into a Test Harness.

10. I Can’t Run This Method into a Test Harness.

11. I Need to Make a Change.   What Methods Should I Test?

12. I Need to Make Many Changes In One Area Do I Have To Break.

13. I Need To Make a Change but I Don’t Know What Tests To Write.

14. Dependencies on Libraries Are Killing Me.

15. My Application Is All API Calls.

16. I Don’t Understand the Code Well Enough To Change It.

17. My Application Has No Structure.

18. My Test Code Is in the Way.

19. My Project Is Not Object-Oriented.   How Do I Make Safe Changes?

20. This Class Is Too Big and I Don’t Want It to Get Any Bigger.

21. I’m Changing The Same Code All Over the Place.

22. I Need To Change a Monster Method and I Can’t Write Tests for It.

23. How Do I Know That I’m Not Breaking Anything?

24. We Feel Overwhelmed. It Isn’t Going To Get Any Better.

III. DEPENDENCY BREAKING TECHNIQUES.

25. Dependency Breaking Techniques.

Appendix: Refactoring.

Glossary.

 

Downloadable Sample Chapter

Untitled Document

Download Chapter 1 of this title.

Download Chapter 4 of this title.

Sample Pages

Download the sample pages (includes Chapter 1 and Index)

 
Best Value

Book + eBook Bundle  $113.98  $61.94

Book Price $44.09
eBook Price $17.85
eBook formats included

Buy

This book includes free shipping!

Buy

Book  $62.99  $44.09

Usually ships in 24 hours.

This book includes free shipping!

Buy

eBook (Watermarked)  $50.99  $35.69

Includes EPUB, MOBI, and PDF
About eBook Formats

This eBook includes the following formats, accessible from your Account page after purchase:

ePubEPUBThe open industry format known for its reflowable content and usability on supported mobile devices.

MOBIMOBIThe eBook format compatible with the Amazon Kindle and Amazon Kindle applications.

Adobe ReaderPDFThe popular standard, used most often with the free Adobe® Reader® software.

This eBook requires no passwords or activation to read. We customize your eBook by discretely watermarking it with your name, making it uniquely yours.

Purchase Reward: One Month Free Subscription
By completing any purchase on InformIT, you become eligible for an unlimited access one-month subscription to Safari Books Online.

Get access to thousands of books and training videos about technology, professional development and digital media from more than 40 leading publishers, including Addison-Wesley, Prentice Hall, Cisco Press, IBM Press, O'Reilly Media, Wrox, Apress, and many more. If you continue your subscription after your 30-day trial, you can receive 30% off a monthly subscription to the Safari Library for up to 12 months. That's a total savings of $199.