突变检测软件 测试数据库,突变测试—通过一个简单的例子快速学习这种有趣的测试技术...
什么是突變測試?
突變測試是一種基于故障的測試技術,這種技術讓軟件程序的變量都受限于測試數據集。這樣做是為了確定測試集在隔離偏差方面的有效性。
這聽起來有一些復雜,不是嗎?
讓我們從一個示例學習:
這樣說吧,現在有一個可以讓新用戶注冊的醫院網站。它要讀取病人的生日或者年齡。如果病人大于14歲,就會分配一個普通醫師作為他們的主要醫生。為了實現這個,將會調用那個可以查找這類醫生的“普通醫師”函數。
現在,可能還有其他的功能。或許,13歲以下的病人會分配到一個兒科醫生那里,如此類推。但是我們將只會講大于14歲的例子。
代碼可能像下面那樣寫:
1) Read Age
2) If age>14
3) Doctor= General Physician()
4) End if
請注意以上代碼不適用于任何編程語言,也不能運行。這只是假設。
作為一個測試人員,假設我的數據集是14,15,0,13——一些隨機數字。
目標就是要檢查數據集那4個數值(14,15,0和13)是否能通過這些代碼足以能識別所有可能出現的問題。
也可以閱讀 => Tips to design test data before executing your test cases (在執行你的測試用例前設計測試數據的建議)
突變測試怎樣完成這樣的任務?
首先,你要創建程序的突變體-變量(mutants- variations)。一個突變體(mutant)不是什么就是一個寫成有偏差的程序。它包括一個self-seeded缺陷。
例子如下:
· Arithmetic operator replacement
·?Logical connector replacement
·?Statement removal
·?Relational operator replacement
·?Absolute value insertion, etc.
這些替代品也叫做“Mutation Operators”。
讓我給你展示一些例子:
Mutant #1: Relational operator replacement
1) Read Age
2) If age<14 ‘Changing the > with
3) Doctor= General Physician()
4) End if
Mutant #2:
1) Read Age
2) If age=14 ‘Changing the > with =’
3) Doctor= General Physician()
4) End if
Mutant #3:
1) Read Age
2) If age>=14 ‘Changing the > with >=’
3) Doctor= General Physician()
4) End if
Mutant #4:
1) Read Age
2) If age<=14 ‘Changing the > with <=’
3) Doctor= General Physician()
4) End if
Mutant #5: Statement Removal
1) Read Age
2) If age=14
3) ‘remove the doctor assignment statement’
4) End if
Mutant #6: Absolute Value Insertion
1) Read Age
2) If age>14
3) Doctor= Mr.X (Absolute value insertion- let’s say X is a pediatrician)
4) End if
Mutant #7: Incorrect syntax
1) Read Age
2) If age%%14 (incorrect syntax)
3) Doctor=General Physician()
4) End if
Mutant #8: Does the same thing as the original test
------------
1) Read Age
2) If age> 14 & age>14 ‘means the same thing as age>14’
3) Doctor= General Physician()
4) End if
一旦所有突變體都被創建出來,它們就會受測試數據集支配。我們的數據集是14、15、0和13。我們的數據集將會發現這些突變體中的哪個?
從下面表格中找出來:
你可以看到我們的數據里數值14當和突變體2、3和4配對在一起的時候就失敗了。或者說14干掉了突變體2、3和4。但是,1、6和8這樣的突變體就沒有這樣的效果。
如果你的數據集干掉了所有的突變體,它就是有效的。否則,就包括更多和更好的測試數據。不是每個在數據集里的數值都必須干掉所有突變體。但綜合在一起,他們就應該要干掉所有的(突變體)。例如:14干掉2、3和4,15干掉1、2和4,如此類推。
5、7和8是什么?
Mutant #5– 就是那種與你提供的任何數據值都無關,都會失敗的程序實例。這是因為對于有效和無效的值它都不會做任何編程。
Mutant #7– 將會是一個編譯錯誤。或許對于腳本語言來說這是一個阻止執行的錯誤。
Mutant #8– 像主程序一樣的東西。
正如你所看到的,上面的突變體一點用處都沒有。
因此,突變體要避免:
· 語法錯誤/“Still-Born”突變體:你只需要語法正確的突變體。例子:Mutant 7
·?等效突變體:那些像原始程序那樣做完全相同的事情的突變體。例子:Mutant 8
·?瑣碎突變:可以被任何數據集殺死。例子:Mutant 5
注意要點:
·?突變體的數量,即使對于小程序來說,也可以很多。雖然是一個有限的數字,但是還是很大。正以為這樣,突變體的一個子集經常會被使用。隨機地選擇突變體是很常見的。
·?上面列出的變異算子不是一個詳盡的列表,也可以有許多其他的變化。我簡單化了這些概念以便于容易理解。
·?變異算子也與應用程序的編程語言、設計和規格說明不一樣。
·?如果在測試的最后階段還有一些突變體存在,這意味著它可能是一個無效的突變體(像5、7和8)也可能是數據集不合適。如果是后者,返回以及改變數據集。
·?突變體測試是一個結構化的、白盒和單元測試方法。它用fault-injection或者fault-seeding來產生它的突變體。
·?有很多適用于自動化測試的單元測試框架和工具,有以下類型:
Jester for JUnit
Pester for Python
MuClipse for eclipse,等等
你想,如果需要這么多的努力,當我要測試大量代碼時將會發生什么?
突變體測試依賴于兩樣東西:
·?有能力的程序員設想:如果一個程序員有足夠的能力編寫和測試一小段代碼,他也會擅長編寫更大的程序。
·?耦合效應的設想:如果2個單元結合起來形成一個程序,每一個單元本身又是很好的,那么這個組合也將會很好。
所以,側重點在于最小的單元代碼和信賴于程序員將突變體測試規模變成更大的程序的技能。
總結:
我希望你可以喜歡閱讀和學習一種有趣的測試技術——突變測試。
總結
以上是生活随笔為你收集整理的突变检测软件 测试数据库,突变测试—通过一个简单的例子快速学习这种有趣的测试技术...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通用计算机系统和嵌入式计算机系统相同点,
- 下一篇: SQLyog的基本使用