The artifact for the paper Classifying Edits to Variability in Source Code consists of four parts:
- DiffDetective: For our validation, we built DiffDetective, a java library and command-line tool to classify edits to variability in git histories of preprocessor-based software product lines. DiffDetective is the main artifact used to replicate the validation of our paper (see Section 5). DiffDetective is self-contained in that it does not require or depend on in-depth knowledge on the theoretical foundation of our work. Practitioners and researches are free to ignore the appendix as well as the haskell formalization and may use DiffDetective out-of-the-box.
- Appendix: The appendix of our paper is given in PDF format in the file
appendix.pdf
. - Haskell Formalization: We provide an extended formalization in the Haskell programming language as described in our appendix. Its implementation can be found in the Haskell project in the
proofs
directory. - Dataset Overview: We provide an overview of the 44 inspected open-source software product lines with updated links to their repositories in the file docs/datasets/all.md.
Our artifact has the following purposes:
We provide replication instructions that allow to replicate the validation we performed in Section 5 of our paper. The replication is executed in a Docker container. To replicate our results, we also provide forks of all 44 datasets in the very state we performed our validation on.
DiffDetective is designed as a library that offers reusable functionality. Researchers and practitioners can use our DiffDetective library to build on our theory and results (e.g., for future prototypes to study the evolution of variability in source code).
DiffDetective offers various features, including but not limited to: parsing variation diffs from unix diffs, obtaining variation diffs for certain patches and commits, classifying edits in variation diffs, defining custom classifications, rendering, traversing, and transforming variation diffs, various de-/serialization methods, and running analyses for the git histories of C preprocessor-based software product lines. We documented each part of the library and provide a javadoc website within the repository. Moreover, our validation (see replicability above) may also be run on any custom dataset as described in our README.md.
The proofs
Haskell project provides an extended formal specification of our theory.
Its main purpose is to document the theory and its extensions to serve as a reference for the proofs in our appendix.
Yet, the project can also be used as a library to reason on variation trees and diffs in Haskell projects.
The library is accompanied by a small demo application that shows an example test case for our proof of completeness by creating a variation diff from two variation trees and re-projecting them.
The proofs
project is described in detail in our appendix.
We claim the Artifacts Available badge as we made our artifacts publicly available on Github and Zenodo with an open-source license. All 44 input datasets are open-source projects and publicly available.
We claim the Artifacts Evaluated Reusable badge as we implemented DiffDetective as a reusable library (see above). Furthermore, both DiffDetective and our Haskell formalization serve as reference implementations if researchers or practitioners want to reimplement our theory in other programming languages.