摘要:本文討論了面向對象軟件的特點,從軟件測試的層次劃分出發,以一個自動售貨機為例設計了一個軟件系統的白盒測試用例,分析了白盒測試在面向對象軟件測試中的特點和測試的方法。
關鍵詞:面向對象;白盒測試;用例
1 引言
如何提高軟件質量是軟件工程致力解決的關鍵問題之一。軟件測試和驗證是保證軟件正確性和提高軟件可靠性的最基本和最重要的手段。自20世紀80年代以來,面向對象方法和技術的研究已遍及計算機軟件、硬件和應用各領域,在軟件工程領域更是得到了廣泛的重視,但研究的重點和成果主要集中于面向對象分析與技術方法學領域(即軟件開發的前期),而面向對象軟件測試技術的研究還比較薄弱。近年來,國內外對面向對象軟件測試進行了大量的研究,但目前該領域還處于百家爭鳴的階段,還未形成一套較為成熟與完善的軟件測試理論與方法。本文從軟件測試的層次劃分出發,對面向對象的測試方法和解決方案做一探討,并結合具體項目給出了實例設計。
2 面向對象理論
運用面向對象的方法和技術,首先必須明確什么是“面向對象”。曾經有很多年,“面向對象”被認為是使用一系列面向對象程序設計語言(如Ada95,C++,Smalltalk等)的軟件開發方法。現在“面向對象”己包含完整的軟件工程觀點,Peter Coad和Edward Yourdon給出了“面向對象”的如下定義:面向對象(Object-Oriented)=對象(Objects)+分類(Classification)+繼承(Inheritance)+通信(Communication)。
面向對象軟件的封裝性、繼承性、多態性和動態綁定等特性提高了軟件的可重用性,使軟件開發更快、質量更高,而且軟件易于維護、易于修改。通過組裝可利用子系統而產生更大的系統,然而另一方面,它卻給軟件測試帶來了更多的困難。與之相對應的軟件測試技術還相對滯后,如何探索出一套行之有效的方法,尤其是如何采用自動化的方法來測試這些軟件,己成為軟件測試者們所面臨的挑戰。
3 白盒測試的傳統方法
白盒測試方法主要依據邏輯段蓋準則,如語句覆蓋和判定覆蓋等。這些覆蓋準則是白盒測試方法的重要理論基礎,能夠指導測試人員設計出有效的測試用例。
SQA Team Test是測試Power Builder軟件的有用測試工具,它能夠與Power Builder對象緊密地結合在一起,根據使用SQA Team Test測試軟件的經驗和對該軟件的理解,認為設計出有效的測試用例仍是使用SQA Team Test測試軟件的關健性工作。能否設計出一系列有效的測試用例,將直接影響到軟件的測試效果,因為SQA Team Test測試軟件的測試思想是回歸測試,所以能否發現軟件中存在的問題,仍依賴于測試用例的設計。
從前面的分析中可以看出,無論是使用白盒測試方法還是使用SQA Team Test測試軟件,設計有效的測試用例是測試工作的重要環節。傳統的白盒測試方法是按照軟件模塊內的邏輯控制結構、運行過程和模塊間的組織結構與接口,逐個設計出針對每個模塊、每個子系統和系統的測試用例,因此每個模塊都會被測試到,或者說能夠保證測試的模塊被覆蓋。因為白盒測試的基礎是依據對程序結構的清楚描述,而模塊內部的邏輯履蓋由邏輯覆蓋準則提供保證。但是在事件驅動面向對象的軟件中,軟件的設計思路和軟件的結構與傳統的面向過程的軟件相比已經發生了相當大的改變,對象和事件概念在軟件開發中占有非常重要的地位,而傳統的白盒測試方法并不能適應這種變化。
4 面向對象白盒測試框架分析
測試設計是整個測試過程的關鍵部分,面向對象軟件開發中的白盒測試設計優劣更是整個測試工作的成敗所在。為此在本文中我們可以具體的實例來設計一個白盒測試的框架和方法。
面向對象的白盒測試通常不能獨立地測試一個方法(操作),這個方法相當于傳統的測試單元,而是將這個方法作為一個測試類的一部分。
如果一個基類中有一個方法,繼承類也繼承了這個方法,但是這個方法可能在繼承類中被私有數據和方法使用,所以盡管基類中已經測試了這個方法,但是每個繼承類也需要考慮對這個方法進行測試。一般從下面兩個方面進行考慮。
(1)繼承的成員函數是否都不需要測試。一般來說,對父類中已經測試過的成員函數,兩種情況需要在子類中重新測試,即繼承的成員函數在子類中作了改動,或成員函數調用了改動過的成員函數的部分。
(2)對父類的測試是否能照搬到子類。多態有幾種不同的形勢,如參數多態,包含多態,過載多態。包含多態和過載多態在面向對象語言中通常體現在子類與父類的繼承關系上。對具有包含多態的成員函數測試時,只需要在原有的測試分析的基礎上擴大測試用例中輸入數據的類型。
從上面的分析可以看出,面向對象的軟件的白盒測試主要是針對軟件設計中的類和對象來進行測試的。因此鏈接被測試的軟件的類結構,是進行白盒測試的關鍵。由于封裝的原則,在面向對象軟件的類一般設計為私有或受保護類型,即類的屬性和方法是無法從外部直接訪問的,必須通過類中的公有方法來實現。因此設計測試用例時必須要注意對這些公有成員的才做。白盒測試邏輯覆蓋的方法主要包括語句覆蓋、分支覆蓋、條件覆蓋、條件組合覆蓋等。窮舉測試要求對所有可能的輸入和狀態執行所有的路徑,除非對一些小實例,窮舉測試是不現實的,通常是通過從所有可能的測試用例中確定最有可能檢測出最多錯誤的子集,進行有限的測試來發現盡可能多的錯誤。但是為了實現對類中所有方法的有效測試,必須設計足夠多的測試用例。
下面我們就以一個自動售貨機為例設計一個軟件系統的白盒測試用例。一個軟件系統是有很多的服務組成的,而每個服務時由很多的用例組成的,下面我們給出自動售貨機的用例和服務,如表1所示,描述用例的用例圖如圖1所示。
對用例的用戶描述往往采用系統序列圖,它將系統看做一個整體,并從用戶的角度描述用例的處理過程,以購買商品用例為例,給出其處理過程序列表如表2所示。
借助購買商品的流程可以對服務進行白盒測試。白盒測試主要進行基本路徑測試,我們在這里主要設計語句覆蓋測試和分支覆蓋測試,來設計面向對象軟件的白盒測試的測試用例,測試用例的設計原則是保證在測試中程序的每一個可執行語句至少執行一次,針對購買商品的流程得出的具體路徑有兩條,路徑1:1-2-3-4-5;路徑2:1-3a-2-3-5a-4-4a-5。
根據路徑生成測試用例:根據判斷節點給出的條件,選擇適當的數據以保證每一條路徑可以被測試到。只要設計出的測試用例能夠保證控制流程圖中的所有路徑都能被執行到,就可以使得程序中的每一個可執行語句至少執行一次,則服務中每個條件的真假兩種取值都可以得到測試,從而實現可以檢查程序的主要執行路徑,又可以覆蓋程序的所有分支,而且可以滿足語句覆蓋的要求。
5 小結
由于面向對象軟件自身的特點,使得面向對象的白盒測試有別于傳統的白盒測試思想。到目前為止,現有的面向對象軟件測試方法還存在許多問題,對面向對象軟件的白盒測試技術還有待進一步的深入研究,以便做出對軟件測試的理論和實踐有指導意義、有影響的成果。
參考文獻
[1]LARMAN C.UML和模式應用:面向對象分析與設計導論[M].姚淑珍,李虎,譯.北京:機械工業出版社,2001.
[2]JACOBSON I, BOOCH G, RUMBAUGH J.統一軟件開發過程[M].周伯生,馮學民,樊東平,譯.北京:機械工業出版社,2001.
[3]PRESSMAN R S.軟件工程:實踐者的研究方法[M].黃柏素,梅宏,譯.北京:機械工業出版社,1999.