Java三代單元測試工具的比較[轉貼]

bluemountain發表於2006-09-14
第一代:JUnit :
優點:1.開源
2.測試後程式碼的質量提高明顯
3.JUnit是Java寫的
4.開發者寫出測試程式碼。它證明程式碼需要做什麼。如果有Bug會報錯。
缺點:1。完全手動工作
2.為達到覆蓋率,每100行程式碼寫200-400行的測試程式碼
3.需要寫很多的setup()、 shutdown()方法
4.測試程式碼難以維護,程式碼改變後,測試程式碼就無用了。
5.測試的覆蓋率很難上去,測試只是靜態的,線型的,只能測試有限的Path
第二代基於生成JUnit 測試指令碼的: JTest.
優點:1.出來5年了,很多IDE支援。
2.產生的測試程式碼(JUnit)近似開發者手寫的。
3.自動產生測試程式碼,減少了寫JUnit測試程式碼的時間。
4.靜態的程式碼分析。
缺點:1。證明了程式碼做了什麼,而不是保證了“需要做什麼”給人安全的錯覺。
Example:
• Method to add 2 numbers together
• Developer mistakenly write code: A+B=A
• Script generator will write tests to validate that:
1+1=1, 4+6=4,10+20=10
• When tests run, they will all pass!
• Only perfect code will generate valid tests

2.開發者必需手動複查數以千行的JUnit程式碼。看正確與否。
3.複查機器產生的程式碼是很痛苦的。
4.很多重複的JUnit程式碼,到處都有。
5.報告的資訊過多,不正確的測試將無法獲取Bug。
6.它使用了私有的庫,而不是純的JUnit。
7.幾乎不支援迭代/敏捷的開發模型。
(1) 同步/再生問題使它們沒有辦法使用。
(2)手動維護的話,失去了原有的自動化的意義。
8.要寫許多的註釋、說明在程式碼中。
9.靜態的技術已經不能滿足Java了。
(1)傳統的靜態的資料流分析只適合結構化的編碼。
(2)對簡單靜態的程式碼有用,對JAVA複雜的程式碼用處不大。
(3)interface, abstract, private的類、方法都不可測。
10.不可動態生成測試用例的弊端:
If(date day=SystemDate.day)and
(date month=SystemDate.month) then
return true;
else return false;
像這樣,今天是 return true 明天就是false;
11. 特殊用法:(1)生成的指令碼是透過一個生產框架來完成的。
(2)生成的指令碼只能最小的覆蓋率。
(3)要提高覆蓋率要用手動.
(4)指令碼的維護是手工而且很容易變得陳舊。失去自動化的意義
第三代:全新的自動化單元測試:Agitar Software
Agitator的優點:
1. 完全不用寫和維護測試指令碼。
2.完全的物件導向的測試。
3.保證了程式碼“需要做什麼”
4.把程式碼執行的真實情況(行為)直接反饋給開發者。
5.能有效地動態地生成資料(測試用例),對JAVA進行動態分析。
6.Agitation(資料分析,靜態分析,動態分析)。
7.Observation暴露程式碼執行情況,simple click斷言就生成了。
8.Factoies:200個不同的factory型別來規範輸入,匹配邏輯。
9.Pattion: 規範輸出,使邏輯更清晰。
10.Snapshort, stacktarce,跟蹤程式碼,查詢BUG,更容易。
11.自動建立智慧MOCK物件,提供儘可能的程式碼
12.測試配置以XML格式儲存,耐用,易改變,最有效的測試資產。
Dashboard的優點:
1. 標準和HTML表現形式,易於廣泛訪問和存取。
2. 清楚地看出軟體的健康和測試努力的狀態。
3. 專案彙總――複雜度,使用情況,風險情況、測試質量,覆蓋率。測試點透過/失敗的狀態。
4. 所有權的分配,每個人,每個問題的負責劃分非常清楚。
5. 分等級檢視,提供包、類的細節資訊,只要一,一目瞭然。

相關文章