本專欄末尾有我的簡介,如果您讀過的話,就會知道我在擔任程序經理之前曾出任 C# 編譯器的測試組長,而在此之前是 C++ 編譯器的測試組長。這些工作經歷使我對分析和盡量避免軟件錯誤特別感興趣。
要減少軟件中的錯誤數目,方法之一就是擁有一個專業的測試組,其工作就是盡一切可能使軟件崩潰。不幸的是,如果擁有測試組,那么即使是經驗豐富的開發人員,也會傾向于花費較少的時間來保證代碼的可靠性。
軟件界有一句俗語:“開發人員不應該測試他們自己的代碼”。這是因為開發人員對自己的代碼了如指掌,他們很清楚如何采用適當的方法對代碼進行測試。盡管這句俗語很有道理,但卻忽略了非常重要的一點 - 如果開發人員不對自己的代碼進行測試,又如何知道代碼能否按照預期的方式運行?
簡單說來,他們根本無從得知。開發人員編寫那種運行不正;蛑辉谀承┣闆r下運行正常的代碼是一個嚴重的問題。他們通常只測試代碼能否在很少的情況下正常運行,而不是驗證代碼能夠在所有情況下均正常運行。
發現軟件錯誤
發現軟件錯誤的情況有很多:
1、由首次編寫代碼的開發人員發現。
2、由嘗試運行代碼的開發人員發現。
3、由組中的其他開發人員或測試人員發現。
4、作為產品大規模測試的一部分。
5、由最終用戶發現。
如果在第一種情況下發現軟件錯誤,則修復錯誤比較容易,成本也很低。情況越靠后,修復軟件錯誤的成本就越高;修復一個由最終用戶發現的軟件錯誤可能要耗費 100 或 1000 倍的成本。更不用說用戶通常因為軟件錯誤導致工作無法繼續,而一直等到下一個版本才能解決問題。
如果開發人員能夠在編寫代碼期間發現所有的軟件錯誤,那就再好不過了。為此,您必須編寫能在編寫代碼時運行的測試。有一種很不錯的方法,它恰好可以做到這一點。
事先測試開發
此概念于 20 世紀 90 年代初誕生于 Smalltalk 世界,Kent Beck 在當時編寫了 SmalltalkUnit。在過去的幾年中,大部分環境都具備了單元測試工具,其中有一個很出色的適用于 .NET
示例
下面我將編寫一個 IntegerList 類來介紹事先測試開發的工作原理。IntegerList 是 ArrayList 類的變體,用于在本地存儲整數,因此不存在裝箱和取消裝箱的開銷。
第一步是創建一個控制臺項目,并向其中添加一個 IntegerList.cs 源文件。要連接 nUnit 框架,需要添加對 nUnit 框架的引用。在我的系統中,它們位于 d:\program files\nUnit v2.0\bin。
第二步是花些時間考慮如何對該類進行測試。這與確定類應該具備哪些功能的過程類似,但重點放在功能的特定用途(將值 1 添加到列表并檢查是否成功),而不是功能本身(將一個項目添加到列表)。要生成此類,我們首先要提供一個要使用的測試列表:
1、測試該類可以構造
2、將兩個整數添加到列表,并確保數目和項目都正確。
3、執行同一操作,但針對更多的項目。
4、將此列表轉換為一個字符串。
5、使用 foreach 枚舉此列表。
文章來源于領測軟件測試網 http://www.k11sc111.com/