Software testing with code-based test generators: data and lessons learned from a case study with an industrial software component

Automatically generating effective test suites promises a significant impact on testing practice by promoting extensively tested software within reasonable effort and cost bounds. Code-based test generators rely on the source code of the software under test to identify test objectives and to steer the test case generation process accordingly. Currently, the most mature proposals on this topic come from the research on random testing, dynamic symbolic execution, and search-based testing. This paper studies the effectiveness of a set of state-of-the-research test generators on a family of industrial programs with nontrivial domain-specific peculiarities. These programs are part of a software component of a real-time and safety-critical control system and integrate in a control task specified in LabVIEW, a graphical language for designing embedded systems. The result of this study enhances the available body of knowledge on the strengths and weaknesses of test generators. The empirical data indicate that the test generators can truly expose subtle (previously unknown) bugs in the subject software and that there can be merit in using different types of test generation approaches in a complementary, even synergic fashion. Furthermore, our experiment pinpoints the support for floating point arithmetics and nonlinear computations as a major milestone in the path to exploiting the full potential of the prototypes based on symbolic execution in industry.

[1]  Paolo Tonella,et al.  Evolutionary testing of classes , 2004, ISSTA '04.

[2]  Bertrand Meyer,et al.  ARTOO , 2008, 2008 ACM/IEEE 30th International Conference on Software Engineering.

[3]  Mauro Pezzè,et al.  Software testing and analysis - process, principles and techniques , 2007 .

[4]  Yannis Smaragdakis,et al.  JCrasher: an automatic robustness tester for Java , 2004, Softw. Pract. Exp..

[5]  Rupak Majumdar,et al.  Hybrid Concolic Testing , 2007, 29th International Conference on Software Engineering (ICSE'07).

[6]  Glenford J. Myers,et al.  Art of Software Testing , 1979 .

[7]  Giovanni Denaro,et al.  Structural coverage of feasible code , 2010, AST '10.

[8]  Harmen-Hinrich Sthamer,et al.  The automatic generation of software test data using genetic algorithms , 1995 .

[9]  Kenneth L. McMillan Lazy Annotation for Program Testing and Verification , 2010, CAV.

[10]  Alessandro Tesini,et al.  Remote handling systems for ITER , 2002 .

[11]  Tao Xie,et al.  Improving Structural Testing of Object-Oriented Programs via Integrating Evolutionary Testing and Symbolic Execution , 2008, 2008 23rd IEEE/ACM International Conference on Automated Software Engineering.

[12]  Nikolai Tillmann,et al.  Pex-White Box Test Generation for .NET , 2008, TAP.

[13]  Gordon Fraser,et al.  Sound empirical evidence in software testing , 2012, 2012 34th International Conference on Software Engineering (ICSE).

[14]  Gary McGraw,et al.  Automated software test data generation for complex programs , 1998, Proceedings 13th IEEE International Conference on Automated Software Engineering (Cat. No.98EX239).

[15]  Corina S. Pasareanu,et al.  Symbolic execution with mixed concrete-symbolic solving , 2011, ISSTA '11.

[16]  Koushik Sen,et al.  Heuristics for Scalable Dynamic Test Generation , 2008, 2008 23rd IEEE/ACM International Conference on Automated Software Engineering.

[17]  Gordon Fraser,et al.  EvoSuite: automatic test suite generation for object-oriented software , 2011, ESEC/FSE '11.

[18]  Nikolai Tillmann,et al.  Fitness-guided path exploration in dynamic symbolic execution , 2009, 2009 IEEE/IFIP International Conference on Dependable Systems & Networks.

[19]  Roy P. Pargas,et al.  Test-Data Generation Using Genetic Algorithms , 1999, Softw. Test. Verification Reliab..

[20]  Dawson R. Engler,et al.  EXE: automatically generating inputs of death , 2006, CCS '06.

[21]  Bogdan Korel,et al.  Automated Software Test Data Generation , 1990, IEEE Trans. Software Eng..

[22]  James C. King,et al.  Symbolic execution and program testing , 1976, CACM.

[23]  Patrice Godefroid,et al.  Automated Whitebox Fuzz Testing , 2008, NDSS.

[24]  Y. Shimomura The present status and future prospects of the ITER project , 2004 .

[25]  Koushik Sen,et al.  CUTE: a concolic unit testing engine for C , 2005, ESEC/FSE-13.

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

[27]  Bogdan Korel,et al.  The chaining approach for software test data generation , 1996, TSEM.

[28]  Thomas Ball,et al.  Abstraction-guided Test Generation: A Case Study , 2003 .

[29]  Gary McGraw,et al.  Generating Software Test Data by Evolution , 2001, IEEE Trans. Software Eng..

[30]  Corina S. Pasareanu,et al.  JPF-SE: A Symbolic Execution Extension to Java PathFinder , 2007, TACAS.

[31]  M. Keilhacker JET deuterium: tritium results and their implications , 1999, Philosophical Transactions of the Royal Society of London. Series A: Mathematical, Physical and Engineering Sciences.

[32]  Koushik Sen,et al.  DART: directed automated random testing , 2005, PLDI '05.

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

[34]  L. D. Moura,et al.  The YICES SMT Solver , 2006 .

[35]  Mark Harman,et al.  Automated Test Data Generation for Coverage: Haven't We Solved This Problem Yet? , 2009, 2009 Testing: Academic and Industrial Conference - Practice and Research Techniques.

[36]  Giovanni Denaro,et al.  Enhancing structural software coverage by incrementally computing branch executability , 2011, Software Quality Journal.

[37]  Giovanni Denaro,et al.  On the Integration of Software Testing and Formal Analysis , 2010, LASER Summer School.

[38]  Adam Kiezun,et al.  Grammar-based whitebox fuzzing , 2008, PLDI '08.

[39]  Frank Tip,et al.  Finding bugs in dynamic web applications , 2008, ISSTA '08.

[40]  David L. Spooner,et al.  Automatic Generation of Floating-Point Test Data , 1976, IEEE Transactions on Software Engineering.

[41]  Mark Harman,et al.  AUSTIN: A Tool for Search Based Software Testing for the C Language and Its Evaluation on Deployed Automotive Systems , 2010, 2nd International Symposium on Search Based Software Engineering.

[42]  Alessandro Orso,et al.  Test-Suite Augmentation for Evolving Software , 2008, 2008 23rd IEEE/ACM International Conference on Automated Software Engineering.

[43]  Nikolaj Bjørner,et al.  Z3: An Efficient SMT Solver , 2008, TACAS.