變異測試

變異測試是一種結構測試方法,用於檢查測試程序的效率或精度。此方法有助於檢查被測應用程序中的缺陷數量。它還有助於估計或提高測試套件的充足性。

變異測試

爲什麼它被命名爲變異測試?

變異測試的命名是這樣的,因爲創建了突變體(程序中的小變化)並將其引入程序代碼中。該策略也稱爲基於故障的測試方法,因爲通過將單個缺陷引入原始程序代碼來創建突變體。

爲什麼需要進行突變檢測?

測試覆蓋率被認爲是軟件測試中的重要因素。變異測試有助於分析一組測試策略是否足以確保產品符合質量要求。如果我們無法解決任何問題,我們無法保證系統沒有bug。

在變異測試中,軟件代碼會發生微小變化。在此之後,針對突變程序檢查一組測試用例。良好的單元測試將能夠檢查程序代碼中的缺陷。

如何進行變異測試

  1. 創建突變體軟件 - 需要首先通過將單個缺陷引入AUT來創建程序的突變體。QA測試人員可以根據需要引入儘可能多的突變體。他們還需要確保每個突變體保持獨特,並且也與原始系統不同。

  2. 測試用例準備 - QA團隊應該能夠以能夠識別突變體引起的問題的方式製作測試用例。

  3. 測試原始軟件 - QA測試人員需要檢查輸入軟件的測試用例輸出是否與預期結果相同。否則,需要修復問題,並且需要測試軟件,直到AUT沒有缺陷。

  4. 突變軟件測試 - 突變軟件需要使用與原始軟件相同的測試用例集進行測試。如果突變體軟件的輸出與原始軟件的輸出不同,則需要將突變體標記爲死亡。它不應該再次測試。

  5. 突變得分計算 - 定義爲計數od死突變體與非等效突變體的比率。Mutation得分的理想值是1。

  6. 突變評分分析 - 突變評分與測試效率直接相關。QA測試儀可以重複突變測試,直到獲得滿意的結果。

突變測試類型:

突變檢測可大致分爲三類 - 價值突變,決策突變和語句突變。

在值突變中,常數或參數的值被改變。例如,在循環中將值更改爲更大或更小,初始化值更改。

決策突變 - 這有助於修改程序代碼,以便反映滑動錯誤。例如,> a更改爲<a。

語句變異 - 在此類測試中,開發人員剪切和粘貼代碼,這可能導致刪除某些行語句。這也可能涉及交換代碼行的順序。可以刪除/複製一行代碼。陳述順序也可以改變。

變異算子:

應用於原始程序以生成突變體的運算符稱爲突變運算符。Mutation操作符可以大致分爲

  1. 傳統變異算子

  2. 類變異算子

傳統變異算子:

傳統的變異算子是爲過程式編程語言開發的。儘管這些操作符的應用產生了大量的突變體,但它們都可能無效,因爲它們往往會重疊。以下是傳統的變異算子

  1. 算術運算符

  2. 關係運算符

  3. 條件運算符

  4. 邏輯運算符

  5. 分配運營商

  6. 移位運算符

通過替換,插入或刪除突變操作符來生成突變體。

類突變操作符:

這些用於生成突變體以測試面向對象和集成問題。

  1. 封裝 -通過應用修改,刪除或插入實例變量和方法的訪問級別的運算符來形成突變。

  2. 繼承 - 通過應用運算符生成突變體,這些運算符刪除隱藏變量以檢查是否定義了該變量,以及它在類和子類中的可訪問性是否正確。

  3. 多態性 - 突變體由多態運算符創建,以檢查具有相同名稱和參數數量的方法是否可以正確方式訪問。

變異測試工具:

有幾種Mutation測試工具可供使用。Jumble和Insure ++是其中最常見的。

混亂:

  1. Jumble是一個簡單的非圖形開源工具。它將文本文件轉換爲可以研究文件格式的版本。

  2. 它直接在源代碼級別運行,並加快Mutation測試過程。Jumble支持的有限Mutation運算符集:條件,二進制算術運算,增量,內聯常量,類池常量,返回值和開關語句

保證++:

  1. 它是C和C ++的商業自動測試工具,它使用Mutation分析技術。

  2. Insure ++不是生成所有可能的突變體,而是關注“潛在的等效突變體”。這個想法背後的動機是,如果任何測試用例能夠殺死“潛在的等效突變體”,它也可能會發現原始程序中的錯誤

變異測試的挑戰:

變異測試能夠有效地評估測試集的充分性和質量,但是它也具有如下的某些挑戰

  1. 突變測試具有針對測試集執行大量突變體的高計算成本。

  2. 人類oracle問題,指的是檢查每個測試用例的輸出與原始程序的輸出的過程,可能是一個嚴重的問題,因爲突變測試可以導致測試用例數量的增加

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章