文/黃志亮 錢錕
研究表明,軟件需求錯誤、有問題的系統測試覆蓋是導致在軟件開發項目過程中大量返工、重新設計和編碼的主要原因。在已發現的軟件缺陷中,超過50%缺陷的根源是由于錯誤或不恰當的軟件系統需求造成的。隨著現在系統日益龐大復雜,系統功能場景和邏輯分支越來越多,實現完全的測試覆蓋率是個巨大挑戰。基于需求的軟件測試主要是對需求進行驗證和評定,并確認軟件實現是否滿足需求的定義,它是軟件測試的本質。Bender-RBT是一種基于需求的功能測試用例設計系統工具,它通過評價系統需求,發現其中的錯誤和邏輯矛盾,使系統需求得到驗證和明確化,并以需求作為基礎實現設計最少的測試用例達到全面的功能覆蓋率。
需求是系統服務以及約束的陳述。完整、正確和穩定的軟件需求是軟件開發的基礎,同時也是軟件驗證和確認的基準。然而在實際軟件開發過程中可能受到需求分析工作不完善、對系統缺乏完整準確認識、軟件開發窗口壓縮、需求未完全固化等因素影響,難以在項目開始階段就獲得完整、正確和穩定的需求。對開發開創性、全新的系統而言,很多時候只有隨著項目的進行需求才會越來越清晰。基于需求的測試是一種最根本的軟件測試,主要是對需求進行驗證和評定,并確認軟件實現是否滿足需求的定義,并應遵循兩個關鍵準則:
(1)驗證軟件需求是否正確、完整、無二義性,并且邏輯一致;
(2)要從“黑盒”的角度,設計出充分并且必要的測試集對系統需求進行測試覆蓋,以保證設計和代碼都能完全符合要求。

圖1:因果邏輯關系圖

圖2:測試用例集
軟件測試的目的是希望以最小的代價,盡可能地找出軟件中潛在的各種錯誤和缺陷,以提高軟件的可靠性和質量。Bender-RBT是一種基于需求的功能測試用例設計系統工具,它可以通過徹底評價系統需求,發現其中的錯誤和邏輯矛盾,使系統需求明確化。Bender-RBT將需求作為基礎,實現設計最少的測試用例達到全面的功能覆蓋率。
完整、正確的需求是保證系統開發和測試準確性的前提基礎。Bender-RBT通過分析和復查系統的需求,發現其中邏輯上的矛盾和錯誤。Bender-RBT使用因果作圖法分析需求的每個方面,并用邏輯圖表方式來說明系統各個輸入之間以及輸入同各輸出之間的結點關系、約束和其可觀測性;通過評價記錄下來的信息,從而鑒別出在關系、邏輯錯誤和功能缺失等方面的問題,并以邏輯圖表和功能說明書等形式提供詳細的分析結果。這種用因果邏輯關系圖直接去表現需求的形式有助于需求和測試用例的復查和理解,從而盡早地發現和糾正需求的錯誤,以確保需求是正確、完整、可理解和可測試的。
現在系統日益龐大復雜,隨之系統功能場景和邏輯分支也越來越多,獲得滿意的測試覆蓋率愈加困難,實現完全的測試覆蓋率將會是個巨大挑戰。通常在許多測試中一般使用的都是GUT FEEL(直覺)方法或基于組合數學的方法。GUT FEEL測試十分依賴于測試工程師的水平和經驗,如果僅按照個人的經驗和感覺來設計測試用例,很難保證100%覆蓋系統的所有功能,研究報告表明一般來講只能覆蓋30-40%。基于組合數學的測試使用的是大量輸入的組合,隨著應用系統輸入增多,使用該方法設計的測試用例數量會劇增,一個有27個輸入的應用系統窮舉測試需要設計上億個測試用例,要做到完全的覆蓋幾乎不可能。
Bender-RBT是基于需求的測試用例設計工具,包含有正交組合對法(Orthogonal Pairs)和因果圖法(Cause Efffect)兩種完全獨立的測試用例設計引擎。在因果圖測試用例設計引擎中,Bender-RBT使用一種數學上很嚴謹的敏感路徑邏輯算法來確定為保證完全的功能覆蓋率所需的最少測試用例,最大的減少測試設計和建立的時間,從整體上降低了測試的工作量,在這方面Bender-RBT比其他的測試技術效率提高至少4倍。
某金融應用系統中關于給顧客免費設置信用賬戶透支保護的要求如表1所示。

表1:免費設置信用賬戶透支保護的具體要求

圖3:覆蓋率矩陣
根據表1提供的需求,利用Bender-RBT中因果圖法建立“免費設置信用賬戶透支保護”的因果邏輯關系如圖1所示。本示例中企業客戶和優質個人客戶存在互斥,信用賬戶透支保護狀態、透支次數依賴于存在信用賬戶這一前提條件,在建立因果邏輯關系圖時,通過節點加入現實情況下的約束關系和前提條件減少無效的測試用例。由當前因果邏輯關系圖生成的測試用例集如圖2所示,包含系統狀態變化個數(Vars)、創建的測試用例個數(Tests)等基本信息,同時經分析和復查需求也驗證了需求正確無誤。在Bender-RBT報告中可獲得覆蓋率矩陣和定義矩陣等重要信息,覆蓋率矩陣顯示每個測試所覆蓋的功能,并可以顯示是否每次測試都至少執行了一個未覆蓋的功能;定義矩陣顯示每個測試用例中的輸入和輸出條件。覆蓋率矩陣如圖3所示,顯示了每個系統狀態變化由對應哪些測試用例所覆蓋以及每個測試用例所覆蓋的系統狀態變化的信息,其中“#”表示只有唯一對應的測試用例覆蓋該狀態變化,而“X”表示有一個以上的測試用例可覆蓋該狀態變化。定義矩陣如圖4所示,標識了每個測試用例輸入輸出節點的真假狀態。理論上覆蓋系統全部的狀態變化最多需要26個測試用例,若按照傳統直覺方法并依賴測試者水平和經驗的不同進行測試設計需至少9個測試用例,而使用Bender-RBT僅需7個測試用例即可覆蓋系統全部的狀態變化。

圖4:定義矩陣
基于需求的測試是一種最根本的軟件測試。完整正確的需求是軟件測試的前提,對系統需求的測試覆蓋需要設計充分且必要的測試集。Bender-RBT是一種基于需求的功能測試用例設計系統工具,通過分析和復查系統需求驗證其正確性,并以需求因果邏輯關系圖作為基礎實現設計最少的測試用例達到完全的功能覆蓋率,尤其對存在較多輸入輸出的系統測試更能體現其特點及優勢,更好地保證系統測試的質量和進度,提高軟件的可靠性和質量。