Testing is not complete because every test in a convenient list ran. It is sufficient when decision-makers understand the important product risks, have relevant evidence about them, and knowingly accept or mitigate the residual risk.
That is why How much testing is enough? has no universal answer such as 80% automation,
90% code coverage, or 100% pass rate.
A small authentication change may deserve deep security, session, compatibility, and recovery testing. A large copy-only change may need far less. The right amount depends on the possible harm, likelihood of failure, reach of the change, confidence in the evidence, and cost of learning later.
Risk-based testing turns that judgment into a repeatable release conversation by using the identified level of product risk to guide the scope and priority of testing.
Start with the decision, not the test count
Write the release decision before choosing tests:
Are we prepared to release build 297 from commit
abc123to production, given the remaining checkout and payment risks at 16:00 UTC?
This sentence fixes several common problems. It identifies:
- the product artifact under review
- the relevant environment or destination
- the risk area
- the decision time
- the fact that uncertainty remains
Without that scope, a green test result from another branch or an earlier build can look reassuring while answering the wrong question.
Step 1: name the product risks
A product risk describes an unwanted outcome and its impact, not a test case.
Examples:
- a payment retry charges the customer twice
- an authorization change exposes another tenant’s data
- an order is accepted but not persisted
- a deployment works in one region and fails in another
- a critical result is missing, so the team cannot tell whether verification happened
For each risk, record at least:
| Field | Question |
|---|---|
| Impact | What harm occurs if this fails? |
| Likelihood | Why might this release introduce or expose the failure? |
| Exposure | Which users, tenants, transactions, or environments are affected? |
| Detectability | Would monitoring find the problem before customers do? |
| Owner | Who decides whether the remaining risk is acceptable? |
Do not turn the fields into false precision. A simple high / medium / low scale can help
ordering only when the team has defined what those words mean. Until then, a short factual
explanation is better than a colored badge.
Step 2: choose evidence that can reduce each uncertainty
Different risks require different evidence.
| Risk question | Useful evidence |
|---|---|
| Can the core behavior work? | Focused functional tests and representative data |
| Can the change break an existing flow? | Targeted regression around affected boundaries |
| Can permissions leak data? | Negative authorization and tenant-isolation tests |
| Can the environment support the release? | Deployment checks, dependency health, configuration evidence |
| Can failures be diagnosed safely? | Logs, correlation IDs, alerts, rollback and recovery rehearsal |
| Did the intended scope actually run? | Expected-versus-observed test scope and missing-result checks |
Risk-based does not mean run fewer tests. It means spend evidence effort where it can
change the decision.
A broad regression suite may still be appropriate when the change surface is uncertain, the system is tightly coupled, or the cost of failure is high. A narrow selection is more defensible when dependencies are understood and the excluded risks have another control.
Step 3: observe outcomes without blending them
Keep these facts separate:
- planned scope
- observed execution scope
- passed results
- failed results
- skipped or inconclusive results
- expected results that are missing
- provider or permission gaps
- evidence age
A pass rate says what happened to conclusive results. It does not say whether the right tests ran. A test can exist without automation. Automation can exist without a result in the selected pipeline. A result can be green while the requirement it should support is unknown.
The same release might honestly report:
Critical risk checks planned: 12
Observed in build 297: 10
Passed: 9
Failed: 1
Missing: 2
Provider access: complete
90% pass rate would hide the failed check and the two missing checks behind one number.

The loop repeats when new evidence changes the risk, scope, or decision.
Step 4: decide on residual risk
Testing rarely proves that no defect exists. The release owner decides what remains after the available controls and evidence.
Useful decision options are:
- Release — the evidence is sufficient for the named risks
- Release with mitigation — use a feature flag, limited rollout, manual control, or stronger monitoring
- Collect more evidence — run a focused test, restore a missing result, or inspect a failed execution
- Reduce scope — remove the uncertain change or affected capability
- Delay — the possible harm or uncertainty is unacceptable
Record the owner, rationale, time, artifact, and follow-up. Accepted risk should never
mean an anonymous checkbox that permanently hides a signal.
Practical exit criteria
Exit criteria should connect to risks and evidence. For example:
- All named critical risks have an owner and at least one accepted control.
- Required tests for build 297 are listed before execution.
- No critical required result is missing or inaccessible.
- Failed critical checks are fixed, explicitly mitigated, or accepted by the right owner.
- Branch, commit, build, environment, and deployment target match the release candidate.
- Rollback or containment is available for high-impact uncertainties.
- Monitoring can detect the most important post-release failure modes.
These criteria are more useful than all tests passed because they expose what the team
chose to test and what it still does not know.
Apply the method in Azure DevOps
Azure DevOps provides building blocks, but the team still owns the risk model.
- Use Boards queries, iterations, and requirement links to define the business scope.
- Use Test Plans when planned Test Cases and manual configurations are part of the strategy.
- Associate automated tests with Test Cases when that native traceability is maintained.
- Publish test results in the exact pipeline that produced the release candidate.
- Open Test Runs and result details for failures instead of relying on a dashboard count.
- Link work items, commits, pull requests, builds, and deployments without assuming that a link proves testing or acceptance.
Microsoft’s Azure Test Plans overview describes requirement, build, test, and bug traceability. The automated testing overview explains associated tests, Test Runs, and pipeline results. Those relationships provide provenance. They do not choose the release risk appetite for the team.
Example: a payment retry change
Suppose build 297 changes retry handling after a payment gateway timeout.
The team identifies three material risks:
- duplicate charge
- lost checkout session
- order accepted without payment confirmation
The selected evidence includes idempotency API tests, an end-to-end retry scenario, manual exploratory interruption, transaction-log verification, and a rollback check.
Observed outcomes:
- idempotency API tests passed
- end-to-end retry failed because the session was lost
- manual interruption passed in one browser configuration
- transaction-log evidence was available
- rollback rehearsal passed
The decision is not four of five checks passed. The failed session test directly
supports a named customer-impacting risk. The owner can delay, remove the retry change,
or accept a tightly controlled mitigation. A generic pass percentage should not override
that reasoning.
Signals that testing may not be enough
Pause the release conversation when:
- the tested artifact is not the one being released
- expected tests disappeared without explanation
- a required data source is partial or inaccessible
- failures were rerun until green but the first evidence was lost
- the selected environments omit an important production configuration
- risk owners or acceptance authority are unclear
- coverage rose only because the denominator shrank
- the team cannot open the exact result behind a summary
These are evidence-quality problems. Running more unrelated tests will not necessarily fix them.
How QaCockpit supports the decision
QaCockpit for Azure DevOps does not make the go/no-go decision. It helps keep observable pipeline and test evidence connected to the scope the signed-in user can access, including failed tests, missing evidence, and changes in observed scope.
That boundary is deliberate. Risk ownership, business impact, and acceptance remain human decisions. Product signals should make the evidence easier to inspect, not hide judgment inside an unexplained quality score.
Release review questions
Before asking whether testing is complete, ask:
- What can go wrong in this release, and who would be harmed?
- Which change makes each risk more or less likely?
- What evidence could materially change the decision?
- Did that evidence run against the exact artifact and environment?
- Which failures, gaps, or unknowns remain?
- What mitigation and monitoring reduce the remaining exposure?
- Who accepts the residual risk, for how long, and why?
When those answers are explicit, enough testing becomes a defensible decision rather
than a target percentage.
Microsoft documentation and the ISTQB CTFL v4.0.1 syllabus were checked on October 28, 2026.
