單元測試的測試數據可以用兩個基本的方法系統地構建。第一個是規格說明測試,這個技術也稱為黑盒測試(行為測試,數據驅動測試,功能測試以及輸入/ 輸出驅動測試)。在這個方法中,不考慮代碼本身,在擬制測試用例中使用的僅有的信息是規格說明文檔。另一個是代碼測試,它在選擇測試用例時不理會規格說明文檔。這個技術也稱為白盒測試(結構測試、邏輯驅動測試以及面向路徑測試)。
規格說明測試的可行性:
考慮下面的例子。假定某個數據處理產品的規格說明指出,必須包含5類傭金和7類折扣。僅測試傭金和折扣的每個可能的組合就需要35個測試用例,說傭金和折扣是在兩個完全獨立的模塊中,因而可以獨立測試是沒有用的,因為在黑盒測試中將產品當作黑盒對待,它的內部結構因此是完全無關的。因此,徹底的規格說明測試在實際中是不可能的,因為它的組合方式會爆炸式的增長。
代碼測試的可行性:
代碼測試最常見的形式要求對模塊通過的每條路徑最少執行一次。試驗產品中全部路徑是不可靠的,因為存在這樣的產品,某些數據試驗一個給定路徑將檢測到錯誤,而不同的數據試驗同一個路徑將不會檢出錯誤。然而,面向路徑的測試是有效的,因為它沒有固有地將可能揭示錯誤的測試數據的選擇排除在外。
因為組合爆炸,徹底的規格說明測試或徹底的代碼測試都是不可行的。為此,在使用將盡可能多揭示錯誤的技術的同時,也承認沒有方法保證已經檢測出全部錯誤,一個繼續下去的合理的辦法是首先使用黑盒測試用例,然后使用白盒測試開發額外的測試用例。
黑盒單元測試技術:
徹底的黑盒測試通常要求成百上千億的測試用例,因此測試的技巧是設計一個較小,可管理的測試用例集,是檢測出一個錯誤的機會最大,同時通過讓相同的錯誤由多個測試用例檢出從而使浪費一個測試用例的機會最小。一個這樣的黑盒技術是結合了邊界值分析的等價測試。
1. 等價測試和邊界值測試
假定一個數據庫產品的規格說明指出,該產品必須能夠處理任何從1到16383個記錄,如果該產品能夠處理34個記錄和14870個記錄,那么它在比如說 8252個記錄時工作良好的可能性很大。因此,該產品能夠處理的記錄數的規定范圍可以定義三個等價類:比1個記錄小,從1到16383個記錄和多于 16383個記錄。
一個成功的測試用例能檢測出先前未檢測到的錯誤,為了使發現這一的錯誤的機會最大,一個高效的技術是邊界值分析。
綜上,因此,測試這個數據庫產品的時候,應選擇7個測試用例:
1> 0個記錄:等價類1的成員,臨近邊界值。
2> 1個記錄:邊界值。
3> 2個記錄:臨近邊界值。
4> 723個記錄:等價類2的成員。
5> 16382個記錄:臨近邊界值。
6> 16383個記錄:邊界值。
7> 16384個記錄:等價類3的成員,臨近邊界值。
等價測試的過程概括如下:
對于輸入和輸出規格說明
對于每個范圍(L,U):
選擇5個測試用例:小于L,等于L,比L大但比U小,等于U以及大于U。
對于每個集合S:
選擇2個測試用例:一個S的元素和一個非S的元素。
對于每個精確值P:
選擇2個測試用例:P和其他任何值。
2. 功能測試
一個可選的黑盒測試形式是根據模塊的功能選擇測試數據。在功能測試中,要區別每個功能項或在模塊中實現的功能。
玻璃盒單元測試技術:
在玻璃盒測試技術中,基于代碼的檢查,而不是規格說明的檢查來選擇測試用例。有一些不同形式的玻璃盒測試,包括語句,分支以及路徑覆蓋。
1. 結構測試:語句,分支和路徑覆蓋
最簡單形式的玻璃盒測試是語句覆蓋,即運行一系列測試用例,在運行期間每個語句最少執行一次。這個方法的缺點是不能保證對分支的所有輸出都充分地測試。
語句覆蓋的一個改進是分支覆蓋,即運行一系列,確保所有的分支最少測試一次。
像語句或分支覆蓋的技術成為結構測試。
功能最強大的結構測試的形式是路徑覆蓋,即測試所有的路徑。2. 復雜性度量
質量保證觀點提供另一個玻璃盒單元測試的方法。假定一個管理者被告知代碼模塊m1比代碼模塊 m2更復雜,且不管術語復雜是如何準確定義的,管理者直覺上相信m1可能比m2有更多的錯誤。沿著這條思路,計算機科學家已經開發出一些軟件復雜性度量,以幫助確定哪個代碼模塊更可能有錯誤。如果發現一個代碼模塊的復雜度不合理的高,管理者可能直接要求對它重新設計和重新實現,與試圖調試一個有錯的代碼模塊相比,可能從頭開始的代價更小,速度更快。
原文轉自:http://blog.it985.com/16483.html