Short paper · companion to the Metrics series
When senior stakeholders ask what a test team delivers, one answer comes up more than any other: confidence in the system's quality. Another common answer: timely, credible information about quality. Both answers sound good. Both are hard to deliver without a clear model of what "confidence" actually means — and in practice, testers often deliver it in the worst possible form: smiley and frowny faces next to feature names on a whiteboard.
This paper offers the replacement. Confidence is a state of mind, so it can't be measured directly. It can be measured through surrogate metrics of coverage — and not just one dimension of coverage but several. Here are the six dimensions that matter, and how to build defensible confidence numbers from them.
The smiley-face problem
If you've been a test manager long enough, you've been in this meeting. A release decision is imminent. Someone asks how confident testing is in each feature area. The test lead walks to the whiteboard, writes down feature names, and draws a smiley face next to some and a frowny face next to others. "I've got a bad feeling about function XYZ."
Two things can happen after that:
- The team ships anyway, XYZ fails in production, and the test lead suffers the Curse of Cassandra — right about the problem, powerless to have been heard.
- The team ships anyway, XYZ is fine in production, and the test lead's credibility evaporates. "You said it was a problem. It wasn't. Why should we trust you next time?"
Neither outcome is a sustainable basis for a test team's standing with the organization. The root cause is the same either way: confidence isn't a thing you can directly measure, so you have to measure it through something else. That something else is coverage — but not just one kind of coverage.
Six coverage dimensions
Different systems emphasize different dimensions. A regulated medical device has different coverage priorities than a consumer mobile app. But across virtually every kind of system, some combination of these six shows up:
Pick the ones that apply to your system, measure each one, and report the percentage of items in each dimension with passing tests. That percentage is a defensible number — and when the associated tests fail, you know specifically what's broken and can describe it in language non-testers understand.
Dimension 1 — Risk coverage
One or more tests per quality risk item identified during quality risk analysis, with the number of tests per risk scaled to the risk level (see Quality Risk Analysis).
The only honest way to build confidence that residual risk is acceptable is to test the risks. The percentage of risks with passing tests — weighted by level of risk — is the cleanest single measurement of residual quality risk. This is the metric that feeds the residual-risk pie chart in Part 4 of the metrics series.
Dimension 2 — Requirements coverage
One or more tests per specified requirement, bidirectional traceability maintained between tests and requirements. Coverage percentage is the percentage of requirements whose traced tests have all run and passed.
Using Philip Crosby's definition, quality means conformance to requirements. Requirements coverage is the most direct way to measure that conformance. Caveat: it's only as good as the requirements. A requirements set that doesn't capture stakeholder needs still has gaps no test will catch, so requirements coverage by itself is necessary but not sufficient. Pair it with user coverage (below) to balance.
Dimension 3 — Design coverage
One or more tests per design specification element. The design dimension of coverage asks: does the system actually implement the design we agreed to?
Design coverage matters most when the design captures constraints or patterns that the requirements don't spell out in detail — architectural boundaries, data flow, redundancy, failover behavior, security controls. For consumer software with thin design documentation, this dimension is often rolled into requirements coverage. For regulated or safety-critical systems, it's a first-class citizen.
Dimension 4 — Environment coverage
Environment-sensitive tests run in every supported deployment environment. Using Joseph Juran's definition, quality means fitness for use. Environment coverage is the fitness-for-use dimension.
Today this dimension has grown substantially. A modern supported-environment matrix might look like:
Dimension 4 — Environment coverage
Environment coverage on a typical modern release
Percentage of environment-sensitive tests passing in each supported environment.
Accessibility often underperforms because it's added to the test plan last and automated least. Worth highlighting — accessibility gaps are both a real user-experience problem and a compliance risk in many jurisdictions.
The environments that matter depend entirely on the system. A B2B SaaS product cares about browser matrix, accessibility, and network conditions. A mobile-first product adds device matrix and OS version. A regulated product adds specific OS-and-hardware combinations auditors require evidence for. The list grows; the measurement pattern doesn't change.
Dimension 5 — User coverage
Tests per use case, user profile, or user story. The real-usage dimension. If requirements coverage asks "does the system conform to what we said we'd build," user coverage asks "does the system work for the people who actually use it."
In modern programs, the raw inputs feeding this dimension have multiplied:
- Use cases / user stories — from planning artifacts.
- User profiles / personas — from product research.
- Session recordings — real interactions with the production system, filtered for representative sessions.
- Production telemetry — most-used features, actual usage mixes, observed failure patterns from production. (See the mobile-risk paper for a deeper treatment of using telemetry as a test input.)
- Customer feedback — support tickets, reviews, NPS comments — informal but often the most honest source.
The metric is the same shape regardless of input source: what percentage of defined user activities are exercised by passing tests?
Dimension 6 — Code coverage — a diagnostic, not a strategy
Code coverage measures the percentage of statements, branches, or loops actually exercised by tests. Where uncovered code exists, by definition you've learned nothing about it from testing.
Two claims about code coverage that a lot of organizations get wrong:
- Useful at any test level as a diagnostic for finding test gaps. If the system test suite covers 60% of the code, that's worth looking at — not because 60% is a bad number but because the uncovered 40% is worth categorizing. Some will be unreachable. Some will be scaffolding. Some will be real gaps.
- Not a great strategy for confidence at system-test or system-integration-test level. Designing system tests specifically to achieve a code-coverage target tends to produce tests that are tied to implementation detail rather than user-observable behavior. Code coverage is the programmer's domain during unit testing. At system level, use it as a lens, not a target.
This distinction matters more today than it did a decade ago because of LLM-generated unit tests. It's now possible to mass-generate tests that achieve very high code coverage with little meaningful verification — they exercise the code but don't check the right things. High code-coverage numbers with low bug-detection rates is a warning sign. Pair code coverage with mutation testing or LLM-independent behavior tests to keep it honest.
Putting it together — the confidence report
A multi-dimensional coverage snapshot, one row per dimension, looks like this:
What goes on the dashboard
Multi-dimensional coverage snapshot
Pre-release confidence report across all six dimensions.
Percentages are weighted by importance where applicable (risk coverage is weighted by risk level; user coverage by usage volume). Code coverage has no 'failing' bucket — it's a diagnostic of coverage breadth, not a pass/fail measurement.
A single confidence statement from this snapshot reads cleanly: we have tested 85% of identified risks successfully, 82% of requirements, 78% of design elements, 88% of environments, 74% of user activities, and achieved 81% code coverage. The 7% of risks, 5% of requirements, 3% of design elements, 4% of environments, and 8% of user activities that are failing are detailed in the attached report. That is a defensible statement. It's not a smiley face.
What testers and test managers owe each other
As a professional test engineer or test analyst, it's your job to design and execute tests that cover the applicable dimensions for your system. As a professional test manager, it's your job to report test results in terms of which dimensions have been covered and to what extent. Test teams that do that — rather than drawing faces on whiteboards — deliver confidence that holds up to scrutiny. They also deliver something even more valuable: credibility, both in the results themselves and in the team's judgment about the system.
Confidence isn't a feeling you give stakeholders. It's a set of numbers you give them, on which they build the feeling.
Related resources
- Metrics for Software Testing, Part 4 — Product Metrics — the residual-risk chart this paper's dimensions feed.
- Quality Risk Analysis — the analysis that produces the risk-coverage inputs.
- Risk-Based Test Results Reporting — four approaches to presenting these numbers to different audiences.
- Effective Test Status Reporting — how to tell the truth crisply.