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