【軟件制造工程】面向?qū)ο筌浖臏y(cè)試_第1頁(yè)
【軟件制造工程】面向?qū)ο筌浖臏y(cè)試_第2頁(yè)
【軟件制造工程】面向?qū)ο筌浖臏y(cè)試_第3頁(yè)
【軟件制造工程】面向?qū)ο筌浖臏y(cè)試_第4頁(yè)
【軟件制造工程】面向?qū)ο筌浖臏y(cè)試_第5頁(yè)
已閱讀5頁(yè),還剩48頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、面向?qū)ο筌浖臏y(cè)試,前言,什么是軟件測(cè)試? 1983年IEEE定義為:使用人工或自動(dòng)手段來運(yùn)行或測(cè)定某個(gè)系統(tǒng)的過程,其目的在于檢驗(yàn)它是否滿足規(guī)定的需求或是弄清預(yù)期結(jié)果與實(shí)際結(jié)果之間的差別。,前言,現(xiàn)代的軟件開發(fā)工程是將整個(gè)軟件開發(fā)過程明確的劃分為幾個(gè)階段,將復(fù)雜問題具體按階段加以解決。這樣,在軟件的整個(gè)開發(fā)過程中,可以對(duì)每一階段提出若干明確的監(jiān)控點(diǎn),作為各階段目標(biāo)實(shí)現(xiàn)的檢驗(yàn)標(biāo)準(zhǔn),從而提高開發(fā)過程的可見度和保證開發(fā)過程的正確性。,前言,軟件的質(zhì)量不僅是體現(xiàn)在程序的正確性上,它和編碼以前所做的需求分析,軟件設(shè)計(jì)密切相關(guān)。 軟件測(cè)試的概念和實(shí)施范圍應(yīng)該包括在整個(gè)開發(fā)各階段的復(fù)查、評(píng)估和檢測(cè)。由此,廣

2、義的軟件測(cè)試實(shí)際是由確認(rèn)、驗(yàn)證、測(cè)試三個(gè)方面組成,前言,確認(rèn):是評(píng)估將要開發(fā)的軟件產(chǎn)品是否是正確無誤、可行和有價(jià)值的。比如,將要開發(fā)的軟件是否會(huì)滿足用戶提出的要求,是否能在將來的實(shí)際使用環(huán)境中正確穩(wěn)定的運(yùn)行,是否存在隱患等。這里包含了對(duì)用戶需求滿足程度的評(píng)價(jià)。確認(rèn)意味著確保一個(gè)待開發(fā)軟件是正確無誤的,是對(duì)軟件開發(fā)構(gòu)想的檢測(cè),前言,驗(yàn)證:是檢測(cè)軟件開發(fā)的每個(gè)階段、每個(gè)步驟的結(jié)果是否正確無誤,是否與軟件開發(fā)各階段的要求或期望的結(jié)果相一致。驗(yàn)證意味著確保軟件是會(huì)正確無誤的實(shí)現(xiàn)軟件的需求,開發(fā)過程是沿著正確的方向在進(jìn)行。,一 前言,測(cè)試:與狹隘的測(cè)試概念統(tǒng)一。通常是經(jīng)過單元測(cè)試、集成測(cè)試、系統(tǒng)測(cè)試三個(gè)

3、環(huán)節(jié)。 確認(rèn)主要體現(xiàn)在計(jì)劃階段、需求分析階段、也會(huì)出現(xiàn)在測(cè)試階段;驗(yàn)證主要體現(xiàn)在設(shè)計(jì)階段和編碼階段;測(cè)試主要體現(xiàn)在編碼階段和測(cè)試階段。,一 前言,面向?qū)ο蠹夹g(shù)開發(fā)出的程序無需進(jìn)行測(cè)試? 面向?qū)ο蟪绦虻慕Y(jié)構(gòu)不再是傳統(tǒng)的功能模塊結(jié)構(gòu),作為一個(gè)整體,原有集成測(cè)試所要求的逐步將開發(fā)的模塊搭建在一起進(jìn)行測(cè)試的方法已成為不可能。,二 面向?qū)ο鬁y(cè)試模型,面向?qū)ο蟮拈_發(fā)模型突破了傳統(tǒng)的瀑布模型,將開發(fā)分為面向?qū)ο蠓治觯∣OA),面向?qū)ο笤O(shè)計(jì)(OOD),和面向?qū)ο缶幊蹋∣OP)三個(gè)階段。分析階段產(chǎn)生整個(gè)問題空間的抽象描述,在此基礎(chǔ)上,進(jìn)一步歸納出適用于面向?qū)ο缶幊陶Z(yǔ)言的類和類結(jié)構(gòu),最后形成代碼。,二 面向?qū)ο鬁y(cè)

