1.負面測試的目的
負面測試在BS7925-1中的英國標準定義是采用Beizer的定義,其定義負面測試為“旨在說明軟件不能工作的測試”(原文:Testing aimed at showing software does not work)。它可以帶出一系列補充性的和競爭性的目的。
發現導致重大失效、崩潰、破壞和安全漏洞的故障
觀察和度量系統對外界問題的響應
揭露軟件的弱點和開發的潛力
雖然有個一個公正的定義,但是它離被普遍接受還差的很遠。負面測試是一個緊跟著被重新定義的術語,有時甚至是各小組的。一個常見的方法,其實踐和英國標準定義不同的是它包括旨在使用專門對付失效的功能的測試。
輸入驗證,拒絕和重新請求的功能(人工輸入和外界系統)
內部數據驗證和拒絕
應付缺乏的,緩慢的或壞掉的外界資源
錯誤處理功能,例如消息,日志,監視功能
恢復功能,例如故障恢復,回滾和恢復
負面測試不是一種測試設計技術,說是一種方法或分類更加合適。使用許多正式的測試設計技術來獲取那些能夠被劃分為‘負面測試’的測試是很有可能。這一節詳述了各種各樣的知名技術的應用。
邊界值分析和等價類劃分Boundary Value Analysis and Equivalence Class Partitioning
狀態轉換測試State Transition testing
逆著已知的約束測試Test against known constraints
故障模式和結果分析Failure Mode and Effects analysis
并發Concurrency
用例和誤用的用例Use cases and mis-use cases
2.1.邊界值分析和等價類劃分
有兩種基于輸入和輸出數據和系統行為期望的技術。
邊界值分析(BVA:Boundary Value Analysis)利用關于預知系統行為轉換位置的邊界的需求和設計來檢查那些能夠帶出一連貫范圍數值的數據元素。
這個方法用于產生三個數值-一個就是邊界本身,另外兩個在前者的兩邊(盡可能的和數字相接近)。如果邊界在有效和無效范圍之間,使用無效數值的測試用例將成為一個負面測試用例。例如,使用66在只接受從18~65數值的年齡字段。
等價類劃分(ECP:Equivalence Class Partitioning)著眼于邊界之間的范圍。給出的等價類中的每個成員應該在一個已知測試的環境里,使系統做同樣的事情-這樣測試員不必要測試在等價類中每一個數值。無效輸入數據的范圍可以被看成為負面測試-例如,一個年齡字段可能被期望用相同的方法拒絕所有的負數。
ECP一般被延伸到包括非連續數值的集合,勝于連續的數值范圍。要注意一些輸入可能看上去等價,但是實際上出現很多不同的行為。例如,一個簡單web的表單的輸入是為空或者太長時可能會被拒絕,但是控制字符的正確組合可能危害潛在web服務器的安全。
2.2. 狀態轉換測試
假設有一個狀態轉換圖或者一個與其等價的理解,那么就很容易獲得可以明確地檢查不可到達的狀態是否真的不可到達的測試用例。與這種方法相同的變種稱為n-switch 測試,在一套已知的轉換之后,那些不可到達的狀態仍然是不可到達嗎?圖形工具,例如Compendium-TA [4]能夠幫助你獲得這樣的測試。
2.3. 逆著已知的約束測試
大多數的系統有明確的和含蓄的限制和約束。如同需求一樣對待這些約束(參加Robinson+Robinson, [5]))就可以得到各種負面測試。例如:
“The site is designed to be viewed with Internet Explorer 4.5 or later” – 負面測試可以使用IE3.0或Netscape.
“No more than five users will use the system at the same time” –負面測試可以嘗試6個,然后8。
概括來說,測試包括度量和觀察系統的行為勝于直接逆著期望結果測試。這只能在系統的操作參數之外工作時被使用,并且這種觀察可能導致對系統的進一步了解。
2.4. 故障模式和結果分析
從對潛在的技術,實現和已知故障的分析來預見系統特有的故障是很有可能的。這種分析是觀察在故障條件下系統行為的測試基礎。捕獲和文檔化這種信息是非常重要的-特別是如果他們允許診斷數據和環境。對于那些監視他們系統并且擁有在系統被使用時(例如銀行,電話公司)可以采取行動的技術專家的組織而言,這些文檔通常是測試的必要輸出。 另一方面,對于更廣泛的分布式軟件包來說,這些信息也可以成為FAQ或故障診斷指南的一部分。
原文轉自:http://www.anti-gravitydesign.com