《軟件工程與開(kāi)發(fā)技術(shù)》課件第14章_第1頁(yè)
《軟件工程與開(kāi)發(fā)技術(shù)》課件第14章_第2頁(yè)
《軟件工程與開(kāi)發(fā)技術(shù)》課件第14章_第3頁(yè)
《軟件工程與開(kāi)發(fā)技術(shù)》課件第14章_第4頁(yè)
《軟件工程與開(kāi)發(fā)技術(shù)》課件第14章_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第14章面向?qū)ο鬁y(cè)試基礎(chǔ)

14.1面向?qū)ο蟮膯卧獪y(cè)試14.2面向?qū)ο蟮募蓽y(cè)試14.3面向?qū)ο蟮拇_認(rèn)測(cè)試與系統(tǒng)測(cè)試14.4設(shè)計(jì)測(cè)試用例14.5小結(jié)

14.1面向?qū)ο蟮膯卧獪y(cè)試

在面向?qū)ο蟮能浖_(kāi)發(fā)中,“封裝”導(dǎo)致了類(lèi)和對(duì)象的定義特點(diǎn),這意味著類(lèi)和類(lèi)的實(shí)例(對(duì)象)包裝了屬性(數(shù)據(jù))和處理這些數(shù)據(jù)的操作(也稱為方法或服務(wù))。軟件的核心是“對(duì)象”,不像傳統(tǒng)軟件開(kāi)發(fā)中的“單元”(或者說(shuō)單元的概念改變了)。也就是說(shuō),封裝起來(lái)的類(lèi)和對(duì)象是最小的可測(cè)試單元。一個(gè)類(lèi)可以包含一組不同的操作,而一個(gè)特定的操作也可能定義在一組不同的類(lèi)中。因此,面向?qū)ο蟮能浖卧獪y(cè)試與傳統(tǒng)測(cè)試方法不一樣,它的含義發(fā)生了很大變化。面向?qū)ο筌浖膯卧獪y(cè)試不是獨(dú)立地測(cè)試單個(gè)操作,而是把所有操作都看成類(lèi)的一部分,全面地測(cè)試類(lèi)和對(duì)象所封裝的屬性和操縱這些屬性的操作整體。具體地說(shuō),在面向?qū)ο蟮膯卧獪y(cè)試中不僅要發(fā)現(xiàn)類(lèi)的所有操作中存在的問(wèn)題,還要考查一個(gè)類(lèi)與其他的類(lèi)協(xié)同工作時(shí)可能出現(xiàn)的錯(cuò)誤?,F(xiàn)以實(shí)例說(shuō)明:在一個(gè)類(lèi)層次中,操作A在超類(lèi)中定義并被一組子類(lèi)繼承,每個(gè)子類(lèi)都可使用操作A,但是A要調(diào)用子類(lèi)中定義的操作并處理子類(lèi)的私有屬性。由于在不同的子類(lèi)中使用操作A的環(huán)境有所不同,因此有必要在每個(gè)子類(lèi)的語(yǔ)境中測(cè)試操作A。這就是說(shuō),當(dāng)測(cè)試面向?qū)ο筌浖r(shí),傳統(tǒng)的單元測(cè)試方法是不完備的,我們不能再獨(dú)立地對(duì)操作A進(jìn)行測(cè)試。 14.2面向?qū)ο蟮募蓽y(cè)試

1.基于線程的測(cè)試(Thread_basedTesting)

基于線程的測(cè)試把響應(yīng)系統(tǒng)的一個(gè)輸入或一個(gè)事件所需要的一組類(lèi)集成起來(lái)進(jìn)行測(cè)試。應(yīng)當(dāng)分別集成并測(cè)試每個(gè)線程,同時(shí)為了避免產(chǎn)生副作用再進(jìn)行回歸測(cè)試。該測(cè)試需要基于系統(tǒng)的動(dòng)態(tài)模型。

2.基于使用的測(cè)試(Use_basedTesting)

基于使用的測(cè)試首先測(cè)試幾乎不使用服務(wù)器類(lèi)的那些類(lèi)(稱為獨(dú)立類(lèi));接著測(cè)試使用獨(dú)立類(lèi)的最下層的類(lèi)(稱為依賴類(lèi));然后,對(duì)根據(jù)依賴類(lèi)的使用關(guān)系,從下到上一個(gè)層次一個(gè)層次地持續(xù)進(jìn)行測(cè)試,直至把整個(gè)軟件系統(tǒng)測(cè)試完為止。

