My basic understanding of software fault injection is as follows:
One can't run all possible tests to test a software. So one resorts to make modifications in the code and analyzing the degree of errors that are produced from it.
But how is this useful?
Like say we had:
function foo(a, b) {
return a/b;
}
and we changed it to
function foo(a, b) {
return Math.floor(a/b);
}
So what of it?
How was this useful at all?
EDIT
@Leo,
Say I wrote a software that finds Fibonacci numbers.
I write test that look like this:
assert(fib(1) == 1);
assert(fib(0) == 0);
assert(fib(3) == 2);
I claim 100% coverage since all lines of code are executed here.
My client runs these tests and all of them pass. So he thinks, "maybe the tests are themselves wrong. let me introduce some changes in them".
So he changes one of them to
assert(fib(1) == 5);
and the test fails. What can he conclude from it?