Mutation Testing

這兩天在看 James McCaffrey 的文章,剛好看到了 Mutation Testing 這種測試方法,因為 Mutation 是生物學上的字眼,是「突變」的意思,在 X-man 的電影中,也會聽到他們稱那些擁有超能力的人為 Mutant(變種人),因此剛好有種軟體測試方法竟然叫做突變測試,還蠻有意思的,但是實在很難從字面看出這是怎樣的測試方法。

首先,來看一下 IEEE (Std 610.12-1990) 怎麼定義:

Mutation testing. A testing methodology in which two or more program mutations are executed using the same test cases to evaluate the ability of the test cases to detect differences in the mutations.

表示這種測試應該用在評估已經存在軟體的測試案例是否足夠,如果你沒有原始碼大概也很難執行變種測試,操作的方法大概會是先找到一段程式碼,調整一小部分的是敘述,使之成為一個變種版本。

if (a && b) {
    c = 1;
} else {
    c = 0;
}

用 || 取代 &&,使其變成這樣的變種:

if (a || b) {
    c = 1;
} else {
    c = 0;
}

執行涵蓋到該段變種區段的測試案例後,照理說會讓測試案例失敗,如果成功攔截,表示你殺掉這個變種。目標應該是不管我們做了多少個突變,都會被先前設計的測試案例捕捉到,意味著測試案例很強健。

上面的例子是針對布林運算調整成變種版本,通常可以有下面幾種方式可以操作:

  • 刪除某段程式碼
  • 互換布林判斷 true / false
  • 取代算術運算子,像是把 + 換成 –
  • 取代比較運算子,像是把 > 換成 >=
  • 替換變數的使用區域

尋找的過程中,看到 Parasoft 的工具 Insure++,味道像極了靜態分析工具,導入這種測試工具可以讓我們找到像是記憶體與執行緒相關的錯誤偵測,發覺比較低階的軟體缺陷,倒是與突變測試的本意有點遠。

參考一: Mutation_testing on Wikipedia

廣告

發表迴響

Please log in using one of these methods to post your comment:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s