除了上述兩種測(cè)試方法,還有一種集群測(cè)試法,是面向?qū)ο筌浖蓽y(cè)試的一個(gè)步驟。為了檢查一群相互協(xié)作的類(lèi),用精心設(shè)計(jì)的測(cè)試用例,力圖發(fā)現(xiàn)協(xié)作錯(cuò)誤,即集群測(cè)試。通過(guò)研究對(duì)象模型可以確定協(xié)作類(lèi)。

為減少測(cè)試工作的工作量,在進(jìn)行集成測(cè)試時(shí),可參考類(lèi)關(guān)系圖或?qū)嶓w關(guān)系圖,確定不需要被重復(fù)測(cè)試的部分,從而優(yōu)化測(cè)試用例,使測(cè)試能夠達(dá)到一定的標(biāo)準(zhǔn)。14.3面向?qū)ο蟮拇_認(rèn)測(cè)試與系統(tǒng)測(cè)試

通過(guò)對(duì)軟件的單元測(cè)試和集成測(cè)試,僅能確認(rèn)軟件開(kāi)發(fā)的功能是正確的,不能確認(rèn)在實(shí)際運(yùn)行時(shí),它是否滿足用戶要求,是否大量存在與實(shí)際使用條件下的各種應(yīng)用相矛盾的錯(cuò)誤。為此在完成上述測(cè)試活動(dòng)后,還必須經(jīng)過(guò)規(guī)范的確認(rèn)測(cè)試和系統(tǒng)測(cè)試。

面向?qū)ο筌浖拇_認(rèn)測(cè)試或系統(tǒng)測(cè)試與傳統(tǒng)的確認(rèn)測(cè)試一樣,通過(guò)設(shè)計(jì)測(cè)試用例,主要檢查用戶界面和用戶可識(shí)別的輸出,不再考慮類(lèi)之間相互連接的細(xì)節(jié)。測(cè)試人員應(yīng)該認(rèn)真研究動(dòng)態(tài)模型和描述系統(tǒng)行為的腳本,為系統(tǒng)的輸入信息設(shè)計(jì)出錯(cuò)處理的通路,模擬錯(cuò)誤的數(shù)據(jù)和軟件界面可能發(fā)生的錯(cuò)誤,設(shè)計(jì)出合理的測(cè)試用例。

14.4設(shè)計(jì)測(cè)試用例

14.4.1測(cè)試用例概述

類(lèi)似于用例(UseCase)的定義,測(cè)試用例(TestCase)是為實(shí)現(xiàn)某個(gè)特殊目標(biāo)(驗(yàn)證或者找錯(cuò))而執(zhí)行系統(tǒng)的過(guò)程。它包括精心設(shè)計(jì)的一組測(cè)試輸入、執(zhí)行條件以及預(yù)期結(jié)果,以便測(cè)試某個(gè)程序功能或者路徑是否滿足特定需求。

測(cè)試用例包括對(duì)特定的軟件產(chǎn)品進(jìn)行測(cè)試的任務(wù)描述,體現(xiàn)測(cè)試方案、方法、技術(shù)和策略,其內(nèi)容包括測(cè)試目標(biāo)、測(cè)試環(huán)境、輸入數(shù)據(jù)、測(cè)試步驟、預(yù)期結(jié)果、測(cè)試腳本等,并形成文檔。測(cè)試用例是針對(duì)軟件產(chǎn)品的功能、業(yè)務(wù)規(guī)則和業(yè)務(wù)處理所設(shè)計(jì)的測(cè)試方案。對(duì)軟件的每個(gè)特定功能或運(yùn)行操作路徑的測(cè)試構(gòu)成了一個(gè)個(gè)測(cè)試用例。不同類(lèi)別的軟件,測(cè)試用例的策略、方法和側(cè)重點(diǎn)都是不同的。例如,企業(yè)信息管理類(lèi)軟件,其需求不確定或者變化較為頻繁,通常的策略是把測(cè)試數(shù)據(jù)和測(cè)試腳本從測(cè)試用例中劃分出來(lái),以供重用。

目前,面向?qū)ο筌浖臏y(cè)試用例的設(shè)計(jì)方法還處于研究、發(fā)展階段。1993年,Berard提出了指導(dǎo)面向?qū)ο蟮能浖y(cè)試用例設(shè)計(jì)的方法,要點(diǎn)如下:

(1)每一個(gè)測(cè)試用例都要有一個(gè)唯一的標(biāo)識(shí),并與被測(cè)試的一個(gè)或幾個(gè)類(lèi)相關(guān)聯(lián)起來(lái)。

