故障插入(Fault Seeding)是一个统计的方法,用于评价遗留在一个程序中的故障的数量和种类。首先,故障被插入到一个程序中,然后,程序被测试,并且发现故障的数量被用于估计还没有被发现故障的数量。计算公式如下:

原本错误总数 =(播入的错误总数/发现的播入错误数)×发现的原本错误数
残留错误数 = 原本错误总数 - 发现的原本错误数

故障插入技术在软件可靠性方面应用的比较广泛,尤其在硬件的测试当中。例如一些汽车公司不惜花大价钱进行的汽车碰撞试验,为的是发现汽车在碰撞过程中的潜在隐患,通过消除、改进这些隐患从而达到更高的性能。

借鉴了硬件可靠性测试的方法,在软件测试中引入故障插入技术,其主要目的是为了评价系统的哪些模块,哪些代码是危险模块,危险代码,容易出问题,从而评价系统的容错能力。在该技术中使用了故障加速技术,通过有意的插入故障来调用系统的故障容错能力,从而在一个可控制的环境和期望的时间段内获得完整的测试。它和现有的测试方法相比,大的不同在于测试开始时的系统状态不同,现有的测试都是从系统的正确状态开始,测试系统如何转入故障状态,而故障注入测试则是从系统的故障状态开始,测试系统在发生故障后的运行规律。这里要重点指出的是,故障插入不关注为什么出现这样的故障,它关注的是出现了这样的故障后系统如何处理。

故障插入也被用于验证测试用例的有效性。其原理是为了检查设计的测试用例是否能发现某一类型的故障,人为在被测系统中引入该类型的故障,如果在测试过程中能发现这个故障的话,则应该也可以测试出系统原来存在的该类故障。

故障插入技术的一个难点是插入的故障在程序中是否能够代表还没有发现的故障。实际上,由于软件的复杂性,故障的暴露往往和当时的运行环境、执行的路径有很大的关系,能测试出故障插入的故障并不一定总是能测试出被测系统原本存在的该类型故障,所以,在上述的后一步推论不一定总是成立。但是从验证测试用例的有效性角度来看,故障插入确实可以作为一种手段。