變異測試

變異測試(Mutation Testing)(有時也叫做“變異分析”)是一種在細節方面改進程式原始碼的軟體測試方法。這些所謂的變異,是基於良好定義的變異操作,這些操作或者是模擬典型套用錯誤(例如:使用錯誤的操作符或者變數名字),或者是強制產生有效地測試(例如使得每個表達式都等於0)。目的是幫助測試者發現有效地測試,或者定位測試數據的弱點,或者是在執行中很少(或從不)使用的代碼的弱點。

基本介紹

  • 中文名:變異測試
  • 外文名:Mutation Testing
  • 別名:編譯分析
  • 創始人:Dick Lipton
  • 變異操作:算術和邏輯的突變操作等
概述,變異測試的前景,一些變異操作,變異測試相關工作,
變異測試

概述

首創於1970s,變異測試最初是為了定位揭示測試單元的弱點。這個理論是:如果一個邊緣被引入,同時出現的行為(通常是輸出)不受影響的情況下,那么這說明了:變異代碼從沒有被執行過(產生了過剩代碼)或者測試單元無法定位錯誤。為了使之適用於所有情況,必須引入大量的變異,導致這個程式的極大量的副本被編譯和執行。變異測試的花費問題,阻礙了它作為一種軟體測試方法的實際套用。
變異測試最初被一個學生Dick Lipton提出,被DeMillo,Lipton和Sayward首次發現和公之於眾。Lipton and Sayward.,是第一個變異測試工具,是由Timothy Budd於1980在耶魯大學的博士工作(名為變異分析)中實現的。
近來,隨著電腦能力的發展,變異測試也在電腦科學論壇中重新復興起來。而且,已經有一些定義方法,可以把變異測試套用在OOP和非過程化語言中,如XML,SMV以及有限狀態機。

變異測試的前景

變異測試,通過選擇一些變異操作,並對於每一個可執行代碼段依次把它們套用在原始碼中。對程式使用變異操作的結果叫做一個突變異種。如果測試單元可以察覺到錯誤(即:一個測試失敗了),那么就說該突變異種被殺害了。
例如,考慮項目的C++代碼片段:
if (a && b)
c = 1;
else
c = 0;
條件編譯操作可以用“||”來替換“&&”,產生下面的突變:
if (a || b)
c = 1;
else
c = 0;
現在,為了使測試殺死這個突變,需要滿足一下條件:
(1) 測試輸入數據必須對突變和原始創新引起不同的程式狀態。例如:一個測試a=1,b=0可以達到這個目的。
(2)‘c’的值應該傳播到程式輸出並被測試檢查。
弱的突變測試(弱的突變覆蓋)只要求滿足第一個條件。強的突變測試要求滿足兩個條件。強突變更有效,因此它保證測試單元可以真實的捕捉錯誤。弱突變近似於代碼覆蓋方法。它只需較少的計算能力來保證測試單元滿足弱突變測試。

一些變異操作

一些突變操作已經被發現了,例如:算術和邏輯的突變操作,並行工程,複雜對象如容器……

變異測試相關工作

2011年TSE文章詳盡闡述了從變異測試自上世紀70年代提出,截止到當年為止的所有關於變異測試的工作。

熱門詞條

聯絡我們