TORS > 90% (Test Oracle Reliability Score)
TORS quantifies what percentage of test failures are real bugs - at L3, 90%+ is the prerequisite for trusting automated quality gates, with expected results drawn from requirements rather than from what the code already does.
- Expected results are derived from requirements/specs (the requirement is the oracle, not the code)
- Acceptance tests are auto-generated from ticket requirements (Autonomous Requirements pipeline)
- Incremental test selection runs only tests affected by changed code paths
- Oracle reliability is reviewed per service, not just overall
- Test generation from tickets includes edge cases, not just happy paths
- Oracle-reliability dashboard (e.g., TORS) with per-service breakdown
- Ticket-to-test pipeline configuration with sample outputs
- CI configuration showing incremental test selection driven by the change set
- Delivery L2 (CI/CD Pipeline) - CI under 10 minutes required for incremental test selection to matter
- Development L2 (Context Engineering) - written conventions required for meaningful test oracle stabilization
What It Is
The Test Oracle Reliability Score (TORS) measures the signal-to-noise ratio of your test suite: what percentage of test failures indicate a genuine defect in the code vs. false positives caused by flaky tests, environmental issues, or unstable assertions. A TORS of 90% means that 9 out of 10 test failures are worth investigating because they represent real problems. A TORS of 70% means that nearly one in three failures is noise - and developers learn to ignore CI output.
TORS is calculated by tracking test failure investigations: when a test fails, does it indicate a real bug (signal) or not (noise)? Over time, the ratio of signal failures to total failures is your TORS. Some CI platforms (Gradle Enterprise, BuildKite) automate this tracking. Teams without tooling support can approximate it by tracking re-runs: if a test failure disappears on re-run without code changes, it was noise. Re-run rate is a proxy for TORS.
At Level 1, TORS is typically below 70% due to accumulated flakiness and unstable oracles. At Level 2, quarantine and oracle stabilization push it toward 80-85%. At Level 3 (Systematic), TORS > 90% is a formal target - not an aspiration but a requirement. Automated quality gates (L4's green auto-merge) are architecturally impossible with TORS below 90%, because the automated system would block good code or pass bad code too frequently to be trusted.
The 90% threshold is meaningful. At 90% TORS, automated systems can make decisions with confidence: a failing build is almost certainly a real problem. At 80%, one in five failures is noise - enough to erode trust in automation. At 90%, the failure rate of the automation itself is low enough that it provides more value than friction.
What August added is a warning about which number you are trusting. The oracle question is not only "do failures mean something" but "where does the expected result come from". Tests written against what the code currently does are circular however reliably they run, which is why at L3 the oracle moves to requirements - tickets and specs - rather than the implementation. Two findings sharpen this. DECODE (arXiv 2607.25130, 53.6K real in-IDE edits from over 1,000 developers) found that 31% of accepted AI completions are deleted entirely, most of them edited within fifteen minutes: acceptance rate is a vanity metric, and so is any signal measured at the moment of generation rather than after the code survives contact with the suite. SlopCodeBench, published the same week, found agent-built projects running to roughly 29,000 source lines of which 51% was test code, with complexity and duplication rising at every checkpoint for every model. Test-suite mass is a warning sign, not a maturity signal. TORS earns its place precisely because it measures whether the suite tells you something, which volume never does.
The other half of this level is a negative instruction: do not mandate the test process to agents, measure the outcome instead. Birgitta Böckeler's "TDD inside the agent loop" (August 11) ran five batches of tasks blind-judged by Opus and found non-TDD solutions consistently taking the top spots on small and medium tasks while TDD landed in the bottom two, at three to eight times more tokens. Her mechanism is plausible: an agent told to write the test first makes locally-minimal decisions around that first test and hardens a bad design early, where an unconstrained agent plans the data model, edge cases and contracts up front. Her reading is that TDD's real benefits - fear management, forced pacing, permission to relax - are human benefits that do not transfer to something incapable of fear. Carry the caveats, because she does: five batches, greenfield business logic only, quality judged largely by a model, and no run achieved perfect TDD adherence. It is a provocation, not a settled finding. But her recommendation points where this level already pointed - stop mandating the process, monitor outcomes through mutation testing and static analysis. Where an oracle supplied up front genuinely pays is security: SecTDD (arXiv 2608.09740, August 10) found that giving the agent your security tests before it starts is worth roughly 19 points of joint functional-plus-security success.
Why It Matters
TORS at 90% is the inflection point where the test suite transitions from a human-managed tool to an automation-ready infrastructure component:
- Automated decisions become viable - At 90% TORS, you can begin moving toward automated merge policies. False positive rates are low enough that automation provides net value.
- Agent iteration becomes reliable - AI agents fixing test failures need to know that failures indicate real problems. At 90% TORS, agents can trust the CI signal and make focused fixes rather than thrashing.
- Developer trust is restored - When 9 out of 10 failures are real, developers stop dismissing CI output. The psychological shift from "CI is unreliable" to "CI is worth trusting" is critical for effective AI-assisted development.
- Acceptance test coverage becomes meaningful - Acceptance tests derived from requirements (L3) only provide value if their failures are investigated. At L1-L2 TORS levels, even real failures get dismissed alongside noise.
- Foundation for L4 automation - The 95% TORS target at L4 is only reachable if the team has established the practices and metrics to manage TORS systematically at L3.
Start measuring TORS before you set targets. Instrument your CI to track whether each test failure was resolved by code change (signal) or by re-run / environment fix (noise). Three weeks of data will give you a credible baseline and surface the specific tests or test categories that are dragging your score below 90%.
Getting Started
- Instrument CI for TORS measurement - The minimum viable instrumentation: track which test failures led to code changes vs. which were resolved by re-running. A CI platform with test analytics (Gradle Enterprise, BuildKite, DataDog CI Visibility) can automate this. Manual tracking with a spreadsheet works for teams that need to start quickly.
- Establish the baseline TORS - Run the measurement for 2-4 weeks before setting targets. Your actual baseline is often lower than expected - teams with high flakiness frequently discover TORS below 60% when they measure for the first time.
- Set the 90% target and timeline - 90% TORS within one quarter is achievable for most teams that have already implemented quarantine and oracle stabilization. Publish the target and current score in your engineering metrics dashboard.
- Work the remaining false positives - Below 90%, identify the top 5 tests by false positive frequency. Fix them. Repeat. The Pareto principle applies strongly here: a small number of tests usually account for the majority of false positives.
- Automate false positive detection - Configure your CI system to flag test failures that match known flaky patterns. When a test fails that has a history of false positives, automatically route it to the quarantine queue rather than blocking the build.
- Validate TORS after each major change - Significant codebase changes (large refactors, infrastructure upgrades, dependency updates) can degrade TORS. Measure it explicitly after major changes and restore it before the next sprint.
Common Pitfalls
Measuring TORS only on failures, not on passes. TORS measures the reliability of failures - but there's an analogous problem with false negatives: tests that pass when they should fail (circular tests, tests with weakened oracles). A comprehensive quality metric includes both dimensions. TORS alone doesn't catch tests that are reliably wrong.
Gaming TORS by deleting flaky tests. Deleting all tests that produce false positives will mathematically raise TORS to 100% while destroying test coverage. Any TORS measurement should be paired with a coverage metric to ensure that TORS improvements reflect genuine quality improvements, not coverage reductions.
Setting TORS as a team-level metric rather than a codebase metric. Different areas of the codebase may have very different TORS profiles. A monorepo with 92% aggregate TORS may have one service at 60% dragging down the rest. Track TORS by service or module to surface these anomalies.
Treating 90% as a destination rather than a floor. At L3, 90% TORS is the minimum - the floor that enables systematic automation. It is not the ceiling. Teams should continue improving TORS as they progress to L4 (where the target rises to 95%). Treating 90% as "good enough" leads to stagnation.
How Different Roles See It
Bob has been tracking build reliability (percentage of CI runs completing without retry) as his proxy metric. It's at 89%. He wants to move to L3 automated quality gates but isn't sure if 89% build reliability translates to a reliable enough foundation.
What Bob should do: Build reliability and TORS are related but not the same. Build reliability measures run-level reliability (did the whole CI run succeed?), while TORS measures test-level reliability (do individual test failures mean something?). Bob needs to start tracking TORS explicitly to understand the quality of the test signal, not just the build surface. If TORS is below 90% even when build reliability is 89%, the team isn't ready for automated quality gates. The specific metric Bob should add to his dashboard is TORS by service - it will reveal which services are ready for L4 automation and which need more stabilization work.
Sarah wants to put a dollar value on reaching 90% TORS as a business case for the engineering investment. She has the Google 16% flaky test data but needs to translate it into a number for their team.
What Sarah should do: TORS provides a direct productivity calculation. At 75% TORS, 25% of test failure investigations are wasted - the developer investigates, finds nothing wrong, re-runs, and moves on. For a team spending an average of 30 minutes per test failure investigation, 25% waste rate means roughly one full day per developer per month lost to false positives, at scale. Calculate this for the team size and present it as the cost of staying below 90% TORS. The engineering investment in oracle stabilization and flakiness elimination pays back quickly at that rate.
Victor has been informally tracking which tests are worth investigating - he mentally marks tests as "probably flaky" and ignores them. His personal TORS intuition is good, but it's not shared with the team and it's not encoded anywhere.
What Victor should do: Victor's mental model needs to become infrastructure. He should work with the DevOps team to instrument TORS measurement into the CI pipeline and publish the score on the engineering dashboard. His next step is to formalize his intuition: when does he dismiss a failure vs. investigate? The answer is the TORS measurement protocol. Once it's documented and automated, the rest of the team benefits from Victor's judgment without needing to consult him individually on every CI failure.
Further Reading
From the Field
Recent releases, projects, and discussions relevant to this maturity level.
How This Guide Changed
What each edition changed in this guide, newest first.
- V1.6September 2026LATEST
This level acquired an explicit negative instruction this month: do not tell agents how to test. Birgitta Böckeler ran TDD inside the agent loop and found non-TDD solutions consistently beating TDD ones on small and medium tasks at three to eight times fewer tokens, because an agent told to write the test first hardens a bad design around it - her sample is five batches of greenfield logic judged largely by a model, so it belongs here as a provocation rather than a verdict, but it points the same way the level already did. The guide now separates the two oracle questions that were quietly conflated: whether failures mean something, which is what TORS measures, and where the expected result comes from, which has to be the requirement rather than the code. DECODE's finding that 31% of accepted AI completions are deleted within minutes, and SlopCodeBench's agent projects that were 51% test code, are here to retire acceptance rate and suite size as quality signals.
- V1.0March 2026
Introduced in the first edition to give test-suite trust a number. TORS asks what fraction of failures are genuine defects, and the guide set 90% as the L3 bar on a straightforward argument: at 80%, one failure in five is noise, and no automated gate can be built on a signal developers have already trained themselves to ignore.
Where does your team actually sit on this?
This guide describes one level of one area. Run the assessment to place your team across all 16 areas, see which gates you have passed, and get a report you can take to your stakeholders.