QA Process
Regression Test Strategy.
Re-running everything every release doesn't scale. A regression strategy decides what to re-test, how to prioritise it, and what to automate — so you catch what breaks without the suite eating the whole cycle.
When to use it
Use this when your regression run no longer fits the release window, when escaped defects are slipping through a bloated suite, or when you're deciding what to automate versus run by hand each release.
Who uses it
Senior QA and leads who own the regression suite and the release cadence, and the engineers who maintain and run it each cycle.
On this page11 sections
WHAT IS REGRESSION TESTING
Regression testing re-checks that things which used to work still work after a change. New code, bug fixes, config changes, and dependency upgrades can all break something that passed last release — regression is how you catch that before users do.
A regression strategy is the plan for doing this sustainably. Rather than "re-test everything" (impossible at scale) or "re-test whatever we remember" (unreliable), it sets a deliberate, repeatable answer to what gets re-tested, how often, and by what means.
WHAT TO INCLUDE IN REGRESSION
A regression pack should cover the things that hurt most if they silently break: the core user journeys, the critical business flows (login, checkout, payments), and the areas around recent changes. Add anything with a history of breaking — past defects are the best predictor of future ones.
Be deliberate about what's out, too. Stable, low-risk areas that haven't changed in months don't need re-running every release; a periodic check is enough. The aim is a pack that protects what matters, not one that grows forever because nothing is ever removed.
HOW TO PRIORITISE REGRESSION
Prioritise by risk and by change. Risk tells you which areas are most painful if they break; change tells you which areas are most likely to have broken this release. The intersection — high-risk areas near recent changes — runs first and always.
From there, band the rest: high-priority cases every release, medium on a rotation or when their area is touched, low-risk stable areas on a periodic full pass. This keeps the every-release run small enough to actually complete while nothing important goes unchecked for long.
SMOKE VS SANITY VS REGRESSION
These three get used interchangeably but solve different problems. A quick comparison keeps them straight — and keeps you from running a two-hour regression suite when a five-minute smoke check was the right call.
Quick definitions
Smoke — a shallow, broad check that the build is stable enough to test at all.
Sanity — a narrow, focused check that a specific change or fix works as expected.
Regression — a deep, broad re-check that existing functionality still works after changes.
AT A GLANCE
| Smoke | Sanity | Regression | |
|---|---|---|---|
| Purpose | Is the build testable? | Did this change work? | Does everything still work? |
| Scope | Broad, shallow | Narrow, focused | Broad, deep |
| When | After every build/deploy | After a fix or small change | Before a release |
| Depth | Critical paths only | The changed area only | Full or risk-based set |
| Speed | Minutes | Minutes | Hours (or a fast automated run) |
MANUAL VS AUTOMATED REGRESSION
Regression is the strongest candidate for automation in all of testing, because the same checks run release after release — exactly where automation pays back. Stable, repetitive, high-value regression cases should be automated and wired into CI so they run on every change with no human cost per run.
Manual regression still has a place: brand-new areas not yet stable enough to automate, exploratory passes around risky changes, and anything where human judgement on look-and-feel matters. The healthy split is automated for the stable core, manual for the new and the nuanced — not all-or-nothing either way.
RISK-BASED REGRESSION SELECTION
When the full suite won't fit the window, select by risk rather than running a random subset. Score each area by impact and likelihood of breakage, then run the high-risk and recently-changed areas every release and rotate the rest. A defect found in production is a signal to re-score that area, not to silently re-add everything.
This is risk-based testing applied to regression specifically, and it's what keeps a growing suite from strangling the release cadence. The detail of scoring impact and likelihood lives in the risk-based testing guide, linked below.
REGRESSION PACK MAINTENANCE
A regression pack rots if nobody tends it. Cases drift out of date, duplicate each other, or test behaviour that no longer exists — and an unmaintained pack costs time while quietly covering less. Review it regularly: remove obsolete cases, merge duplicates, and add coverage for new features and recent escapes.
Treat the pack as a living asset with an owner, not an archive. Every time a defect escapes to production, the fix should include adding or strengthening the regression case that would have caught it — that's how the pack gets smarter instead of just bigger.
FLAKY REGRESSION TESTS
Flaky regression tests — ones that pass and fail without any code change — are corrosive, because they train people to ignore red. Once "it's probably just flaky" becomes the default reaction to a failure, the suite has stopped doing its job even when it's catching real bugs.
Treat flakiness as a defect in the test. Set a flake budget, quarantine flaky tests out of the gating run so they stop blocking releases, and fix or delete them within a set time rather than leaving them to erode trust. A smaller suite people believe beats a larger one they've learned to wave through.
COMMON MISTAKES
Trying to re-test everything every release.
It doesn't scale. Select by risk and recent change — run the critical and changed areas always, rotate the stable rest.
Letting the regression pack grow but never pruning it.
Review it regularly. Remove obsolete and duplicate cases so the pack stays fast and meaningful, not just large.
Tolerating flaky tests.
Quarantine and fix or delete them on a deadline. Flakiness destroys trust in the whole suite, including its true failures.
Automating nothing — or automating everything.
Automate the stable, repetitive core; keep manual for new and nuanced areas. Both extremes waste effort.
Not adding a regression case after an escape.
Every production escape should leave behind the test that would have caught it. That's how the pack learns.