變異測試是一種結構測試方法,用於檢查測試程序的效率或精度。此方法有助於檢查被測應用程序中的缺陷數量。它還有助於估計或提高測試套件的充足性。
爲什麼它被命名爲變異測試?
變異測試的命名是這樣的,因爲創建了突變體(程序中的小變化)並將其引入程序代碼中。該策略也稱爲基於故障的測試方法,因爲通過將單個缺陷引入原始程序代碼來創建突變體。
爲什麼需要進行突變檢測?
測試覆蓋率被認爲是軟件測試中的重要因素。變異測試有助於分析一組測試策略是否足以確保產品符合質量要求。如果我們無法解決任何問題,我們無法保證系統沒有bug。
在變異測試中,軟件代碼會發生微小變化。在此之後,針對突變程序檢查一組測試用例。良好的單元測試將能夠檢查程序代碼中的缺陷。
如何進行變異測試?
-
創建突變體軟件 - 需要首先通過將單個缺陷引入AUT來創建程序的突變體。QA測試人員可以根據需要引入儘可能多的突變體。他們還需要確保每個突變體保持獨特,並且也與原始系統不同。
-
測試用例準備 - QA團隊應該能夠以能夠識別突變體引起的問題的方式製作測試用例。
-
測試原始軟件 - QA測試人員需要檢查輸入軟件的測試用例輸出是否與預期結果相同。否則,需要修復問題,並且需要測試軟件,直到AUT沒有缺陷。
-
突變軟件測試 - 突變軟件需要使用與原始軟件相同的測試用例集進行測試。如果突變體軟件的輸出與原始軟件的輸出不同,則需要將突變體標記爲死亡。它不應該再次測試。
-
突變得分計算 - 定義爲計數od死突變體與非等效突變體的比率。Mutation得分的理想值是1。
-
突變評分分析 - 突變評分與測試效率直接相關。QA測試儀可以重複突變測試,直到獲得滿意的結果。
突變測試類型:
突變檢測可大致分爲三類 - 價值突變,決策突變和語句突變。
在值突變中,常數或參數的值被改變。例如,在循環中將值更改爲更大或更小,初始化值更改。
決策突變 - 這有助於修改程序代碼,以便反映滑動錯誤。例如,> a更改爲<a。
語句變異 - 在此類測試中,開發人員剪切和粘貼代碼,這可能導致刪除某些行語句。這也可能涉及交換代碼行的順序。可以刪除/複製一行代碼。陳述順序也可以改變。
變異算子:
應用於原始程序以生成突變體的運算符稱爲突變運算符。Mutation操作符可以大致分爲
-
傳統變異算子
-
類變異算子
傳統變異算子:
傳統的變異算子是爲過程式編程語言開發的。儘管這些操作符的應用產生了大量的突變體,但它們都可能無效,因爲它們往往會重疊。以下是傳統的變異算子
-
算術運算符
-
關係運算符
-
條件運算符
-
邏輯運算符
-
分配運營商
-
移位運算符
通過替換,插入或刪除突變操作符來生成突變體。
類突變操作符:
這些用於生成突變體以測試面向對象和集成問題。
-
封裝 -通過應用修改,刪除或插入實例變量和方法的訪問級別的運算符來形成突變。
-
繼承 - 通過應用運算符生成突變體,這些運算符刪除隱藏變量以檢查是否定義了該變量,以及它在類和子類中的可訪問性是否正確。
-
多態性 - 突變體由多態運算符創建,以檢查具有相同名稱和參數數量的方法是否可以正確方式訪問。
變異測試工具:
有幾種Mutation測試工具可供使用。Jumble和Insure ++是其中最常見的。
混亂:
-
Jumble是一個簡單的非圖形開源工具。它將文本文件轉換爲可以研究文件格式的版本。
-
它直接在源代碼級別運行,並加快Mutation測試過程。Jumble支持的有限Mutation運算符集:條件,二進制算術運算,增量,內聯常量,類池常量,返回值和開關語句
保證++:
-
它是C和C ++的商業自動測試工具,它使用Mutation分析技術。
-
Insure ++不是生成所有可能的突變體,而是關注“潛在的等效突變體”。這個想法背後的動機是,如果任何測試用例能夠殺死“潛在的等效突變體”,它也可能會發現原始程序中的錯誤
變異測試的挑戰:
變異測試能夠有效地評估測試集的充分性和質量,但是它也具有如下的某些挑戰
-
突變測試具有針對測試集執行大量突變體的高計算成本。
-
人類oracle問題,指的是檢查每個測試用例的輸出與原始程序的輸出的過程,可能是一個嚴重的問題,因爲突變測試可以導致測試用例數量的增加