4、試模型,OOA Test:面向?qū)ο蠓治龅臏y(cè)試 OOD Test:面向?qū)ο笤O(shè)計(jì)的測(cè)試OOP Test:面向?qū)ο缶幊痰臏y(cè)試 OO Unit Test:面向?qū)ο髥卧獪y(cè)試OO Integrate Test:面向?qū)ο蠹蓽y(cè)試OO System Test:面向?qū)ο笙到y(tǒng)測(cè)試,三 面向?qū)ο蠓治龅臏y(cè)試,面向?qū)ο蠓治觯∣OA)是把E-R圖和語(yǔ)義網(wǎng)絡(luò)模型,即信息造型中的概念,與面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言中的重要概念結(jié)合在一起而形成的分析方法,最后通常是得到問題空間的圖表的形式描述。,三 面向?qū)ο蠓治龅臏y(cè)試,OOA直接映射問題空間,全面的將問題空間中實(shí)現(xiàn)功能的現(xiàn)實(shí)抽象化。將問題空間中的實(shí)例抽象為對(duì)象(不同于C+中的對(duì)象概念

5、),用對(duì)象的結(jié)構(gòu)反映問題空間的復(fù)雜實(shí)例和復(fù)雜關(guān)系,用屬性和服務(wù)表示實(shí)例的特性和行為。對(duì)一個(gè)系統(tǒng)而言,與傳統(tǒng)分析方法產(chǎn)生的結(jié)果相反,行為是相對(duì)穩(wěn)定的,結(jié)構(gòu)是相對(duì)不穩(wěn)定的,這更充分反映了現(xiàn)實(shí)的特性。OOA的結(jié)果是為后面階段類的選定和實(shí)現(xiàn),類層次結(jié)構(gòu)的組織和實(shí)現(xiàn)提供平臺(tái),三 面向?qū)ο蠓治龅臏y(cè)試,OOA對(duì)問題空間分析抽象的不完整,最終會(huì)影響軟件的功能實(shí)現(xiàn),導(dǎo)致軟件開發(fā)后期大量可避免的修補(bǔ)工作;而一些冗余的對(duì)象或結(jié)構(gòu)會(huì)影響類的選定、程序的整體結(jié)構(gòu)或增加程序員不必要的工作量。,三 面向?qū)ο蠓治龅臏y(cè)試,對(duì)OOA階段的測(cè)試劃分為以下五個(gè)方面: 對(duì)認(rèn)定的對(duì)象的測(cè)試 對(duì)認(rèn)定的結(jié)構(gòu)的測(cè)試 對(duì)認(rèn)定的主題的測(cè)試 對(duì)定義

6、的屬性和實(shí)例關(guān)聯(lián)的測(cè)試 對(duì)定義的服務(wù)和消息關(guān)聯(lián)的測(cè)試,三 面向?qū)ο蠓治龅臏y(cè)試,1 對(duì)認(rèn)定的對(duì)象的測(cè)試:OOA中認(rèn)定的對(duì)象是對(duì)問題空間中的結(jié)構(gòu),其他系統(tǒng),設(shè)備,被記憶的事件,系統(tǒng)涉及的人員等實(shí)際實(shí)例的抽象。對(duì)它的測(cè)試可以從如下方面考慮: 1.1 認(rèn)定的對(duì)象是否全面,是否問題空間中所有涉及到的實(shí)例都反映在認(rèn)定的抽象對(duì)象中。1.2 認(rèn)定的對(duì)象是否具有多個(gè)屬性。只有一個(gè)屬性的對(duì)象通常應(yīng)看成其他對(duì)象的屬性,而不是抽象為獨(dú)立的對(duì)象。1.3 對(duì)認(rèn)定為同一對(duì)象的實(shí)例是否有共同的,區(qū)別于其他實(shí)例的共同屬性。1.4 對(duì)認(rèn)定為同一對(duì)象的實(shí)例是否提供或需要相同的服務(wù),如果服務(wù)隨著不同的實(shí)例而變化,認(rèn)定的對(duì)象就需要分解

