摘要:Eric Gunnerson 介紹了事先測試開發的思想,并提供了一個實用實例來演示如何在您自己的應用程序中應用它。
本專欄末尾有我的簡介,如果您讀過的話,就會知道我在擔任程序經理之前曾出任 C# 編譯器的測試組長,而在此之前是 C++ 編譯器的測試組長。這些工作經歷使我對分析和盡量避免軟件錯誤特別感興趣。
要減少軟件中的錯誤數目,方法之一就是擁有一個專業的測試組,其工作就是盡一切可能使軟件崩潰。不幸的是,如果擁有測試組,那么即使是經驗豐富的開發人員,也會傾向于花費較少的時間來保證代碼的可靠性。
軟件界有一句俗語:“開發人員不應該測試他們自己的代碼”。這是因為開發人員對自己的代碼了如指掌,他們很清楚如何采用適當的方法對代碼進行測試。盡管這句俗語很有道理,但卻忽略了非常重要的一點 - 如果開發人員不對自己的代碼進行測試,又如何知道代碼能否按照預期的方式運行?
簡單說來,他們根本無從得知。開發人員編寫那種運行不正;蛑辉谀承┣闆r下運行正常的代碼是一個嚴重的問題。他們通常只測試代碼能否在很少的情況下正常運行,而不是驗證代碼能夠在所有情況下均正常運行。
發現軟件錯誤
發現軟件錯誤的情況有很多:
1、由首次編寫代碼的開發人員發現。
2、由嘗試運行代碼的開發人員發現。
3、由組中的其他開發人員或測試人員發現。
4、作為產品大規模測試的一部分。
5、由最終用戶發現。
如果在第一種情況下發現軟件錯誤,則修復錯誤比較容易,成本也很低。情況越靠后,修復軟件錯誤的成本就越高;修復一個由最終用戶發現的軟件錯誤可能要耗費 100 或 1000 倍的成本。更不用說用戶通常因為軟件錯誤導致工作無法繼續,而一直等到下一個版本才能解決問題。
如果開發人員能夠在編寫代碼期間發現所有的軟件錯誤,那就再好不過了。為此,您必須編寫能在編寫代碼時運行的測試。有一種很不錯的方法,它恰好可以做到這一點。
事先測試開發
所謂的事先測試開發是指在編寫代碼前編寫測試。如果所有測試均正常運行,便可以斷定代碼運行正常;添加新功能時,這些測試會繼續驗證您是否破壞了代碼的任何部分。
此概念于 20 世紀 90 年代初誕生于 Smalltalk 世界,Kent Beck 在當時編寫了 SmalltalkUnit。在過去的幾年中,大部分環境都具備了單元測試工具,其中有一個很出色的適用于 .NET Framework 領域的工具,即 nUnit(英文)。
文章來源于領測軟件測試網 http://www.k11sc111.com/