clement13.net
Original photo: Turboréacteur monté sur un banc d'essai dans une soufflerie, un technicien à genoux réglant ses organes.
Description
Turboréacteur monté sur un banc d'essai dans une soufflerie, un technicien à genoux réglant ses organes.
Source
NASA (Lewis Flight Propulsion Laboratory) · original page
Licence
PD Public domain
Original photo, unretouched. The background is a version of it stylised by the site.

Testing

This theme measures the confidence you can place in a change before delivering it. The commitments focus on outcomes: how long it takes to know nothing was broken, what…

Guide≈ 7 min readCheckedCheck doneFacts, figures and references were checked against the sources cited in the page.Written with AI assistance; sources are cited at the bottom of the page. An error? Report it via clement13.net.Reading
In brief

This theme measures the confidence you can place in a change before delivering it. The commitments focus on outcomes: how long it takes to know nothing was broken, what share of defects is caught before production, and how reliable the tests themselves are (no “flaky” tests).

On this page

Level: 🟢→🔴 · Theme code: TST (DL matrix)

Why this theme#

Without reliable automated tests, every delivery is a gamble: teams compensate with lengthy manual acceptance testing, code freezes, and fear. Delivery frequency collapses, batches get larger, so risk per delivery increases — a vicious circle. With good tests, a change is validated in minutes, and the fear of making changes disappears.

But poorly designed tests are expensive: an unstable (flaky) test teaches the team to ignore a red CI; a test coupled to implementation breaks at every refactoring; high coverage with empty assertions provides false reassurance. So this theme measures detection capability and suite reliability, not volume.

Datamart case: testing SQL is possible and cost-effective (procedure tests with a reference dataset, expected-result comparisons, idempotence tests: running twice yields the same state). Acceptance testing on business figures belongs to the matrix data theme UAT and Business Validation; here we are talking about automated tests.

What the theme measures#

  • Axis: from “we test manually before delivery” to “the test suite is a calibrated, fast, reliable detector.”
  • Key indicators: fast-suite feedback time (minutes); unstable test rate (%); mutation score (share of mutants killed); production defect rate detectable by an existing test.
  • Unit: minutes; %; escaped defects per release.

Five-level table#

Level Short name Commitment Typical indicator (order of magnitude)
1 Manual You know a feature works because someone tried it. No automated suite; acceptance testing takes several days
2 Targeted Critical cases are repeatable identically in a few hours. Automated tests on critical paths; suite runs in hours
3 Systematic A change is validated in under 15 minutes, without human intervention. Fast suite < 10-15 min; < 2% unstable tests
4 Calibrated The suite actually detects regressions: what breaks is seen, what does not break does not fail it. Measured mutation (≥ 60-70% on core) ; pyramid respected
5 Predictive Production defects become rare and each one produces a test that would have caught it; the suite guides delivery decisions. > 90% of escaped defects have a non-regression test; controlled testing in production

Milestones by level#

ID Milestone Verifiable evidence
DL-TST-1.1 A manual test procedure exists for critical user journeys Document or replayable case list
DL-TST-1.2 Found issues are logged and linked to a version Issue → version traceability
DL-TST-1.3 A test environment separate from production exists Environment identified and accessible
DL-TST-2.1 Critical paths have replayable automated tests Successful run on a fresh workstation
DL-TST-2.2 Tests use controlled reference data (versioned dataset, rebuildable database) Proven identical rebuild
DL-TST-2.3 Each fixed defect gets a non-regression test Review of 10 recent fixes
DL-TST-2.4 Test results are archived by version Browsable history
DL-TST-3.1 The fast suite (unit + light integration) runs on every change in < 15 minutes Duration measured in CI
DL-TST-3.2 An explicit test pyramid: mostly fast tests, few end-to-end tests Numeric distribution by layer
DL-TST-3.3 Unstable test rate is < 2% and each unstable test is quarantined within 48h Tracking of new instabilities
DL-TST-3.4 Tests depend on neither time, nor execution order, nor shared data Successful random-order and parallel execution
DL-TST-3.5 Idempotence tests exist for data processing (double run) Test replaying the same batch twice
DL-TST-4.1 Coverage is measured by branch on the core and tracked over time Coverage report by module
DL-TST-4.2 Mutation testing is run regularly on the core; its score is tracked Score ≥ target set by the team
DL-TST-4.3 Contract tests protect consumed/produced interfaces Contract tests in CI on producer and consumer sides
DL-TST-4.4 Property-based or generated-data tests cover critical calculation rules Present on ≥ 3 business rules
DL-TST-4.5 Performance non-regression tests bound critical operations Versioned thresholds
DL-TST-5.1 Every escaped defect is analyzed: why did no test catch it? a test is added ≥ 90% of escaped defects have an associated test
DL-TST-5.2 The suite is selective: only impacted tests run on each change, full suite continuously Median feedback time < 5 min
DL-TST-5.3 Controlled tests in production (progressive rollout, switchovers, synthetic monitoring) complement preproduction Active synthetic journeys
DL-TST-5.4 Trends in test maintenance cost are measured and managed Share of time spent fixing tests < 10%

