Shadow symbolic execution for testing software patches
File(s) a10-kuchta.pdf (767.42 KB)
Published version
Author(s)
Kuchta, Tomasz
Palikareva, Hristina
Cadar, C
Type
Journal Article
Abstract
While developers are aware of the importance of comprehensively testing patches, the large effort
involved in coming up with relevant test cases means that such testing rarely happens in practice.
Furthermore, even when test cases are written to cover the patch, they often exercise the same
behaviour in the old and the new version of the code. In this article, we present a symbolic
execution-based technique that is designed to generate test inputs that cover the new program
behaviours introduced by a patch. The technique works by executing both the old and the new
version in the same symbolic execution instance, with the old version shadowing the new one. During
this combined shadow execution, whenever a branch point is reached where the old and the new
version diverge, we generate a test case exercising the divergence and comprehensively test the
new behaviours of the new version. We evaluate our technique on the
Coreutils
patches from the
CoREBench
suite of regression bugs, and show that it is able to generate test inputs that exercise
newly added behaviours and expose some of the regression bugs.
involved in coming up with relevant test cases means that such testing rarely happens in practice.
Furthermore, even when test cases are written to cover the patch, they often exercise the same
behaviour in the old and the new version of the code. In this article, we present a symbolic
execution-based technique that is designed to generate test inputs that cover the new program
behaviours introduced by a patch. The technique works by executing both the old and the new
version in the same symbolic execution instance, with the old version shadowing the new one. During
this combined shadow execution, whenever a branch point is reached where the old and the new
version diverge, we generate a test case exercising the divergence and comprehensively test the
new behaviours of the new version. We evaluate our technique on the
Coreutils
patches from the
CoREBench
suite of regression bugs, and show that it is able to generate test inputs that exercise
newly added behaviours and expose some of the regression bugs.
Date Issued
2018-10-01
Date Acceptance
2018-06-01
Citation
ACM Transactions on Software Engineering and Methodology, 2018, 27 (3)
ISSN
1049-331X
Publisher
Association for Computing Machinery
Journal / Book Title
ACM Transactions on Software Engineering and Methodology
Volume
27
Issue
3
Copyright Statement
2018 Copyright © is held by the owner/author(s). Publication rights licensed to ACM. This is an open access article under a Creative Commons Attribution International 4.0 (https://creativecommons.org/licenses/by/4.0/)
Sponsor
Engineering & Physical Science Research Council (EPSRC)
Engineering & Physical Science Research Council (EPSRC)
Grant Number
EP/J00636X/1
EP/L002795/1
Subjects
Science & Technology
Technology
Computer Science, Software Engineering
Computer Science
Symbolic patch testing
regression bugs
cross-version checks
Software Engineering
0803 Computer Software
0806 Information Systems
Publication Status
Published
Article Number
ARTN 10
Date Publish Online
2018-09-25
