-
變異測試
鎖定
- 中文名
- 變異測試
- 外文名
- 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’的值應該傳播到程序輸出並被測試檢查。
弱的突變測試(弱的突變覆蓋)只要求滿足第一個條件。強的突變測試要求滿足兩個條件。強突變更有效,因此它保證測試單元可以真實的捕捉錯誤。弱突變近似於代碼覆蓋方法。它只需較少的計算能力來保證測試單元滿足弱突變測試。
變異測試一些變異操作
一些突變操作已經被發現了,例如:算術和邏輯的突變操作,並行工程,複雜對象如容器……
變異測試變異測試相關工作
- 參考資料
-
- 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.