Linux内核函数鲁棒性关联测试
些用例将转化为多维(维度≥2)失效,如read(empty file,1,8)。
3 鲁棒性关联测试
当参数维度等于失效维度时,很容易看出是哪些参数失效。而测试时维度的跳变,会给鲁棒性测试的分析带来困难,会影响测试覆盖率的问题,还牵扯到测试用例的增加[4]。在鲁棒性测试中可以利用参数的关联性进行测试。将传统的组合测试法分为两步:关联性测试和非关联性测试。鲁棒性关联测试的流程如图2所示。
在进行鲁棒性关联测试时,首先进行参数关联性测试,先把待测函数中有互相作用的参数进行包装,在测试中人为构造参数维度等于失效维度的情况。例如,函数f(A,B,C,D,E)中,参数A、B、C有关联。首先将参数E和参数F取合法输入值,然后测试参数A、B、C的所有组合。若有失效,必定是一维失效或者三维失效。由于参数维度等于失效维度,通过分析测试结果就可以写出保护代码。在对函数进行了充分的关联测试后,再进行参数非关联性测试。取出上例中参数A、B、C的一个合法组合,对参数E和参数F的所有用例分别进行测试。若有失效,必定是一维失效,这样也很容易分析测试结果和写出保护代码。
通过对函数的参数关联性进行测试可得出结论,只有当函数所有参数都发生关联作用时,鲁棒性关联测试所需用例的个数才会等于传统组合测试所需的用例个数[5]。所以,在覆盖率不变的情况下,若采用鲁棒性关联测试法,可以有效减少测试用例个数,并且还能够消除维度失效跳变带来的影响。
4 测试实例
实际测试中测试环境为DELL的DIMENSION 4700,操作系统为Redhat Linux 8.0,系统内核为2.2.24。实测以read()函数参数组合表为例,其表中组合测试用例的个数为5×5×5=125个。进行关联测试时先对其参数的关联性进行分析,通过分析可以得知它的三个参数中只有buf和count有关联。
实测中首先进行关联性测试,对read()函数的参数fd取正常值,测试参数buf和count的所有组合,测试结果如表2所示。共使用了25个测试用例。
在对上述测试结果进行屏蔽失效后,转入第二步,对参数fd进行非关联性测试,即针对fd与(buf+count)的组合进行测试。对buf与count的组合取合法值后,针对参数fd的所有取值分别测试,这时只会发生一维失效,测试用例个数是5个,其结果如表3所示。
由上述测试实例可见,传统组合测试法需要125个用例,而关联测试只需要30个用例,两者最终完成的函数测试覆盖率相同。由此可见,关联测试是对传统的组合测试的一种有效改进。传统的参数组合测试忽略了参数之间的关系,结果导致测试用例大量增加,覆盖率却有可能降低,同时还由于产生了维度跳转而给测试增加了困难[6]。采用关联测试可以避免上述问题的产生。使用关联测试时对参数之间关系进行分析,还有可能发现传统的组合测试没有测到的失效用例,这样关联测试的覆盖率相对于传统组合测试来说,只会提高而不会降低,这对于Linux内核函数的鲁棒性提升十分有效。
理论分析和实例应用的结果表明,在Linux内核函数的鲁棒性测试中采用关联测试来代替传统的组合测试,可以在保证测试覆盖率的同时,使所需的测试用例大大减少,而且函数中相关联的参数个数越少优势越明显。现实中Linux内核函数的参数之间关联性较少,因此在其鲁棒性测试中关联测试方法具有很好的实际应用价值。
- Linux内核编译过程详解(kernel2.6.7) (04-16)
- 基于APIC时钟的嵌入式Linux内核实时化研究(09-14)
- 嵌入式Linux下的LCD驱动程序设计与实现(04-18)
- 基于华邦W90P710处理器的Linux内核应用及串口驱动的实现(04-16)
- 嵌入式系统应用中实现RS485的方向切换(09-20)
- Linux内核的Nand驱动流程分析(11-28)