A New Method for Software Test Data Generation Inspired by D-algorithm

Test generation for digital hardware is highly automated, scalable (in practice), and provides high test quality. In contrast, current software automatic test data generation approaches suffer from low test quality or high complexity. While mutation-oriented constraint-based test data generation for software was proposed to generate high quality test data for real program bugs, all existing approaches require symbolic analysis for the whole program, and hence are not scalable even for unit testing, i.e., testing the lowest-level software modules. We propose a new method inspired by hardware D-algorithm and divide and conquer for software test data generation. To reduce runtime complexity and improve scalability, we combine global structural analysis and a sequence of small reusable symbolic analyses of parts of the program, instead of symbolically executing each mutated version of the entire program. We also propose a multi-pass test generation system to further reduce runtime complexity and compact test data. We compare our tools with one of the best software test generation tools (EvoSuite[20], which won the SBST 2017 tool competition) and demonstrate that our approach generates higher quality unit tests in a scalable manner and provides a compact set of tests.

[1]  J. Paul Roth,et al.  Diagnosis of automata failures: a calculus and a method , 1966 .

[2]  Prabhakar Goel,et al.  PODEM-X: An Automatic Test Generation System for VLSI Logic Structures , 1981, 18th Design Automation Conference.

[3]  Mark Harman,et al.  The Oracle Problem in Software Testing: A Survey , 2015, IEEE Transactions on Software Engineering.

[4]  A. Jefferson Offutt,et al.  MuJava: an automated class mutation system , 2005, Softw. Test. Verification Reliab..

[5]  Sandeep K. Gupta,et al.  Using hardware testing approaches to improve software testing: Undetectable mutant identification , 2016, 2016 IEEE 34th VLSI Test Symposium (VTS).

[6]  Michael D. Ernst,et al.  Are mutants a valid substitute for real faults in software testing? , 2014, SIGSOFT FSE.

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

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

[9]  A. Jefferson Offutt,et al.  Introduction to Software Testing , 2008 .

[10]  Vincent Beroulle,et al.  Functional Verification of RTL Designs driven by Mutation Testing metrics , 2007, 10th Euromicro Conference on Digital System Design Architectures, Methods and Tools (DSD 2007).

[11]  A. Jefferson Offutt,et al.  Constraint-Based Automatic Test Data Generation , 1991, IEEE Trans. Software Eng..

[12]  Reid Holmes,et al.  Coverage is not strongly correlated with test suite effectiveness , 2014, ICSE.

[13]  Leonardo Bottaci,et al.  A Genetic Algorithm Fitness Function for Mutation Testing , 2001 .

[14]  Michael S. Hsiao,et al.  Tackling the Path Explosion Problem in Symbolic Execution-Driven Test Generation for Programs , 2010, 2010 19th IEEE Asian Test Symposium.

[15]  Robert E. Tarjan,et al.  A fast algorithm for finding dominators in a flowgraph , 1979, TOPL.

[16]  Fabio Del Frate,et al.  On the correlation between code coverage and software reliability , 1995, Proceedings of Sixth International Symposium on Software Reliability Engineering. ISSRE'95.

[17]  Richard J. Lipton,et al.  Hints on Test Data Selection: Help for the Practicing Programmer , 1978, Computer.

[18]  Masahiro Fujita,et al.  Automatic test pattern generation for functional RTL circuits using assignment decision diagrams , 2000, Proceedings 37th Design Automation Conference.