Help, help, i'm being suppressed! The significance of suppressors in software testing

Test features are basic compositional units used to describe what a test does (and does not) involve. For example, in API-based testing, the most obvious features are function calls; in grammar-based testing, the obvious features are the elements of the grammar. The relationship between features as abstractions of tests and produced behaviors of the tested program is surprisingly poorly understood. This paper shows how large-scale random testing modified to use diverse feature sets can uncover causal relationships between what a test contains and what the program being tested does. We introduce a general notion of observable behaviors as targets, where a target can be a detected fault, an executed branch or statement, or a complex coverage entity such as a state, predicate-valuation, or program path. While it is obvious that targets have triggers - features without which they cannot be hit by a test - the notion of suppressors - features which make a test less likely to hit a target - has received little attention despite having important implications for automated test generation and program understanding. For a set of subjects including C compilers, a flash file system, and JavaScript engines, we show that suppression is both common and important.

[1]  William G. Griswold,et al.  Dynamically discovering likely program invariants to support program evolution , 1999, Proceedings of the 1999 International Conference on Software Engineering (IEEE Cat. No.99CB37002).

[2]  E. B. Wilson Probable Inference, the Law of Succession, and Statistical Inference , 1927 .

[3]  Tao Xie,et al.  Is operator-based mutant selection superior to random mutant selection? , 2010, 2010 ACM/IEEE 32nd International Conference on Software Engineering.

[4]  Alex Groce,et al.  Lightweight Automated Testing with Adaptation-Based Programming , 2012, 2012 IEEE 23rd International Symposium on Software Reliability Engineering.

[5]  Alex Groce,et al.  Swarm Verification Techniques , 2011, IEEE Transactions on Software Engineering.

[6]  Alex Groce,et al.  Extended program invariants: applications in testing and fault localization , 2012, WODA 2012.

[7]  Alex Groce,et al.  Swarm testing , 2012, ISSTA 2012.

[8]  Lionel C. Briand,et al.  Is mutation an appropriate tool for testing experiments? , 2005, ICSE.

[9]  Alessandro Orso,et al.  BugRedux: Reproducing field failures for in-house debugging , 2012, 2012 34th International Conference on Software Engineering (ICSE).

[10]  Alex Groce,et al.  Randomized Differential Testing as a Prelude to Formal Verification , 2007, 29th International Conference on Software Engineering (ICSE'07).

[11]  Pierre-Etienne Moreau,et al.  A Simple Generic Library for C , 2006, ICSR.

[12]  Michael D. Ernst,et al.  Feedback-Directed Random Test Generation , 2007, 29th International Conference on Software Engineering (ICSE'07).

[13]  Gregg Rothermel,et al.  Understanding user understanding: determining correctness of generated program invariants , 2012, ISSTA 2012.

[14]  D. Richard Kuhn,et al.  Software fault interactions and implications for software testing , 2004, IEEE Transactions on Software Engineering.

[15]  Gordon Fraser,et al.  Testing Container Classes: Random or Systematic? , 2011, FASE.

[16]  R. Joshi,et al.  Putting Flight Software Through the Paces with Testing , Model Checking , and Constraint-Solving , 2008 .

[17]  Xuejun Yang,et al.  Finding and understanding bugs in C compilers , 2011, PLDI '11.

[18]  Mary Jean Harrold,et al.  Empirical evaluation of the tarantula automatic fault-localization technique , 2005, ASE.

[19]  Alex Groce,et al.  Taming compiler fuzzers , 2013, PLDI.

[20]  Thomas Ball,et al.  A Theory of Predicate-Complete Test Coverage and Generation , 2004, FMCO.

[21]  Dawson R. Engler,et al.  KLEE: Unassisted and Automatic Generation of High-Coverage Tests for Complex Systems Programs , 2008, OSDI.

[22]  Alex Groce (Quickly) testing the tester via path coverage , 2009, WODA '09.

[23]  Gunter Saake,et al.  Predicting performance via automated feature-interaction detection , 2012, 2012 34th International Conference on Software Engineering (ICSE).

[24]  Yves Le Traon,et al.  Improving test suites for efficient fault localization , 2006, ICSE.

[25]  David Lo,et al.  Comprehensive evaluation of association measures for fault localization , 2010, 2010 IEEE International Conference on Software Maintenance.

[26]  Alex Groce,et al.  Comparing Automated Unit Testing Strategies , 2010 .

[27]  Andreas Zeller,et al.  Simplifying and Isolating Failure-Inducing Input , 2002, IEEE Trans. Software Eng..

[28]  Corina S. Pasareanu,et al.  Test input generation for java containers using state matching , 2006, ISSTA '06.