(2)每個(gè)測(cè)試用例都要陳述測(cè)試目的。

(3)對(duì)每個(gè)測(cè)試用例要有相應(yīng)的測(cè)試步驟,包括被測(cè)對(duì)象的特定狀態(tài)、所使用的消息和操作、可能產(chǎn)生的錯(cuò)誤及測(cè)試需要的外部環(huán)境。

(4)與傳統(tǒng)軟件測(cè)試(測(cè)試用例的設(shè)計(jì)由軟件的輸入—處理—輸出或單個(gè)模塊的算法細(xì)節(jié)驅(qū)動(dòng))不同,面向?qū)ο鬁y(cè)試關(guān)注于設(shè)計(jì)適當(dāng)?shù)牟僮餍蛄幸詸z查類(lèi)的狀態(tài)。測(cè)試用例分為基于黑盒的測(cè)試用例和基于白盒的測(cè)試用例。前者也叫做基于系統(tǒng)外部需求的測(cè)試用例,主要根據(jù)需求分析階段的用例規(guī)格描述和其他需求進(jìn)行設(shè)計(jì),只觀察系統(tǒng)的外觀表現(xiàn)是否滿足預(yù)期要求;后者又稱為基于系統(tǒng)內(nèi)部結(jié)構(gòu)的測(cè)試用例,主要依據(jù)分析設(shè)計(jì)階段的邏輯和物理模型,如類(lèi)圖和順序圖以及代碼設(shè)計(jì)測(cè)試用例,旨在測(cè)試軟件功能執(zhí)行過(guò)程中對(duì)象的交互過(guò)程,包括消息、響應(yīng)以及各個(gè)程序路徑等。14.4.2面向?qū)ο蟾拍顚?duì)測(cè)試用例設(shè)計(jì)的影響

封裝性和繼承性是類(lèi)的重要特性,這為面向?qū)ο蟮能浖_(kāi)發(fā)帶來(lái)很多好處,同時(shí)它又為面向?qū)ο蟮能浖y(cè)試帶來(lái)負(fù)面影響。

類(lèi)的屬性和操作是被封裝的,而測(cè)試需要了解對(duì)象的詳細(xì)狀態(tài)。同時(shí),當(dāng)改變數(shù)據(jù)成員的結(jié)構(gòu)時(shí),要測(cè)試是否影響了類(lèi)的對(duì)外接口,是否導(dǎo)致相應(yīng)的外界必須改動(dòng)。例如,強(qiáng)制的類(lèi)型轉(zhuǎn)換會(huì)破壞數(shù)據(jù)的封裝性。請(qǐng)看下面的這段程序:classHd{

inta=1;

char*h=“Hd”;}

classVb{

public:intb=2;

char*v="Vb";}

Hdp;

Vb*q=(Vb*)&p;

這樣,p的私有數(shù)據(jù)成員a可以通過(guò)q被隨意訪問(wèn),破壞了類(lèi)Vb的封裝性。…此外,繼承不會(huì)減少對(duì)子類(lèi)的測(cè)試,相反,會(huì)使測(cè)試過(guò)程更加復(fù)雜化。因此,繼承也給測(cè)試用例的設(shè)計(jì)帶來(lái)負(fù)面影響。當(dāng)父類(lèi)與子類(lèi)的環(huán)境不同時(shí),父類(lèi)的測(cè)試用例對(duì)子類(lèi)沒(méi)有什么使用價(jià)值,必須為子類(lèi)設(shè)計(jì)新的測(cè)試用例。

在設(shè)計(jì)面向?qū)ο蟮臏y(cè)試用例時(shí)應(yīng)注意以下三點(diǎn):

(1)繼承的成員函數(shù)需要測(cè)試。對(duì)于在父類(lèi)中已經(jīng)測(cè)試過(guò)的成員函數(shù),根據(jù)具體情況仍需在子類(lèi)中重新測(cè)試。一般在下述兩種情況下要對(duì)成員函數(shù)重新進(jìn)行測(cè)試:

①繼承的成員函數(shù)在子類(lèi)中有所改動(dòng)。

②成員函數(shù)調(diào)用了改動(dòng)過(guò)的成員函數(shù)。

(2)子類(lèi)的測(cè)試用例可以參照父類(lèi)。例如,有兩個(gè)不同的成員函數(shù)的定義如下:

father::B()中定義為

if(value<0)message("less");

elseif(value==0)message("equal");

elsemessage("more");

son::B()中定義為

if(value<0)message("less");

elseif(value==0)message("Itisequal");

else{message("more");

if(value==99)message("Luck");}

