This repository contains the following elements:
jcrashpack.json
describes the crashes;applications/
contains, for each application and concerned version, the binaries of the version on which one or more crashes happened;crashes/
contains for each application the stack traces for each crash.
The methodology followed to build JCrashPack has been described in Soltani, M., Derakhshanfar, P., Devroey, X. and van Deursen, A. (2020). A benchmark-based evaluation of search-based crash reproduction. In Empirical Software Engineering. 25, 1 (Jan. 2020), pp. 96–138. (open access). When using JCrashPack, please use the following reference:
@article{Derakhshanfar2020,
author = {Soltani, Mozhan and Derakhshanfar, Pouria and Devroey, Xavier and van Deursen, Arie},
title = {A benchmark-based evaluation of search-based crash reproduction},
journal = {Empirical Software Engineering},
volume = {25},
number = {1},
pages = {96--138},
year = {2020},
doi = {10.1007/s10664-019-09762-1}
}
The dataset is also released on Zenodo for long-term storage.
- Adding the stack trace
-
Add a
<project>
directory tocrashes/
. For instance,crashes/XWiki
. -
Add a
<issue-name>
directory tocrashes/<project>
. For instance,crashes/XWiki/XCOMMONS-928
. The<issue-name>
should denote the issue in the<project>
from which the stack trace has been collected. -
Add a
<issue-name>.log
file tocrashes/<project>/<issue-name>
. For instance,crashes/XWiki/XCOMMONS-928/XCOMMONS-928.log
. File<issue-name>.log
contains the stack trace without any other information. For instance:
java.lang.NullPointerException: null
at org.xwiki.extension.repository.internal.installed.DefaultInstalledExtensionRepository.applyInstallExtension(DefaultInstalledExtensionRepository.java:449)
at org.xwiki.extension.repository.internal.installed.DefaultInstalledExtensionRepository.installExtension(DefaultInstalledExtensionRepository.java:691)
at org.xwiki.extension.job.internal.AbstractExtensionJob.installExtension(AbstractExtensionJob.java:257)
at org.xwiki.extension.job.internal.AbstractExtensionJob.applyAction(AbstractExtensionJob.java:204)
at org.xwiki.extension.job.internal.AbstractExtensionJob.applyActions(AbstractExtensionJob.java:151)
at org.xwiki.extension.job.internal.InstallJob.runInternal(InstallJob.java:150)
at org.xwiki.job.AbstractJob.runInContext(AbstractJob.java:205)
at org.xwiki.job.AbstractJob.run(AbstractJob.java:188)
at org.xwiki.platform.wiki.creationjob.internal.ExtensionInstaller.installExtension(ExtensionInstaller.java:73)
at org.xwiki.platform.wiki.creationjob.internal.steps.ProvisionWikiStep.execute(ProvisionWikiStep.java:78)
at org.xwiki.platform.wiki.creationjob.internal.WikiCreationJob.runInternal(WikiCreationJob.java:80)
at org.xwiki.job.AbstractJob.runInContext(AbstractJob.java:205)
at org.xwiki.job.AbstractJob.run(AbstractJob.java:188)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
- Adding dependencies
-
Add a
<project>
directory toapplications/
. For instance,applications/XWiki
. -
Add a
<version>
directory toapplications/<project>
. For instance,applications/XWiki/7.2
.<version>
is the version of the<project>
that will be used by to replicate the stack trace. -
Put the Jar file of version
<version>
of the<project>
and all its dependencies inapplications/<project>/<version>/bin
and add a zip file (or a splitted zip file) with the source code of the application inapplications/<project>/<version>/src.zip
for future analysis.
- Adding a new application to
jcrashpack.json
:
- Edit
jcrashpack.json
. - Under
applications
, add an entry with<project>
as the key. - Add a name and URL for the application.
- Add an entry under versions with
<version>
as the key, provide a URL for the source code (optional), and set version value to<version>
.
- Adding a new crash to
jcrashpack.json
:
- Edit
jcrashpack.json
. - Under
crashes
, add an entry with<issue-name>
as the key. - Set
application
value to<project>
. - If the information is available, set the
buggy_frame
value to the frame in the stack trace where the bug is, the commit where is was fixed (fixed_commit
), the URL to theissue
in an issue tracker, and the version of the project for which the issue has been fixed (version_fixed
). - Set the
id
value to<issue-name>
. - Provide a regular expression for
target_frames
designing the target frames that have to be considered in the stack trace for crash replication. For instance,.*xwiki.*
allows to consider only target frames in the stack trace wherexwiki
appears. This allows to discard frames from other projects and JDK API. - Set the
version
value to<version>
.