A benchmark-based evaluation of search-based crash reproduction

Journal Article (2020)
Author(s)

M. Soltani (TU Delft - Software Engineering, Universiteit Leiden)

P. Derakhshanfar (TU Delft - Software Engineering)

Xavier DEVROEY (TU Delft - Software Engineering)

A Deursen (TU Delft - Software Technology)

Research Group
Software Engineering
Copyright
© 2020 M. Soltani, P. Derakhshanfar, Xavier Devroey, A. van Deursen
DOI related publication
https://doi.org/10.1007/s10664-019-09762-1
More Info
expand_more
Publication Year
2020
Language
English
Copyright
© 2020 M. Soltani, P. Derakhshanfar, Xavier Devroey, A. van Deursen
Research Group
Software Engineering
Issue number
1
Volume number
25
Pages (from-to)
96–138
Reuse Rights

Other than for strictly personal use, it is not permitted to download, forward or distribute the text or part of it, without the consent of the author(s) and/or copyright holder(s), unless the work is under an open content license such as Creative Commons.

Abstract

Crash reproduction approaches help developers during debugging by generating a test case that reproduces a given crash. Several solutions have been proposed to automate this task. However, the proposed solutions have been evaluated on a limited number of projects, making comparison difficult. In this paper, we enhance this line of research by proposing JCrashPack, an extensible benchmark for Java crash reproduction, together with ExRunner, a tool to simply and systematically run evaluations. JCrashPack contains 200 stack traces from various Java projects, including industrial open source ones, on which we run an extensive evaluation of EvoCrash, the state-of-the-art tool for search-based crash reproduction. EvoCrash successfully reproduced 43% of the crashes. Furthermore, we observed that reproducing NullPointerException, IllegalArgumentException, and IllegalStateException is relatively easier than reproducing ClassCastException, ArrayIndexOutOfBoundsException and StringIndexOutOfBoundsException. Our results include a detailed manual analysis of EvoCrash outputs, from which we derive 14 current challenges for crash reproduction, among which the generation of input data and the handling of abstract and anonymous classes are the most frequents. Finally, based on those challenges, we discuss future research directions for search-based crash reproduction for Java.