  Much research on software engineering and software testing relies on
experimental studies based on fault injection. Fault injection, however, is not
often relevant to emulate real-world software faults since it "blindly" injects
large numbers of faults. It remains indeed challenging to inject few but
realistic faults that target a particular functionality in a program. In this
work, we introduce IBIR, a fault injection tool that addresses this challenge
by exploring change patterns associated to user-reported faults. To inject
realistic faults, we create mutants by retargeting a bug report driven
automated program repair system, i.e., reversing its code transformation
templates. IBIR is further appealing in practice since it requires deep
knowledge of neither of the code nor the tests, but just of the program's
relevant bug reports. Thus, our approach focuses the fault injection on the
feature targeted by the bug report. We assess IBIR by considering the Defects4J
dataset. Experimental results show that our approach outperforms the fault
injection performed by traditional mutation testing in terms of semantic
similarity with the original bug, when applied at either system or class levels
of granularity, and provides better, statistically significant, estimations of
test effectiveness (fault detection). Additionally, when injecting 100 faults,
IBIR injects faults that couple with the real ones in 36% of the cases, while
mutants from mutation testing inject less than 1%. Overall, IBIR targets real
functionality and injects realistic and diverse faults.