在原有的測(cè)試上,對(duì)son::B()的測(cè)試只需做如下改動(dòng):將value=0的測(cè)試結(jié)果期望改動(dòng),并增加value==99這一條件的測(cè)試。

(3)設(shè)計(jì)測(cè)試用例時(shí),不但要設(shè)計(jì)確認(rèn)類(lèi)功能滿足的輸入,而且還應(yīng)有意識(shí)地設(shè)計(jì)一些被禁止的例子,確認(rèn)類(lèi)是否有不合法的行為產(chǎn)生。14.4.3類(lèi)測(cè)試用例設(shè)計(jì)

1.基于故障的測(cè)試用例設(shè)計(jì)

基于故障的測(cè)試(Fault_basedTesting)與傳統(tǒng)的錯(cuò)誤推測(cè)法類(lèi)似,通過(guò)對(duì)面向?qū)ο蠓治龌蛎嫦驅(qū)ο笤O(shè)計(jì)模型的分析,首先推測(cè)軟件中可能有的錯(cuò)誤,然后設(shè)計(jì)出最可能發(fā)現(xiàn)這些錯(cuò)誤的測(cè)試用例。例如,軟件工程師經(jīng)常在問(wèn)題的邊界處犯錯(cuò)誤,因此,在測(cè)試(計(jì)算平方根)操作(該操作在輸入為負(fù)數(shù)時(shí)返回出錯(cuò)信息)時(shí),應(yīng)該著重檢查邊界情況:一個(gè)接近零的負(fù)數(shù)和零本身。其中,“零本身”用于檢查程序員是否犯了如下錯(cuò)誤:

(1)把語(yǔ)句if(x>=0)calculate=sqr(x);誤寫(xiě)成if(x>0)calculate=sqr(x);。

(2)程序中將if(strncmp(str1,str2,strlen(str1)))誤寫(xiě)成if(strncmp(str1,str2,strlen(str2))),那么如果在測(cè)試用例中使用的數(shù)據(jù)str1和str2長(zhǎng)度相同,就無(wú)法檢測(cè)出錯(cuò)誤。

為了推測(cè)出軟件中可能有的錯(cuò)誤,測(cè)試人員應(yīng)該認(rèn)真研究分析模型和設(shè)計(jì)模型,還得依靠測(cè)試人員的經(jīng)驗(yàn)和直覺(jué)。如果推測(cè)得比較準(zhǔn)確,則使用基于故障的測(cè)試方法能夠用較少的工作量發(fā)現(xiàn)大量錯(cuò)誤,否則不然。

2.基于用例的測(cè)試用例設(shè)計(jì)

基于故障的測(cè)試用例有一個(gè)很突出的缺點(diǎn),當(dāng)功能描述是錯(cuò)誤的或子系統(tǒng)間的交互存在錯(cuò)誤時(shí),基于故障的測(cè)試用例就無(wú)法發(fā)現(xiàn)錯(cuò)誤。

基于用例的測(cè)試用例更關(guān)心的是用戶想做什么,而不是軟件想做什么。通過(guò)用例獲取用戶要完成的功能,并以此為依據(jù)設(shè)計(jì)所涉及的各個(gè)類(lèi)的測(cè)試用例。更具體地說(shuō),先搞清楚用戶想實(shí)現(xiàn)哪些功能,然后去尋找完成這些功能,需要哪些類(lèi)參與,從功能出發(fā),對(duì)所確定的這些類(lèi)及其子類(lèi)分別設(shè)計(jì)類(lèi)測(cè)試用例。用例實(shí)現(xiàn)涉及到的類(lèi)在動(dòng)態(tài)模型,尤其是順序圖或通信圖中可以得到充分的展現(xiàn),因此基于用例的測(cè)試用例設(shè)計(jì)應(yīng)該好好地研究、分析和設(shè)計(jì)模型中的動(dòng)態(tài)模型。14.4.4類(lèi)間測(cè)試用例設(shè)計(jì)

1.多個(gè)類(lèi)的劃分測(cè)試方法

多個(gè)類(lèi)的劃分測(cè)試方法有三種,即基于狀態(tài)的劃分、基于屬性的劃分和基于功能的劃分。根據(jù)類(lèi)操作改變類(lèi)狀態(tài)的能力來(lái)劃分類(lèi)操作,稱為基于狀態(tài)的劃分法;根據(jù)類(lèi)操作使用的屬性來(lái)劃分類(lèi)操作,稱為基于屬性的劃分法;根據(jù)類(lèi)操作所完成的功能來(lái)劃分類(lèi)操作,稱為基于功能的劃分法。另外,多類(lèi)測(cè)試還應(yīng)該包括那些通過(guò)發(fā)送給協(xié)作類(lèi)的消息而被調(diào)用的操作。根據(jù)與特定類(lèi)的接口來(lái)劃分類(lèi)操作也是一種可用的劃分測(cè)試方法。

