1、蜕变测试概述
程序的执行结果不能预知的现象在测试理论中称为“Oracle问题”,即预期结果不知道。
例如测试sin(x)函数时,sin270的预期结果并不知道,这时就无法验证当x=270 时程序执行的正确性。
Oracle问题是“软件测试中最困难的任务”,它导致测试人员只能选择一些可以预知结果的特殊测试用例进行测试,而不能完整有效地进行测试。
蜕变测试是一种特殊的黑盒测试方法,蜕变测试依据被测软件的领域知识和软件的实现方法建立蜕变关系(Metamorphic Relation, MR),利用蜕变关系来生成新的测试用例,通过验证蜕变关系是否被保持来决定测试是否通过。蜕变关系(Metamorphic Relation, MR) 是指多次执行目标程序时,输入与输出之间期望遵循的关系。
蜕变测试依据蜕变关系生成更多的后续测试用例,测试时就会多次执行目标程序时,使得程序可以进一步被验证。
2、蜕变测试的典型案例
例1: 测试sin函数。
这些蜕变关系MR如下所示:
R1: sin(x)=sin(x+2π)R2: sin(x)=-sin(x+π)R3: -sin(-x)=sin(x)R4: sin(x)=sin(π-x)R5: sin(x)=-sin(2π-x)R6: sin2(x)+sin2(π/2-x)=1 期望结果 | R1 | R2 | R3 | R4 | R5 | R6 | |
0 | 0 | t/f | t/f | t/f | t/f | t/f | t/f |
π/6 | 1/2 | t/f | t/f | t/f | t/f | t/f | t/f |
π/4 | √2/2 | t/f | t/f | t/f | t/f | t/f | t/f |
π/3 | √3/2 | t/f | t/f | t/f | t/f | t/f | t/f |
π/2 | 1 | t/f | t/f | t/f | t/f | t/f | t/f |
230 | t/f | t/f | t/f | t/f | t/f | t/f | |
630 | t/f | t/f | t/f | t/f | t/f | t/f | |
780 | t/f | t/f | t/f | t/f | t/f | t/f | |
1230 | t/f | t/f | t/f | t/f | t/f | t/f | |
1890 | t/f | t/f | t/f | t/f | t/f | t/f | |
2230 | t/f | t/f | t/f | t/f | t/f | t/f |
例2: 测试ex函数
对于无法确定期望结果的随机值x,根据ex函数的特性可以确定1个蜕变关系以产生蜕变测试用例。这个蜕变关系MR如下所示:
R: ex*e-x=1例如:x1=0.3,后续测试用例为x2=-0.3,验证蜕变关系e0.3*e-0.3=1是否保持。例3: 无向图中的最短路径问题。
根据图论中无向图的特点可以确定蜕变关系。
图论中一个重要性质就是交换,即在图G中点u到点v的最短路径应该和点v到点u的最短路径是一样的。因此,可以确定以下的蜕变关系:R:ShortestPath(G, u,v) = ShortestPath(G, v ,u)例如:测试用例(A, B) ,后续测试用例为(B, A) ,验证蜕变关系R是否保持,即:ShortestPath(H,A, B) = ShortestPath(H, B, A)例4: 电脑图形图像软件产生图像且在屏幕上打印图像。
测试人员测试图形图像软件产生的图像时,不可能检查每一个像素是否显示正确。在这种情况下,可以使用蜕变测试方法验证图像输出的正确性。
对于测试人员而言,证明屏幕上的像素是否显示正确是不容易的,因为实际图像的生成涉及复杂的计算且有大量的像素。不过,可以识别一些蜕变关系,例如:如果光源的位置改变,则那些逐渐接近光源的所有点的亮度将增加;那些逐渐远离光源的所有点的亮度将变暗。这是一种简单的快速并自动检查所有显示像素的方法。例5: 桥梁应力测试
当对桥梁的应力进行测试时,无法确知桥梁某个位置正确的应力参数应该是多少,这时,可以使用蜕变测试。
对于桥梁的对称点,二者的应力应该一致,此即为蜕变关系。测试时,若对称点的应力不一致则说明施工过程存在偏差。