Cause reduction: Delta debugging, even without bugs

Alex Groce, Mohammad Amin Alipour, Chaoqiang Zhang, Yang Chen, John Regehr

Research output: Contribution to journalArticlepeer-review

29 Scopus citations


What is a test case for? Sometimes, to expose a fault. Tests can also exercise code, use memory or time, or produce desired output. Given a desired effect, a test case can be seen as a cause, and its components divided into essential (required for effect) and accidental. Delta debugging is used for removing accidents from failing test cases, producing smaller test cases that are easier to understand. This paper extends delta debugging by simplifying test cases with respect to arbitrary effects, a generalization called cause reduction. Suites produced by cause reduction provide effective quick tests for real-world programs. For Mozilla's JavaScript engine, the reduced suite is possibly more effective for finding faults. The effectiveness of reduction-based suites persists through changes to the software, improving coverage by over 500 branches for versions up to 4 months later. Cause reduction has other applications, including improving seeded symbolic execution, where using reduced tests can often double the number of additional branches explored.

Original languageEnglish (US)
Pages (from-to)40-68
Number of pages29
JournalSoftware Testing Verification and Reliability
Issue number1
StatePublished - Jan 1 2016
Externally publishedYes


  • code coverage
  • delta debugging
  • regression testing
  • software testing
  • test case minimization

ASJC Scopus subject areas

  • Software
  • Safety, Risk, Reliability and Quality


Dive into the research topics of 'Cause reduction: Delta debugging, even without bugs'. Together they form a unique fingerprint.

Cite this