1.負面測試的目的
負面測試在BS7925-1中的英國標準定義是采用Beizer的定義,其定義負面測試為“旨在說明軟件不能工作的測試”(原文:Testing aimed at showing software does not work)。它可以帶出一系列補充性的和競爭性的目的。
•發現導致重大失效、崩潰、破壞和安全漏洞的故障
•觀察和度量系統對外界問題的響應
•揭露軟件的弱點和開發的潛力
雖然有個一個公正的定義,但是它離被普遍接受還差的很遠。負面測試是一個緊跟著被重新定義的術語,有時甚至是各小組的。一個常見的方法,其實踐和英國標準定義不同的是它包括旨在使用專門對付失效的功能的測試。
• 輸入驗證,拒絕和重新請求的功能(人工輸入和外界系統)
• 內部數據驗證和拒絕
• 應付缺乏的,緩慢的或壞掉的外界資源
• 錯誤處理功能,例如消息,日志,監視功能
• 恢復功能,例如故障恢復,回滾和恢復
2.獲取測試用例的技術
負面測試不是一種測試設計技術,說是一種方法或分類更加合適。使用許多正式的測試設計技術來獲取那些能夠被劃分為‘負面測試’的測試是很有可能。這一節詳述了各種各樣的知名技術的應用。
• 邊界值分析和等價類劃分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]能夠幫助你獲得這樣的測試。
文章來源于領測軟件測試網 http://www.k11sc111.com/