Detailed reading by level#

🟢 Level 1 — Manual#

  • Signs: acceptance testing takes several days; “we'll test in preprod”; regressions reappear.
  • Gain: zero initial investment.
  • Does not guarantee: reproducibility, coverage, speed.
  • Difficulty: 1/5 · Effort: 1/5.

🟢 Level 2 — Targeted#

  • Signs: a few automated tests on paths that already broke; a reference dataset exists.
  • Gain: fear decreases on covered areas.
  • Does not guarantee: that the suite is fast or reliable.
  • Difficulty: 2/5 · Effort: 2/5.

🟡 Level 3 — Systematic#

  • Signs: a change does not go out without suite feedback; slow tests are separated from fast ones; unstable tests are tracked like defects. The pyramid (many unit tests, fewer integration tests, few end-to-end tests) is an economic choice: test cost grows with scope.
  • Gain: short feedback loop, more frequent deliveries (05).
  • Does not guarantee: that tests really detect issues — you can have 90% coverage and 0 useful assertions.
  • Difficulty: 3/5 · Effort: 3/5.

🔴 Level 4 — Calibrated#

  • Signs: detection quality is measured: mutation testing introduces small code alterations (condition inversion, shifted boundary) and checks that a test fails; a surviving mutant reveals a missing assertion. Contracts between components are tested on both sides.
  • Gain: a truly protective suite, fearless refactoring.
  • Does not guarantee: absence of specification defects (you test what you understood, not necessarily what was needed).
  • Difficulty: 4/5 · Effort: 4/5.

🔴 Level 5 — Predictive#

  • Signs: each escaped defect feeds the suite; impact-based test selection keeps feedback under a few minutes; production itself is observed like a test (synthetic journeys, progressive rollout).
  • Gain: confidence comes from evidence, not habit.
  • Does not guarantee: exhaustiveness — absence of defects is never proven.
  • Difficulty: 5/5 · Effort: 5/5.

Partial attainment and rating#

Apply the rating rule.

  • 0.5 on DL-TST-3.3: unstable test rate is measured (5%) but quarantine is not systematic.
  • 0.5 on DL-TST-4.2: mutation run once, as a one-off, without tracking.
  • A partial 5: each escaped defect gets a test, but impact-based selection does not exist: the suite runs in 25 minutes.
⚠️ Pitfall

Reassuring coverage. Symptom: 85% line coverage, yet a fix breaks a calculation. Cause: coverage measures what is executed, not what is verified. Remedy: branch coverage + mutation on the core; never set coverage as an individual objective.

⚠️ Pitfall

Flaky tests. Symptom: “rerun it, it'll pass.” Cause: clock, order, shared data, fixed waits. Remedy: isolate, make deterministic, quarantine within 48h, track them.

💡 Expert tip

Measure mean feedback time and CI rerun rate: this is the most reliable indirect indicator of suite health.

Moving to the next level#

Possible means (optional)

  • 1 → 2: start with already seen defects; first automate the journeys that are most expensive to replay manually.
  • 2 → 3: separate fast/slow, rebuildable dataset (database rebuilt from scripts), parallel and random execution to uncover order dependencies.
  • 3 → 4: mutation tools one module at a time; contract tests; property-based tests for financial calculations/rounding.
  • 4 → 5: systematic analysis of every escape; impact-based selection; production synthetic monitoring.
🧪 Example

Datamart consolidation: the idempotence test replays the same batch twice and compares the fingerprint (counts + checksum per fact table). In 20 seconds, it finds a duplicate that manual acceptance testing only spotted after a month. Without this test, the defect survived because each isolated run looked correct.

🤖 AI

Generating test cases and data: gain 4/5, risk 3/5 (tests that validate current behavior, including wrong behavior). Guardrail: review assertions, validate via mutation that generated tests actually detect something.

⚠️ Pitfall (Goodhart)

Rewarding test count produces redundant tests; rewarding coverage produces tests without assertions. Reward reduction in escaped defects.

See also#

✻ Written by Claude Sonnet 5.5