版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
軟件工程
SoftwareEngineering
主講教師:宋濤電子郵箱:songme2000@163.com手機(jī)始i=1,j=0,k=0,m=0輸入學(xué)生人數(shù)Ni≤N?輸出“獎(jiǎng)100元比例:”,j/N*100,“%”輸出“獎(jiǎng)50元比例:”,k/N*100,“%”輸出“獎(jiǎng)20元比例:”,m/N*100,“%”輸入名單、成績成績>90?j++,i++輸出名單成績獎(jiǎng)勵(lì)100元結(jié)束成績>80?k++,i++輸出名單成績獎(jiǎng)勵(lì)50元成績>60?m++,i++輸出名單成績獎(jiǎng)勵(lì)20元i++NNYYYYNN3/84:第6章軟件實(shí)現(xiàn)
實(shí)現(xiàn)=<編碼,測試>
編碼:軟件設(shè)計(jì)程序程序的質(zhì)量主要取決于軟件設(shè)計(jì)的質(zhì)量。程序設(shè)計(jì)語言的特點(diǎn)和編碼風(fēng)格也會(huì)對程序的可靠性、可讀性、可測試性和可維護(hù)性產(chǎn)生深遠(yuǎn)的影響。所謂編碼就是把軟件設(shè)計(jì)翻譯成計(jì)算機(jī)可以理解的形式——用某種程序設(shè)計(jì)語言書寫的程序。在進(jìn)行軟件分析、設(shè)計(jì)的過程中,難免有各種各樣的錯(cuò)誤,軟件開發(fā)過程始終需要有質(zhì)量保證活動(dòng)。軟件測試是主要的質(zhì)量保證活動(dòng)之一。測試的目的就是在軟件投入生產(chǎn)性運(yùn)行之前,盡可能多地發(fā)現(xiàn)軟件中的錯(cuò)誤。軟件測試在軟件生命周期中橫跨兩個(gè)階段。通常在編寫出每個(gè)模塊之后就對它做必要的測試(稱為單元測試),模塊的編寫者和測試者是同一個(gè)人,編碼和單元測試屬于軟件生命周期的同一個(gè)階段。在這個(gè)階段結(jié)束之后,對軟件系統(tǒng)還應(yīng)該進(jìn)行各種綜合測試,這是軟件生命周期中的另一個(gè)獨(dú)立的階段,通常由專門的測試人員承擔(dān)這項(xiàng)工作。僅就測試而言,它的目標(biāo)是發(fā)現(xiàn)軟件中的錯(cuò)誤,但是,發(fā)現(xiàn)錯(cuò)誤并不是我們的最終目的。軟件工程的根本目標(biāo)是開發(fā)出高質(zhì)量的完全符合用戶需要的軟件,因此,通過測試發(fā)現(xiàn)錯(cuò)誤之后還必須診斷并改正錯(cuò)誤,這就是調(diào)試的目的。調(diào)試是測試階段最困難的工作。6.1結(jié)構(gòu)化程序設(shè)計(jì)6.2選擇程序設(shè)計(jì)語言6.3程序設(shè)計(jì)風(fēng)格6.4程序設(shè)計(jì)質(zhì)量的評價(jià)6.5程序設(shè)計(jì)文檔6.6軟件測試的目標(biāo)和原則6.7軟件測試的方法6.8軟件測試的步驟6.9設(shè)計(jì)測試方案6.10軟件調(diào)試、驗(yàn)證與確認(rèn)6.1結(jié)構(gòu)化程序設(shè)計(jì)作為軟件工程過程的一個(gè)階段,編碼是設(shè)計(jì)的自然結(jié)果,因此,程序的質(zhì)量主要取決于軟件設(shè)計(jì)的質(zhì)量。但是,所選用的程序設(shè)計(jì)語言的特點(diǎn)和編碼風(fēng)格也會(huì)對程序的可靠性、可讀性、可測試性和可維護(hù)性產(chǎn)生深遠(yuǎn)的影響。什么是結(jié)構(gòu)化程序設(shè)計(jì)?結(jié)構(gòu)化程序設(shè)計(jì)(StructuredProgram)是由基本的控制結(jié)構(gòu)構(gòu)造而成的程序。每個(gè)控制結(jié)構(gòu)只有一個(gè)入口點(diǎn)和一個(gè)出口點(diǎn)??刂平Y(jié)構(gòu)集包括指令序列、指令或指令序列的條件選擇,以及一個(gè)指令或指令序列的重復(fù)執(zhí)行。結(jié)構(gòu)化程序設(shè)計(jì)嚴(yán)格地使用結(jié)構(gòu)化程序構(gòu)造軟件,并強(qiáng)調(diào)模塊只采用順序、選擇、循環(huán)三種基本控制結(jié)構(gòu)。例:打印A,B,C三個(gè)數(shù)中最小者的程序程序1:
if(A<B)goto120;
if(B<C)goto110;100write(C);
goto140;110write(B);
goto140;120if(A<C)goto130;
goto100;130write(A);140end程序2:
if(A<B)and(A<C)then
write(A) else
if(A>=B)and(B<C)then
write(B) else
write(C)
endif
endif6.2選擇程序設(shè)計(jì)語言做為軟件工程過程的一個(gè)階段,程序編碼是設(shè)計(jì)的繼續(xù)。程序設(shè)計(jì)語言的特性會(huì)深刻地影響軟件的質(zhì)量和可維護(hù)性。為了保證程序編碼的質(zhì)量,程序員必須深刻理解、熟練掌握并正確地運(yùn)用程序設(shè)計(jì)語言的特性。此外,還要求源程序具有良好的結(jié)構(gòu)性和良好的程序設(shè)計(jì)風(fēng)格。目前應(yīng)用較多的程序設(shè)計(jì)語言主要分為面向機(jī)器語言和高級程序設(shè)計(jì)語言兩大類。面向機(jī)器語言面向機(jī)器語言包括機(jī)器語言和匯編語言。他們都依賴于計(jì)算機(jī)硬件結(jié)構(gòu),指令系統(tǒng)因機(jī)器而異,難學(xué)難用。缺點(diǎn):編程效率低、容易出錯(cuò)、維護(hù)困難。優(yōu)點(diǎn):易于實(shí)現(xiàn)系統(tǒng)接口,執(zhí)行效率高。選擇面向機(jī)器語言的情況:軟件系統(tǒng)對程序執(zhí)行時(shí)間和使用空間都有嚴(yán)格限制。系統(tǒng)硬件是特殊的微處理機(jī),不能使用高級語言。大型系統(tǒng)中某一部分,其執(zhí)行時(shí)間非常關(guān)鍵,或直接依賴于硬件,這部分用匯編語言編寫。高級程序設(shè)計(jì)語言高級程序設(shè)計(jì)語言使用的概念和符號與人們通常使用的概念和符號比較接近,一般不依賴于計(jì)算機(jī),通用性強(qiáng)。高級語言選用的實(shí)用標(biāo)準(zhǔn):(1)項(xiàng)目的應(yīng)用領(lǐng)域(2)軟件開發(fā)環(huán)境(3)根據(jù)系統(tǒng)用戶的要求來選擇(4)軟件開發(fā)人員的知識6.3程序設(shè)計(jì)風(fēng)格程序?qū)嶋H上也是一種供人閱讀的文章,有一個(gè)文章的風(fēng)格問題。程序設(shè)計(jì)風(fēng)格指編寫程序時(shí)的特點(diǎn)、習(xí)慣和編輯思路等。應(yīng)該使程序具有良好的風(fēng)格。源程序代碼的邏輯簡明清晰、易讀易懂是好程序的一個(gè)重要標(biāo)準(zhǔn),為了做到這一點(diǎn),應(yīng)該遵循下述規(guī)則。
源程序文檔編寫規(guī)則數(shù)據(jù)說明語句構(gòu)造要簡單直接輸入/輸出語句 程序效率
1.程序內(nèi)部的文檔 所謂程序內(nèi)部的文檔包括恰當(dāng)?shù)臉?biāo)識符、適當(dāng)?shù)淖⒔夂统绦虻囊曈X組織等等。符號名的命名符號名即標(biāo)識符,包括模塊名、變量名、常量名、標(biāo)號名、子程序名、數(shù)據(jù)區(qū)名以及緩沖區(qū)名等。這些名字應(yīng)能反映它所代表的實(shí)際東西,應(yīng)有一定實(shí)際意義。例如,表示次數(shù)的量用Times,表示總量的用Total,表示平均值的用Average,表示和的量用Sum等。程序的注釋
夾在程序中的注釋是程序員與日后的程序讀者之間通信的重要手段。注釋決不是可有可無的。一些正規(guī)的程序文本中,注釋行的數(shù)量占到整個(gè)源程序的1/3到1/2,甚至更多。通常在每個(gè)模塊開始處用注解簡述模塊的功能、主要算法、接口特點(diǎn)、調(diào)用方法及開發(fā)簡史等。注釋內(nèi)容要正確,要對重要數(shù)據(jù)的含義、用途、限制以及約束進(jìn)行注解。注釋分為序言性注釋和功能性注釋。
序言性注釋,通常置于每個(gè)程序模塊的開頭部分,它應(yīng)當(dāng)給出程序的整體說明,對于理解程序本身具有引導(dǎo)作用。有些軟件開發(fā)部門對序言性注釋做了明確而嚴(yán)格的規(guī)定,要求程序編制者逐項(xiàng)列出;功能性注釋嵌在源程序體中,用以描述其后的語句或程序段是在做什么工作,或是執(zhí)行了下面的語句會(huì)怎么樣。而不要解釋下面怎么做。視覺組織空格、空行和移行恰當(dāng)?shù)乩每崭?,可以突出運(yùn)算的優(yōu)先性,避免發(fā)生運(yùn)算的錯(cuò)誤。例如,將表達(dá)式
(A<-17)ANDNOT(B<=49)ORC
寫成
(A<-17)ANDNOT(B<=49)ORC自然的程序段之間可用空行隔開;對于選擇語句和循環(huán)語句,把其中的程序段語句向右做階梯式移行。使程序的邏輯結(jié)構(gòu)更加清晰。1.數(shù)據(jù)說明的次序應(yīng)當(dāng)規(guī)范化2.說明語句中變量安排有序化3.使用注釋說明復(fù)雜數(shù)據(jù)結(jié)構(gòu)4.變量說明不要遺漏,變量的類型、長度、存儲及初始化要正確2.數(shù)據(jù)說明雖然在設(shè)計(jì)期間已經(jīng)確定了數(shù)據(jù)結(jié)構(gòu)的組織和復(fù)雜程度,然而數(shù)據(jù)說明的風(fēng)格卻是在寫程序時(shí)確定的。為了使數(shù)據(jù)更容易理解和維護(hù),有一些比較簡單的原則應(yīng)該遵循。3.語句構(gòu)造要簡單直接 構(gòu)造語句時(shí)應(yīng)該遵循的原則是,每個(gè)語句都應(yīng)該簡單而直接,不能為了提高效率而使程序變得過分復(fù)雜。1.在一行內(nèi)只寫一條語句2.程序編寫首先應(yīng)當(dāng)考慮清晰性3.程序要能直截了當(dāng)?shù)卣f明程序員的用意。4.除非對效率有特殊的要求,程序編寫要做到清晰第一,效率第二。5.首先要保證程序正確,然后才要求提高速度。6.盡可能使用庫函數(shù)7.避免不必要的轉(zhuǎn)移。8.盡量只采用三種基本的控制結(jié)構(gòu)來編寫程序。9.要模塊化,使模塊功能盡可能單一化,模塊間的耦合能夠清晰可見。10.利用信息隱蔽,確保每一個(gè)模塊的獨(dú)立性。11.不要修補(bǔ)不好的程序,要重新編寫。也不要一味地追求代碼的復(fù)用,要重新組織。12.對太大的程序,要分塊編寫、測試,然后再集成。13.對遞歸定義的數(shù)據(jù)結(jié)構(gòu)盡量使用遞歸過程。4.輸入/輸出語句在編寫輸入/輸出語句風(fēng)格的規(guī)則:
對所有輸入數(shù)據(jù)都進(jìn)行檢驗(yàn)檢查輸入項(xiàng)重要組合的合法性保持輸入格式簡單使用數(shù)據(jù)結(jié)束標(biāo)記,不要要求用戶指定數(shù)據(jù)的數(shù)目明確提示交互式輸入的請求,詳細(xì)說明可用的選擇或邊界數(shù)值當(dāng)程序設(shè)計(jì)語言對格式有嚴(yán)格要求時(shí),應(yīng)保持輸入格式與輸入語句的要求一致設(shè)計(jì)良好的輸出報(bào)表給所有輸出數(shù)據(jù)加標(biāo)志5.效率效率主要指處理機(jī)時(shí)間和存儲器容量兩個(gè)方面。雖然值得提出提高效率的要求,但是在進(jìn)一步討論這個(gè)問題之前應(yīng)該記住三條原則:首先,效率是性能要求,因此應(yīng)該在需求分析階段確定效率方面的要求。軟件應(yīng)該像對它要求的那樣有效,而不應(yīng)該如同人類可能做到的那樣有效。其次,效率是靠好設(shè)計(jì)來提高的。第三,程序的效率和程序的簡單程度是一致的。不要犧牲程序的清晰性和可讀性來不必要地提高效率。6.4程序設(shè)計(jì)質(zhì)量的評價(jià)程序設(shè)計(jì)質(zhì)量的評價(jià)需要考慮多方面的因素,不同的設(shè)計(jì)課題對質(zhì)量要求會(huì)有不同的側(cè)重點(diǎn)。 程序設(shè)計(jì)質(zhì)量的最基本要求是正確性,現(xiàn)在更注重軟件的易實(shí)用性、易維護(hù)性和易移植性。一、正確性
1、程序中沒有語法錯(cuò)誤
2、程序運(yùn)行時(shí)沒有發(fā)現(xiàn)明確的運(yùn)行錯(cuò)誤
3、程序中沒有不適當(dāng)?shù)恼Z句
4、用有效的測試數(shù)據(jù),得到程序的正確結(jié)果
5、用無效的測試數(shù)據(jù),得到程序的正確結(jié)果
6、用任何可能的數(shù)據(jù),使程序在運(yùn)行時(shí)得到 正確的結(jié)果。二、清晰的結(jié)構(gòu)
1、是否用三種結(jié)構(gòu)化格式表示程序的控制邏輯
2、是否有一個(gè)入口,一個(gè)出口
3、是否嚴(yán)格控制GOTO語句三、易使用性四、易維護(hù)性五、簡單性六、易移植性6.5程序設(shè)計(jì)文檔程序設(shè)計(jì)的依據(jù)是詳細(xì)設(shè)計(jì)文檔,軟件編碼階段產(chǎn)生的主要文檔是源程序。在編碼結(jié)束前,應(yīng)對每個(gè)程序模塊的源程序進(jìn)行靜態(tài)分析和模塊測試,并做好測試記錄。靜態(tài)分析和模塊測試時(shí),應(yīng)檢查下述內(nèi)容:(1)程序是否與詳細(xì)設(shè)計(jì)相符合,模塊的運(yùn)行是否正確(2)內(nèi)部文件和程序的可讀性如何(3)堅(jiān)持結(jié)構(gòu)化程序設(shè)計(jì)標(biāo)準(zhǔn),語言使用是否得當(dāng)6.6軟件測試的目標(biāo)和原則 基于不同的立場,存在著兩種完全不同的測試目的。從用戶的角度出發(fā),普遍希望通過軟件測試暴露軟件中隱藏的錯(cuò)誤和缺陷,以考慮是否可接受該產(chǎn)品。從軟件開發(fā)者的角度出發(fā),則希望測試成為表明軟件產(chǎn)品中不存在錯(cuò)誤的過程,驗(yàn)證該軟件已正確地實(shí)現(xiàn)了用戶的要求,確立人們對軟件質(zhì)量的信心。
G.Myers給出了關(guān)于測試的一些規(guī)則,這些規(guī)則也可以看作是測試的目標(biāo)或定義:
·測試是為了發(fā)現(xiàn)程序中的錯(cuò)誤而執(zhí)行程序的過程;
·好的測試方案是極可能發(fā)現(xiàn)迄今為止尚未發(fā)現(xiàn)的錯(cuò)誤的測試方案;
·成功的測試是發(fā)現(xiàn)了迄今為止尚未發(fā)現(xiàn)的錯(cuò)誤的測試。換言之,測試的目的是:想以最少的時(shí)間和人力,系統(tǒng)地找出軟件中潛在的各種錯(cuò)誤和缺陷。如果我們成功地實(shí)施了測試,我們就能夠發(fā)現(xiàn)軟件中的錯(cuò)誤。測試的附帶收獲是,它能夠證明軟件的功能和性能與需求說明相符合。實(shí)施測試收集到的測試結(jié)果數(shù)據(jù)為可靠性分析提供了依據(jù)。測試不能表明軟件中不存在錯(cuò)誤,它只能說明軟件中存在錯(cuò)誤。測試的原則:(1)在測試開始時(shí),不要認(rèn)為程序中沒有錯(cuò)誤(2)要避免測試自己編寫的程序(3)測試用例要有輸入數(shù)據(jù)和對應(yīng)的預(yù)期結(jié)果(4)要對合理的輸入數(shù)據(jù)和不合理的輸入數(shù)據(jù)都 進(jìn)行測試(5)除檢查程序功能是否完備,還應(yīng)檢查程 序是否做了多余的工作(6)要精心設(shè)計(jì)測試方案,盡量把軟件中的錯(cuò) 誤測試出來(7)對發(fā)現(xiàn)錯(cuò)誤較多的程序段,應(yīng)進(jìn)行更深入 的測試(8)應(yīng)長期保存所有的測試用例,直至該程序 被廢棄。6.7軟件測試的方法6.7.1靜態(tài)分析與動(dòng)態(tài)測試軟件測試按照測試過程是否執(zhí)行程序來劃分,有靜態(tài)分析和動(dòng)態(tài)測試兩類。動(dòng)態(tài)測試又分為黑盒法和白盒法兩種。
1、靜態(tài)分析不執(zhí)行被測試軟件,而是通過對需求分析說明書、軟件設(shè)計(jì)說明是及源程序做結(jié)構(gòu)檢查,對流程圖、編碼進(jìn)行分析,來找出軟件錯(cuò)誤。2、動(dòng)態(tài)測試動(dòng)態(tài)測試以執(zhí)行程序并分析程序來查錯(cuò)。為了進(jìn)行軟件測試,需要預(yù)先準(zhǔn)備好兩種數(shù)據(jù):(1)輸入數(shù)據(jù);(2)預(yù)期的輸出結(jié)果我們把以發(fā)現(xiàn)錯(cuò)誤為目標(biāo)的、用于軟件測試的輸入數(shù)據(jù)及與之對應(yīng)的預(yù)期輸出結(jié)果,稱為測試用例。怎么設(shè)計(jì)測試用例是動(dòng)態(tài)測試的關(guān)鍵。6.7.2黑盒法與白盒法對于軟件測試而言,黑盒測試法把程序看成一個(gè)黑盒子,完全不考慮程序的內(nèi)部結(jié)構(gòu)和處理過程。也就是說,黑盒測試是對程序接口進(jìn)行的測試,它只檢查程序功能是否能按照規(guī)格說明書的規(guī)定正常使用,程序是否能適當(dāng)?shù)亟邮蛰斎霐?shù)據(jù)產(chǎn)生正確的輸出信息,并且保持外部信息(如:數(shù)據(jù)庫或文件)的完整性。黑盒測試又稱為功能測試。假設(shè)一個(gè)程序P有輸入量X和Y及輸出量Z。在字長為32位的計(jì)算機(jī)上運(yùn)行。若X、Y取整數(shù),按黑盒方法進(jìn)行窮舉測試:可能采用的測試數(shù)據(jù)組:232×232=264
如果測試一組數(shù)據(jù)需要1毫秒,一年工作365×24小時(shí),完成所有測試需要5億年。PXYZ黑盒法是最基本的測試法,主要發(fā)現(xiàn)以下錯(cuò)誤:(1)是否有不正確的或遺漏的功能。(2)檢查輸入能否被正確地接收,軟件能否正 確地輸出結(jié)果(3)訪問外部信息是否有錯(cuò)(4)性能上能否滿足要求與黑盒測試法相反,白盒測試法的前提是可以把程序看成裝在一個(gè)透明的白盒子里,也就是完全了解程序的結(jié)構(gòu)和處理過程。這種方法按照程序內(nèi)部的邏輯測試程序,檢驗(yàn)程序中的每條通路是否都能按預(yù)定要求正確工作。白盒測試又稱為結(jié)構(gòu)測試。在軟件測試時(shí),常把黑盒法和白盒法聯(lián)合起來進(jìn)行,這也稱為灰盒法。給出一個(gè)小程序的流程圖,它包括了一個(gè)執(zhí)行20次的循環(huán)。包含的不同執(zhí)行路徑數(shù)達(dá)520條,對每一條路徑進(jìn)行測試需要1毫秒,假定一年工作365×24小時(shí),要想把所有路徑測試完,需3170年。黑盒測試著重測試軟件的功能需求,也就是說,黑盒測試讓軟件工程師設(shè)計(jì)出能充分檢查程序所有功能需求的輸入條件集。黑盒測試并不能取代白盒測試技術(shù),它是與白盒測試互補(bǔ)的方法,它很可能發(fā)現(xiàn)白盒測試不易發(fā)現(xiàn)的其他不同類型的錯(cuò)誤。白盒測試在測試過程的早期階段進(jìn)行,而黑盒測試主要用于測試過程的后期。黑盒測試故意不考慮程序的控制結(jié)構(gòu),而把注意力集中于信息域。測試準(zhǔn)則 為了能設(shè)計(jì)出有效的測試方案,軟件工程師必須充分理解并正確運(yùn)用指導(dǎo)軟件測試的基本準(zhǔn)則。主要的測試準(zhǔn)則如下所述。
·所有的測試都應(yīng)該能追溯到用戶需求。
·應(yīng)該在測試開始之前的相當(dāng)長時(shí)間,就制定出測試計(jì)劃。
·把Pareto原理應(yīng)用于軟件測試。Pareto原理告訴我們,測試發(fā)現(xiàn)的錯(cuò)誤中的80%很可能是由程序中20%的模塊造成的。
·測試應(yīng)該從“小規(guī)?!遍_始,并逐步進(jìn)行“大規(guī)?!睖y試。
·窮舉測試是不可能的。
·為了達(dá)到最佳的測試效果,應(yīng)該由獨(dú)立的第三方來從事測試工作。6.8軟件測試的步驟測試過程按4個(gè)步驟進(jìn)行,即單元測試、集成測試、確認(rèn)測試和系統(tǒng)測試。6.8.1單元測試(模塊測試):
單元測試的目的是檢查每個(gè)模塊是否能獨(dú)立、正確的運(yùn)行。單元測試通常在程序設(shè)計(jì)時(shí)進(jìn)行。單元測試大量使用白盒測試技術(shù),檢查模塊控制結(jié)構(gòu)中的特定路徑,以確保做到完全覆蓋并發(fā)現(xiàn)最大數(shù)量的錯(cuò)誤。
方式:人工測試計(jì)算機(jī)測試 這樣兩種類型的測試,完成單元測試工作。這兩種類型的測試各有所長,互相補(bǔ)充。1.代碼審查{人工測試}
人工測試源程序可以由編寫者本人非正式地進(jìn)行,也可以由審查小組正式進(jìn)行。后者稱為代碼審查,它是一種非常有效的程序驗(yàn)證技術(shù),對于典型的程序來說,可以查出30%~70%的邏輯設(shè)計(jì)錯(cuò)誤和編碼錯(cuò)誤。審查小組最好由下述四人組成:組長,他應(yīng)該是一個(gè)很有能力的程序員, 而且沒有直接參與這項(xiàng)工程;程序的設(shè)計(jì)者;
程序的編寫者;程序的測試者。實(shí)踐表明,對于查找某些類型的錯(cuò)誤來說,人工測試比計(jì)算機(jī)測試更有效;對于其他類型的錯(cuò)誤來說則剛好相反。因此,人工測試和計(jì)算機(jī)測試是互相補(bǔ)充,相輔相成的,缺少其中任何一種方法都會(huì)使查找錯(cuò)誤的效率降低。2.測試軟件{計(jì)算機(jī)測試}
模塊并不是一個(gè)獨(dú)立的程序,因此必須為每個(gè)單元測試開發(fā)驅(qū)動(dòng)程序和(或)存根程序。通常驅(qū)動(dòng)程序也就是一個(gè)“主程序”,它接收測試數(shù)據(jù),把這些數(shù)據(jù)傳送給被測試的模塊,并且印出有關(guān)的結(jié)果。存根程序代替被測試的模塊所調(diào)用的模塊。因此存根程序也可以稱為“虛擬子程序”。它使用被它代替的模塊的接口,可能做最少量的數(shù)據(jù)操作,印出對入口的檢驗(yàn)或操作結(jié)果,并且把控制歸還給調(diào)用它的模塊。6.8.2集成測試:
在裝配的同時(shí)進(jìn)行測試,因此稱為集成測試。集成測試同時(shí)解決程序驗(yàn)證和程序構(gòu)造這兩個(gè)問題。在集成過程中最常用的是黑盒測試用例設(shè)計(jì)技術(shù),當(dāng)然,為了保證覆蓋主要的控制路徑,也可能使用一定數(shù)量的白盒測試。
集成測試是測試和組裝軟件的系統(tǒng)化技術(shù),在把模塊按照設(shè)計(jì)要求組裝起來的同時(shí)進(jìn)行測試,主要目標(biāo)是發(fā)現(xiàn)與接口有關(guān)的問題。由模塊組裝成程序時(shí)有兩種方法。一種方法是先分別測試每個(gè)模塊,再把所有模塊按設(shè)計(jì)要求放在一起結(jié)合成所要的程序,這種方法稱為非漸增式測試方法;另一種方法是把下一個(gè)要測試的模塊同已經(jīng)測試好的那些模塊結(jié)合起來進(jìn)行測試,測試完以后再把下一個(gè)應(yīng)該測試的模塊結(jié)合進(jìn)來測試。這種每次增加一個(gè)模塊的方法稱為漸增式測試。1.自頂向下集成自頂向下的集成(結(jié)合)方法是一個(gè)日益為人們廣泛采用的組裝軟件的途徑。從主控制模塊(主程序)開始,沿著軟件的控制層次向下移動(dòng),從而逐漸把各個(gè)模塊結(jié)合起來。在把附屬于(以及最終附屬于)主控制模塊的那些模塊組裝到軟件結(jié)構(gòu)中去時(shí),或者使用深度優(yōu)先的策略,或者使用寬度優(yōu)先的策略。
把模塊結(jié)合進(jìn)軟件結(jié)構(gòu)的具體過程由下述四個(gè)步驟完成:對主控制模塊進(jìn)行測試,測試時(shí)用存根程序代替所有直接附屬于主控制模塊的模塊;根據(jù)選定的結(jié)合策略(深度優(yōu)先或?qū)挾葍?yōu)先),每次用一個(gè)實(shí)際模塊代換一個(gè)存根程序(新結(jié)合進(jìn)來的模塊往往又需要新的存根程序);在結(jié)合進(jìn)一個(gè)模塊的同時(shí)進(jìn)行測試;4.為了保證加入模塊沒有引進(jìn)新的錯(cuò)誤,可能需要進(jìn)行回歸測試(即,全部或部分地 重復(fù)以前做過的測試)。從第二步開始不斷地重復(fù)進(jìn)行上述過程,直到構(gòu)造起完整的軟件結(jié)構(gòu)為止。圖
自頂向下結(jié)合自頂向下集成圖
自頂向下結(jié)合深度優(yōu)先自頂向下集成圖
自頂向下結(jié)合寬度優(yōu)先自頂向下集成回歸測試每當(dāng)一個(gè)新模塊作為集成測試的一部分加進(jìn)來的時(shí)候,軟件就發(fā)生了變化:建立了新的數(shù)據(jù)流路徑,可能出現(xiàn)了新的I/O操作,激活了新的控制邏輯。這些變化可能使原來工作正常的功能出現(xiàn)問題。在集成測試的范疇中,所謂回歸測試是指重新執(zhí)行已經(jīng)做過的測試的某個(gè)子集,以保證上述這些變化沒有帶來非預(yù)期的副作用?;貧w測試集(已執(zhí)行過的測試用例的子集)包括下述三種不同的測試用例。檢測軟件全部功能的代表性測試用例專門針對可能受修改影響的軟件功能 的附加測試。3.針對被修改過的軟件成分的測試。2.自底向上集成自底向上測試從“原子”模塊(即在軟件結(jié)構(gòu)最低層的模塊)開始組裝和測試。因?yàn)槭菑牡撞肯蛏辖Y(jié)合模塊,總能得到需要的下層模塊處理功能,所以不需要存根程序。用下述步驟可以實(shí)現(xiàn)自底向上的結(jié)合策略:把低層模塊組合成實(shí)現(xiàn)某個(gè)特定的軟件子功 能的簇;寫一個(gè)驅(qū)動(dòng)程序(用于測試的控制程序),協(xié)調(diào)測試數(shù)據(jù)的輸入和輸出;3.對由模塊組成的子功能簇進(jìn)行測試;去掉驅(qū)動(dòng)程序,沿軟件結(jié)構(gòu)自下向上移動(dòng),把子功能簇組合起來形成更大的子功能簇。上述第2步到第4步實(shí)質(zhì)上構(gòu)成了一個(gè)循環(huán)。圖
自底向上結(jié)合不同集成測試策略的比較:
自頂向下測試方法的主要優(yōu)點(diǎn)是不需要測試驅(qū)動(dòng)程序,能夠在測試階段的早期實(shí)現(xiàn)并驗(yàn)證系統(tǒng)的主要功能,而且能在早期發(fā)現(xiàn)上層模塊的接口錯(cuò)誤。自頂向下測試方法的主要缺點(diǎn)是需要存根程序,可能遇到與此相聯(lián)系的測試?yán)щy,低層關(guān)鍵模塊中的錯(cuò)誤發(fā)現(xiàn)較晚,而且用這種方法在早期不能充分展開人力??梢钥闯?,自底向上測試方法的優(yōu)缺點(diǎn)與上述自頂向下測試方法的優(yōu)缺點(diǎn)剛好相反。在測試實(shí)際的軟件系統(tǒng)時(shí),應(yīng)該根據(jù)軟件的特點(diǎn)以及工程進(jìn)度安排,選用適當(dāng)?shù)臏y試策略。一般說來,純粹自頂向下或純粹自底向上的策略可能都不實(shí)用,人們在實(shí)踐中創(chuàng)造出許多混合策略。6.8.3程序?qū)彶闀?huì)和人工運(yùn)行1.程序?qū)彶闀?huì)成員:軟件程序員和不參加設(shè)計(jì)的測試專家及調(diào)解員內(nèi)容:(1)程序員逐句講述程序的邏輯結(jié)構(gòu)。 (2)審查會(huì)成員根據(jù)常見錯(cuò)誤分析程序。2.人工運(yùn)行 人工運(yùn)行時(shí),要求與會(huì)者模擬計(jì)算機(jī)運(yùn)行程序,把各種測試情況,沿著程序邏輯走一遍,通過向程序員詢問程序的邏輯設(shè)計(jì)情況來發(fā)現(xiàn)錯(cuò)誤。6.8.4確認(rèn)測試:
確認(rèn)測試是對軟件滿足所有功能的、行為的和性能的需求的最終保證。在確認(rèn)測試過程中常使用黑盒測試技術(shù)。確認(rèn)測試也稱驗(yàn)收測試。1.確認(rèn)測試的范圍確認(rèn)測試必須有用戶積極參與,或者以用戶為主進(jìn)行。確認(rèn)測試時(shí),主要使用真實(shí)數(shù)據(jù),在實(shí)際運(yùn)行環(huán)境下進(jìn)行系統(tǒng)運(yùn)行,目的是驗(yàn)證系統(tǒng)能否滿足用戶的需求。只有在驗(yàn)收測試通過后,才能進(jìn)入下一階段的工作。2.軟件配置復(fù)查確認(rèn)測試的一個(gè)重要內(nèi)容是復(fù)查軟件配置。3.Alpha和Beta測試如果一個(gè)軟件是為許多客戶開發(fā)的(例如,向大眾出售的盒裝軟件產(chǎn)品),那么讓每個(gè)客戶都進(jìn)行正式的驗(yàn)收測試是不現(xiàn)實(shí)的。在這種情況下,絕大多數(shù)軟件開發(fā)商都使用被稱為Alpha測試和Beta測試的過程,來發(fā)現(xiàn)那些看起來只有最終用戶才能發(fā)現(xiàn)的錯(cuò)誤。
Alpha測試由用戶在開發(fā)者的場所進(jìn)行,并且在開發(fā)者對用戶的“指導(dǎo)”下進(jìn)行測試。開發(fā)者負(fù)責(zé)記錄錯(cuò)誤和使用中遇到的問題??傊?,Alpha測試是在受控的環(huán)境中進(jìn)行的。
Beta測試由軟件的最終用戶們在一個(gè)或多個(gè)客戶場所進(jìn)行。與Alpha測試不同,開發(fā)者通常不在Beta測試的現(xiàn)場,因此,Beta測試是軟件在開發(fā)者不能控制的環(huán)境中的“真實(shí)”應(yīng)用。用戶記錄下在Beta測試過程中遇到的一切問題(真實(shí)的或想像的),并且定期把這些問題報(bào)告給開發(fā)者。接收到Beta測試期間報(bào)告的問題之后,軟件開發(fā)者對產(chǎn)品進(jìn)行修改,并準(zhǔn)備向全體客戶發(fā)布最終的軟件產(chǎn)品。6.8.5平行運(yùn)行比較重要的軟件要有一段運(yùn)行時(shí)間。此時(shí)新開發(fā)的系統(tǒng)與原系統(tǒng)同時(shí)運(yùn)行,這稱為平行運(yùn)行。驗(yàn)收測試對任何系統(tǒng)都是必不可少的。對較大的系統(tǒng),應(yīng)召開程序?qū)彶闀?huì),對于重要的軟件系統(tǒng)應(yīng)采用平行運(yùn)行,以免軟件的錯(cuò)誤造成不良后果6.9設(shè)計(jì)測試方案1.設(shè)計(jì)測試方案是測試階段的關(guān)鍵技術(shù)問題。2.測試方案={測試目的,測試用例}3.測試用例={輸入的測試數(shù)據(jù),預(yù)期的輸出結(jié)果}4.如何設(shè)計(jì)測試用例不同的測試數(shù)據(jù)發(fā)現(xiàn)程序錯(cuò)誤的能力差別很大不可能進(jìn)行窮盡的測試提高測試效率降低測試成本選用少量“最有效的”測試數(shù)據(jù),做到盡可能完備的測試。6.9.1等價(jià)劃分等價(jià)劃分是一種黑盒測試方法,這種方法把所有可能的輸入數(shù)據(jù),即程序的輸入域劃分成若干部分,然后從每一部分中選取少數(shù)有代表性的數(shù)據(jù)做為測試用例。
等價(jià)類是指某個(gè)輸入域的子集合。在該子集合中,各個(gè)輸入數(shù)據(jù)對于揭露程序中的錯(cuò)誤都是等效的。測試某等價(jià)類的代表值就等價(jià)于對這一類其它值的測試。劃分等價(jià)類等價(jià)類的劃分有兩種不同的情況:
①有效等價(jià)類:是指對于程序的規(guī)格說明來說, 是合理的,有意義的輸入數(shù)據(jù)構(gòu)成的集合。
②無效等價(jià)類:是指對于程序的規(guī)格說明來說, 是不合理的,無意義的輸入數(shù)據(jù)構(gòu)成的集合。 在設(shè)計(jì)測試用例時(shí),要同時(shí)考慮有效等價(jià)類和 無效等價(jià)類的設(shè)計(jì)。 劃分等價(jià)類等價(jià)類的原則:
(1)如果輸入條件規(guī)定了取值范圍,或值的個(gè)數(shù),則可以確立一個(gè)有效等價(jià)類和兩個(gè)無效等價(jià)類。
例如,在程序的規(guī)格說明中,對輸入條件有一句話:“……項(xiàng)數(shù)可以從1到999……”
則有效等價(jià)類是“1≤項(xiàng)數(shù)≤999”兩個(gè)無效等價(jià)類是“項(xiàng)數(shù)<1”或“項(xiàng)數(shù)>999”。在數(shù)軸上表示成:
(2)如果輸入條件規(guī)定了輸入值的集合,或者是規(guī)定了“必須如何”的條件,這時(shí)可確立一個(gè)有效等價(jià)類和一個(gè)無效等價(jià)類。 例如,在C語言中對變量標(biāo)識符規(guī)定為“以字母或下劃線打頭的……串”。那么所有以字母或下劃線打頭的構(gòu)成有效等價(jià)類,而不在此集合內(nèi)(不以字母打頭)的歸于無效等價(jià)類。
(3)如果輸入條件是一個(gè)布爾量,則可以確定一個(gè)有效等價(jià)類和一個(gè)無效等價(jià)類。
(4)如果規(guī)定了輸入數(shù)據(jù)的一組值,而且程序要對每個(gè)輸入值分別進(jìn)行處理。這時(shí)可為每一個(gè)輸入值確立一個(gè)有效等價(jià)類,此外針對這組值確立一個(gè)無效等價(jià)類,它是所有不允許的輸入值的集合。 例如,在教師上崗方案中規(guī)定對教授、副教授、講師和助教分別計(jì)算分?jǐn)?shù),做相應(yīng)的處理。因此可以確定4個(gè)有效等價(jià)類為教授、副教授、講師和助教,一個(gè)無效等價(jià)類,它是所有不符合以上身分的人員的輸入值的集合。(5)如果規(guī)定了輸入數(shù)據(jù)必須遵守的規(guī)則,則可以確立一個(gè)有效等價(jià)類(符合規(guī)則)和若干個(gè)無效等價(jià)類(從不同角度違反規(guī)則)。例如,C語言規(guī)定“一個(gè)語句必須以分號‘;’結(jié)束”。這時(shí),可以確定一個(gè)有效等價(jià)類“以‘;’結(jié)束”,若干個(gè)無效等價(jià)類“以‘:’結(jié)束”、“以‘,’結(jié)束”、“以‘’結(jié)束”等。(6)
如果規(guī)定了輸入數(shù)據(jù)為整型,則可以劃分出正整數(shù)、零和負(fù)整數(shù)等三個(gè)有效類。(7)
如果程序的處理對象是表格,則應(yīng)該使用空表,以及含一項(xiàng)或多項(xiàng)的表。等價(jià)類劃分的步驟(1)研究程序的功能說明,以確定輸入數(shù)據(jù)是有效等價(jià)類還是無效等價(jià)類。(2)分析輸出數(shù)據(jù)的等價(jià)類,以便根據(jù)輸出數(shù)據(jù)的等價(jià)類導(dǎo)出相應(yīng)的輸入數(shù)據(jù)等價(jià)類。 在確立了等價(jià)類之后,建立等價(jià)類表,列出所有劃分出的等價(jià)類。確立等價(jià)類測試用例 再從劃分出的等價(jià)類中按以下原則選擇測試用例:
(1)
為每一個(gè)等價(jià)類規(guī)定一個(gè)唯一編號;
(2)
設(shè)計(jì)一個(gè)新的測試用例,使其盡可能多地覆蓋尚未被覆蓋的有效等價(jià)類,重復(fù)這一步,直到所有的有效等價(jià)類都被覆蓋為止;
(3)
設(shè)計(jì)一個(gè)新的測試用例,使其僅覆蓋一個(gè)尚未被覆蓋的無效等價(jià)類,重復(fù)這一步,直到所有的無效等價(jià)類都被覆蓋為止。實(shí)例:在某一Pascal語言版本中規(guī)定:“標(biāo)識符是由字母開頭,后跟字母或數(shù)字的任意組合構(gòu)成。有效字符數(shù)為8個(gè),最大字符數(shù)為80個(gè)?!保⑶乙?guī)定:“標(biāo)識符必須先說明,再使用。在同一說明語句中,標(biāo)識符至少必須有一個(gè)。”用等價(jià)類劃分的方法,建立輸入等價(jià)類表下面選取了9個(gè)測試用例,它們覆蓋了所有的等價(jià)類:①VARx,T1234567:REAL;
BEGINx:=3.414;T1234567:=2.732; ………… (1),(2),(4),(8),(9),(12),(14)②VAR:REAL; (3)③VARx,:REAL; (5)④VART12345678:REAL;(6)⑤VART12345……:REAL;(7)
多于80個(gè)字符⑥VART$:CHAR;(10)⑦VARGOTO:INTEGER;(11)⑧VAR2T:REAL;(13)⑨VARPAR:REAL;(15)BEGIN……PAR:=SIN(3.14*0.8)/6;作業(yè):用等價(jià)類劃分方法找出有效等價(jià)類和無效等價(jià)類,并作出測試用例。某城市電話號碼由三部分組成,內(nèi)容如下:第一部分是地區(qū)碼,地區(qū)碼可以是空白或三位數(shù)字;第二部分是前綴為非零和非一開頭的三位數(shù);第三部分是后綴為四位數(shù)。6.9.2邊界值分析法經(jīng)驗(yàn)表明,處理邊界情況時(shí)程序最容易發(fā)生錯(cuò)誤。因此,設(shè)計(jì)使程序運(yùn)行在邊界情況附近的測試方案,暴露出程序錯(cuò)誤的可能性更大一些。使用邊界值分析方法設(shè)計(jì)測試方案首先應(yīng)該確定邊界情況,這需要經(jīng)驗(yàn)和創(chuàng)造性,通常輸入等價(jià)類和輸出等價(jià)類的邊界,就是應(yīng)該著重測試的程序邊界情況。比如,在做三角形計(jì)算時(shí),要輸入三角形的三個(gè)邊長:A、B和C。我們應(yīng)注意到這三個(gè)數(shù)值應(yīng)當(dāng)滿足A>0、B>0、C>0、A+B>C、A+C>B、B+C>A,才能構(gòu)成三角形。但如果把六個(gè)不等式中的任何一個(gè)大于號“>”錯(cuò)寫成大于等于號“≥”,那就不能構(gòu)成三角形。選取的測試數(shù)據(jù)應(yīng)該剛好等于、剛剛小于和剛剛大于邊界值。也就是說,按照邊界值分析法,應(yīng)該選取剛好等于、稍小于和稍大于等價(jià)類邊界值的數(shù)據(jù)作為測試數(shù)據(jù),而不是選取每個(gè)等價(jià)類內(nèi)的典型值或任意值作為測試數(shù)據(jù)。用邊界值分析設(shè)計(jì)測試用例應(yīng)遵循的原則:1、如果輸入條件規(guī)定了取值范圍,則應(yīng)對該范圍的邊界內(nèi)附近,恰好在邊界和在邊界外附近(無效等價(jià)類中)設(shè)計(jì)測試用例。如:規(guī)定1~5千克郵件收費(fèi)2元,應(yīng)對0.9,1,1.1,4.9,5,5.1千克設(shè)計(jì)測試用例。2、如果輸入條件規(guī)定了數(shù)據(jù)的個(gè)數(shù),則應(yīng)對最少個(gè)數(shù),最多個(gè)數(shù),比最少個(gè)數(shù)少1,比最大個(gè)數(shù)多1等情況設(shè)計(jì)測試用例。如:輸入文件有1~255個(gè)記錄,則應(yīng)分別設(shè)計(jì)0,1,255,256個(gè)記錄的輸入文件的測試用例。3、針對規(guī)格說明中的每個(gè)輸出條件使用前面的1和2原則。如:計(jì)算折扣量,最低折扣為0元,最高為1000元,則要設(shè)計(jì)使它們恰好產(chǎn)生0元或1000元的結(jié)果。以及負(fù)值或稍大于1000元的結(jié)果(如果可能的話)。4、如果程序規(guī)格說明中提到的輸入或輸出域是個(gè)有序的集合(如順序文件,線性表等)。應(yīng)選有序集的第一個(gè)和最后一個(gè)元素作為測試用例等價(jià)類和邊界值方法的區(qū)別:(1)邊界值不是從等價(jià)類中隨便取一個(gè)數(shù)據(jù)作為代表,而是選一個(gè)或幾個(gè)特定值,使這個(gè)等價(jià)類的每個(gè)邊界都作為測試的目標(biāo)。(2)邊界值分析不僅要考慮輸入條件,而且要考慮輸出條件(輸出等價(jià)類)。 一般聯(lián)合使用等價(jià)類劃分和邊界值分析兩種方法。6.9.3錯(cuò)誤推測法人們也可以靠經(jīng)驗(yàn)和直覺推測程序中可能存在的各種錯(cuò)誤,從而有針對性地編寫檢查這些錯(cuò)誤的例子。。它的基本想法是列舉出程序中可能有的錯(cuò)誤和容易發(fā)生錯(cuò)誤的特殊情況,并且根據(jù)它們選擇測試方案。6.9.4邏輯覆蓋法白盒法根據(jù)程序邏輯結(jié)構(gòu)進(jìn)行測試,邏輯覆蓋法是一系列測試過程的總稱,這些測試是逐漸地、越來越完整地進(jìn)行路徑測試。從覆蓋程序的詳細(xì)程度來考慮,邏輯覆蓋有以下幾種不同的測試過程:
語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、條件組合覆蓋、點(diǎn)覆蓋、邊覆蓋和路徑覆蓋例(A>1)
and
(B=0)(A=2)
or
(X>1)X=X/AX=X+1TTFFabdce圖
程序流程圖L1(ace)={(A>1)and
(B=0)}and
{(A=2)or
(X/A>1)}=(A>1)and(B=0)and(A=2)or(A>1)and(B=0)and(X/A>1)=(A=2)and(B=0)
or
(A>1)and(B=0)and(X/A>1)
L2(abd)=not{(A>1)and(B=0)}
and
not{(A=2)or(X>1)}={not(A>1)ornot(B=0)}and
{not(A=2)andnot(X>1)}=
not(A>1)andnot(A=2)andnot(X>1)
or
not(B=0)andnot(A=2)andnot(X>1)=
not(A>1)andnot(X>1)
or
not(B=0)andnot(A=2)andnot(X>1)L3(abe)=not
{(A>1)and(B=0)}
and
{(A=2)or(X>1)}={not(A>1)ornot(B=0)}
and
{(A=2)or(X>1)}=not(A>1)and(A=2)
or
not(A>1)and
(X>1)
or
not(B=0)
and(A=2)
or
not(B=0)and(X>1)L4(acd)={(A>1)and(B=0)}
and
not
{(A=2)or(X/A>1)}=(A>1)and
(B=0)and
not(A=2)and
not(X/A>1)語句覆蓋
語句覆蓋就是設(shè)計(jì)足夠多個(gè)測試用例,運(yùn)行被測程序,使得每一可執(zhí)行語句至少執(zhí)行一次。在圖例中,正好所有的可執(zhí)行語句都在路徑L1上,所以選擇路徑L1設(shè)計(jì)測試用例,就可以覆蓋所有的可執(zhí)行語句。
測試用例的設(shè)計(jì)格式如下
【輸入的(A,B,X),輸出的(A,B,X)】為圖例設(shè)計(jì)滿足語句覆蓋的測試用例是:
【(2,0,4),(2,0,3)】,覆蓋路徑L1圖
被測試模塊的流程圖A=2B=0X=4判定覆蓋判定覆蓋就是設(shè)計(jì)若干個(gè)測試用例,運(yùn)行被測程序,使得程序中每個(gè)判斷的取真分支和取假分支至少經(jīng)歷一次。判定覆蓋又稱為分支覆蓋。每個(gè)語句+每個(gè)判定的每個(gè)分支對于圖例,如果選擇路徑L1和L2,就可得滿足要求的測試用例: 【(2,0,4),(2,0,3)】覆蓋ace【L1】
【(1,1,1),(1,1,1)】覆蓋abd【L2】如果選擇路徑L3和L4,還可得另一組可用的測試用例:【(2,1,1),(2,1,2)】覆蓋abe【L3】
【(3,0,3),(3,0,1)】覆蓋acd【L4】圖
被測試模塊的流程圖A=3,B=0,X=3A=2,B=1,X=1問題:只覆蓋了2條路徑,是全部的一半條件覆蓋條件覆蓋就是設(shè)計(jì)若干個(gè)測試用例,運(yùn)行被測程序,使得程序中每個(gè)判斷的每個(gè)條件的可能取值至少執(zhí)行一次。在圖例中,我們事先可對所有條件的取值加以標(biāo)記。例如,對于第一個(gè)判斷:條件A>1取真為,取假為
條件B=0取真為,取假為對于第二個(gè)判斷:
條件A=2取真為,取假為
條件X>1取真為,取假為T4測試用例
覆蓋分支
條件取值【(2,0,4),(2,0,3)】
L1(c,e)
【(1,0,1),(1,0,1)】
L2(b,d)
【(2,1,1),(2,1,2)】
L3(b,e)或
測試用例
覆蓋分支
條件取值【(1,0,3),(1,0,4)】
L3(b,e)
【(2,1,1),(2,1,2)】
L3(b,e)
圖
被測試模塊的流程圖A>1,A≤1,B=0,B≠0A=2,A≠2,X>1,X≤1A>1,B=0,A=2,X>1A=2,B=0,X=4A≤1,B≠0A≠2,,X≤1A=1,B=1,X=1
判定-條件覆蓋就是設(shè)計(jì)足夠的測試用例,使得每個(gè)判斷表達(dá)式的所有可能取值至少執(zhí)行一次,每個(gè)判斷中的每個(gè)條件的可能取值至少執(zhí)行一次。判定-條件覆蓋
測試用例
覆蓋分支
條件取值【(2,0,4),(2,0,3)】L1(c,e)【(1,1,1),(1,1,1)】L2(b,d)
圖
被測試模塊的流程圖即滿足條件覆蓋又滿足邏輯覆蓋A>1,A≤1,B=0,B≠0A=2,A≠2,X>1,X≤1A>1,B=0,A=2,X>1A=2,B=0,X=4A≤1,B≠0A≠2,,X≤1A=1,B=1,X=1條件組合覆蓋條件組合覆蓋就是設(shè)計(jì)足夠的測試用例,運(yùn)行被測程序,使得每個(gè)判斷的所有可能的條件取值組合至少執(zhí)行一次。既 ①A>1,B=0作 ②A>1,B≠0作 ③A≯1,B=0作 ④A≯1,B≠0作 ⑤A=2,X>1作
⑥A=2,X≯1作
⑦A≠2,X>1作
⑧A≠2,X≯1作測試用例
覆蓋條件
覆蓋組合【(2,0,4),(2,0,3)】(L1) ①,⑤【(2,1,1),(2,1,2)】(L3) ②,⑥【(1,0,3),(1,0,4)】(L3) ③,⑦【(1,1,1),(1,1,1)】(L2)
④,⑧把程序流程圖中每一個(gè)符號看成是一個(gè)點(diǎn),原來連接不同處理符號的箭頭改為連接不同點(diǎn)的有向弧,就可得到一個(gè)有向圖,稱之為程序圖(流圖)。點(diǎn)覆蓋測試要求選取足夠多的數(shù)據(jù),使得程序執(zhí)行時(shí)至少經(jīng)過程序圖中的每個(gè)點(diǎn)一次。點(diǎn)覆蓋和語句覆蓋的要求是相同的。點(diǎn)覆蓋符號○為程序圖的一個(gè)結(jié)點(diǎn),表示一個(gè)或多個(gè)無分支的PDL語句或源程序語句。箭頭為邊,表示控制流的方向。在選擇或多分支結(jié)構(gòu)中,分支的匯聚處應(yīng)有一個(gè)匯聚結(jié)點(diǎn)。邊和結(jié)點(diǎn)圈定的區(qū)域叫做區(qū)域,當(dāng)對區(qū)域計(jì)數(shù)時(shí),圖形外的區(qū)域也應(yīng)記為一個(gè)區(qū)域。如果判斷中的條件表達(dá)式是由一個(gè)或多個(gè)邏輯運(yùn)算符
(OR,AND,...)
連接的復(fù)合條件表達(dá)式,則需改為一系列只有單個(gè)條件的嵌套的判斷。
圖
把程序流程圖映射成程序圖(左邊)程序流程圖;(右邊)程序圖應(yīng)選擇路徑:s→a→c→b→d→e測試用例:A=3,b=0邊覆蓋邊覆蓋要求選取足夠多的測試數(shù)據(jù),使程序執(zhí)行路徑至少經(jīng)過程序圖中每條邊一次。即:A=3,B=0;執(zhí)行路徑為1→4→5→6→7A=2,B=1;執(zhí)行路徑為1→2→3
還有其他的測試數(shù)據(jù) 么?路徑覆蓋路徑覆蓋要求選取足夠多的測試數(shù)據(jù),使程序的每條可能執(zhí)行路徑都至少執(zhí)行一次。1、1→4→5→6→72、1→2→33、1→2→6→74、1→4→5→3測試數(shù)據(jù)依次為:A=3,B=0A=1,B=1A=4,B=0A=1,B=2基本路徑測試
基本路徑測試是一種白盒測試技術(shù)。使用這種技術(shù)設(shè)計(jì)測試用例時(shí),首先計(jì)算過程設(shè)計(jì)結(jié)果的邏輯復(fù)雜度,并以該復(fù)雜度為指南定義執(zhí)行路徑的基本集合,從該基本集合導(dǎo)出的測試用例可以保證程序中的每條語句至少執(zhí)行一次,而且每個(gè)條件在執(zhí)行時(shí)都將分別取true(真)和false(假)值。 使用基本路徑測試技術(shù)設(shè)計(jì)測試用例的步驟如下:1.根據(jù)過程設(shè)計(jì)結(jié)果畫出相應(yīng)的流圖101112131234567892.計(jì)算流圖的環(huán)形復(fù)雜度環(huán)形復(fù)雜度定量度量程序的邏輯復(fù)雜性。有了描繪程序控制流的流圖之后,可以用下述三種方法之一來計(jì)算環(huán)形復(fù)雜度。(1)流圖中的區(qū)域數(shù)等于環(huán)形復(fù)雜度。(2)流圖G的環(huán)形復(fù)雜度V(G)=E-N+2,其中E是流圖中邊的條數(shù),N是流圖中節(jié)點(diǎn)數(shù)。(3)流圖G的環(huán)形復(fù)雜度V(G)=P+1,其中P是流圖中判定節(jié)點(diǎn)的數(shù)目。使用上述任何一種方法,都可以計(jì)算上圖所示流圖的環(huán)形復(fù)雜度為7。3.確定線性獨(dú)立路徑的基本集合所謂獨(dú)立路徑是指至少引入程序的一個(gè)新處理語句集合或一個(gè)新條件的路徑,用流圖術(shù)語描述,獨(dú)立路徑至少包含一條在定義該路徑之前不曾用過的邊。使用基本路徑測試法設(shè)計(jì)測試用例時(shí),程序的環(huán)形復(fù)雜度決定了程序中獨(dú)立路徑的數(shù)量,而且這個(gè)數(shù)是確保程序中所有語句至少被執(zhí)行一次所需的測試數(shù)量的上界。對于上圖所描述的過程來說,由于環(huán)形復(fù)雜度為7,因此共有7條獨(dú)立路徑。例如,下面列出了7條獨(dú)立路徑:路徑1:1-2-10-11-13
路徑2:1-2-10-12-13
路徑3:1-2-3-10-11-13
路徑4:1-2-3-4-5-8-9-2-...
路徑5:1-2-3-4-5-
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年售后維修和解協(xié)議
- 2025版錨具原材料供應(yīng)協(xié)議3篇
- 下發(fā)合同范本的通知
- 2025年度征收搬遷項(xiàng)目拆遷房屋買賣管理協(xié)議4篇
- 個(gè)人房屋改造裝修合同范本(2024版)
- 二零二五年度高檔住宅區(qū)社區(qū)物業(yè)服務(wù)培訓(xùn)與委托管理服務(wù)合同3篇
- 堅(jiān)持的中考滿分作文(錦集5篇)
- 二零二四年度2024物業(yè)管理臨時(shí)管理規(guī)約與住宅小區(qū)綠化養(yǎng)護(hù)協(xié)議6篇
- 2025年度叉車租賃與設(shè)備維護(hù)合作協(xié)議4篇
- 基于2025年度市場推廣戰(zhàn)略的廣告合同2篇
- 三年級上冊科學(xué)說課課件-1.5 水能溶解多少物質(zhì)|教科版
- GB/T 7588.2-2020電梯制造與安裝安全規(guī)范第2部分:電梯部件的設(shè)計(jì)原則、計(jì)算和檢驗(yàn)
- GB/T 14600-2009電子工業(yè)用氣體氧化亞氮
- 小學(xué)道德與法治學(xué)科高級(一級)教師職稱考試試題(有答案)
- 申請使用物業(yè)專項(xiàng)維修資金征求業(yè)主意見表
- 河北省承德市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會(huì)明細(xì)
- 實(shí)用性閱讀與交流任務(wù)群設(shè)計(jì)思路與教學(xué)建議
- 應(yīng)急柜檢查表
- 通風(fēng)設(shè)施標(biāo)準(zhǔn)
- 酒店市場營銷教案
- 房屋買賣合同簡單范本 房屋買賣合同簡易范本
評論
0/150
提交評論