Table of contents | page # |
|---|---|
| Introduction | 28 |
GENERATING TESTING IDEAS | |
| Define a shared big-picture view of quality | 10 |
| Explore capabilities, not features | 12 |
| Start with always/never | 14 |
| Tap into your emotions | 16 |
| Test benefit as well as implementation | 18 |
| Quantify even if you cannot measure | 20 |
| Map global risks using an ACC matrix | 22 |
| Use risk checklists for cross-cutting concerns | 24 |
| Document trust boundaries | 26 |
| Monitor trends in logs and consoles | 28 |
| Mob your test sessions | 30 |
| Don't let the pen be the bottleneck | 32 |
| Snoop on the competition | 34 |
DESIGNING GOOD CHECKS | |
| Focus on key examples | 38 |
| Contrast examples with counter-examples | 42 |
| Describe what, not how | 44 |
| Avoid mathematical formulas | 46 |
| Flip equivalence classes between inputs and outputs | 48 |
| Clearly separate inputs and outputs | 50 |
| Ask 'what happens instead?' | 52 |
| Use Given-When-Then in a strict sequence | 54 |
| One test, one topic | 56 |
| Treat too many boundaries as a modelling problem | 58 |
| Prefer smaller tables | 60 |
| Balance three competing forces | 62 |
| Write assertions first | 64 |
| Split technical and business checks | 66 |
| Don't automate manual tests | 68 |
IMPROVING TESTABILITY | |
| Wrap synchronous database tests in transactions | 72 |
| Set up before asynchronous data tests, don't clean up after | 74 |
| Introduce business time | 76 |
| Provide atomic external resources | 78 |
| Wait for events, not time | 80 |
| Split data generators from tests | 82 |
| Minimise UI interactions | 84 |
| Separate decisions, workflows and technical interactions | 86 |
| Use production metrics for expensive tests | 88 |
MANAGING LARGE TEST SUITES | |
| Make developers responsible for checking | 92 |
| Design tests together with other teams | 94 |
| Avoid organising tests by work items | 96 |
| Version control tests along with software | 98 |
| Create a gallery of examples for automation patterns | 100 |
| Decouple coverage from purpose | 102 |
| Avoid having strict coverage targets | 104 |
| Measure your tests' half-life | 106 |
| Optimise for reading, not writing | 108 |
| Name tests for search engine optimisation | 110 |
| Explain the purpose of a test in the introduction | 112 |
| Split just-in-case tests from key examples | 114 |
| Let the chaos monkey out periodically | 116 |
| Bibliography | 118 |
© 2014-2015 Neuri Consulting LLP