面向?qū)ο蟮能浖y(cè)試技術(shù)
軟件評(píng)測(cè)師教程(第7章):面向?qū)ο蟮能浖y(cè)試技術(shù)
2 面向?qū)ο蠹夹g(shù)
2.1 什么是對(duì)象和類
對(duì)象:萬(wàn)物皆對(duì)象
類:實(shí)現(xiàn)抽象類型的工具
實(shí)例:類的某一個(gè)具體實(shí)現(xiàn)
過(guò)程式編程語(yǔ)言:程序=算法+數(shù)據(jù)
面向?qū)ο缶幊陶Z(yǔ)言:程序=對(duì)象+消息
2.2 封裝,繼承和多態(tài)
- 封裝:把數(shù)據(jù)和操作結(jié)合為一體,構(gòu)成的一個(gè)具有類類型的對(duì)象的描述。使程序更加緊湊,同時(shí)避免數(shù)據(jù)紊亂帶來(lái)的調(diào)試和維護(hù)的困難。
- 繼承:增加了程序的可擴(kuò)充性,并為代碼重用提供了強(qiáng)有力的手段。
- 多態(tài):使程序員在設(shè)計(jì)程序時(shí)可以對(duì)問(wèn)題進(jìn)行更好的抽象,易設(shè)計(jì)出重用性和維護(hù)性俱佳的程序。
封裝的特點(diǎn):
- 一個(gè)對(duì)象應(yīng)具有明確的功能,并且有一個(gè)或幾個(gè)接口以便和其他對(duì)象相互作用。
- 對(duì)象的內(nèi)部實(shí)現(xiàn)(數(shù)據(jù)和操作)是受保護(hù)的,外界不能訪問(wèn)它們。只有對(duì)象中的代碼才能訪問(wèn)該對(duì)象的內(nèi)部數(shù)據(jù)。這稱為數(shù)據(jù)隱藏。
- 封裝簡(jiǎn)化了程序員對(duì)對(duì)象的使用,只需要輸入是什么,輸出是什么,而對(duì)類內(nèi)部進(jìn)行了什么操作不必追究。
繼承的特點(diǎn)
- 繼承可以從一個(gè)類派生另一個(gè)類
- 派生的類繼承了其子類和祖父類的數(shù)據(jù)成員和成員函數(shù)。
- 派生類可以增加新的屬性和新的操作。
- 派生類繼承的成員函數(shù)不合適時(shí)可以不用。
多態(tài)的特點(diǎn)
- 多態(tài)性就是多種表現(xiàn)形式
- 一個(gè)對(duì)外接口,多種表現(xiàn)形式
- 多態(tài)的實(shí)現(xiàn),一般通過(guò)在派生類中重定義基類的虛函數(shù)來(lái)實(shí)現(xiàn)。(C++的虛函數(shù))
由于面向?qū)ο筌浖?dú)有的多態(tài)、繼承、封裝等特點(diǎn),使OOP程序設(shè)計(jì)比傳統(tǒng)語(yǔ)言設(shè)計(jì)產(chǎn)生錯(cuò)誤的可能性更大。因此也需要一種面向?qū)ο蟮臏y(cè)試模型。
3 面向?qū)ο鬁y(cè)試模型
面向?qū)ο蟮拈_(kāi)發(fā)模型突破了傳統(tǒng)的瀑布模型,將開(kāi)發(fā)分為面向?qū)ο蠓治觯∣OA),面向?qū)ο笤O(shè)計(jì)(OOD),面向?qū)ο缶幊蹋∣OP)三階段。
結(jié)合傳統(tǒng)的測(cè)試步驟的劃分,我們把面向?qū)ο蟮能浖y(cè)試分為:面向?qū)ο蠓治龅臏y(cè)試,面向?qū)ο笤O(shè)計(jì)的測(cè)試,面向?qū)ο缶幊痰臏y(cè)試,面向?qū)ο髥卧獪y(cè)試,面向?qū)ο蠹蓽y(cè)試,面向?qū)ο蟠_認(rèn)和系統(tǒng)測(cè)試。

