Empirical Study
We conducted an empirical experiment to evaluate Mk-Fault's accuracy and how it helps reduce efforts in localizing Make build code faults. We first collected several open-source subject projects from sourceforge.net that use Make
as their build language and have a long development history.
Data collection: We wrote a simple tool to select for each subject
project the revisions that have at least one modified Makefile. We randomly selected one revision as a starting point.
Then, we manually examined the changes to the Makefiles as well as the commit logs to determine if they were the bug
fixes to build crashes in those Makefiles. If such a build error was found, we compared the current revision (fixed one)
with the previous revision (buggy one), and used the fixing change location in the buggy revision as the root cause of
the error. We collected that root cause location and that buggy Makefile. We skipped the errors in the evaluation
phase, non-crashing faults, and faults involving multiple fixing locations. Then, we continued the process for the next
revisions until we had 15-20 faults for each project and used them as an oracle (table below).
Name | Bugs | Makefiles | LOC | Variables | Rules |
Actiongame | 19 | 70 | 691 | 107 | 91 |
Blood Frontier | 17 | 60 | 769 | 111 | 103 |
Dream Toolbox | 15 | 34 | 400 | 32 | 31 |
GMod | 20 | 20 | 430 | 10 | 23 |
X10 | 20 | 26 | 262 | 19 | 17 |
Totals | 91 | 210 | 2,552 | 279 | 265 |
The columns Bugs and Makefiles shows the total number of bugs collected for each project and the number of involved Makefilles. The last three columns show the average numbers of LOCs and their program elements including the average numbers of variables and rules for each Makefile.