7、或利用繼承性來分類表示。1.5 如果系統(tǒng)沒有必要始終保持對(duì)象代表的實(shí)例的信息,提供或者得到關(guān)于它的服務(wù),認(rèn)定的對(duì)象也無必要。 1.6 認(rèn)定的對(duì)象的名稱應(yīng)該盡量準(zhǔn)確,適用。,三 面向?qū)ο蠓治龅臏y(cè)試,2 對(duì)認(rèn)定的結(jié)構(gòu)的測(cè)試認(rèn)定的結(jié)構(gòu)指的是多種對(duì)象的組織方式,用來反映問題空間中的復(fù)雜實(shí)例和復(fù)雜關(guān)系。認(rèn)定的結(jié)構(gòu)分為兩種:分類結(jié)構(gòu)和組裝結(jié)構(gòu)。分類結(jié)構(gòu)體現(xiàn)了問題空間中實(shí)例的一般與特殊的關(guān)系,組裝結(jié)構(gòu)體現(xiàn)了問題空間中實(shí)例整體與局部的關(guān)系。,三 面向?qū)ο蠓治龅臏y(cè)試,2.1 對(duì)認(rèn)定的分類結(jié)構(gòu)的測(cè)試可從如下方面著手:2.1.1 對(duì)于結(jié)構(gòu)中的一種對(duì)象,尤其是處于高層的對(duì)象,是否在問題空間中含有不同于下一層對(duì)象的特殊

8、可能性,即是否能派生出下一層對(duì)象。2.1.2 對(duì)于結(jié)構(gòu)中的一種對(duì)象,尤其是處于同一低層的對(duì)象,是否能抽象出在現(xiàn)實(shí)中有意義的更一般的上層對(duì)象。2.1.3 對(duì)所有認(rèn)定的對(duì)象,是否能在問題空間內(nèi)向上層抽象出在現(xiàn)實(shí)中有意義的對(duì)象2.1.4 高層的對(duì)象的特性是否完全體現(xiàn)下層的共性2.1.5 低層的對(duì)象是否有高層特性基礎(chǔ)上的特殊性,三 面向?qū)ο蠓治龅臏y(cè)試,2.2 對(duì)認(rèn)定的組裝結(jié)構(gòu)的測(cè)試從如下方面入手:2.2.1 整體(對(duì)象)和部件(對(duì)象)的組裝關(guān)系是否符合現(xiàn)實(shí)的關(guān)系。2.2.2 整體(對(duì)象)的部件(對(duì)象)是否在考慮的問題空間中有實(shí)際應(yīng)用。2.2.3 整體(對(duì)象)中是否遺漏了反映在問題空間中有用的部件(對(duì)象

9、)。 2.2.4 部件(對(duì)象)是否能夠在問題空間中組裝新的有現(xiàn)實(shí)意義的整體(對(duì)象)。,三 面向?qū)ο蠓治龅臏y(cè)試,3 對(duì)認(rèn)定的主題的測(cè)試主題是在對(duì)象和結(jié)構(gòu)的基礎(chǔ)上更高一層的抽象,是為了提供OOA分析結(jié)果的可見性,如同文章對(duì)各部分內(nèi)容的概要。對(duì)主題層的測(cè)試應(yīng)該考慮以下方面: 3.1 貫徹George Miller 的7+2原則,如果主題個(gè)數(shù)超過7個(gè),就要求對(duì)有較密切屬性和服務(wù)的主題進(jìn)行歸并。3.2 主題所反映的一組對(duì)象和結(jié)構(gòu)是否具有相同和相近的屬性和服務(wù)。3.3 認(rèn)定的主題是否是對(duì)象和結(jié)構(gòu)更高層的抽象,是否便于理解OOA結(jié)果的概貌(尤其是對(duì)非技術(shù)人員的OOA 結(jié)果讀者)。3.4 主題間的消息聯(lián)系(抽

10、象)是否代表了主題所反映的對(duì)象和結(jié)構(gòu)之間的所有關(guān)聯(lián)。,三 面向?qū)ο蠓治龅臏y(cè)試,4 對(duì)定義的屬性和實(shí)例關(guān)聯(lián)的測(cè)試屬性是用來描述對(duì)象或結(jié)構(gòu)所反映的實(shí)例的特性。而實(shí)例關(guān)聯(lián)是反映實(shí)例集合間的映射關(guān)系。對(duì)屬性和實(shí)例關(guān)聯(lián)的測(cè)試從如下方面考慮: 4.1 定義的屬性是否對(duì)相應(yīng)的對(duì)象和分類結(jié)構(gòu)的每個(gè)現(xiàn)實(shí)實(shí)例都適用。4.2 定義的屬性在現(xiàn)實(shí)世界是否與這種實(shí)例關(guān)系密切。4.3 定義的屬性在問題空間是否與這種實(shí)例關(guān)系密切。4.4 定義的屬性是否能夠不依賴于其他屬性被獨(dú)立理解。4.5 定義的屬性在分類結(jié)構(gòu)中的位置是否恰當(dāng),低層對(duì)象的共有屬性是否在上層對(duì)象屬性體現(xiàn)。4.6 在問題空間中每個(gè)對(duì)象的屬性是否定義完整。4.7

