software testing and analysis; structural testing; combination of static and dynamic program analysis; concolic execution; abstract interpretation; data flow testing; Software testing; structural coverage; test case generation; dynamic analysis; static analysis; abstraction refinement and coarsening
(2013), Quantifying the Complexity of Dataflow Testing, in 8th International Workshop on Automation of Software Testing
, San Francisco (USA).
(2012), An industrial case study of the effectiveness of test generators, in Proceedings of the 7th International Workshop on Automation of Software Testing (AST 2012)
(2012), Supporting Test Suite Evolution through Test Case Adaptation, in Proceeding of the 5th International Conference on Software Testing, Verification and Validation
(2011), Automatic structural testing with abstraction refinement and coarsening, in 19th ACM SIGSOFT symposium and the 13th European conference on Foundations of Sofware Engineering
, Szeged, Hungary.
(2011), Dynamic Analysis for Diagnosing Integration Faults, in IEEE Transactions on Software Engineering
, 37(4), 486-508.
(2011), Enhancing structural software coverage by incrementally computing branch executability, in Software Quality Journal
, 19(4), 725-751.
(2010), Structural Coverage of Feasible Code, 59-66.
Structural testing coverage is a proxy measure of the adequacy of testing that can be useful to both software quality managers and tester designers. Despite this, few of the many structural coverage criteria studied in academia find common application in industrial practice, due to both the scarce availability of automated support for generating test suites with high coverage and the penalizing impact of infeasible program elements. This project aims to define a new generation of structural testing approaches to automatically generate test suites with high structural coverage, and correctly account for a relevant number of infeasible elements of the coverage domain. The results of the project will enable test designers to automatically compute accurate coverage measurements, thus breaking through the barriers that challenge the applicability of structural coverage criteria, and equipping the scientific community with new means for gathering credible and conclusive evidence on the effectiveness of structural coverage criteria.This project will suitably exploit the combination of dynamic and static analysis techniques. Static program analyses quickly explode in complexity and become intractable, while dynamic program analyses scale to large programs, but do not cover the state space exhaustively. Recently static and dynamic analyses have been combined to exploits the positive synergy of observed facts (brought by dynamic analysis) and deductions that can be generalized from these (brought by static analysis). This project will integrate data from concrete executions of the program with the statically analysis of an abstract (over-approximated) and finite model of the program state space. It will study the use of abstraction refinement and coarsening (ARC) that we have introduced in a recent paper, to re-aggregate the states generated by the refinement process as the analysis of the program progresses. The rationale behind ARC elaborates on the observation that the analysis algorithms generate a lot of information (refinements) to reason on the reachability of the target program elements; while the analysis meets such goal for any target elements, coarsening drops the refinements generated throughout the finalized decision processes.Our preliminary results based on combining abstract refinement with concolic execution to refine branch coverage are very encouraging. This project will exploit these results by exploring the applicability of coarsening to the combination of other static and dynamic analysis techniques to refine complex coverage criteria.The detailed goals of the project are to (1) define new approaches to structural testing to achieve accurate coverage according to different classes of coverage criteria, (2) define new program analysis algorithms that combine static and dynamic analysis to efficiently generate test suites and analyze infeasible targets throughout industrial-size programs, (3) define new reference abstractions that allow for optimizing the trade-off between precision and costs of the analysis for different classes of structural testing criteria, and (4) study the effectiveness of different coverage criteria by evaluating to what extent the test suites that satisfy the coverage criteria can expose program defects, and by comparing the effectiveness across different classes of coverage criteria. The project combines theoretical investigation with experimental validation through prototype implementations that will be defined during the project.