The Community for Technology Leaders
2015 IEEE/ACM 37th IEEE International Conference on Software Engineering (ICSE) (2015)
Florence, Italy
May 16, 2015 to May 24, 2015
ISBN: 978-1-4799-1934-5
pp: 506-516
ABSTRACT
Software analysis tools and techniques often leverage structural code coverage information to reason about the dynamic behavior of software. Existing techniques instrument the code with the required structural obligations and then monitor the execution of the compiled code to report coverage. Instrumentation based approaches often incur considerable runtime overhead for complex structural coverage metrics such as Modified Condition/Decision (MC/DC). Code instrumentation, in general, has to be approached with great care to ensure it does not modify the behavior of the original code. Furthermore, instrumented code cannot be used in conjunction with other analyses that reason about the structure and semantics of the code under test. In this work, we introduce a non-intrusive preprocessing approach for computing structural coverage information. It uses a static partial evaluation of the decisions in the source code and a source-to-bytecode mapping to generate the information necessary to efficiently track structural coverage metrics during execution. Our technique is flexible; the results of the preprocessing can be used by a variety of coverage-driven software analysis tasks, including automated analyses that are not possible for instrumented code. Experimental results in the context of symbolic execution show the efficiency and flexibility of our non- intrusive approach for computing code coverage information.
INDEX TERMS
Instruments, Measurement, Software, Java, Monitoring, Runtime, Electronic mail
CITATION

M. W. Whalen, S. Person, N. Rungta, M. Staats and D. Grijincu, "A Flexible and Non-intrusive Approach for Computing Complex Structural Coverage Metrics," 2015 IEEE/ACM 37th IEEE International Conference on Software Engineering (ICSE), Florence, Italy, 2015, pp. 506-516.
doi:10.1109/ICSE.2015.68
93 ms
(Ver 3.3 (11022016))