Software partitioning for effective automated unit testing

A key problem for effective unit testing is the dificulty of partitioning large software systems into appropriate units that can be tested in isolation. We present an approach that identifies control and data inter-dependencies between software components using static program analysis, and divides the source code into units where highly-intertwined components are grouped together. Those units can then be tested in isolation using automated test generation techniques and tools, such as dynamic software model checkers. We discuss preliminary experimental results showing that automatic software partitioning can significantly increase test coverage without generating too many false alarms caused by unrealistic inputs being injected at interfaces between units.

[1]  Thomas W. Reps,et al.  Demand interprocedural dataflow analysis , 1995, SIGSOFT FSE.

[2]  Gregory Tassey,et al.  Prepared for what , 2007 .

[3]  Richard Gerber,et al.  Compositional verification by model checking for counter-examples , 1996, ISSTA '96.

[4]  S. Furey Why we should use function points [software metrics] , 1997 .

[5]  Thomas A. Henzinger,et al.  Interface Theories for Component-Based Design , 2001, EMSOFT.

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

[7]  Todd M. Austin,et al.  High Coverage Detection of Input-Related Security Faults , 2003, USENIX Security Symposium.

[8]  Bogdan Korel,et al.  A dynamic approach of test data generation , 1990, Proceedings. Conference on Software Maintenance 1990.

[9]  Sarfraz Khurshid,et al.  Korat: automated testing based on Java predicates , 2002, ISSTA '02.

[10]  Kurt Keutzer,et al.  Why is ATPG easy? , 1999, DAC '99.

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

[12]  Bernhard Steffen,et al.  Model Checking for Context-Free Processes , 1992, CONCUR.

[13]  Arie van Deursen,et al.  Symphony: view-driven software architecture reconstruction , 2004, Proceedings. Fourth Working IEEE/IFIP Conference on Software Architecture (WICSA 2004).

[14]  Thomas A. Henzinger,et al.  Generating tests from counterexamples , 2004, Proceedings. 26th International Conference on Software Engineering.

[15]  Rajeev Alur,et al.  Analysis of recursive state machines , 2001, TOPL.

[16]  Wen-Ben Jone,et al.  On testing of sequential machines using circuit decomposition and stochastic modeling , 1995, IEEE Trans. Syst. Man Cybern..

[17]  Jon Edvardsson,et al.  A Survey on Automatic Test Data Generation , 2002 .

[18]  Soha Hassoun,et al.  Regularity extraction via clan-based structural circuit decomposition , 1999, 1999 IEEE/ACM International Conference on Computer-Aided Design. Digest of Technical Papers (Cat. No.99CH37051).

[19]  Dawson R. Engler,et al.  Execution Generated Test Cases: How to Make Systems Code Crash Itself , 2005, SPIN.

[20]  C. Leonard Berman,et al.  Circuit width, register allocation, and ordered binary decision diagrams , 1991, IEEE Trans. Comput. Aided Des. Integr. Circuits Syst..

[21]  Patrice Godefroid,et al.  Model checking for programming languages using VeriSoft , 1997, POPL '97.

[22]  Dawson R. Engler,et al.  A system and language for building system-specific, static analyses , 2002, PLDI '02.

[23]  Sérgio Vale Aguiar Campos,et al.  Symbolic Model Checking , 1993, CAV.

[24]  Robert O. Hastings,et al.  Fast detection of memory leaks and access errors , 1991 .

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

[26]  Sriram K. Rajamani,et al.  The SLAM Toolkit , 2001, CAV.

[27]  A. Jefferson Offutt,et al.  A semantic model of program faults , 1996, ISSTA '96.

[28]  Orna Grumberg,et al.  Model checking and modular verification , 1994, TOPL.

[29]  Thomas A. Henzinger,et al.  Lazy abstraction , 2002, POPL '02.

[30]  Sarfraz Khurshid,et al.  Test input generation with java PathFinder , 2004, ISSTA '04.

[31]  George C. Necula,et al.  CCured: type-safe retrofitting of legacy code , 2002, POPL '02.

[32]  Kenneth L. McMillan,et al.  Symbolic model checking , 1992 .

[33]  William R. Bush,et al.  A static analyzer for finding dynamic programming errors , 2000, Softw. Pract. Exp..

[34]  Nils Klarlund,et al.  Software Model Checking: Searching for Computations in the Abstract or the Concrete , 2005, IFM.

[35]  Mary Lou Soffa,et al.  Generating test data for branch coverage , 2000, Proceedings ASE 2000. Fifteenth IEEE International Conference on Automated Software Engineering.

[36]  Sean Furey Point: Why We Should Use Function Points , 1997, IEEE Softw..

[37]  C. Csallner,et al.  Check 'n' crash: combining static checking and testing , 2005, Proceedings. 27th International Conference on Software Engineering, 2005. ICSE 2005..