| | Copyright |
| | Praise for Fit for Developing Software |
| | Robert C. Martin Series |
| | Foreword |
| | Preface |
| | Acknowledgments |
| | | Rick Mugridge |
| | | Ward Cunningham |
| | About the Authors |
| | Chapter 1. Introduction |
| | | Section 1.1. The Need for Fit |
| | | Section 1.2. The Value of Fit Tables |
| | | Section 1.3. Fit and Business Roles |
| | | Section 1.4. Organization of the Book |
| | | Section 1.5. The Book's Use of Color |
| | Part I: Introducing Fit Tables |
| | | Chapter 2. Communicating with Tables |
| | | Section 2.1. Fit Tables |
| | | Section 2.2. Tables for Communicating |
| | | Section 2.3. Tables for Testing |
| | | Section 2.4. Tables, Fixtures, and a System Under Test |
| | | Section 2.5. Reading Fit Tables |
| | | Chapter 3. Testing Calculations with ColumnFixture Tables |
| | | Section 3.1. Calculating Discount |
| | | Section 3.2. Reports: Traffic Lights |
| | | Section 3.3. Calculating Credit |
| | | Section 3.4. Selecting a Phone Number |
| | | Section 3.5. Summary |
| | | Section 3.6. Exercises |
| | | Chapter 4. Testing Business Processes with ActionFixture Tables |
| | | Section 4.1. Buying Items |
| | | Section 4.2. Actions on a Chat Server |
| | | Section 4.3. Summary |
| | | Section 4.4. Exercises |
| | | Chapter 5. Testing Lists with RowFixture Tables |
| | | Section 5.1. Testing Lists Whose Order Is Unimportant |
| | | Section 5.2. Testing Lists Whose Order Is Important |
| | | Section 5.3. Summary |
| | | Section 5.4. Exercises |
| | | Chapter 6. Testing with Sequences of Tables |
| | | Section 6.1. Chat Room Changes |
| | | Section 6.2. Discount Group Changes |
| | | Section 6.3. Summary |
| | | Section 6.4. Exercises |
| | | Chapter 7. Creating Tables and Running Fit |
| | | Section 7.1. Using Spreadsheets for Tests |
| | | Section 7.2. Organizing Tests in Test Suites |
| | | Section 7.3. Using HTML for Tests |
| | | Section 7.4. Summary |
| | | Section 7.5. Exercises |
| | | Chapter 8. Using FitNesse |
| | | Section 8.1. Introduction |
| | | Section 8.2. Getting Started |
| | | Section 8.3. Organizing Tests with Subwikis |
| | | Section 8.4. Test Suites |
| | | Section 8.5. Ranges of Values |
| | | Section 8.6. Other Features |
| | | Section 8.7. Summary |
| | | Section 8.8. Exercises |
| | | Chapter 9. Expecting Errors |
| | | Section 9.1. Expected Errors with Calculations |
| | | Section 9.2. Expected Errors with Actions |
| | | Section 9.3. Summary |
| | | Chapter 10. FitLibrary Tables |
| | | Section 10.1. Flow-Style Actions with DoFixture |
| | | Section 10.2. Expected Errors with DoFixture |
| | | Section 10.3. Actions on Domain Objects with DoFixture |
| | | Section 10.4. Setup |
| | | Section 10.5. CalculateFixture Tables |
| | | Section 10.6. Ordered List Tables |
| | | Section 10.7. Testing Parts of a List |
| | | Section 10.8. Summary |
| | | Section 10.9. Exercises |
| | | Chapter 11. A Variety of Tables |
| | | Section 11.1. Business Forms |
| | | Section 11.2. Testing Associations |
| | | Section 11.3. Two-Dimensional Images |
| | | Section 11.4. Summary |
| | | Section 11.5. Exercises |
| | Part II: Developing Tables for RentAPartySoftware |
| | | Chapter 12. Introducing Fit at RentAPartySoftware |
| | | Section 12.1. RentAPartySoftware |
| | | Section 12.2. Development Issues |
| | | Section 12.3. An Initial Plan |
| | | Section 12.4. The Cast |
| | | Section 12.5. The Rest of This Part |
| | | Section 12.6. Summary |
| | | Section 12.7. Exercises |
| | | Chapter 13. Getting Started: Emily and Don's First Table |
| | | Section 13.1. Introduction |
| | | Section 13.2. Choosing Where to Start |
| | | Section 13.3. The Business Rule |
| | | Section 13.4. Starting Simple |
| | | Section 13.5. Adding the Grace Period |
| | | Section 13.6. Adding High-Demand Items |
| | | Section 13.7. Reports |
| | | Section 13.8. Seth's Return |
| | | Section 13.9. Summary |
| | | Section 13.10. Exercises |
| | | Chapter 14. Testing a Business Process: Cash Rentals |
| | | Section 14.1. Introduction |
| | | Section 14.2. Cash Rentals |
| | | Section 14.3. Split and Restructure |
| | | Section 14.4. Which Client |
| | | Section 14.5. Summary |
| | | Section 14.6. Exercises |
| | | Chapter 15. Tests Involving the Date and Time |
| | | Section 15.1. Introduction |
| | | Section 15.2. Charging a Deposit |
| | | Section 15.3. Dates |
| | | Section 15.4. Business Transactions |
| | | Section 15.5. Sad Paths |
| | | Section 15.6. Reports |
| | | Section 15.7. Summary |
| | | Section 15.8. Exercises |
| | | Chapter 16. Transforming Workflow Tests into Calculation Tests |
| | | Section 16.1. Introduction |
| | | Section 16.2. Testing Calculations Instead |
| | | Section 16.3. Using Durations |
| | | Section 16.4. Reports |
| | | Section 16.5. Summary |
| | | Section 16.6. Exercises |
| | | Chapter 17. Story Test-Driven Development with Fit |
| | | Section 17.1. Introduction |
| | | Section 17.2. The Stories |
| | | Section 17.3. The First Storytests |
| | | Section 17.4. The Planning Game |
| | | Section 17.5. Adding to the Storytests |
| | | Section 17.6. Progress During the Iteration |
| | | Section 17.7. Exploratory Testing at Iteration End |
| | | Section 17.8. Summary |
| | | Section 17.9. Exercises |
| | | Chapter 18. Designing and Refactoring Tests to Communicate Ideas |
| | | Section 18.1. Principles of Test Design |
| | | Section 18.2. Fit Tests for Business Rules |
| | | Section 18.3. Workflow Tests |
| | | Section 18.4. Calculation Tests |
| | | Section 18.5. List Tests |
| | | Section 18.6. Tests and Change |
| | | Section 18.7. Automation of Tests |
| | | Section 18.8. Summary |
| | | Chapter 19. Closing for Nonprogrammers |
| | | Section 19.1. The Value of Fit Tables |
| | | Section 19.2. Getting Fit at RentAPartySoftware |
| | Part III: Introducing Fit Fixtures |
| | | Chapter 20. Connecting Tables and Applications |
| | | Section 20.1. Writing Fixtures |
| | | Section 20.2. Fixtures and Traffic Lights |
| | | Chapter 21. Column Fixtures |
| | | Section 21.1. Fixture CalculateDiscount |
| | | Section 21.2. Extending Credit |
| | | Section 21.3. Selecting a Phone Number |
| | | Section 21.4. ColumnFixture in General |
| | | Section 21.5. Summary |
| | | Section 21.6. Exercises |
| | | Chapter 22. Action Fixtures |
| | | Section 22.1. Buying Items |
| | | Section 22.2. Changing State of Chat Room |
| | | Section 22.3. ActionFixture in General |
| | | Section 22.4. Summary |
| | | Section 22.5. Exercises |
| | | Chapter 23. List Fixtures |
| | | Section 23.1. Testing Unordered Lists |
| | | Section 23.2. Testing Ordered Lists |
| | | Section 23.3. Testing a List with Parameters |
| | | Section 23.4. Summary |
| | | Section 23.5. Exercises |
| | | Chapter 24. Fixtures for Sequences of Tables |
| | | Section 24.1. Chat Room Fixtures |
| | | Section 24.2. Discount Group Fixtures |
| | | Section 24.3. Summary |
| | | Section 24.4. Exercises |
| | | Chapter 25. Using Other Values in Tables |
| | | Section 25.1. Standard Values |
| | | Section 25.2. Values of Money |
| | | Section 25.3. Values in FitNesse and the Flow Fixtures |
| | | Section 25.4. Summary |
| | | Section 25.5. Exercises |
| | | Chapter 26. Installing and Running Fit |
| | | Section 26.1. Installing Fit and FitLibrary |
| | | Section 26.2. Running Fit on Folders |
| | | Section 26.3. Running Fit on HTML Files |
| | | Section 26.4. Running Tests During the Build |
| | | Section 26.5. Other Ways to Run Tests |
| | | Section 26.6. Summary |
| | | Chapter 27. Installing FitNesse |
| | | Section 27.1. Installation |
| | | Section 27.2. Locating the Code |
| | | Section 27.3. Larger-Scale Use with Virtual Wiki |
| | | Section 27.4. Debugging FitNesse Tests |
| | | Section 27.5. Summary |
| | | Section 27.6. Exercises |
| | | Chapter 28. FitLibrary Fixtures |
| | | Section 28.1. Flow-Style Actions with DoFixture |
| | | Questions & Answers |
| | | Section 28.2. DoFixtures as Adapters |
| | | Section 28.3. Using SetFixture |
| | | Section 28.4. Expected Errors with DoFixture |
| | | Questions & Answers |
| | | Section 28.5. Actions on Domain Objects with DoFixture |
| | | Questions & Answers |
| | | Section 28.6. DoFixture in General |
| | | Questions & Answers |
| | | Section 28.7. Setup |
| | | Questions & Answers |
| | | Section 28.8. CalculateFixture Tables |
| | | Section 28.9. Ordered-List Tables |
| | | Section 28.10. Testing Parts of a List |
| | | Section 28.11. Using Other Values in Flow Tables |
| | | Section 28.12. Summary |
| | | Section 28.13. Exercises |
| | | Questions & Answers |
| | | Chapter 29. Custom Table Fixtures |
| | | Section 29.1. Business Forms |
| | | Section 29.2. Testing Associations |
| | | Questions & Answers |
| | | Section 29.3. Two-Dimensional Images |
| | | Section 29.4. Summary |
| | Part IV: Developing Fixtures for RentAPartySoftware |
| | | Chapter 30. Fixtures and Adapting the Application |
| | | Section 30.1. Introduction |
| | | Section 30.2. The Programmers' Perspective |
| | | Section 30.3. System Architecture |
| | | Section 30.4. Test Infecting for Improvements |
| | | Questions & Answers |
| | | Section 30.5. The Rest of This Part |
| | | Chapter 31. Emily's First Fixture |
| | | Section 31.1. The Table |
| | | Section 31.2. Developing the Fixture |
| | | Questions & Answers |
| | | Questions & Answers |
| | | Section 31.3. Summary |
| | | Section 31.4. Exercises |
| | | Chapter 32. Fixtures Testing Through the User Interface |
| | | Section 32.1. Introduction |
| | | Section 32.2. Spike |
| | | Section 32.3. The Fixtures |
| | | Section 32.4. The Adapter |
| | | Section 32.5. Showing Others |
| | | Section 32.6. Summary |
| | | Chapter 33. Restructuring the System for Testing |
| | | Section 33.1. Test Infecting |
| | | Section 33.2. Slow Tests |
| | | Section 33.3. Setup |
| | | Section 33.4. Barriers to Testing |
| | | Section 33.5. Transactions |
| | | Section 33.6. Transaction Fixture |
| | | Section 33.7. Split Domain and Data Source Layers |
| | | Section 33.8. Reduce Interdependencies |
| | | Section 33.9. Summary |
| | | Chapter 34. Mocks and Clocks |
| | | Section 34.1. Introduction |
| | | Section 34.2. Changing the Date |
| | | Section 34.3. Time-Related Object Interactions |
| | | Section 34.4. Date Formatting |
| | | Section 34.5. Changing the Application in Small Steps |
| | | Section 34.6. Summary |
| | | Chapter 35. Running Calculation Tests Indirectly |
| | | Section 35.1. Testing Directly |
| | | Section 35.2. Testing Indirectly |
| | | Section 35.3. Summary |
| | | Chapter 36. Closing for Programmers at RPS |
| | | Section 36.1. The Value of Fit Tables |
| | | Section 36.2. Getting Fit at RPS |
| | Part V: Custom Development |
| | | Chapter 37. The Architecture of Fit |
| | | Section 37.1. Running Fit |
| | | Section 37.2. Parse Tree |
| | | Section 37.3. doTable() |
| | | Section 37.4. Counts in Class Fixture |
| | | Section 37.5. The Fixture Subclasses |
| | | Section 37.6. TypeAdapter |
| | | Section 37.7. Summary |
| | | Section 37.8. Exercises |
| | | Chapter 38. Developing Custom Fixtures |
| | | Section 38.1. Using SetUpFixture |
| | | Section 38.2. SetUpFixture |
| | | Section 38.3. ImageFixture |
| | | Section 38.4. Summary |
| | | Chapter 39. Custom Runners |
| | | Section 39.1. Runners |
| | | Section 39.2. Calculator Runner |
| | | Section 39.3. Reading Tests from a Text File |
| | | Section 39.4. Reading Tests from a Spreadsheet |
| | | Section 39.5. Summary |
| | | Chapter 40. Model-Based Test Generation |
| | | Section 40.1. Symmetries: Operations That Cancel Each Other |
| | | Section 40.2. Generate a Simple Sequence |
| | | Section 40.3. Generate an Interleaved Sequence |
| | | Section 40.4. Summary |
| | | Section 40.5. Exercises |
| | Part VI: Appendices |
| | | Appendix A. Background Material |
| | | Section A.1. Testing |
| | | Section A.2. Agile Software Development |
| | | Section A.3. Ubiquitous Language |
| | | Appendix B. Book Resources Web Site |
| | | Appendix C. Fit and Other Programming Languages |
| | | Section C.1. Table Portability |
| | | Section C.2. Other Programming Languages |
| | Bibliography |
| | Index |