Description

Source Code Management (SCM) systems support software evolution by providing features, such as version control, branching, and conflict detection. Despite the presence of these features, support to parallel software development is often limited. SCM systems can only address a subset of the conflicts that might be introduced by developers when concurrently working on multiple parallel branches. In fact, SCM systems can detect textual conflicts, which are generated by the concurrent modification of the same program locations, but they are unable to detect higher-order conflicts, which are generated by the concurrent modification of different program locations that generate program misbehaviors once merged. Higher-order conflicts are painful to detect and expensive to fix because they might be originated by the interference of apparently unrelated changes.

Behavioral Driven Continuous Integration (BDCI) is a novel approach to conflict detection. BDCI moves the analysis of conflicts from the source code level to the level of program behavior by generating and com- paring behavioral models. The analysis based on behavioral models can reveal interfering changes as soon as they are introduced in the SCM system, even if they do not introduce textual conflicts.

To evaluate effectiveness and cost of the proposed approach, we developed BDCIf, a specific instance of BDCI dedicated to the detection of higher-order conflicts related to the functional behavior of a program. The evidence collected by analyzing multiple versions of Git suggests that BDCIf can effectively detect higher-order conflicts and identify how changes might interfere.

Tool

Downloads

BDCIf has been developed as a java application that can be downloaded from the following URL http://www.lta.disco.unimib.it/downloadsLTA/tools/bdci/bdci.jar.

Experiments

Real conflicts

A virtual machine that allow to reproduce our results can be downloaded from the google drive folder https://drive.google.com/drive/folders/0B8J_pv7c6buveTUxQkdnOXBoclk. Instructions are provided in the google drive folder file index.html.

45 zipped folders, one for each experiment conducted with real case studies (35 for Git, 10 for REDIS), are available from the following URL http://www.lta.disco.unimib.it/downloadsLTA/tools/bdci/experiments/real.

Each folder contains a script, bdci.10.unzipAndRedo.sh, that executes BDCI using trace files previously collected by us. To re-execute BDCI from scratch (i.e. collecting again the data) you can execute the script bdci.monitor.sh followed by the script bdci.8.sh. To execute BDCI against this set of case studies you need to install PIN (https://software.intel.com/en-us/articles/pin-a-dynamic-binary-instrumentation-tool). Please update file bdci.config.sh with the location of the PIN executable.

In the case teh experiment folder does not contain one of these scripts, please copy the scripts contained in http://www.lta.disco.unimib.it/downloadsLTA/tools/bdci/experiments/real/GIT/bdci.env.tar.gz

The execution of BDCI produces lot of output messages, the full BDCI output is saved in the file bdci.out. BDCI also generates the file bdci.results.txt containing only information about conflicts. More specifically BDCI reports for both the entry and the exit point of each function whether the properties associated to this execution point show NO CONFLICT, or a HIGHER-ORDER CONFLICT. BDCI has been tested on Linux.

Pay attention, in order to execute the BDCI scripts you need to put the file bdci.jar in the parent folder.

Injected conflicts

20 zipped folders, one for each experiment with injected faults, are available from the following URL http://www.lta.disco.unimib.it/downloadsLTA/tools/bdci/experiments/injected.

Each folder contains a script, bdci.sh, that executes BDCI. To use BDCI you need gdb on your system. The execution of BDCI produces lot of output messages, the full BDCI output is saved in the file bdci.out. BDCI also generates the file bdci.results.txt containing only information about conflicts. More specifically BDCI reports for both the entry and the exit point of each function whether the properties associated to this execution point show NO CONFLICT, or a HIGHER-ORDER CONFLICT. BDCI has been tested on Linux.

Pay attention, in order to execute the script bdci.sh you need to put the file bdci.jar in the parent folder.