# Working effectively with legacy code

> ## Foreword

## Foreword

## Preface

## Introduction

## Part I: The Mechanics of Change

### Chapter 1. Changing Software

### Chapter 2. Working with Feedback

### Chapter 3. Sensing and Separation

### Chapter 4. The Seam Model

### Chapter 5. Tools

## Part II: Changing Software

### Chapter 6. I Don't Have Much Time and I Have to Change It

### Chapter 7. It Takes Forever to Make a Change

### Chapter 8. How Do I Add a Feature?

### Chapter 9. I Can't Get This Class into a Test Harness

### Chapter 10. I Can't Run this Method in a Test Harness

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

### Chapter 12. I Need to Make Many Changes in One Area. Do I Have to Break Dependencies for All the Classes Involved?

### Chapter 13. I Need to Make a Change, but I Don't Know What Tests to Write

### Chapter 14. Dependencies on Libraries Are Killing Me

### Chapter 15. My Application Is All API Calls

### Chapter 16. I Don't Understand the Code Well Enough to Change It

### Chapter 17. My Application Has No Structure

### Chapter 18. My Test Code is in the Way

### Chapter 19. My Project is Not Object Oriented. How Do I Make Safe Changes?

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

### Chapter 21. I'm Changing the Same Code All Over the Place

### Chapter 22. I Need to Change a Monster Method and I Can't Write Tests for It

### Chapter 23. How Do I Know That I'm Not Breaking Anything?

### Chapter 24. We Feel Overwhelmed. It Isn't Going to Get Any Better

## Part III. Dependency-Breaking Technoiques

### Chapter 25. Dependency-Breaking Techniques

## Appendix: Refactoring