11、定義的實(shí)例關(guān)聯(lián)是否符合現(xiàn)實(shí)。4.8 在問題空間中實(shí)例關(guān)聯(lián)是否定義完整,特別需要注意1-多和多-多的實(shí)例關(guān)聯(lián)。,三 面向?qū)ο蠓治龅臏y(cè)試,5 對(duì)定義的服務(wù)和消息關(guān)聯(lián)的測(cè)試定義的服務(wù),就是定義的每一種對(duì)象和結(jié)構(gòu)在問題空間所要求的行為。由于問題空中實(shí)例間必要的通信,在OOA 中相應(yīng)需要定義消息關(guān)聯(lián)。對(duì)定義的服務(wù)和消息關(guān)聯(lián)的測(cè)試從如下方面進(jìn)行: 5.1 對(duì)象和結(jié)構(gòu)在問題空間的不同狀態(tài)是否定義了相應(yīng)的服務(wù)。5.2 對(duì)象或結(jié)構(gòu)所需要的服務(wù)是否都定義了相應(yīng)的消息關(guān)聯(lián)。5.3 定義的消息關(guān)聯(lián)所指引的服務(wù)提供是否正確。5.4 沿著消息關(guān)聯(lián)執(zhí)行的線程是否合理,是否符合現(xiàn)實(shí)過程。5.5 定義的服務(wù)是否重復(fù),是否定義了

12、能夠得到的服務(wù)。,四 面向?qū)ο笤O(shè)計(jì)的測(cè)試,面向?qū)ο笤O(shè)計(jì)(OOD)采用造型的觀點(diǎn),以O(shè)OA為基礎(chǔ)歸納出類,并建立類結(jié)構(gòu)或進(jìn)一步構(gòu)造成類庫(kù),實(shí)現(xiàn)分析結(jié)果對(duì)問題空間的抽象。OOD 歸納的類,可以是對(duì)象簡(jiǎn)單的延續(xù),可以是不同對(duì)象的相同或相似的服務(wù)。由此可見,OOD不是在OOA上的另一思維方式的大動(dòng)干戈,而是OOA的進(jìn)一步細(xì)化和更高層的抽象。,四 面向?qū)ο笤O(shè)計(jì)的測(cè)試,,OOD與OOA 的界限通常是難以嚴(yán)格區(qū)分的。OOD確定類和類結(jié)構(gòu)不僅是滿足當(dāng)前需求分析的要求,更重要的是通過重新組合或加以適當(dāng)?shù)难a(bǔ)充,能方便實(shí)現(xiàn)功能的重用和擴(kuò)增,以不斷適應(yīng)用戶的要求。因此,對(duì)OOD的測(cè)試,針對(duì)功能的實(shí)現(xiàn)和重用以及對(duì)OOA

13、結(jié)果的拓展,從如下三方面考慮: 對(duì)認(rèn)定的類的測(cè)試 對(duì)構(gòu)造的類層次結(jié)構(gòu)的測(cè)試 對(duì)類庫(kù)的支持的測(cè)試,四 面向?qū)ο笤O(shè)計(jì)的測(cè)試,1 對(duì)認(rèn)定的類的測(cè)試OOD認(rèn)定的類可以是OOA中認(rèn)定的對(duì)象,也可以是對(duì)象所需要的服務(wù)的抽象,對(duì)象所具有的屬性的抽象。認(rèn)定的類原則上應(yīng)該盡量基礎(chǔ)性,這樣才便于維護(hù)和重用。測(cè)試認(rèn)定的類:1.1 是否含蓋了OOA中所有認(rèn)定的對(duì)象。1.2 是否能體現(xiàn)OOA中定義的屬性。1.3 是否能實(shí)現(xiàn)OOA中定義的服務(wù)。1.4 是否對(duì)應(yīng)著一個(gè)含義明確的數(shù)據(jù)抽象。1.5 是否盡可能少的依賴其他類。1.6 類中的方法(C+:類的成員函數(shù))是否單用途。,四 面向?qū)ο笤O(shè)計(jì)的測(cè)試,2 對(duì)構(gòu)造的類層次結(jié)構(gòu)的測(cè)

