Linux内核函数鲁棒性关联测试研究
后,失效维度保持不变;(3)变维失效指相同条件下产生失效维度升高。由于基于低维度优先原则,所以由高维度向低维度的失效跃迁跳变不可能发生[3].鲁棒性测试用例的失效维度状态转变如图1所示。 现以Linux系统函数read(fd, buf,count)为实例进行分析,说明上述不同失效维度之间的转变问题。函数的三个参数取值如表1所示。 假设当参数fd取值errno file,buf取值 Null时,均会产生一维失效。当fd取合法的值,并且buf分配空间小于count时产生一个二维失效。此时,对参数fd取值empty file进行保护屏蔽,则一些测试用例将会通过测试,如read(empty file,8,1);而另一些用例则维持一维失效不变,如read(empty file,Null,1024);还有一些用例将转化为多维(维度≥2)失效,如read(empty file,1,8)。 3 鲁棒性关联测试 当参数维度等于失效维度时,很容易看出是哪些参数失效。而测试时维度的跳变,会给鲁棒性测试的分析带来困难,会影响测试覆盖率的问题,还牵扯到测试用例的增加.在鲁棒性测试中可以利用参数的关联性进行测试。将传统的组合测试法分为两步:关联性测试和非关联性测试。鲁棒性关联测试的流程如图2所示。 在进行鲁棒性关联测试时,首先进行参数关联性测试,先把待测函数中有互相作用的参数进行包装,在测试中人为构造参数维度等于失效维度的情况。例如,函数f(A,B,C,D,E)中,参数A、B、C有关联。首先将参数E和参数F取合法输入值,然后测试参数A、B、C的所有组合。若有失效,必定是一维失效或者三维失效。在对函数进行了充分的关联测试后,再进行参数非关联性测试。取出上例中参数A、B、C的一个合法组合,对参数E和参数F的所有用例分别进行测试。若有失效,必定是一维失效,这样也很容易分析测试结果和写出保护代码。 通过对函数的参数关联性进行测试可得出结论,只有当函数所有参数都发生关联作用时,鲁棒性关联测试所需用例的个数才会等于传统组合测试所需的用例个数.所以,在覆盖率不变的情况下,若采用鲁棒性关联测试法,可以有效减少测试用例个数,并且还能够消除维度失效跳变带来的影响。 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个用例,两者最终完成的函数测试覆盖率相同。由此可见,关联测试是对传统的组合测试的一种有效改进。采用关联测试可以避免上述问题的产生。使用关联测试时对参数之间关系进行分析,还有可能发现传统的组合测试没有测到的失效用例,这样关联测试的覆盖率相对于传统组合测试来说,只会提高而不会降低,这对于Linux内核函数的鲁棒性提升十分有效。 理论分析和实例应用的结果表明,在Linux内核函数的鲁棒性测试中采用关联测试来代替传统的组合测试,可以在保证测试覆盖率的同时,使所需的测试用例大大减少,而且函数中相关联的参数个数越少优势越明显。现实中Linux内核函数的参数之间关联性较少,因此在其鲁棒性测试中关联测试方法具有很好的实际应用价值。
测试 研究 关联 鲁棒性 内核 函数 Linux 相关文章:
- sysbench的安装和做性能测试(06-21)
- 嵌入式软件设计中查找缺陷的几个技巧(03-06)
- DSP-SPOOL整轴线缆测试选件(06-16)
- 基于DSP的中频电源测试系统设计(08-08)
- 基于仿真的嵌入式软件白盒覆盖测试系统设计(08-26)
- 嵌入式软件运行剖面建模及测试用例生成(11-06)