2.從行為模型導(dǎo)出測(cè)試用例

動(dòng)態(tài)行為模型由幾個(gè)狀態(tài)轉(zhuǎn)換圖組成的。根據(jù)類(lèi)的狀態(tài)圖,可以設(shè)計(jì)出測(cè)試該類(lèi)以及類(lèi)間動(dòng)態(tài)行為的測(cè)試用例。同時(shí),為了保證該類(lèi)的所有行為都能被測(cè)試,還可以利用狀態(tài)圖設(shè)計(jì)更多測(cè)試用例。14.4.5測(cè)試用例設(shè)計(jì)舉例

1.基于用例(UseCase)的測(cè)試用例設(shè)計(jì)

用于功能性測(cè)試的測(cè)試用例來(lái)源于測(cè)試目標(biāo)的用例。應(yīng)該為每個(gè)用例場(chǎng)景編制測(cè)試用例。用例場(chǎng)景要通過(guò)描述流經(jīng)用例的路徑來(lái)確定。這個(gè)流經(jīng)過(guò)程要從用例開(kāi)始到結(jié)束,遍歷其中所有基本流和備選流。

例如,圖14.1中經(jīng)過(guò)用例的每條不同路徑反映了基本流和備選流,用箭頭來(lái)表示?;玖饔煤谥本€來(lái)表示,是經(jīng)過(guò)用例的最簡(jiǎn)單的路徑。每個(gè)備選流自基本流開(kāi)始,之后,備選流會(huì)在某個(gè)特定條件下執(zhí)行。備選流可能會(huì)重新加入基本流中(備選流1和備選流3),還可能起源于另一個(gè)備選流(備選流2),或者終止用例而不再重新加入某個(gè)流(備選流2和備選流4)。圖14.1用例的執(zhí)行路徑(基本路徑和備選路徑)

根據(jù)上述每個(gè)場(chǎng)景可以生成測(cè)試用例,生成每個(gè)場(chǎng)景的測(cè)試用例是通過(guò)確定某個(gè)特定條件來(lái)完成的。這個(gè)特定條件將導(dǎo)致特定用例場(chǎng)景的執(zhí)行。例如,假定圖14.1描述的用例對(duì)備選流3規(guī)定為:“如果在上述步驟2[輸入提款金額]中輸入的金額超出當(dāng)前賬戶余額,則出現(xiàn)此事件流。系統(tǒng)將顯示一則警告消息,之后重新加入基本流,再次執(zhí)行上述步驟2

[輸入提款金額],此時(shí)銀行客戶可以輸入新的提款金額?!睋?jù)此,可以開(kāi)始確定需要用來(lái)執(zhí)行備選流3的測(cè)試用例,如表14.2所示。

2.基于白盒技術(shù)的單元測(cè)試的測(cè)試用例設(shè)計(jì)

從理論上來(lái)講,白盒測(cè)試應(yīng)該測(cè)試程序每一條可能的路徑。在所有簡(jiǎn)單的單元內(nèi)實(shí)現(xiàn)這樣的目標(biāo)是不切實(shí)際的。作為最基本的測(cè)試,應(yīng)將每個(gè)決策(Decision)到?jīng)Q策路徑(DD路徑)測(cè)試至少一次,這樣可確保將所有語(yǔ)句至少執(zhí)行一次。決策通常是指if語(yǔ)句,而DD路徑是兩個(gè)決策之間的路徑。要達(dá)到這種程度的測(cè)試覆蓋,測(cè)試用例應(yīng)確保:

(1)每個(gè)if語(yǔ)言的布爾表達(dá)式的求值結(jié)果為true和false。例如,表達(dá)式(a<3)or(b>4)的求值結(jié)果為true/false的四種組合,即滿足條件覆蓋。

(2)每一個(gè)循環(huán)至少要執(zhí)行零次、一次和一次以上。

(3)可使用代碼覆蓋工具來(lái)確定白盒測(cè)試未測(cè)試到的代碼,另外在進(jìn)行白盒測(cè)試的同時(shí)應(yīng)進(jìn)行可靠性測(cè)試。

例如,假設(shè)對(duì)類(lèi)SetofPrime中

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論