14、試為能充分發(fā)揮面向?qū)ο蟮睦^承共享特性,OOD的類層次結(jié)構(gòu),通常基于OOA中產(chǎn)生的分類結(jié)構(gòu)的原則來組織,著重體現(xiàn)父類和子類間一般性和特殊性。兩者概念上的差異。在當(dāng)前的問題空間,對(duì)類層次結(jié)構(gòu)的主要要求是能在解空間構(gòu)造實(shí)現(xiàn)全部功能的結(jié)構(gòu)框架。為此,測(cè)試如下方面:2.1 類層次結(jié)構(gòu)是否含蓋了所有定義的類。2.2 是否能體現(xiàn)OOA中所定義的實(shí)例關(guān)聯(lián)。2.3 是否能實(shí)現(xiàn)OOA中所定義的消息關(guān)聯(lián)。2.4 子類是否具有父類沒有的新特性。2.5 子類間的共同特性是否完全在父類中得以體現(xiàn)。,四 面向?qū)ο笤O(shè)計(jì)的測(cè)試,3 對(duì)類庫(kù)支持的測(cè)試對(duì)類庫(kù)的支持雖然也屬于類層次結(jié)構(gòu)的組織問題,但其強(qiáng)調(diào)的重點(diǎn)是再次軟件開發(fā)的重用。

15、由于它并不直接影響當(dāng)前軟件的開發(fā)和功能實(shí)現(xiàn),因此,將其單獨(dú)提出來測(cè)試,也可作為對(duì)高質(zhì)量類層次結(jié)構(gòu)的評(píng)估。測(cè)試點(diǎn)如下: 3.1 一組子類中關(guān)于某種含義相同或基本相同的操作,是否有相同的接口(包括名字和參數(shù)表)。3.2 類中方法(C+:類的成員函數(shù))功能是否較單純,相應(yīng)的代碼行是否較少。3.3 類的層次結(jié)構(gòu)是否是深度大,寬度小。,五 面向?qū)ο缶幊痰臏y(cè)試,典型的面向?qū)ο蟪绦蚓哂欣^承、封裝和多態(tài)的新特性,這使得傳統(tǒng)的測(cè)試策略必須有所改變。封裝是對(duì)數(shù)據(jù)的隱藏,外界只能通過被提供的操作來訪問或修改數(shù)據(jù),這樣降低了數(shù)據(jù)被任意修改和讀寫的可能性,降低了傳統(tǒng)程序中對(duì)數(shù)據(jù)非法操作的測(cè)試。繼承是面向?qū)ο蟪绦虻闹匾?/p>

16、點(diǎn),繼承使得代碼的重用率提高,同時(shí)也使錯(cuò)誤傳播的概率提高。,五 面向?qū)ο缶幊痰臏y(cè)試,繼承使得傳統(tǒng)測(cè)試遇見了這樣一個(gè)難題:對(duì)繼承的代碼究竟應(yīng)該怎樣測(cè)試?多態(tài)使得面向?qū)ο蟪绦驅(qū)ν獬尸F(xiàn)出強(qiáng)大的處理能力,但同時(shí)卻使得程序內(nèi)同一函數(shù)的行為復(fù)雜化,測(cè)試時(shí)不得不考慮不同類型具體執(zhí)行的代碼和產(chǎn)生的行為。,五 面向?qū)ο缶幊痰臏y(cè)試,面向?qū)ο蟪绦蚴前压δ艿膶?shí)現(xiàn)分布在類中。能正確實(shí)現(xiàn)功能的類,通過消息傳遞來協(xié)同實(shí)現(xiàn)設(shè)計(jì)要求的功能。正是這種面向?qū)ο蟪绦蝻L(fēng)格,將出現(xiàn)的錯(cuò)誤能精確的確定在某一具體的類。因此,在面向?qū)ο缶幊蹋∣OP)階段,忽略類功能實(shí)現(xiàn)的細(xì)則,將測(cè)試的目光集中在類功能的實(shí)現(xiàn)和相應(yīng)的面向?qū)ο蟪绦蝻L(fēng)格,主要體現(xiàn)為

