|
33 | 33 | - [Test-Driven Development (TDD)](https://www.thoughtworks.com/en-gb/insights/blog/test-driven-development-best-thing-has-happened-software-design) and [Behavior-Driven Development (BDD)](https://www.thoughtworks.com/en-gb/insights/blog/applying-bdd-acceptance-criteria-user-stories) encourage writing tests before or alongside code, ensuring clarity of requirements and better design. |
34 | 34 | - Test planning is informed by risk analysis and [architectural decisions](../any-decision-record-template.md) made early on. |
35 | 35 | - Design for testability |
36 | | - - Systems are designed with observability, modularity, and controllability in mind. |
| 36 | + - Build systems as small units, each of which can be tested in isolation. |
37 | 37 | - Expose clear APIs, provide injection points for test doubles (mocks/stubs), and avoid tight coupling. |
38 | 38 | - Feature toggles and dependency injection help test components in isolation without complex setups. |
39 | 39 | - Make non-functional testing (performance, security, resilience) a first-class concern, with hooks and controls to simulate adverse conditions. |
|
42 | 42 | - Shift right, aka test in production |
43 | 43 | - Testing does not stop at deployment-continuous validation in production is essential. |
44 | 44 | - Implement real-time monitoring, synthetic checks, health probes, and user behavior tracking. |
45 | | - - Use canary deployments, blue-green releases, and feature flags to roll out changes gradually, monitoring for issues as they surface. |
46 | | - - Employ chaos engineering to test system resilience under real-world failure conditions. |
47 | | - - Instrument systems to detect anomalies, performance degradation, or unexpected behaviors automatically. |
| 45 | + - Use canary deployments and feature flags to support testing changes as they are deployed. |
| 46 | + - When safe to do so, employ chaos engineering to test system resilience under real-world failure conditions. |
| 47 | + - Instrument systems to detect anomalies, performance degradation, or unexpected behaviors automatically - to support good quality canary deployments. |
48 | 48 |
|
49 | 49 | In a high-throughput environment-where deploying at least once a day is the norm, adhering to the design for testability principle is paramount. The benefits include: 1) *faster feedback loops* – early testing catches issues when they are cheapest to fix, while testing later in the cycle ensures real-world readiness; 2) *increased confidence* – testing at all stages validates assumptions, improves system reliability, and supports safe, frequent releases; and 3) *higher quality by design* – systems built for testability are easier to maintain, scale, and evolve. |
50 | 50 |
|
|
0 commit comments