Feature Maintenance with Emergent Interfaces
, Paulo Borba
, and Christian Kästner
In Proceedings of the 36th International Conference on Software Engineering (ICSE 2014)
Hidden code dependencies are responsible for many complications in maintenance tasks. With the introduction of variable features in configurable systems, dependencies may even cross feature boundaries, causing problems that are prone to be detected late. Many current implementation techniques for product lines lack proper interfaces, which could make such dependencies explicit. As alternative to changing the implementation approach, we provide a tool-based solution to support developers in recognizing and dealing with feature dependencies: emergent interfaces. Emergent interfaces are inferred on demand, based on feature-sensitive intraprocedural and interprocedural data-flow analysis. They emerge in the IDE and emulate modularity benefits not available in the host language. To evaluate the potential of emergent interfaces, we conducted and replicated a controlled experiment, and found, in the studied context, that emergent interfaces can improve performance of code change tasks by up to 3 times while also reducing the number of errors.
All data we collected during our experiment is available in what follows.
R Script to generate graphics and run statistical tests
To generate the results in HTML (see the links below), you might use our R script
. To do so, consider the following steps:
- Install the following packages and their dependencies:
- Download all .dat files above and rename them by removing "-R1" or "-R2". For your convenience, you may create different folders for each round.
- Open the script in a text editor and change the values of the variables importPath and exportPath. The importPath should point to a directory that contains the data files (.dat files above). exportPath should point to the directory you want to save the generated HTML results.
- Call the main function. Here is its signature: main <- function(round, task, SD=F)
- round the round number. Valid numbers: 2 (at Federal University of Pernambuco, Round 1 in the paper) and 3 (Federal University of Alagoas, Round 2 in the paper); any different number corresponds to rounds 2 and 3 together.
- task the task number. Valid numbers: 1 (New-requirement task) and 2 (Unused-variable task).
- SD if true, the script will generate the results adjusting the time data with the SD-based time penalty. Notice that SD occurs only for task 2 (Unused-variable).
- Example: main(3, 2, T) generates the results for the round at Federal University of Alagoas, regarding the Unused-variable task by using the SD-based time adjustment.
- Here are the results generated using the R script:
The tasks we distributed to the participants are available in portuguese and english.
Our tool is available in this link
Auxiliar plug-in to play/pause/stop time and run test cases
The plug-in is available here
Software Product Lines
In our experiment, we used two product lines: a commercial one and an academic one:
- Best Lap (commercial product; we cannot distribute the source code);
We have prepared a virtual machine
to provide the same environment to all participants of our experiment. Notice the following:
- You can use VirtualBox to execute our virtual machine;
- The virtual machine already has the Eclipses, Emergo, and the Play/Pause/Finish plug-in installed.
- We removed Bestlap from Eclipse 1 and Eclipse 2 due to commercial reasons; MobileMedia, on the other hand, is installed in Eclipse 3 and 4.
- As pointed out in the paper, when opened for the first time, the cursor points exactly to the variable that should be changed;
- There is an additional Eclipse to the warmup tasks.