17、以下兩個(gè)方面(假設(shè)編程使用C+語(yǔ)言): 數(shù)據(jù)成員是否滿足數(shù)據(jù)封裝的要求 類是否實(shí)現(xiàn)了要求的功能,五 面向?qū)ο缶幊痰臏y(cè)試,1 數(shù)據(jù)成員是否滿足數(shù)據(jù)封裝的要求 數(shù)據(jù)封裝是數(shù)據(jù)和數(shù)據(jù)有關(guān)的操作的集合。檢查數(shù)據(jù)成員是否滿足數(shù)據(jù)封裝的要求,基本原則是數(shù)據(jù)成員是否被外界(數(shù)據(jù)成員所屬的類或子類以外的調(diào)用)直接調(diào)用。更直觀的說,當(dāng)改編數(shù)據(jù)成員的結(jié)構(gòu)時(shí),是否影響了類的對(duì)外接口,是否會(huì)導(dǎo)致相應(yīng)外界必須改動(dòng)。值得注意,有時(shí)強(qiáng)制的類型轉(zhuǎn)換會(huì)破壞數(shù)據(jù)的封裝特性。,四 面向?qū)ο笤O(shè)計(jì)的測(cè)試,例如:class Hidenprivate:int a=1;char *p= hiden;class Visiblepublic:i

18、nt b=2;char *s= visible;.Hiden pp;Visible *qq=(Visible *)在上面的程序段中,pp的數(shù)據(jù)成員可以通過qq被隨意訪問。,五 面向?qū)ο缶幊痰臏y(cè)試,2 類是否實(shí)現(xiàn)了要求的功能 類所實(shí)現(xiàn)的功能,都是通過類的成員函數(shù)執(zhí)行。在測(cè)試類的功能實(shí)現(xiàn)時(shí),應(yīng)該首先保證類成員函數(shù)的正確性。單獨(dú)的看待類的成員函數(shù),與面向過程程序中的函數(shù)或過程沒有本質(zhì)的區(qū)別,幾乎所有傳統(tǒng)的單元測(cè)試中所使用的方法,都可在面向?qū)ο蟮膯卧獪y(cè)試中使用。,五 面向?qū)ο缶幊痰臏y(cè)試,類函數(shù)成員的正確行為只是類能夠?qū)崿F(xiàn)要求的功能的基礎(chǔ),類成員函數(shù)間的作用和類之間的服務(wù)調(diào)用是單元測(cè)試無法確定的。因此,

19、需要進(jìn)行面向?qū)ο蟮募蓽y(cè)試。 測(cè)試類的功能,不能僅滿足于代碼能無錯(cuò)運(yùn)行或被測(cè)試類能提供的功能無錯(cuò),應(yīng)該以所做的OOD結(jié)果為依據(jù),檢測(cè)類提供的功能是否滿足設(shè)計(jì)的要求,是否有缺陷。必要時(shí)(如通過OOD結(jié)仍不清楚明確的地方)還應(yīng)該參照OOA的結(jié)果,以之為最終標(biāo)準(zhǔn)。,六 面向?qū)ο蟮膯卧獪y(cè)試,傳統(tǒng)的單元測(cè)試是針對(duì)程序的函數(shù)、過程或完成某一定功能的程序塊。沿用單元測(cè)試的概念,實(shí)際測(cè)試類成員函數(shù)。一些傳統(tǒng)的測(cè)試方法在面向?qū)ο蟮膯卧獪y(cè)試中都可以使用。如等價(jià)類劃分法,因果圖法,邊值分析法,邏輯覆蓋法,路徑分析法,等等,單元測(cè)試一般建議由程序員完成。,六 面向?qū)ο蟮膯卧獪y(cè)試,用于單元級(jí)測(cè)試進(jìn)行的測(cè)試分析(提出相應(yīng)

20、的測(cè)試要求)和測(cè)試用例(選擇適當(dāng)?shù)妮斎?,達(dá)到測(cè)試要求),規(guī)模和難度等均遠(yuǎn)小于后面將介紹的對(duì)整個(gè)系統(tǒng)的測(cè)試分析和測(cè)試用例,而且強(qiáng)調(diào)對(duì)語(yǔ)句應(yīng)該有100%的執(zhí)行代碼覆蓋率。在設(shè)計(jì)測(cè)試用例選擇輸入數(shù)據(jù)時(shí),可以基于以下兩個(gè)假設(shè):1. 如果函數(shù)(程序)對(duì)某一類輸入中的一個(gè)數(shù)據(jù)正確執(zhí)行,對(duì)同類中的其他輸入也能正確執(zhí)行。2. 如果函數(shù)(程序)對(duì)某一復(fù)雜度的輸入正確執(zhí)行,對(duì)更高復(fù)雜度的輸入也能正確執(zhí)行。,六 面向?qū)ο蟮膯卧獪y(cè)試,例如需要選擇字符串作為輸入時(shí),基于本假設(shè),就無須計(jì)較于字符串的長(zhǎng)度。除非字符串的長(zhǎng)度是要求固定的,如IP地址字符串。在面向?qū)ο蟪绦蛑?,類成員函數(shù)通常都很小,功能單一,函數(shù)的間調(diào)用頻繁,容

