plugins/analyzing-quality-metrics/skills/analyzing-quality-metrics/SKILL.md
Defines, computes, and interprets test and quality metrics: pass rate, flake rate, suite duration, defect escape rate, time to detect, and coverage with its caveats. Use when building a QA dashboard, reporting suite health to stakeholders, comparing releases over time, or when a coverage percentage or a bug count is being treated as a measure of quality.
npx skillsauth add jaktestowac/awesome-copilot-for-testers analyzing-quality-metricsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
Security scan pending...
This skill is queued for security scanning. Results will appear when the scan completes.
Use this skill when someone needs numbers about testing and quality, and the numbers need to survive being acted on.
Every quality metric is a proxy. Coverage proxies for thoroughness, bug count proxies for code health, pass rate proxies for confidence. Proxies are useful until they become targets, at which point they get optimized directly and stop measuring anything. The job here is to pick proxies that resist that, define them precisely enough to be computed the same way twice, and always report the decision the number is meant to inform.
Before selecting anything, ask what will be decided differently depending on the answer:
| Decision | Metrics that inform it | | --- | --- | | Is this build shippable? | Pass rate on the candidate, open defect profile, coverage of the changed area | | Where should we invest test effort? | Escape rate by area, defect density by module, coverage gaps against risk | | Is our suite trustworthy? | Flake rate, quarantine count and age, mutation survival | | Is our feedback loop fast enough? | Suite duration by stage, time to first failure signal, queue time | | Is quality improving? | Escape rate trend, time to detect trend, change failure rate |
A metric that maps to no row here is a metric to drop. Collecting it costs attention and invites someone to optimize it.
Use ./resources/metric-definitions.md. Each definition fixes:
Two definitions worth fixing early because they are argued about most:
Compute over the last several releases or the last quarter before showing anything. A metric introduced with no history invites a target set from a single point, which is how arbitrary thresholds are born.
Record with each baseline:
Never publish a metric without its counterweight.
| Metric | Counterweight | The behaviour this prevents | | --- | --- | --- | | Line coverage | Mutation score, or assertion density | Tests that execute code and assert nothing | | Pass rate | Flake rate, skipped count | Skipping and quarantining to keep the bar green | | Suite duration | Escape rate | Deleting slow tests that were catching things | | Defects found | Escaped defects | Rewarding shallow, high-volume bug reports | | Deployment frequency | Change failure rate | Shipping faster and worse | | Automation percentage | Escape rate on automated areas | Automating what is easy rather than what is risky |
Rules that keep a dashboard honest:
./resources/quality-report-template.md has a report structure that holds up in front of stakeholders.
Write the interpretation next to the number. A dashboard with no narrative gets a narrative invented for it by whoever presents it.
For every notable movement, state:
Alternative explanations are not hedging. Coverage rising after a test-generation sprint and coverage rising because a large untested module was deleted look identical in the chart and mean opposite things.
Every quarter, run the checks in ./resources/anti-metrics.md:
A corrupted metric is worse than a missing one, because it is trusted. When you find one, retire it and say why.
./resources/metric-definitions.md - formula, source, window, exclusions, distortions, and supported decision for each metric./resources/anti-metrics.md - metrics to avoid, the Goodhart cases, and the quarterly corruption check./resources/quality-report-template.md - stakeholder report structure with a worked examplestabilizing-flaky-tests (planned) - when flake rate identifies which tests to fixtech-debt-analysis - when the metrics point at structural debt rather than at individual testsassessing-release-readiness - when the numbers feed a go/no-go decisionunslop-tests - when coverage is high and mutation survival says the tests prove nothingautomating-ci-test-pipelines (planned) - when suite duration and queue time are the metrics under pressureanalyzing-regression-scope - when defect density by area should steer retest prioritydocumenting-test-suites - when the definitions need a permanent home the team can citeThis skill is complete when:
testing
Tests the customization assets themselves - skills, prompts, custom agents, instructions - the way a product is tested: activation cases that check an asset fires when it should and stays quiet when it should not, output-contract cases, safety cases, collision cases between assets competing for the same trigger, a weighted rubric scored blind, and a baseline-versus-candidate gate before an edit ships. Use when a skill is edited and nobody knows whether behaviour changed, when two skills fight over the same request, when a description is being tuned for discoverability, when a collection has grown past manual spot-checking, or when the request mentions skill evals, prompt regression, or "does this skill actually work".
development
Shapes QA output for the person who has to act on it: result and blocker in the first two lines, one decision per report, findings ordered by what they cost, the long artifact in a file and the decisions in the message, and magnitude stated in units the reader can count. Use when a report is accurate but nobody acts on it, when a finding set is too long to read under time pressure, when the same findings must be retold for a developer, a release manager, and an on-call engineer, or when the request mentions "too long", "make this readable", "just tell me what to do", "so what", or "summarize this for stakeholders". Pairs with unslop-answers, which makes the same report honest.
testing
Verifies that the lines and branches a change actually touched are executed by tests, using LCOV or Cobertura diff coverage instead of whole-repo percentages, and escalates uncovered high-risk changes into a blocking finding. Use when a pull request needs a coverage gate that unrelated tests cannot satisfy, when total coverage looks healthy but the diff is untested, when wiring diff coverage into CI, or when someone claims a change is covered because the suite is green.
development
Cuts AI tells from test code: tests that pass without proving anything, tautological assertions, mock-only tests, hardcoded waits, coverage theater, vague names, swallowed errors, retries used as fixes. Use whenever test code is written, changed, or reviewed, including tests produced as a side effect of a feature task, and when the request mentions "review these tests", "are these tests any good", "this test always passes", "this suite is flaky", or "clean up these tests". Must always apply to test code.