Building Quality into Software
Slutsåld
Alexander Tarlinder wrote his first computer program around the age of ten, sometime in the early nineties. It was a simple, text-based role playing game for the Commodore 64. It had lots of GOTO statements and an abundance of duplicated code. Still, to him, this was the most fantastic piece of software ever conceived, and an entry point to his future career. Twenty-five years later, Alexander still writes code and remains a developer at heart. Today, his professional career stretches over 15 years, a time during which he has shouldered a variety of roles: developer, architect, project manager, ScrumMaster, tester, and agile coach. In all these roles, he has gravitated towards sustainable pace, craftsmanship, and attention to quality, and he eventually got test infected around 2005. In a way, this was inevitable, since many of his projects involved programming money somehow (in the banking and gaming industry), and he always felt that he could do more to ensure the quality of his code before handing it over to someone else. Presently, Alexander seeks roles that allow him to influence the implementation process on a larger scale. He combines development projects with training and coaching, and he shares technical and nontechnical aspects of developer testing and quality assurance in conferences and local user groups meetings. Normal 0 false false false EN-US X-NONE X-NONE
Foreword by Jeff Langr xiii
Foreword by Lisa Crispin xv
Preface xvii
Acknowledgments xxiii
About the Author xxv
Chapter 1: Developer Testing 1
Developers Test 1
Developer Testing Activities 2
What Developers Usually Dont Do 5
Defining Developer Testing 6
Developer Testing and the Development Process 7
Summary 8
Chapter 2: Testing Objectives, Styles, and Roles 9
Testing and Checking 9
Testing Objectives 10
Testing Styles 11
Your Quality Assurance and Developer Testing 18
Summary 19
Chapter 3: The Testing Vocabulary 21
Errors, Defects, Failures 22
White Box and Black Box Testing 22
Classifying Tests 23
The Agile Testing Quadrants 32
Some Other Types of Testing 33
Summary 36
Chapter 4: Testability from a Developers Perspective 37
Testable Software 37
Benefits of Testability 39
Testability Defined 43
Summary 55
Chapter 5: Programming by Contract 57
Contracts Formalize Constraints 57
Implementing Programming by Contract 60
Enforcing Contracts 62
Summary 65
Chapter 6: Drivers of Testability 67
Direct Input and Output 68
Indirect Input and Output 68
State 70
Temporal Coupling 71
Data Types and Testability 72
Domain-to-Range Ratio 77
Summary 78
Chapter 7: Unit Testing 79
Why Do It? 79
What Is a Unit Test? 81
The Life Cycle of a Unit Testing Framework 83
Naming Tests 85
Structuring Tests 88
Assertion Methods 89
Testing Exceptions 99
Behavior-driven DevelopmentStyle Frameworks 102
Summary 105
Chapter 8: Specification-based Testing Techniques 107
Equivalence Partitioning 107
Boundary Value Analysis 110
Edge Cases and Gotchas for Some Data Types 111
State Transition Testing 113
Decision Tables 115
Summary 116
Chapter 9: Dependencies 119
Relations between Objects 119
System Resource Dependencies 125
Dependencies between Layers 129
Dependencies across Tiers 132
Summary 133
Chapter 10: Data-driven and Combinatorial Testing 135
Parameterized Tests 138
Theories 139
Generative Testing 141
Combinatorial Testing 145
Summary 149
Chapter 11: Almost Unit Tests 151
Examples 152
Impact 156
Summary 157
Chapter 12: Test Doubles 159
Stubs 159
Fakes 162
Mock Objects 164
Spies 170
Dummies 171
Verify State or Behavior? 173
Summary 176
<...