21、易出現(xiàn)一些不宜發(fā)現(xiàn)的錯(cuò)誤。,六 面向?qū)ο蟮膯卧獪y(cè)試,例如: if (-1=write (fid, buffer, amount) error_out();該語(yǔ)句沒有全面檢查write()的返回值,無意中斷然假設(shè)了只有數(shù)據(jù)被完全寫入和沒有寫入兩種情況。當(dāng)測(cè)試也忽略了數(shù)據(jù)部分寫入的情況,就給程序遺留了隱患。 按程序的設(shè)計(jì),使用函數(shù)strrchr()查找最后的匹配字符,但誤程序中寫成了函數(shù)strchr(),使程序功能實(shí)現(xiàn)時(shí)查找的是第一個(gè)匹配字符。 程序中將if (strncmp(str1,str2,strlen(str1)誤寫成了if (strncmp(str1,str2,strlen(str2)。

22、如果測(cè)試用例中使用的數(shù)據(jù)str1和str2長(zhǎng)度一樣,就無法檢測(cè)出。,六 面向?qū)ο蟮膯卧獪y(cè)試,面向?qū)ο缶幊痰奶匦允沟脤?duì)成員函數(shù)的測(cè)試,又不完全等同于傳統(tǒng)的函數(shù)或過程測(cè)試。尤其是繼承特性和多態(tài)特性,使子類繼承或過載的父類成員函數(shù)出現(xiàn)了傳統(tǒng)測(cè)試中未遇見的問題。Brian Marick 給出了二方面的考慮:,六 面向?qū)ο蟮膯卧獪y(cè)試,1. 繼承的成員函數(shù)是否都不需要測(cè)試?對(duì)父類中已經(jīng)測(cè)試過的成員函數(shù),兩種情況需要在子類中重新測(cè)試:a)繼承的成員函數(shù)在子類中做了改動(dòng);b)成員函數(shù)調(diào)用了改動(dòng)過的成員函數(shù)的部分。例如:假設(shè)父類Bass有兩個(gè)成員函數(shù):Inherited()和Redefined(),子類Deri

23、ved只對(duì)Redefined()做了改動(dòng)。Derived:Redefined()顯然需要重新測(cè)試。對(duì)于Derived:Inherited(),如果它有調(diào)用Redefined()的語(yǔ)句(如:x=x/Redefined(),就需要重新測(cè)試,反之,無此必要。,六 面向?qū)ο蟮膯卧獪y(cè)試,2. 對(duì)父類的測(cè)試是否能照搬到子類?援用上面的假設(shè),Base:Redefined()和Derived:Redefined()已經(jīng)是不同的成員函數(shù),它們有不同的服務(wù)說明和執(zhí)行。對(duì)此,照理應(yīng)該對(duì) Derived:Redefined()重新測(cè)試分析,設(shè)計(jì)測(cè)試用例。但由于面向?qū)ο蟮睦^承使得兩個(gè)函數(shù)有相似,故只需在 Base:Re

24、defined()的測(cè)試要求和測(cè)試用例上添加對(duì)Derived:Redfined()新的測(cè)試要求和增補(bǔ)相應(yīng)的測(cè)試用例。,六 面向?qū)ο蟮膯卧獪y(cè)試,例如:Base:Redefined()含有如下語(yǔ)句If (value0) message (less);else if (value=0) message (equal);else message (more);Derived:Redfined()中定義為If (value0) message (less);else if (value=0) message (It is equal);elsemessage (more);if (value=88)me

25、ssage(luck);在原有的測(cè)試上,對(duì)Derived:Redfined()的測(cè)試只需做如下改動(dòng):將value=0的測(cè)試結(jié)果期望改動(dòng);增加value=88的測(cè)試。,七 面向?qū)ο蟮募蓽y(cè)試,傳統(tǒng)的集成測(cè)試,是由底向上通過集成完成的功能模塊進(jìn)行測(cè)試,一般可以在部分程序編譯完成的情況下進(jìn)行。 對(duì)于面向?qū)ο蟪绦颍嗷フ{(diào)用的功能是散布在程序的不同類中,類通過消息相互作用申請(qǐng)和提供服務(wù)。類的行為與它的狀態(tài)密切相關(guān),狀態(tài)不僅僅是體現(xiàn)在類數(shù)據(jù)成員的值,也許還包括其他類中的狀態(tài)信息。由此可見,類相互依賴極其緊密,根本無法在編譯不完全的程序上對(duì)類進(jìn)行測(cè)試。面向?qū)ο蟮募蓽y(cè)試通常需要在整個(gè)程序編譯完成后進(jìn)行。 面

