Return
Unified and Split Symbolic Execution for Exposing Semantic Differences
DOI:10.1145/3705299.png)
Abstract
En 中文
Software evolution is an important activity during a software development life cycle. Understanding semantic differences between two versions of a software system is a crucial yet challenging task, especially in many safety critical sectors. Consequently, various techniques have been proposed to check semantic differences between a program and its evolution. But, many current techniques are still far from being satisfactory in terms of the accuracy and efficiency. In this paper, we propose a novel framework, called
US
\({}^{2}\)
E
, which can efficiently and effectively generate the minimal number of test cases that reveal as many semantic differences across two versions as possible. Specifically, given a unified control flow graph that denotes two versions of a program,
US
\({}^{2}\)
E
executes as many common nodes as possible and leaves execution of non-common nodes separately in a single concolic execution instance. We evaluate
US
\({}^{2}\)
E
on 86 pairs of C programs from four benchmarks, and experimental results show that
US
\({}^{2}\)
E
can efficiently and effectively generate test cases demonstrating the semantic differences across two versions, with better performance than six baseline tools.
Keywords:
software evolution
semantic difference detection
test case generation
concolic execution
control flow graph
Journal
A
IF:
6.2
Papers:
1.2K
Citations:
3.4K
Organization
No organization information available

