複製鏈接
請複製以下鏈接發送給好友

變異測試

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

變異測試基本信息

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

變異測試變異測試的前景

變異測試,通過選擇一些變異操作,並對於每一個可執行代碼段依次把它們應用在源代碼中。對程序使用變異操作的結果叫做一個突變異種。如果測試單元可以察覺到錯誤(即:一個測試失敗了),那麼就説該突變異種被殺害了。
例如,考慮項目的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文章 [2]  詳盡闡述了從變異測試自上世紀70年代提出,截止到當年為止的所有關於變異測試的工作。
參考資料
  • 1.    511測試網 
  • 2.    Jia Y, Harman M. An Analysis and Survey of the Development of Mutation Testing[J]. IEEE Transactions on Software Engineering, 2011, 37(5):649-678.