26、向?qū)ο蟪绦蚓哂袆?dòng)態(tài)特性,程序的控制流往往無法確定,因此也只能對(duì)整個(gè)編譯后的程序做基于黑盒子的集成測(cè)試。,七 面向?qū)ο蟮募蓽y(cè)試,面向?qū)ο蟮募蓽y(cè)試能夠檢測(cè)出相對(duì)獨(dú)立的單元測(cè)試無法檢測(cè)出的那些類相互作用時(shí)才會(huì)產(chǎn)生的錯(cuò)誤?;趩卧獪y(cè)試對(duì)成員函數(shù)行為正確性的保證,集成測(cè)試只關(guān)注于系統(tǒng)的結(jié)構(gòu)和內(nèi)部的相互作用。面向?qū)ο蟮募蓽y(cè)試可以分成兩步進(jìn)行:先進(jìn)行靜態(tài)測(cè)試,再進(jìn)行動(dòng)態(tài)測(cè)試。,七 面向?qū)ο蟮募蓽y(cè)試,靜態(tài)測(cè)試主要針對(duì)程序的結(jié)構(gòu)進(jìn)行,檢測(cè)程序結(jié)構(gòu)是否符合設(shè)計(jì)要求。現(xiàn)在流行的一些測(cè)試軟件都能提供一種稱為“可逆性工程”的功能,即通過原程序得到類關(guān)系圖和函數(shù)功能調(diào)用關(guān)系圖。,七 面向?qū)ο蟮募蓽y(cè)試,動(dòng)態(tài)測(cè)試設(shè)

27、計(jì)測(cè)試用例時(shí),通常需要上述的功能調(diào)用結(jié)構(gòu)圖、類關(guān)系圖或者實(shí)體關(guān)系圖為參考,確定不需要被重復(fù)測(cè)試的部分,從而優(yōu)化測(cè)試用例,減少測(cè)試工作量,使得進(jìn)行的測(cè)試能夠達(dá)到一定覆蓋標(biāo)準(zhǔn)。測(cè)試所要達(dá)到的覆蓋標(biāo)準(zhǔn)可以是:達(dá)到類所有的服務(wù)要求或服務(wù)提供的一定覆蓋率;依據(jù)類間傳遞的消息,達(dá)到對(duì)所有執(zhí)行線程的一定覆蓋率;達(dá)到類的所有狀態(tài)的一定覆蓋率等。同時(shí)也可以考慮使用現(xiàn)有的一些測(cè)試工具 來得到程序代碼執(zhí)行的覆蓋率。,七 面向?qū)ο蟮募蓽y(cè)試,具體設(shè)計(jì)測(cè)試用例,參考下列步驟:1. 先選定檢測(cè)的類,參考OOD分析結(jié)果,仔細(xì)出類的狀態(tài)和相應(yīng)的行為,類或成員函數(shù)間傳遞的消息,輸入或輸出的界定等。2. 確定覆蓋標(biāo)準(zhǔn)。3. 利用結(jié)構(gòu)關(guān)系圖確定待測(cè)類的所有關(guān)聯(lián)。4. 根據(jù)程序中類的對(duì)象構(gòu)造測(cè)試用例,確認(rèn)使用什么輸入激發(fā)類的狀態(tài)、使用類的服務(wù)和期望產(chǎn)生什么行為等。,七 面向?qū)ο蟮募蓽y(cè)試,注:設(shè)計(jì)測(cè)試用例時(shí),不但要設(shè)計(jì)確認(rèn)類功能滿足的輸入,還應(yīng)該有意識(shí)的設(shè)計(jì)一些被禁止的例子,確認(rèn)類是否有不合法的行為產(chǎn)生,如發(fā)送與類狀態(tài)不相適應(yīng)的消息,要求不相適應(yīng)的服務(wù)等。根據(jù)具體情況,動(dòng)態(tài)的集成測(cè)試,有時(shí)也可以通過系統(tǒng)測(cè)試完成。,八 面向?qū)ο蟮南到y(tǒng)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論