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: 橋樑應力測試
當對橋樑的應力進行測試時,無法確知橋樑某個位置正確的應力參數應該是多少,這時,可以使用蛻變測試。
對於橋樑的對稱點,二者的應力應該一致,此即爲蛻變關係。測試時,若對稱點的應力不一致則說明施工過程存在偏差。
轉載自:https://www.cnblogs.com/lovesoo/p/9685458.html