Kelly Mears

Regression

A previously working behavior that a change has broken.

Method2 min read224 words13 out · 21 in
also calledRegressed

A regression is a behavior that used to work and no longer does. The word carries an implicit accusation — something we changed caused this — which makes it the most useful and most misapplied label in a bug tracker.

Distinguishing a real regression from its impostors is most of the skill. An intermittent failure that clears on rerun is a Flaky Test. A failure that appears only on one machine is usually environmental — a different port, a different model tier, a different disk. A failure in a file the change never touched may be a Semantic Conflict with someone else's change, invisible to both diffs. Treating any of these as a regression sends you looking for a defect that is not there.

The tool that separates them is bisection: find the first revision at which the behavior differs. It converts an argument into an interval. Bisection depends on each revision being independently sound, which is one of the arguments for the Atomic Commit.

Guarding against regressions is what a test suite is for, and the guard only exists if it has been seen to fail — see Falsifiability. A subtler case: a change can delete the only assertion that covered a property without deleting any code, so the property silently stops being checked. Nothing goes red; the net simply has a hole.

See also9

Reproducible Case

The smallest set of steps that reliably produces a fault, and the unit of real debugging.

Method27 connections

Code Coverage

The proportion of code executed by a test suite — a map of what is untested, not a measure of quality.

Testing & Verification16 connections

Version Control

A system recording the history of a project's files, enabling branching, merging, and recovery.

Version Control & Delivery26 connections

Root Cause Analysis

Escalating past the visible symptom until you find the layer that actually produced it.

Method49 connections

Visual Regression Testing

Comparing rendered output against a stored baseline to catch unintended visual change.

Testing & Verification14 connections

Git Bisect

Finding the commit that introduced a bug by binary search through history, testing the midpoint between a known-good and a known-bad version until one commit remains.

Testing & Verification17 connections

Test Impact Analysis

Running only the tests a change could plausibly affect, using dependency graphs, coverage maps, or learned models, so large suites stay fast without giving up their safety net.

Testing & Verification10 connections

Regression Testing

Rerunning existing tests after every change to confirm that what used to work still works, how the suite grows one fixed bug at a time, and how teams keep it fast enough to run.

Testing & Verification14 connections

Refactoring

Changing the structure of code without changing what it does, in small verified steps, so that the next change becomes easy.

Method11 connections

Linked from21