4 面向?qū)ο筌浖臏y(cè)試策略
4.1 OOA的測(cè)試
把E-R圖和語(yǔ)義網(wǎng)絡(luò)模型,即信息造型中的概念,與面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言中的重要概念結(jié)合在一起而形成的分析方法。
- 對(duì)認(rèn)定的對(duì)象測(cè)試:對(duì)象是否全面等
- 對(duì)認(rèn)定的結(jié)構(gòu)測(cè)試:分類結(jié)構(gòu)和組裝結(jié)構(gòu)
- 對(duì)認(rèn)定的主題測(cè)試
- 對(duì)定義的屬性和實(shí)例關(guān)聯(lián)的測(cè)試
- 對(duì)定義的服務(wù)和消息關(guān)聯(lián)的測(cè)試
4.2 OOD的測(cè)試
以O(shè)OA為基礎(chǔ)歸納出類,并建立類結(jié)構(gòu)或進(jìn)一步構(gòu)造成類庫(kù),以實(shí)現(xiàn)分析結(jié)果對(duì)問(wèn)題空間的抽象。OOD歸納的類即可以是對(duì)象簡(jiǎn)單的延續(xù),也可以是不同對(duì)象的相同或相似的服務(wù)。因此OOD是OOA進(jìn)一步細(xì)化和更高層的抽象。
- 對(duì)認(rèn)定的類測(cè)試
- 對(duì)構(gòu)造的類層次結(jié)構(gòu)的測(cè)試
- 對(duì)類庫(kù)的支持的測(cè)試
4.3 OOP的測(cè)試
面向?qū)ο蟪绦蚴前压δ艿膶?shí)現(xiàn)分布在類中,能正確實(shí)現(xiàn)功能的類,通過(guò)消息傳遞來(lái)協(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)為兩個(gè)方向(假設(shè)編程語(yǔ)言為C++)。
- 數(shù)據(jù)成員是否滿足數(shù)據(jù)封裝的要求
基本原則:數(shù)據(jù)成員是否被外界(數(shù)據(jù)成員所屬的類或子類以外的調(diào)用)直接調(diào)用。即改變數(shù)據(jù)成員的結(jié)構(gòu)時(shí),是否影響了類的對(duì)外接口,是否會(huì)導(dǎo)致相應(yīng)的外界必須改掉。
注意點(diǎn):有時(shí)強(qiáng)制類型轉(zhuǎn)換會(huì)破壞數(shù)據(jù)的封裝特性。
- 類是否實(shí)現(xiàn)了要求的功能
類所實(shí)現(xiàn)的功能都是通過(guò)類的成員函數(shù)執(zhí)行的,測(cè)試類的功能實(shí)現(xiàn)時(shí),應(yīng)該首先保證類成員函數(shù)的正確性。可以用單元測(cè)試進(jìn)行驗(yàn)證。
類成員函數(shù)見(jiàn)的作用和類之間的服務(wù)調(diào)用時(shí)單元測(cè)試無(wú)法確定的,因此需要進(jìn)行面向?qū)ο蟮募蓽y(cè)試。
4.4 面向?qū)ο蟮膯卧獪y(cè)試
一些傳統(tǒng)的測(cè)試方法在面向?qū)ο蟮膯卧獪y(cè)試中都可以使用。如等價(jià)類劃分法,因果圖法,邊界值分析法,邏輯覆蓋法、路徑分析法,程序插裝法等。難度較小,一般由程序員完成。
4.5 面向?qū)ο蟮募蓽y(cè)試
對(duì)OO軟件的集成測(cè)試有兩種不同的策略,第一種稱為基于線程的測(cè)試(thread based testing);第二種稱為基于使用的測(cè)試(use based testing)。
面向?qū)ο蟮募蓽y(cè)試分為兩步:先進(jìn)行靜態(tài)測(cè)試,再進(jìn)行動(dòng)態(tài)測(cè)試。
靜態(tài)測(cè)試主要針對(duì)程序的結(jié)構(gòu)進(jìn)行,檢測(cè)程序結(jié)構(gòu)是否符合設(shè)計(jì)要求。通過(guò)源程序得到類關(guān)系圖和函數(shù)功能調(diào)用關(guān)系圖。
動(dòng)態(tài)測(cè)試設(shè)計(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)。
覆蓋標(biāo)準(zhǔn)是:
- 達(dá)到類所有的服務(wù)要求或服務(wù)提供的一定覆蓋率;
- 依據(jù)類間傳遞的消息,達(dá)到對(duì)所有執(zhí)行線程的一定覆蓋率;
- 達(dá)到類的所有狀態(tài)的一定覆蓋率;
- 使用現(xiàn)有工具來(lái)得到程序代碼執(zhí)行的覆蓋率。
具體的設(shè)計(jì)用例的步驟:
1)先選定檢測(cè)的類,確定出類的相應(yīng)狀態(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)生什么行為等。
5)設(shè)計(jì)異常輸入,確定是否有不合法的行為發(fā)生等。
4.6 面向?qū)ο筌浖拇_認(rèn)和系統(tǒng)測(cè)試
盡量搭建與用戶實(shí)際使用環(huán)境相同的測(cè)試平臺(tái),應(yīng)該保證被測(cè)系統(tǒng)的完整性,對(duì)暫時(shí)沒(méi)有的系統(tǒng)設(shè)備部件,應(yīng)采用相應(yīng)的模擬手段。
OO軟件確認(rèn)和系統(tǒng)測(cè)試具體的測(cè)試內(nèi)容與傳統(tǒng)系統(tǒng)測(cè)試基本相同,包括:功能測(cè)試、強(qiáng)度測(cè)試、性能測(cè)試、安全測(cè)試、恢復(fù)測(cè)試、易用性測(cè)試、安裝/卸載測(cè)試等。
5 面向?qū)ο筌浖y(cè)試用例設(shè)計(jì)
關(guān)注于設(shè)計(jì)合適的操作序列以測(cè)試類的狀態(tài)。
Berard提出了一些測(cè)試用例的設(shè)計(jì)方法,主要原則如下:
- 對(duì)每個(gè)測(cè)試用例應(yīng)當(dāng)給予特殊的標(biāo)識(shí),并且還應(yīng)當(dāng)與測(cè)試的類有明確的聯(lián)系。
- 測(cè)試目的應(yīng)當(dāng)明確。
- 應(yīng)當(dāng)為每個(gè)測(cè)試用例開(kāi)發(fā)一個(gè)測(cè)試步驟列表,列表包含以下內(nèi)容
- 列出所要測(cè)試的對(duì)象的專門說(shuō)明
- 列出要做為測(cè)試結(jié)果運(yùn)行的消息和操作
- 列出測(cè)試對(duì)象可能發(fā)生的例外情況
- 列出外部條件
- 列出為了幫助理解和實(shí)現(xiàn)測(cè)試所需要的附加信息。
5.1 傳統(tǒng)測(cè)試用例設(shè)計(jì)方法的可用性
盡管OO軟件的局限性、封裝性、信息隱藏、繼承性和對(duì)象的抽象這些特性使得測(cè)試用例設(shè)計(jì)帶來(lái)了額外的麻煩和困難,但是黑盒測(cè)試技術(shù)不僅僅適用于傳統(tǒng)軟件,也適用于OO軟件測(cè)試。白盒測(cè)試也用于OO軟件類的操作定義。
浙公網(wǎng)安備 33010602011771號(hào)