軟件工程概論-10-軟件實(shí)現(xiàn)_第1頁(yè)
軟件工程概論-10-軟件實(shí)現(xiàn)_第2頁(yè)
軟件工程概論-10-軟件實(shí)現(xiàn)_第3頁(yè)
軟件工程概論-10-軟件實(shí)現(xiàn)_第4頁(yè)
軟件工程概論-10-軟件實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩118頁(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)介

軟件工程概論

SoftwareEngineering賈恒彬E-mail:jiahengbin@李恒E-mail:liheng@第5章軟件實(shí)現(xiàn)通常把編碼和測(cè)試統(tǒng)稱為實(shí)現(xiàn)。程序的質(zhì)量主要取決于軟件設(shè)計(jì)的質(zhì)量,但是,所選用的程序設(shè)計(jì)語(yǔ)言的特點(diǎn)及編碼風(fēng)格也將對(duì)程序的可靠性、可讀性、可測(cè)試性和可維護(hù)性產(chǎn)生深遠(yuǎn)的影響。測(cè)試的目的就是在軟件投入生產(chǎn)性運(yùn)行之前,盡可能多地發(fā)現(xiàn)軟件中的錯(cuò)誤。目前軟件測(cè)試仍然是保證軟件質(zhì)量的關(guān)鍵步驟,它是對(duì)軟件規(guī)格說(shuō)明、設(shè)計(jì)和編碼的最后復(fù)審。第5章軟件實(shí)現(xiàn)軟件測(cè)試在軟件生命周期中橫跨兩個(gè)階段。通常在編寫(xiě)出每個(gè)模塊之后就對(duì)它做必要的測(cè)試(稱為單元測(cè)試),模塊的編寫(xiě)者和測(cè)試者是同一個(gè)人,編碼和單元測(cè)試屬于軟件生命周期的同一個(gè)階段。在這個(gè)階段結(jié)束之后,對(duì)軟件系統(tǒng)還應(yīng)該進(jìn)行各種綜合測(cè)試,這是軟件生命周期中的另一個(gè)獨(dú)立的階段,通常由專門(mén)的測(cè)試人員承擔(dān)這項(xiàng)工作。第5章軟件實(shí)現(xiàn)大量統(tǒng)計(jì)資料表明,軟件測(cè)試的工作量往往占軟件開(kāi)發(fā)總工作量的40%以上.在極端情況,測(cè)試那種關(guān)系人的生命安全的軟件所花費(fèi)的成本,可能相當(dāng)于軟件工程其他開(kāi)發(fā)步驟總成本的3倍到5倍。通過(guò)測(cè)試發(fā)現(xiàn)錯(cuò)誤之后還必須診斷并改正錯(cuò)誤,這就是調(diào)試的目的。調(diào)試是測(cè)試階段最困難的工作。第5章軟件實(shí)現(xiàn)5.1編碼5.2軟件測(cè)試基礎(chǔ)5.3軟件測(cè)試5.4軟件測(cè)試方法5.5調(diào)試5.1

編碼編碼又稱程序設(shè)計(jì),是軟件生命周期中繼詳細(xì)設(shè)計(jì)之后的階段,這個(gè)階段的任務(wù)是使用選定的程序設(shè)計(jì)語(yǔ)言,把經(jīng)過(guò)詳細(xì)設(shè)計(jì)所得到的以程序設(shè)計(jì)說(shuō)明書(shū)體現(xiàn)的信息處理過(guò)程描述后,轉(zhuǎn)換成能在計(jì)算機(jī)系統(tǒng)上運(yùn)行的程序源代碼。編碼的質(zhì)量和詳細(xì)設(shè)計(jì)的質(zhì)量、程序設(shè)計(jì)語(yǔ)言的性能以及編程風(fēng)格密切相關(guān)。根據(jù)不同的程序設(shè)計(jì)語(yǔ)言的不同特點(diǎn)及其適用范圍,選擇恰當(dāng)?shù)某绦蛟O(shè)計(jì)語(yǔ)言進(jìn)行編碼,將有利于提高代碼的可讀性、可測(cè)試性、可維護(hù)性和可靠性。5.1.1程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)語(yǔ)言的分類第一代語(yǔ)言——從屬于機(jī)器的語(yǔ)言第二代語(yǔ)言——匯編語(yǔ)言第三代語(yǔ)言——高級(jí)程序設(shè)計(jì)語(yǔ)言傳統(tǒng)的高級(jí)程序設(shè)計(jì)語(yǔ)言

FORTRAN、COBOL、ALGOL、BASIC通用的結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言

PASCAL,C和Ada

專用語(yǔ)言

APL、Lisp、PROLOG、Smalltalk、C++、Java

第四代語(yǔ)言(4GL)5.1.1程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)語(yǔ)言選擇的主要標(biāo)準(zhǔn)(1)系統(tǒng)用戶的要求。如果所開(kāi)發(fā)的系統(tǒng)由用戶負(fù)責(zé)維護(hù),用戶通常要求用他們熟悉的語(yǔ)言書(shū)寫(xiě)程序。(2)可以使用的編譯程序。運(yùn)行目標(biāo)系統(tǒng)的環(huán)境中可以提供的編譯程序往往限制了可以選用的語(yǔ)言的范圍。(3)可以得到的軟件工具。如果某種語(yǔ)言有支持程序開(kāi)發(fā)的軟件工具可以利用,則目標(biāo)系統(tǒng)的實(shí)現(xiàn)和驗(yàn)證都變得比較容易。(4)工程規(guī)模。如果工程規(guī)模很龐大,現(xiàn)有的語(yǔ)言又不完全適用,那么設(shè)計(jì)并實(shí)現(xiàn)一種供這個(gè)工程項(xiàng)目專用的程序設(shè)計(jì)語(yǔ)言,可能是一個(gè)正確的選擇。

5.1.1程序設(shè)計(jì)語(yǔ)言程序設(shè)計(jì)語(yǔ)言選擇的主要標(biāo)準(zhǔn)(5)程序員的知識(shí)。雖然對(duì)于有經(jīng)驗(yàn)的程序員來(lái)說(shuō),學(xué)習(xí)一種新語(yǔ)言并不困難,但是要完全掌握一種新語(yǔ)言卻需要實(shí)踐。如果和其他標(biāo)準(zhǔn)不矛盾,那么應(yīng)該選擇一種已經(jīng)為程序員所熟悉的語(yǔ)言。(6)軟件可移植性要求。如果目標(biāo)系統(tǒng)將在幾臺(tái)不同的計(jì)算機(jī)上運(yùn)行,或者預(yù)期的使用壽命很長(zhǎng),那么選擇一種標(biāo)準(zhǔn)化程度高、程序可移植性好的語(yǔ)言就是很重要的。(7)軟件的應(yīng)用領(lǐng)域。所謂的通用程序設(shè)計(jì)語(yǔ)言實(shí)際上并不是對(duì)所有應(yīng)用領(lǐng)域都同樣適用。因此,選擇語(yǔ)言時(shí)應(yīng)該充分考慮目標(biāo)系統(tǒng)的應(yīng)用范圍。

5.1.2編碼風(fēng)格

編程風(fēng)格即程序代碼書(shū)寫(xiě)的風(fēng)格,良好的編程風(fēng)格的特點(diǎn)是邏輯簡(jiǎn)明清晰、易讀易懂。程序的閱讀者不僅僅有程序的開(kāi)發(fā)者,還有程序的測(cè)試人員、維護(hù)人員。 具有良好的編程風(fēng)格的程序有利于程序員在編程的過(guò)程中發(fā)現(xiàn)錯(cuò)誤,有利于測(cè)試和維護(hù)人員對(duì)程序進(jìn)行測(cè)試、調(diào)試、維護(hù)工作。良好的編程風(fēng)格對(duì)于提高程序的可讀性、可測(cè)試性、可維護(hù)性以及可靠性具有深遠(yuǎn)的意義。 為了使程序代碼具有良好的風(fēng)格,易讀易懂,應(yīng)該從以下幾個(gè)方面遵循基本的原則:程序內(nèi)部的文檔數(shù)據(jù)說(shuō)明語(yǔ)句構(gòu)造輸入/輸出方法等5.1.2編碼風(fēng)格程序內(nèi)部的文檔(恰當(dāng)?shù)臉?biāo)識(shí)符、適當(dāng)?shù)淖⒔夂统绦虻囊曈X(jué)組織等)恰當(dāng)?shù)臉?biāo)識(shí)符選取含義鮮明的名字,使它能正確地提示程序?qū)ο笏淼膶?shí)體。如果使用縮寫(xiě),那么縮寫(xiě)規(guī)則應(yīng)該一致,并且應(yīng)該給每個(gè)名字加注解。一般的命名約定有不少人編程時(shí)用拼音給函數(shù)或變量命名,這樣做并不能說(shuō)明你很愛(ài)國(guó),卻會(huì)讓用此程序的人迷糊(很多南方人不懂拼音)。程序中的英文一般不會(huì)太復(fù)雜,用詞要力求準(zhǔn)確。

匈牙利命名法是Microsoft公司倡導(dǎo)的

[Maguire1993],雖然很煩瑣,但用習(xí)慣了也就成了自然。沒(méi)有人強(qiáng)迫你采用何種命名法,但有一點(diǎn)應(yīng)該做到:自己的程序命名必須一致。(1)宏定義用大寫(xiě)字母加下劃線表示,如MAX_LENGTH;

(2)函數(shù)用大寫(xiě)字母開(kāi)頭的單詞組合而成,如SetName,GetName;

(3)指針變量加前綴p,如*pNode;

(4)BOOL變量加前綴b,如

bFlag;

(5)int變量加前綴i,如

iWidth;

(6)float變量加前綴f,如

fWidth;

(7)double變量加前綴d,如

dWidth;

(8)字符串變量加前綴str,如

strName;

(9)枚舉變量加前綴e,如

eDrawMode;

(10)類的成員變量加前綴m_,如

m_strName,m_iWidth;

5.1.2編碼風(fēng)格適當(dāng)?shù)淖⒔馔ǔT诿總€(gè)模塊開(kāi)始處有一段序言性的注解,簡(jiǎn)要描述模塊的功能、主要算法、接口特點(diǎn)、重要數(shù)據(jù)以及開(kāi)發(fā)簡(jiǎn)史。插在程序中間與一段程序代碼有關(guān)的注解,主要解釋包含這段代碼的必要性。對(duì)于用高級(jí)語(yǔ)言書(shū)寫(xiě)的源程序,不需要用注解的形式把每個(gè)語(yǔ)句翻譯成自然語(yǔ)言,應(yīng)該利用注解提供一些額外的信息。應(yīng)該用空格或空行清楚地區(qū)分注解和程序。程序的視覺(jué)組織程序清單的布局對(duì)于程序的可讀性也有很大影響,應(yīng)該利用適當(dāng)?shù)碾A梯形式使程序的層次結(jié)構(gòu)清晰明顯。5.1.2編碼風(fēng)格數(shù)據(jù)說(shuō)明數(shù)據(jù)說(shuō)明的次序應(yīng)該標(biāo)準(zhǔn)化(例如,按照數(shù)據(jù)結(jié)構(gòu)或數(shù)據(jù)類型確定說(shuō)明的次序)。當(dāng)多個(gè)變量名在一個(gè)語(yǔ)句中說(shuō)明時(shí),應(yīng)該按字母順序排列這些變量。如果設(shè)計(jì)時(shí)使用了一個(gè)復(fù)雜的數(shù)據(jù)結(jié)構(gòu),則應(yīng)該用注解說(shuō)明用程序設(shè)計(jì)語(yǔ)言實(shí)現(xiàn)這個(gè)數(shù)據(jù)結(jié)構(gòu)的方法和特點(diǎn)。5.1.2編碼風(fēng)格語(yǔ)句構(gòu)造構(gòu)造語(yǔ)句時(shí)應(yīng)該遵循的原則是,每個(gè)語(yǔ)句都應(yīng)該簡(jiǎn)單而直接,不能為了提高效率而使程序變得過(guò)分復(fù)雜。不要為了節(jié)省空間而把多個(gè)語(yǔ)句寫(xiě)在同一行;盡量避免復(fù)雜的條件測(cè)試;盡量減少對(duì)“非”條件的測(cè)試;避免大量使用循環(huán)嵌套和條件嵌套;利用括號(hào)使邏輯表達(dá)式或算術(shù)表達(dá)式的運(yùn)算次序清晰直觀。5.1.2編碼風(fēng)格輸入/輸出對(duì)所有輸入數(shù)據(jù)都進(jìn)行檢驗(yàn);檢查輸入項(xiàng)重要組合的合法性;保持輸入格式簡(jiǎn)單;使用數(shù)據(jù)結(jié)束標(biāo)記,不要要求用戶指定數(shù)據(jù)的數(shù)目;明確提示交互式輸入的請(qǐng)求,詳細(xì)說(shuō)明可用的選擇或邊界數(shù)值;當(dāng)程序設(shè)計(jì)語(yǔ)言對(duì)格式有嚴(yán)格要求時(shí),應(yīng)保持輸入格式一致;設(shè)計(jì)良好的輸出報(bào)表;給所有輸出數(shù)據(jù)加標(biāo)志。5.1.2編碼風(fēng)格效率效率主要指處理機(jī)時(shí)間和存儲(chǔ)器容量?jī)蓚€(gè)方面。在討論提高效率前,應(yīng)該記住3條原則:效率是性能要求,因此應(yīng)該在需求分析階段確定效率方面的要求。效率是靠好設(shè)計(jì)來(lái)提高的。程序的效率和程序的簡(jiǎn)單程度是一致的。不要犧牲程序的清晰性和可讀性來(lái)不必要地提高效率。從三個(gè)方面進(jìn)一步討論效率問(wèn)題:5.1.2編碼風(fēng)格1.程序運(yùn)行時(shí)間寫(xiě)程序之前先簡(jiǎn)化算術(shù)的和邏輯的表達(dá)式;仔細(xì)研究嵌套的循環(huán),以確定是否有語(yǔ)句可以從內(nèi)層往外移;盡量避免使用多維數(shù)組;盡量避免使用指針和復(fù)雜的表;使用執(zhí)行時(shí)間短的算術(shù)運(yùn)算;不要混合使用不同的數(shù)據(jù)類型;盡量使用整數(shù)運(yùn)算和布爾表達(dá)式。在效率是決定性因素的應(yīng)用領(lǐng)域,盡量使用有良好優(yōu)化特性的編譯程序,以自動(dòng)生成高效目標(biāo)代碼。5.1.2編碼風(fēng)格2.存儲(chǔ)器效率在大型計(jì)算機(jī)中必須考慮操作系統(tǒng)頁(yè)式調(diào)度的特點(diǎn),一般說(shuō)來(lái),使用能保持功能域的結(jié)構(gòu)化控制結(jié)構(gòu),是提高效率的好方法。在微處理機(jī)中如果要求使用最少的存儲(chǔ)單元,則應(yīng)選用有緊縮存儲(chǔ)器特性的編譯程序,在非常必要時(shí)可以使用匯編語(yǔ)言。提高執(zhí)行效率的技術(shù)通常也能提高存儲(chǔ)器效率。提高存儲(chǔ)器效率的關(guān)鍵同樣是簡(jiǎn)單。5.1.2編碼風(fēng)格3.輸入輸出效率如果用戶為了給計(jì)算機(jī)提供輸入信息或?yàn)榱死斫庥?jì)算機(jī)輸出的信息,所需花費(fèi)的腦力勞動(dòng)是經(jīng)濟(jì)的,那么人和計(jì)算機(jī)通信的效率就高。因此,簡(jiǎn)單清晰同樣是提高人機(jī)通信效率的關(guān)鍵。硬件之間的通信效率比較復(fù)雜,但從寫(xiě)程序的角度看,有些簡(jiǎn)單原則可以提高輸入輸出效率:所有輸入輸出都應(yīng)該有緩存,以減少用于通信的額外開(kāi)銷。對(duì)二級(jí)存儲(chǔ)器應(yīng)該選用最簡(jiǎn)單的訪問(wèn)方法。二級(jí)緩存器的輸入輸出應(yīng)該以信息組為單位進(jìn)行。如果“超高效的”輸入輸出很難被人理解,則不采用這種方法。5.2

軟件測(cè)試基礎(chǔ)

軟件測(cè)試是為了發(fā)現(xiàn)錯(cuò)誤而執(zhí)行程序的過(guò)程。或者說(shuō),軟件測(cè)試是根據(jù)軟件開(kāi)發(fā)各階段的規(guī)格說(shuō)明和程序的內(nèi)部結(jié)構(gòu)而精心設(shè)計(jì)一批測(cè)試用例(即輸入數(shù)據(jù)及其預(yù)期的輸出結(jié)果),并利用這些測(cè)試用例去運(yùn)行程序,以發(fā)現(xiàn)程序錯(cuò)誤的過(guò)程。 軟件測(cè)試在軟件生存期中橫跨兩個(gè)階段: 單元測(cè)試:編寫(xiě)完一個(gè)模塊后所作的測(cè)試。通常編寫(xiě)者和測(cè)試者是同一個(gè)人, 綜合測(cè)試:對(duì)軟件系統(tǒng)進(jìn)行的各種綜合測(cè)試,通常由專門(mén)的測(cè)試人員承擔(dān)。5.2.1軟件測(cè)試的目的

軟件測(cè)試的目的是設(shè)計(jì)測(cè)試用例以最小的代價(jià)、在最短的時(shí)間內(nèi)系統(tǒng)地發(fā)現(xiàn)各種不同類型的錯(cuò)誤GrenfordJ.Myers就軟件測(cè)試目的提出以下觀點(diǎn):測(cè)試是程序的執(zhí)行過(guò)程,目的在于發(fā)現(xiàn)錯(cuò)誤;一個(gè)好的測(cè)試用例在于能發(fā)現(xiàn)至今未發(fā)現(xiàn)的錯(cuò)誤;一個(gè)成功的測(cè)試是發(fā)現(xiàn)了至今未發(fā)現(xiàn)的錯(cuò)誤的測(cè)試。

注意:測(cè)試的可以證明程序中存在錯(cuò)誤,但是測(cè)試不能證明程序中沒(méi)有錯(cuò)誤。

5.2.2軟件測(cè)試準(zhǔn)則為了能設(shè)計(jì)出有效的測(cè)試方案,主要的測(cè)試準(zhǔn)則:(1)所有測(cè)試都應(yīng)該能追溯到用戶需求。正如上一小節(jié)講過(guò)的,軟件測(cè)試的目標(biāo)是發(fā)現(xiàn)錯(cuò)誤。從用戶的角度看,最嚴(yán)重的錯(cuò)誤是導(dǎo)致程序不能滿足用戶需求的那些錯(cuò)誤。(2)應(yīng)該遠(yuǎn)在測(cè)試開(kāi)始之前就制定出測(cè)試計(jì)劃。完成需求模型可著手制定測(cè)試計(jì)劃,在建立了設(shè)計(jì)模型之后就可以立即開(kāi)始設(shè)計(jì)詳細(xì)的測(cè)試方案。(3)Pareto原理:測(cè)試發(fā)現(xiàn)的錯(cuò)誤中的80%很可能是由程序中20%的模塊造成的。當(dāng)然,問(wèn)題是怎樣找出這些可疑的模塊并徹底地測(cè)試它們。5.2.2軟件測(cè)試準(zhǔn)則(4)應(yīng)該從“小規(guī)模”

“大規(guī)?!睖y(cè)試。首先重點(diǎn)測(cè)試單個(gè)程序模塊,然后把測(cè)試重點(diǎn)轉(zhuǎn)向在集成的模塊簇中尋找錯(cuò)誤,最后在整個(gè)系統(tǒng)中尋找錯(cuò)誤。(5)窮舉測(cè)試是不可能的。所謂窮舉測(cè)試就是把程序所有可能的執(zhí)行路徑都檢查一遍的測(cè)試。此路不通!因此,測(cè)試只能證明程序中有錯(cuò)誤,不能證明程序中沒(méi)有錯(cuò)誤。但是,精心地設(shè)計(jì)測(cè)試方案,有可能充分覆蓋程序邏輯并使程序達(dá)到所要求的可靠性。(6)為了達(dá)到最佳的測(cè)試效果,應(yīng)該由獨(dú)立的第三方從事測(cè)試工作。5.2.3軟件測(cè)試方法測(cè)試有兩種方法,即黑盒測(cè)試和白盒測(cè)試:如果已經(jīng)知道了產(chǎn)品應(yīng)該具有的功能,可以通過(guò)測(cè)試來(lái)檢驗(yàn)是否每個(gè)功能都能正常使用——黑盒測(cè)試;如果知道產(chǎn)品的內(nèi)部工作過(guò)程,可以通過(guò)測(cè)試來(lái)檢驗(yàn)產(chǎn)品內(nèi)部動(dòng)作是否按照規(guī)格說(shuō)明書(shū)的規(guī)定正常進(jìn)行——白盒測(cè)試。5.2.3軟件測(cè)試方法黑盒測(cè)試法把程序看作一個(gè)黑盒子,完全不考慮程序的內(nèi)部結(jié)構(gòu)和處理過(guò)程。黑盒測(cè)試又稱為功能測(cè)試。白盒測(cè)試法與黑盒測(cè)試法相反,它的前提是可以把程序看成裝在一個(gè)透明的白盒子里,測(cè)試者完全知道程序的結(jié)構(gòu)和處理算法。這種方法按照程序內(nèi)部的邏輯測(cè)試程序,檢測(cè)程序中的主要執(zhí)行通路是否都能按預(yù)定要求正確工作。白盒測(cè)試又稱為結(jié)構(gòu)測(cè)試。5.2.4軟件測(cè)試過(guò)程單元測(cè)試集成測(cè)試確認(rèn)測(cè)試系統(tǒng)測(cè)試5.2.4軟件測(cè)試過(guò)程測(cè)試與軟件開(kāi)發(fā)各階段的關(guān)系5.2.5測(cè)試信息流測(cè)試過(guò)程需要三類輸入:軟件配置——包括軟件需求規(guī)格說(shuō)明、軟件設(shè)計(jì)規(guī)格說(shuō)明、源代碼等;測(cè)試配置——包括測(cè)試計(jì)劃、測(cè)試用例、測(cè)試驅(qū)動(dòng)程序等;測(cè)試工具——測(cè)試工具為測(cè)試的實(shí)施提供某種服務(wù)。例如,測(cè)試數(shù)據(jù)自動(dòng)生成程序、靜態(tài)分析程序、動(dòng)態(tài)分析程序、測(cè)試結(jié)果分析程序以及驅(qū)動(dòng)測(cè)試的工作臺(tái)等。5.2.5測(cè)試信息流比較測(cè)試的實(shí)際結(jié)果和預(yù)期結(jié)果,若兩者不一致則很可能是程序中有錯(cuò)誤。設(shè)法確定錯(cuò)誤的準(zhǔn)確位置并且改正它,這就是調(diào)試的任務(wù)。與測(cè)試不同,通常由程序的編寫(xiě)者負(fù)責(zé)調(diào)試。如果出現(xiàn)要求修改設(shè)計(jì)的嚴(yán)重錯(cuò)誤,軟件的質(zhì)量和可靠性是值得懷疑的,應(yīng)該進(jìn)一步仔細(xì)測(cè)試;同上述相反,功能完成得很正常,遇到的錯(cuò)誤也很容易改正,則仍然應(yīng)該考慮兩種可能:(1)軟件的可靠性是可以接受的;(2)所進(jìn)行的測(cè)試尚不足以發(fā)現(xiàn)嚴(yán)重的錯(cuò)誤。這些錯(cuò)誤最終將被用戶發(fā)現(xiàn),而且需要在維護(hù)階段改正它們(但是改正同一個(gè)錯(cuò)誤需要付出的代價(jià)比在開(kāi)發(fā)階段高出許多倍)。5.3

軟件測(cè)試3.1.1單元測(cè)試單元測(cè)試:測(cè)試模塊。單元測(cè)試和編碼屬于軟件過(guò)程的同一個(gè)階段。在編寫(xiě)出源程序代碼并通過(guò)了編譯程序的語(yǔ)法檢查之后,就可以用詳細(xì)設(shè)計(jì)作指南,對(duì)重要的執(zhí)行通路進(jìn)行測(cè)試,以便發(fā)現(xiàn)模塊內(nèi)部的錯(cuò)誤??捎萌斯y(cè)試和計(jì)算機(jī)測(cè)試兩種測(cè)試方法,完成單元測(cè)試工作。單元測(cè)試主要使用白盒測(cè)試技術(shù),而且對(duì)多個(gè)模塊的測(cè)試可以并行地進(jìn)行。5.3.1單元測(cè)試單元測(cè)試的內(nèi)容1.模塊接口首先應(yīng)該對(duì)通過(guò)模塊接口的數(shù)據(jù)流進(jìn)行測(cè)試,主要檢查下述幾個(gè)方面:參數(shù)的數(shù)目、次序、屬性或單位系統(tǒng)與變?cè)欠褚恢?;是否修改了只作輸入用的變?cè)蝗肿兞康亩x和用法在各個(gè)模塊中是否一致。5.3.1單元測(cè)試模塊接口測(cè)試要點(diǎn)參數(shù)數(shù)目和由調(diào)用模塊送來(lái)的變?cè)臄?shù)目是否相等?參數(shù)的屬性和變?cè)膶傩允欠衿ヅ??參?shù)和變?cè)膯挝幌到y(tǒng)是否匹配?傳送給被調(diào)用模塊的變?cè)臄?shù)目是否等于那個(gè)模塊的參數(shù)的數(shù)目?傳送給被調(diào)用模塊的變?cè)獙傩院蛥?shù)的屬性是否一致?傳送給被調(diào)用模塊的變?cè)膯挝幌到y(tǒng)和該模塊參數(shù)的單位系統(tǒng)是否一致?傳送給內(nèi)部函數(shù)的變?cè)獙傩?、?shù)目和次序是否正確?是否修改了只做輸入用的變?cè)?。全程變量的定義和用法在各個(gè)模塊中是否一致?5.3.1單元測(cè)試2.局部數(shù)據(jù)結(jié)構(gòu)對(duì)于模塊來(lái)說(shuō),局部數(shù)據(jù)結(jié)構(gòu)是常見(jiàn)的錯(cuò)誤來(lái)源。應(yīng)該仔細(xì)設(shè)計(jì)測(cè)試方案,以便發(fā)現(xiàn)局部數(shù)據(jù)說(shuō)明、初始化、默認(rèn)值等方面的錯(cuò)誤。局部數(shù)據(jù)結(jié)構(gòu)測(cè)試要點(diǎn)錯(cuò)誤的或不相容的說(shuō)明使用尚未賦值或尚未初始化的變量錯(cuò)誤的初始值或不正確的缺省值錯(cuò)誤的變量名字(拼寫(xiě)錯(cuò)或截短了)數(shù)據(jù)類型不相容上溢、下溢或地址異常5.3.1單元測(cè)試3.重要的執(zhí)行通路由于通常不可能進(jìn)行窮盡測(cè)試,因此,在單元測(cè)試期間選擇最有代表性、最可能發(fā)現(xiàn)錯(cuò)誤的執(zhí)行通路進(jìn)行測(cè)試就是十分關(guān)鍵的。應(yīng)該設(shè)計(jì)測(cè)試方案用來(lái)發(fā)現(xiàn)由于錯(cuò)誤的計(jì)算、不正確的比較或不適當(dāng)?shù)目刂屏鞫斐傻腻e(cuò)誤。重要的執(zhí)行通路測(cè)試要點(diǎn) 選擇最具有代表性的,最可能發(fā)現(xiàn)錯(cuò)誤的執(zhí)行通路進(jìn)行測(cè)試5.3.1單元測(cè)試4.出錯(cuò)處理通路出錯(cuò)處理通路測(cè)試要點(diǎn) 應(yīng)重點(diǎn)測(cè)試下述可能發(fā)生的錯(cuò)誤對(duì)錯(cuò)誤的描述是難于理解的記下的錯(cuò)誤與實(shí)際遇到的錯(cuò)誤不同在對(duì)錯(cuò)誤進(jìn)行處理之前,錯(cuò)誤條件已經(jīng)引起系統(tǒng)干預(yù)。對(duì)錯(cuò)誤的處理不正確描述錯(cuò)誤的信息不足以幫助確定造成錯(cuò)誤的位置。5.3.1單元測(cè)試5.邊界條件邊界測(cè)試是單元測(cè)試中最后的也可能是最重要的任務(wù)。使用剛好小于、剛好等于和剛好大于最大值或最小值的數(shù)據(jù)結(jié)構(gòu)、控制量和數(shù)據(jù)值的測(cè)試方案,非??赡馨l(fā)現(xiàn)軟件中的錯(cuò)誤。5.3.1單元測(cè)試邊界條件測(cè)試要點(diǎn)比較數(shù)據(jù)類型不同的量邏輯運(yùn)算符不正確或優(yōu)先次序的錯(cuò)誤當(dāng)由于精度問(wèn)題兩個(gè)量不會(huì)相等時(shí),程序中卻期待著相等條件的出現(xiàn)“差1”錯(cuò)(即,多循環(huán)一次或少循環(huán)一次)錯(cuò)誤的或不存在的循環(huán)終止條件當(dāng)遇到發(fā)散的迭代時(shí)不能終止循環(huán)錯(cuò)誤地修改循環(huán)變量5.3.1單元測(cè)試代碼檢查單元測(cè)試采用靜、動(dòng)結(jié)合的方法。在進(jìn)行動(dòng)態(tài)測(cè)試之前,首先采用靜態(tài)方法對(duì)程序的代碼進(jìn)行檢查。代碼檢查主要檢查代碼和設(shè)計(jì)的一致性,其內(nèi)容包括代碼的可讀性、邏輯表達(dá)的正確性、代碼結(jié)構(gòu)的合理性、編程的風(fēng)格、程序的語(yǔ)法、結(jié)構(gòu)等。代碼檢查有桌面檢查、代碼審查、走查三種方式。其中,桌面檢查是由程序員檢查自己的程序;代碼審查和走查基本相同,是由若干程序員和測(cè)試員組成一個(gè)審查小組,通過(guò)閱讀、討論和爭(zhēng)議,對(duì)程序進(jìn)行靜態(tài)分析。通過(guò)代碼檢查可以找到程序中30%~70%的邏輯設(shè)計(jì)和編碼缺陷,而且代碼檢查看到的是問(wèn)題本身而不是問(wèn)題的征兆。5.3.1單元測(cè)試單元測(cè)試的環(huán)境=所測(cè)模塊+驅(qū)動(dòng)模塊+樁模塊

驅(qū)動(dòng)模塊:用來(lái)模擬所測(cè)模塊的上一級(jí)模塊,相當(dāng)于是一個(gè)接受測(cè)試數(shù)據(jù),并把數(shù)據(jù)傳送給所測(cè)模塊,然后打印相關(guān)結(jié)果的“主程序”。樁模塊:又稱為“存根程序”,是用來(lái)代替被所測(cè)模塊調(diào)用的子模塊。它不需要把子模塊的所有功能都帶進(jìn)來(lái),但是也不能什么都不做。樁模塊不能只簡(jiǎn)單的給出“曾經(jīng)進(jìn)入”的信息,而可能需要使用子模塊的接口模擬實(shí)際子模塊的功能。 5.3.2集成測(cè)試

集成測(cè)試是在單元測(cè)試的基礎(chǔ)上,將模塊按照總體設(shè)計(jì)時(shí)的要求組裝成子系統(tǒng)或整個(gè)系統(tǒng)進(jìn)行測(cè)試,因此集成測(cè)試又被稱為組裝測(cè)試。

集成測(cè)試關(guān)注的問(wèn)題主要有:在把各個(gè)模塊連接起來(lái)的時(shí)侯,穿越模塊接口的數(shù)據(jù)是否會(huì)丟失一個(gè)模塊的功能是否會(huì)對(duì)另一個(gè)模塊的功能產(chǎn)生不利的影響各個(gè)子功能組合起來(lái),能否達(dá)到預(yù)期要求的父功能全局?jǐn)?shù)據(jù)結(jié)構(gòu)是否有問(wèn)題單個(gè)模塊的誤差累積起來(lái),是否會(huì)放大,從而達(dá)到不能接受的程度。單個(gè)模塊的錯(cuò)誤是否會(huì)導(dǎo)致數(shù)據(jù)庫(kù)錯(cuò)誤。

5.3.2集成測(cè)試集成測(cè)試的策略選擇什么方式把模塊組裝起來(lái)形成一個(gè)可運(yùn)行的系統(tǒng),直接影響到模塊測(cè)試用例的形式、所用測(cè)試工具的類型、模塊編號(hào)的次序和測(cè)試的次序、以及生成測(cè)試用例的費(fèi)用和調(diào)試的費(fèi)用。

通常,把模塊組裝成系統(tǒng)的方式有一次性組裝方式和增量式組裝方式。

5.3.2集成測(cè)試非增量式集成 非增量式集成又稱為一次性集成,其策略是首先將各模塊作為單個(gè)的實(shí)體進(jìn)行測(cè)試,然后將所有的已經(jīng)測(cè)試好的模塊一次性組合到被測(cè)系統(tǒng)中,組成最終的系統(tǒng)進(jìn)行測(cè)試。5.3.2集成測(cè)試非增量式集成的特點(diǎn)①測(cè)試的額外工作量比較大②模塊間的接口錯(cuò)誤發(fā)現(xiàn)得比較晚③錯(cuò)誤的定位和修改比較困難④使用樁模塊和驅(qū)動(dòng)模塊模擬軟件的執(zhí)行環(huán)境進(jìn)行的測(cè)試與將測(cè)試模塊放入到實(shí)際運(yùn)行環(huán)境中進(jìn)行的測(cè)試效果是不同的。因此仍然會(huì)有許多模塊的接口錯(cuò)誤躲過(guò)單元測(cè)試而進(jìn)入到系統(tǒng)范圍測(cè)試.⑤在測(cè)試過(guò)程中,除編寫(xiě)驅(qū)動(dòng)模塊和樁模塊比較費(fèi)時(shí),花在每個(gè)模塊單元測(cè)試上的時(shí)間相對(duì)增量式集成要少.⑥對(duì)于大型程序而言,由于所有的模塊的單元測(cè)試都可以同時(shí)進(jìn)行,多個(gè)測(cè)試人員可以并行工作,因此對(duì)人力和物力資源的利用率較高。

特點(diǎn)①~④是非增量式集成策略的缺點(diǎn),⑤~⑥是它的優(yōu)點(diǎn)。5.3.2集成測(cè)試

由于程序中不可避免地存在涉及模塊間接口、全局?jǐn)?shù)據(jù)結(jié)構(gòu)等方面的問(wèn)題,因此一次試運(yùn)行成功的可能性并不很大。5.3.2集成測(cè)試增量式集成

增量式集成的策略是按不同的順序依次向被測(cè)系統(tǒng)加入新的模塊,進(jìn)行集成測(cè)試,新模塊可以用來(lái)取代被測(cè)系統(tǒng)在之前的測(cè)試中所使用的相應(yīng)的驅(qū)動(dòng)模塊或樁模塊。 為了保證在組裝過(guò)程中不引入新錯(cuò)誤,需要進(jìn)行回歸測(cè)試——重新執(zhí)行以前做過(guò)的全部或部分測(cè)試,以確保在增加新的模塊的同時(shí)沒(méi)有增加新的錯(cuò)誤。

5.3.2集成測(cè)試5.3.2集成測(cè)試增量式集成的特點(diǎn)①可以減少編寫(xiě)驅(qū)動(dòng)或樁模塊的工作量;②模塊接口錯(cuò)誤可以較早被發(fā)現(xiàn);③較容易對(duì)錯(cuò)誤進(jìn)行定位和修改;④多次的回歸測(cè)試,以及被測(cè)系統(tǒng)中模塊在不同環(huán)境下的多次運(yùn)行,為充分暴露模塊接口錯(cuò)誤提供了更多的機(jī)會(huì),因此測(cè)試更徹底;⑤由于用實(shí)際模塊替代了驅(qū)動(dòng)模塊或樁模塊,在測(cè)試過(guò)程中所測(cè)模塊的上(下)級(jí)模塊將會(huì)多次重復(fù)執(zhí)行;因此花費(fèi)在所測(cè)模塊上的測(cè)試時(shí)間相對(duì)非增量式集成較多;⑥測(cè)試工作的并行程度相對(duì)非增量式集成要低一些。

特點(diǎn)①~④是增量式集成的優(yōu)點(diǎn),⑤~⑥是缺點(diǎn)5.3.2集成測(cè)試

非增量式集成增量式集成編寫(xiě)驅(qū)動(dòng)模塊/樁模塊工作量大小接口錯(cuò)誤發(fā)現(xiàn)的時(shí)間晚早錯(cuò)誤定位與修改的難度大小測(cè)試的徹底程度低高單個(gè)模塊測(cè)試所需時(shí)間少多模塊單元測(cè)試的并行程度高低非增量式集成與增量式集成測(cè)試策略對(duì)比表

增量式集成測(cè)試策略要比非增量式集成測(cè)試策略更好。因此,建議使用增量式集成測(cè)試策略5.3.2集成測(cè)試增量式集成測(cè)試的三種不同策略自底向上集成具體策略:整個(gè)測(cè)試過(guò)程的起點(diǎn)是系統(tǒng)模塊層次結(jié)構(gòu)中的最底層模塊;然后用待加入的新模塊替換被測(cè)系統(tǒng)先前所使用的驅(qū)動(dòng)模塊,新模塊的直接上級(jí)模塊用驅(qū)動(dòng)模塊替換;這個(gè)替換的過(guò)程一直持續(xù)到頂層模塊加入被測(cè)系統(tǒng)中。主要優(yōu)點(diǎn):不需要編寫(xiě)樁模塊,設(shè)計(jì)測(cè)試用例比較容易。主要缺點(diǎn):對(duì)主要的控制直到最后才接觸到。5.3.2集成測(cè)試自頂向下集成具體策略:整個(gè)測(cè)試過(guò)程的起點(diǎn)是頂層模塊(主控模塊),然后用待加入的新模塊替換被測(cè)系統(tǒng)先前所使用的樁模塊,新模塊的所有直接下級(jí)模塊全部用樁模塊替換;這個(gè)替換的過(guò)程一直持續(xù)到所有的模塊都加入到被測(cè)系統(tǒng)中為止。主要優(yōu)點(diǎn):不需要編寫(xiě)驅(qū)動(dòng)模塊,能夠較早的發(fā)現(xiàn)主要控制方面的問(wèn)題。主要缺點(diǎn):需要編寫(xiě)樁模塊,而要使樁模塊能夠模擬實(shí)際子模塊的功能是十分困難的,特別是一些涉及到輸入/輸出的模塊。5.3.2集成測(cè)試混合式集成具體策略:將系統(tǒng)劃分成三層,上層采用自頂向下的策略,下層采用自底向上的策略,最后在中間層會(huì)合。混合式集成策略結(jié)合了自頂向下集成和自底向上集成策略的優(yōu)點(diǎn),當(dāng)被測(cè)軟件關(guān)鍵模塊(注:關(guān)鍵模塊應(yīng)及早測(cè)試)比較多時(shí),它是最好的折衷方法。

5.3.2集成測(cè)試在集成測(cè)試的范疇中,所謂回歸測(cè)試是指重新執(zhí)行已經(jīng)做過(guò)的測(cè)試的某個(gè)子集,以保證一些程序的變化沒(méi)有帶來(lái)非預(yù)期的副作用?;貧w測(cè)試集包括3類不同的測(cè)試用例:檢測(cè)軟件全部功能的代表性測(cè)試用例子;專門(mén)針對(duì)可能受修改影響的軟件功能的附加測(cè)試;針對(duì)被修改過(guò)的軟件成分的測(cè)試?;貧w測(cè)試5.3.3確認(rèn)測(cè)試

確認(rèn)測(cè)試又稱有效性測(cè)試。它的任務(wù)是驗(yàn)證軟件的有效性,即驗(yàn)證軟件的功能和性能及其他特性是否與用戶的要求一致。 在確認(rèn)測(cè)試階段需要做的工作:首先要進(jìn)行有效性測(cè)試以及軟件配置復(fù)審,然后進(jìn)行驗(yàn)收測(cè)試和安裝測(cè)試,在通過(guò)了專家鑒定之后,才能成為可交付的軟件。5.3.3確認(rèn)測(cè)試有效性測(cè)試 有效性測(cè)試是在模擬的環(huán)境(可能就是開(kāi)發(fā)的環(huán)境)下,運(yùn)用黑盒測(cè)試的方法,驗(yàn)證被測(cè)軟件是否滿足需求規(guī)格說(shuō)明書(shū)列出的需求。測(cè)試結(jié)果可以分為兩類。測(cè)試結(jié)果與預(yù)期結(jié)果相符。說(shuō)明軟件的這部分功能或性能特征與需求規(guī)格說(shuō)明書(shū)相符合,可以被接受。測(cè)試結(jié)果與預(yù)期結(jié)果不符。說(shuō)明軟件的這部分功能或性能特征與需求規(guī)格說(shuō)明書(shū)不相符,需要為軟件的這一部分提交問(wèn)題報(bào)告5.3.3確認(rèn)測(cè)試軟件配置復(fù)查軟件配置復(fù)查的目的是保證軟件配置的所有成分都齊全,各方面的質(zhì)量都符合要求,具有維護(hù)階段所必需的細(xì)節(jié),而且已經(jīng)編排好分類的目錄。

除了按合同規(guī)定的內(nèi)容和要求,由人工審查軟件配置之外,在確認(rèn)測(cè)試的過(guò)程中,應(yīng)當(dāng)嚴(yán)格遵守用戶手冊(cè)和操作手冊(cè)中規(guī)定的使用步驟,以便檢查這些文檔資料的完整性和正確性。必須仔細(xì)記錄發(fā)現(xiàn)的遺漏和錯(cuò)誤,并且適當(dāng)?shù)匮a(bǔ)充和改正。

5.3.3確認(rèn)測(cè)試驗(yàn)收測(cè)試

驗(yàn)收測(cè)試是以用戶為主的測(cè)試。軟件開(kāi)發(fā)人員和QA(質(zhì)量保證)人員也應(yīng)參加。由用戶參加設(shè)計(jì)測(cè)試用例,使用用戶界面輸入測(cè)試數(shù)據(jù),并分析測(cè)試的輸出結(jié)果。一般使用生產(chǎn)中的實(shí)際數(shù)據(jù)進(jìn)行測(cè)試。α測(cè)試——是由一個(gè)用戶在開(kāi)發(fā)環(huán)境下進(jìn)行的測(cè)試,也可以是開(kāi)發(fā)機(jī)構(gòu)內(nèi)部的用戶在模擬實(shí)際操作環(huán)境下進(jìn)行的測(cè)試。開(kāi)發(fā)者在整個(gè)測(cè)試過(guò)程中隨時(shí)記錄使用中的情況和錯(cuò)誤,因此α測(cè)試是在受控的環(huán)境下進(jìn)行的測(cè)試。β測(cè)試——是由軟件的多個(gè)用戶在一個(gè)或多個(gè)用戶的實(shí)際使用環(huán)境下進(jìn)行的測(cè)試。測(cè)試時(shí),開(kāi)發(fā)者通常不在測(cè)試的現(xiàn)場(chǎng),因此β測(cè)試是在開(kāi)發(fā)者無(wú)法控制的環(huán)境下進(jìn)行的軟件現(xiàn)場(chǎng)應(yīng)用。5.3.4系統(tǒng)測(cè)試所謂系統(tǒng)測(cè)試,是將通過(guò)確認(rèn)測(cè)試的軟件,作為整個(gè)基于計(jì)算機(jī)系統(tǒng)的一個(gè)元素,與計(jì)算機(jī)硬件、外設(shè)、某些支持軟件、數(shù)據(jù)和人員等其他系統(tǒng)元素結(jié)合在一起,在實(shí)際運(yùn)行或模擬環(huán)境下,對(duì)計(jì)算機(jī)系統(tǒng)進(jìn)行一系列的綜合性的測(cè)試。系統(tǒng)測(cè)試的目的在于通過(guò)與系統(tǒng)的需求定義作比較,發(fā)現(xiàn)軟件與系統(tǒng)定義不符合或與之矛盾的地方。系統(tǒng)測(cè)試的測(cè)試用例應(yīng)根據(jù)需求分析規(guī)格說(shuō)明來(lái)設(shè)計(jì),并在實(shí)際使用環(huán)境下來(lái)運(yùn)行。

5.3.4系統(tǒng)測(cè)試幾種常見(jiàn)的系統(tǒng)測(cè)試功能測(cè)試(FunctionTesting) 功能測(cè)試的目的是找出軟件系統(tǒng)的功能與規(guī)格說(shuō)明書(shū)中對(duì)于產(chǎn)品功能定義之間的差異。容量測(cè)試(VolumeTesting) 容量測(cè)試的目的是使系統(tǒng)承受超額的數(shù)據(jù)容量來(lái)發(fā)現(xiàn)它是否能夠正確處理。壓力測(cè)試(StressTesting) 壓力測(cè)試的目的是測(cè)試在一個(gè)短時(shí)間里,資源超負(fù)荷或數(shù)據(jù)量、活動(dòng)達(dá)到峰值情況下時(shí)系統(tǒng)的表現(xiàn),即測(cè)試系統(tǒng)承受速度方面的超額負(fù)載。比如:基于Web的應(yīng)用中用戶的并發(fā)訪問(wèn)量的測(cè)試。5.3.4系統(tǒng)測(cè)試可用性測(cè)試(UsabilityTesting) 可用性測(cè)試是基于程序系統(tǒng)中充分考慮到以人為本的因素而出現(xiàn)的。其目的是檢測(cè)用戶在理解和使用系統(tǒng)方面到底有多好。安全性測(cè)試(SecurityTesting) 安全性測(cè)試的目的是通過(guò)測(cè)試破壞系統(tǒng)的安全檢查機(jī)制,從而暴露系統(tǒng)在安全方面的不足與缺陷。性能測(cè)試(PerformanceTesting) 性能測(cè)試的目標(biāo)是度量系統(tǒng)相對(duì)于預(yù)定義的目標(biāo)的差異。性能要求包括響應(yīng)時(shí)間、吞吐率等。性能功能測(cè)試常和壓力測(cè)試一起進(jìn)行。5.3.4系統(tǒng)測(cè)試恢復(fù)性測(cè)試(RecoveryTesting) 恢復(fù)性測(cè)試的目的是驗(yàn)證系統(tǒng)(如操作系統(tǒng)、數(shù)據(jù)庫(kù)管理系統(tǒng)等)從軟件或硬件失敗中恢復(fù)的能力。其中包含系統(tǒng)能否正確地完成恢復(fù)功能,以及系統(tǒng)能否在要求的MTTR時(shí)間內(nèi)恢復(fù)兩方面的測(cè)試。兼容性測(cè)試(CompatibilityTesting) 兼容性測(cè)試的目的是測(cè)試應(yīng)用對(duì)其他應(yīng)用或系統(tǒng)的兼容性。可安裝性測(cè)試(Install-abilityTesting) 可安裝性測(cè)試的目的是驗(yàn)證成功安裝系統(tǒng)的能力。5.3.4系統(tǒng)測(cè)試文檔測(cè)試(DocumentationTesting) 文檔測(cè)試的目的是驗(yàn)證用戶文檔是正確的并且保證操作手冊(cè)的過(guò)程能正確工作。配置測(cè)試(ConfigurationTesting)

配置測(cè)試的目的是驗(yàn)證系統(tǒng)在不同的系統(tǒng)配置下能否正確工作。配置包括:硬件、軟件、網(wǎng)絡(luò)等。5.3

軟件測(cè)試方法5.3.1軟件測(cè)試方法概述靜態(tài)測(cè)試 通常不要求在計(jì)算機(jī)上實(shí)際執(zhí)行所測(cè)程序,主要以一些人工的模擬技術(shù)對(duì)軟件進(jìn)行分析和測(cè)試。代碼審查:由有經(jīng)驗(yàn)的程序設(shè)計(jì)人員根據(jù)軟件的詳細(xì)設(shè)計(jì)說(shuō)明書(shū),閱讀程序來(lái)發(fā)現(xiàn)軟件錯(cuò)誤和缺陷。靜態(tài)分析:主要是對(duì)程序進(jìn)行以圖形的方式表現(xiàn)程序的內(nèi)部結(jié)構(gòu)。主要有控制流分析、數(shù)據(jù)流分析、接口分析和表達(dá)式分析等5.4.1軟件測(cè)試方法概述動(dòng)態(tài)測(cè)試 通過(guò)輸入一組預(yù)先按照一定的測(cè)試準(zhǔn)則構(gòu)造的實(shí)例數(shù)據(jù)來(lái)動(dòng)態(tài)運(yùn)行程序,而達(dá)到發(fā)現(xiàn)程序錯(cuò)誤的過(guò)程。白盒測(cè)試 根據(jù)軟件產(chǎn)品的內(nèi)部工作過(guò)程,在計(jì)算機(jī)上進(jìn)行測(cè)試,以證實(shí)每種內(nèi)部操作是否符合設(shè)計(jì)規(guī)格要求,所有內(nèi)部成分是否已經(jīng)過(guò)檢查黑盒測(cè)試 根據(jù)軟件產(chǎn)品的功能設(shè)計(jì)規(guī)格,在計(jì)算機(jī)上進(jìn)行測(cè)試,以證實(shí)每個(gè)實(shí)現(xiàn)了的功能是否符合要求。 測(cè)試人員完全不考慮程序內(nèi)部的邏輯結(jié)構(gòu)和內(nèi)部特性,只依據(jù)程序的需求分析規(guī)格說(shuō)明,檢查程序的功能是否符合它的功能說(shuō)明。5.4.1軟件測(cè)試方法概述“窮盡”測(cè)試是不可能的!

不論是黑盒測(cè)試,還是白盒測(cè)試,都不可能把所有可能的輸入數(shù)據(jù)都拿來(lái)進(jìn)行所謂的窮舉測(cè)試。因?yàn)榭赡艿臏y(cè)試輸入數(shù)據(jù)數(shù)目往往達(dá)到天文數(shù)字。5.4.2軟件測(cè)試方法表1測(cè)試項(xiàng)目比較黑盒測(cè)試法

白盒測(cè)試法邊界值分析等價(jià)類劃分因果分析猜測(cè)錯(cuò)誤邏輯覆蓋

控制結(jié)構(gòu)測(cè)試

語(yǔ)句覆蓋

基本路徑測(cè)試判定覆蓋條件測(cè)試條件覆蓋循環(huán)測(cè)試判定/條件覆蓋條件組合覆蓋路徑覆蓋

白盒測(cè)試(結(jié)構(gòu)性測(cè)試)的基礎(chǔ)是模塊說(shuō)明書(shū)或軟件的詳細(xì)設(shè)計(jì)說(shuō)明白盒測(cè)試按照程序內(nèi)部的邏輯結(jié)構(gòu)測(cè)試程序,檢查程序中的每條通路是否能按照預(yù)定的要求正確工作黑盒測(cè)試(功能性測(cè)試)的基礎(chǔ)是軟件的規(guī)格說(shuō)明把程序看成一個(gè)黑盒子,完全不考慮程序的內(nèi)部機(jī)構(gòu)和處理過(guò)程黑盒測(cè)試只檢查程序的功能是否能按照規(guī)格說(shuō)明書(shū)的規(guī)定正常使用,程序是否能適當(dāng)?shù)慕邮蛰斎霐?shù)據(jù)產(chǎn)生正確的輸出信息,并保持外部信息的完整性5.4.2軟件測(cè)試方法黑盒(功能性)測(cè)試用例設(shè)計(jì)方法方法

實(shí)例講解等價(jià)類劃分邊界值分析因果分析錯(cuò)誤推測(cè)(黑盒)等價(jià)類劃分基本思想

根據(jù)程序的輸入數(shù)據(jù)性質(zhì)的不同,將其劃分為幾個(gè)不同的集合類,然后從每個(gè)集合類中挑選有代表性的數(shù)據(jù)作為測(cè)試用例。每個(gè)集合類中的數(shù)據(jù)對(duì)于發(fā)現(xiàn)程序中的錯(cuò)誤具有等效的作用。這樣的集合類就被稱為等價(jià)類。

無(wú)效等價(jià)類指的是不合理、無(wú)意義的或與規(guī)格說(shuō)明中的規(guī)定不符的輸入數(shù)據(jù)的集合,利用無(wú)效等價(jià)類可以測(cè)試程序?qū)σ馔獾摹⒉缓侠淼妮斎霐?shù)據(jù)的處理能力即程序的健壯性

有效等價(jià)類指的是對(duì)于程序的規(guī)格說(shuō)明來(lái)說(shuō)有意義的、合法的輸入數(shù)據(jù)的集合。利用有效等價(jià)類可以檢測(cè)程序是否正確實(shí)現(xiàn)了要求的功能和處理(黑盒)等價(jià)類劃分等價(jià)類的劃分方法在輸入條件規(guī)定了取值范圍或值的個(gè)數(shù)的情況下,可以確立一個(gè)有效等價(jià)類和兩個(gè)無(wú)效等價(jià)類。在輸入條件規(guī)定了輸入值的集合或者規(guī)定了“必須如何”的條件的情況下,可以確立一個(gè)有效等價(jià)類和一個(gè)無(wú)效等價(jià)類在輸入條件是一個(gè)布爾量的情況下,可確定一個(gè)有效等價(jià)類和一個(gè)無(wú)效等價(jià)類在規(guī)定了輸入數(shù)據(jù)的一組值(假定n個(gè)),并且程序要對(duì)每一個(gè)輸入值分別處理的情況下,可確立n個(gè)有效等價(jià)類和一個(gè)無(wú)效等價(jià)類在規(guī)定了輸入數(shù)據(jù)必須遵守的規(guī)則的情況下,可確立一個(gè)有效等價(jià)類(符合規(guī)則)和若干個(gè)無(wú)效等價(jià)類(從不同角度違反規(guī)則)在確知已劃分的等價(jià)類中各元素在程序處理中的方式不同的情況下,則應(yīng)再將該等價(jià)類進(jìn)一步地劃分為更小的等價(jià)類(黑盒)等價(jià)類劃分等價(jià)劃分法的實(shí)施基本步驟(1)劃分等價(jià)類并列出等價(jià)類表(2)構(gòu)造測(cè)試用例 根據(jù)已列出的等價(jià)類表,按以下步驟確定測(cè)試用例:設(shè)計(jì)一個(gè)新的測(cè)試用例,使其盡可能多地覆蓋尚未覆蓋的有效等價(jià)類。重復(fù)這一步,最后使得所有有效等價(jià)類均被測(cè)試用例所覆蓋;設(shè)計(jì)一個(gè)新的測(cè)試用例,使其只覆蓋一個(gè)無(wú)效等價(jià)類。重復(fù)這一步使所有無(wú)效等價(jià)類均被覆蓋。

應(yīng)按照輸入條件(如輸入值的范圍,值的個(gè)數(shù),值的集合,輸入條件必須如何)劃分為有效等價(jià)類和無(wú)效等價(jià)類。例如:每個(gè)學(xué)生可選修1-3門(mén)課程可以劃分一個(gè)有效等價(jià)類:選修1-3門(mén)課程??梢詣澐謨蓚€(gè)無(wú)效等價(jià)類:未選修課,選修課超過(guò)3門(mén)。輸入等價(jià)類有效等價(jià)類無(wú)效等價(jià)類

報(bào)表日期的類型及長(zhǎng)度6個(gè)數(shù)字字符(1)有非數(shù)字字符(4)少于6個(gè)數(shù)字字符(5)多于6個(gè)數(shù)字字符(6)年份范圍在2001~2005之間(2)小于2001(7)大于2005(8)月份范圍在1~12之間(3)“報(bào)表日期”輸入條件的等價(jià)類表小于1(9)大于12(10)第一步:等價(jià)類劃分(黑盒)等價(jià)類劃分第二步:為有效等價(jià)類設(shè)計(jì)測(cè)試用例

對(duì)表中編號(hào)為1,2,3的3個(gè)有效等價(jià)類用一個(gè)測(cè)試用例覆蓋:200105等價(jià)類(1)(2)(3)輸入有效測(cè)試數(shù)據(jù)期望結(jié)果覆蓋范圍第三步:為每一個(gè)無(wú)效等價(jià)類至少設(shè)計(jì)一個(gè)測(cè)試用例

測(cè)試數(shù)據(jù)期望結(jié)果覆蓋范圍001MAY等價(jià)類(4)輸入無(wú)效20015等價(jià)類(5)輸入無(wú)效2001005等價(jià)類(6)輸入無(wú)效200005等價(jià)類(7)輸入無(wú)效200805等價(jià)類(8)輸入無(wú)效200100等價(jià)類(9)輸入無(wú)效200113等價(jià)類(10)輸入無(wú)效不能出現(xiàn)相同的測(cè)試用例本例的10個(gè)等價(jià)類至少需要8個(gè)測(cè)試用例(黑盒)等價(jià)類劃分實(shí)例講解-1問(wèn)題陳述(三角形問(wèn)題)三角形問(wèn)題接受三個(gè)整數(shù)a,b,c作為輸入,用作三角形的邊。程序的輸出是由這三條邊確定的三角形的類型:等邊三角形、等腰三角形、不等邊三角形或非三角形。整數(shù)a,b,c必須滿足以下條件:

c1. 1<=a<=200

c2. 1<=b<=200

c3. 1<=c<=200

c4. a<b+c

c5. b<a+c

c6. c<a+b(黑盒)等價(jià)類劃分等價(jià)類劃分: R1={<a,b,c>:有三條邊a,b,c的等邊三角形} R2={<a,b,c>:有三條邊a,b,c的等腰三角形} R3={<a,b,c>:有三條邊a,b,c的不等邊三角形} R4={<a,b,c>:三條邊a,b,c不構(gòu)成三角形}a,b,c可能的取值: D1={<a,b,c>:a=b=c} D2={<a,b,c>:a=b,a<>c} D3={<a,b,c>:a=c,a<>b} D4={<a,b,c>:b=c,a<>b} D5={<a,b,c>:a<>c,a<>b,b<>c} D6={<a,b,c>:a>=c+b} D7={<a,b,c>:b>=a+c} D8={<a,b,c>:c>=a+b}(黑盒)等價(jià)類劃分實(shí)例講解-2問(wèn)題陳述(標(biāo)識(shí)符定義問(wèn)題)某PASCAL語(yǔ)言版本中規(guī)定:”標(biāo)識(shí)符由字母開(kāi)頭,后跟字母或數(shù)字的任意組合構(gòu)成,有效字符數(shù)為8個(gè),最大字符數(shù)為80個(gè).并且標(biāo)識(shí)符必須先說(shuō)明,再使用.在同一說(shuō)明語(yǔ)句中,標(biāo)識(shí)符至少必須有一個(gè).

等價(jià)類劃分:輸入條件有效等價(jià)類無(wú)效等價(jià)類標(biāo)識(shí)符個(gè)數(shù)1個(gè)(1),多個(gè)(2)0個(gè)(3)標(biāo)識(shí)符字符個(gè)數(shù)1~8個(gè)(4)0個(gè)(5),>8個(gè)(6),>80個(gè)標(biāo)識(shí)符組成字母(8),數(shù)字(9)非字母數(shù)字字符(10),保留字(11)第一個(gè)字符字母(12)非字符(13)標(biāo)識(shí)符使用先說(shuō)明后使用(14)未說(shuō)明已使用(15)(黑盒)等價(jià)類劃分編號(hào)用例類的覆蓋情況1VARx,T1234567:REAL;BEGINx:=3.14;T1234567:=2.73;….(1),(2),(4),(8),(9),(12),(14)2VAR:REAL;(3)3VARx,:REAL;(5)4VART12345678:REAL(6)5VART12345…….:REAL;(7)6VART$:CHAR;(10)7VARGOTO:INTEGER;(11)8VAR2T:REAL;(13)9VARPAR:REAL;BEGIN……PAP:=SIN(3.14*0.8)/6;(15)(黑盒)邊界值分析法基本思想

選取輸入/輸出范圍的邊界值、略大于邊界值和略小于邊界值的數(shù)據(jù)來(lái)測(cè)試程序是否存在錯(cuò)誤。

邊界是指,相當(dāng)于輸入等價(jià)類和輸出等價(jià)類而言,稍高于其邊界值及稍低于其邊界值的一些特定情況。因此,

邊界值分析法可作為等價(jià)類劃分法的一種有益補(bǔ)充。

(黑盒)邊界值分析法邊界值法中測(cè)試用例的選擇原則(1)如果輸入條件規(guī)定了值的范圍,則應(yīng)該取剛達(dá)到這個(gè)范圍的邊界值,以及剛剛超過(guò)這個(gè)范圍邊界的值作為測(cè)試輸入數(shù)據(jù);(2)如果輸入條件規(guī)定了值的個(gè)數(shù),則用最大個(gè)數(shù)、最小個(gè)數(shù)、比最大個(gè)數(shù)多1個(gè)、比最小個(gè)數(shù)少1的數(shù)作為測(cè)試數(shù)據(jù);(3)根據(jù)規(guī)格說(shuō)明的每一個(gè)輸出條件,使用規(guī)則(1);(4)根據(jù)規(guī)格說(shuō)明的每一個(gè)輸出條件,使用規(guī)則(2);(5)如果程序的規(guī)格說(shuō)明給出的輸入域或輸出域是有序集合(如有序表、順序文件等),則應(yīng)選取集合的第一個(gè)和最后一個(gè)元素作為測(cè)試用例;(6)如果程序用了一個(gè)內(nèi)部結(jié)構(gòu),應(yīng)該選取這個(gè)內(nèi)部數(shù)據(jù)結(jié)構(gòu)的邊界值作為測(cè)試用例;(7)分析規(guī)格說(shuō)明,找出其他可能的邊界條件。(黑盒)邊界值分析法

A按照輸入值范圍的邊界。例如:輸入值的范圍是-1.0至1.0,則可選擇用例:

–1.0、1.0、-1.001、1.001。

B按照輸入/輸出值個(gè)數(shù)的邊界。

例如:輸入文件可有1-255個(gè)記錄,則設(shè)計(jì)用例: 文件的記錄數(shù)為0個(gè)、1個(gè)、255個(gè)、256個(gè)。

C輸出值域的邊界。

例如:檢索文獻(xiàn)摘要,最多4篇。設(shè)計(jì)用例: 可檢索0篇、1篇、4篇,和5篇(錯(cuò)誤)。

D輸入/輸出有序集(如順序文件、線性表)的邊界。

應(yīng)選擇第一個(gè)元素和最后一個(gè)元素。輸入條件報(bào)表日期的類型及長(zhǎng)度1個(gè)數(shù)字字符5個(gè)數(shù)字字符7個(gè)數(shù)字字符有1個(gè)非數(shù)字字符全部是非數(shù)字字符6個(gè)數(shù)字字符顯示出錯(cuò)顯示出錯(cuò)顯示出錯(cuò)顯示出錯(cuò)顯示出錯(cuò)輸入有效日期范圍月份范圍測(cè)試用例說(shuō)明測(cè)試數(shù)據(jù)期望結(jié)果選取理由52001520010052001.5MAY---200105月份為1月月份為12月月份<1月份>12200101200112200100200113200101200512200100200513輸入有效輸入有效顯示出錯(cuò)顯示出錯(cuò)輸入有效輸入有效顯示出錯(cuò)顯示出錯(cuò)在有效范圍邊界上選取數(shù)據(jù)僅有1個(gè)合法字符比有效長(zhǎng)度少1比有效長(zhǎng)度多1只有1個(gè)非法字符6個(gè)非法字符類型及長(zhǎng)度均有效最小日期最大日期剛好小于最小日期剛好大于最大日期最小月份最大月份剛好小于最小月份剛好大于最大月份“報(bào)表日期”邊界值分析法測(cè)試用例(黑盒)因果圖法

前面介紹的等價(jià)類劃分方法和邊界值分析方法,都是著重考慮輸入條件,但未考慮輸入條件之間的聯(lián)系。當(dāng)需要測(cè)試的程序的輸入數(shù)據(jù)之間存在相互的制約關(guān)系或存在輸入情況的不同組合,相應(yīng)產(chǎn)生多個(gè)動(dòng)作的形式時(shí),就需要用到因果圖法。

因果圖方法最終生成的就是判定表。它適合于檢查程序輸入條件的各種組合情況。

(黑盒)因果圖法因果圖中的因果關(guān)系 通常,在因果圖中,用Ci表示原因,Ei表示結(jié)果。各結(jié)點(diǎn)表示狀態(tài),可取值“0”或“1”。“0”表示某狀態(tài)不出現(xiàn),“1”表示某狀態(tài)出現(xiàn)。恒等非或(∨)與(∧)(黑盒)因果圖法因果圖中的約束關(guān)系E:a,b兩個(gè)原因不會(huì)同時(shí)成立,兩個(gè)中最多有一個(gè)可能成立。

I:a,b,c三個(gè)原因中至少有一個(gè)必須成立。

O:a和b當(dāng)中必須有一個(gè),且僅有一個(gè)成立。

R:當(dāng)a出現(xiàn)時(shí),b必須也出現(xiàn)。不可能a出現(xiàn),b不出現(xiàn)。

M:當(dāng)a是1時(shí),b必須是0。而當(dāng)a為0時(shí),b的值不定。(黑盒)因果圖法基本步驟

(1)分析軟件規(guī)格說(shuō)明描述中,哪些是原因(即輸入條件或輸入條件的等價(jià)類),哪些是結(jié)果(即輸出條件),并給每個(gè)原因和結(jié)果賦予一個(gè)標(biāo)識(shí)符。 (2)分析軟件規(guī)格說(shuō)明描述中的語(yǔ)義,找出原因與結(jié)果之間,原因與原因之間對(duì)應(yīng)的是什么關(guān)系?根據(jù)這些關(guān)系,畫(huà)出因果圖。 (3)由于語(yǔ)法或環(huán)境限制,有些原因與原因之間,原因與結(jié)果之間的組合情況不可能出現(xiàn)。為表明這些特殊情況,在因果圖上用一些記號(hào)標(biāo)明約束或限制條件 (4)把因果圖轉(zhuǎn)換成判定表。 (5)把判定表的每一列拿出來(lái)作為依據(jù),設(shè)計(jì)測(cè)試用例。(黑盒)因果圖法實(shí)例講解-1

問(wèn)題描述: 某個(gè)軟件的規(guī)格說(shuō)明中包含了下面的要求:

第一列字符必須是A或B,第二列字符必須是一個(gè)數(shù)字,在此情況下進(jìn)行文字的修改。但如果第一列字符不正確,則給出信息L;如果第二列字符非數(shù)字,則給出信息M。

(黑盒)因果圖法編號(hào)

原因(條件)

編號(hào)

結(jié)果(動(dòng)作)

1第一列字符是

A21修改文件

2第一列字符是

B22給出信息

L3第二列字符是一數(shù)字

23給出信息

M11中間原因

(1)列出原因和結(jié)果(2)畫(huà)出因果圖.所有原因結(jié)點(diǎn)列在左邊,所有結(jié)果結(jié)點(diǎn)列在右邊.建立四個(gè)中間結(jié)點(diǎn),表示處理的中間狀態(tài)(黑盒)因果圖法(3)加上約束條件E。

(4)由因果圖得到判定表12345678條件(原因)11111000021100110031010101011111100動(dòng)作(結(jié)果)220000112110100023010101測(cè)試用例

A3AMB5BNC2DYA8A7B4B!X6P(黑盒)因果圖法實(shí)例講解-2

一個(gè)處理單價(jià)為5角錢(qián)的飲料的自動(dòng)售貨機(jī)軟件測(cè)試用例的設(shè)計(jì)

問(wèn)題描述:

若投入5角錢(qián)或1元硬幣,按下[澄汁]或[啤酒]的按鈕,則相應(yīng)的飲料就送出來(lái).若售貨機(jī)沒(méi)有零錢(qián)找,則一個(gè)顯示[零錢(qián)找完]的紅燈亮,這時(shí)在投入1元硬幣并按下按鈕后,飲料不送出來(lái)而且1元硬幣也退出來(lái);若有零錢(qián)找,則顯示[零錢(qián)找完]的紅燈滅,在送出飲料的同時(shí)退還5角硬幣(黑盒)因果圖法

原因1.售貨機(jī)有零錢(qián)找

2.投入1元硬幣

3.投入5角硬幣

4.按下澄汁按鈕

5.按下啤酒按鈕

結(jié)果21.售貨機(jī)[零錢(qián)找完]的紅燈亮

22.退還1元硬幣

23.退還5角硬幣

24.送出澄汁飲料

25.送出啤酒飲料(1)列出原因和結(jié)果(2)畫(huà)出因果圖.所有原因結(jié)點(diǎn)列在左邊,所有結(jié)果結(jié)點(diǎn)列在右邊.建立四個(gè)中間結(jié)點(diǎn),表示處理的中間狀態(tài).(黑盒)因果圖法中間結(jié)點(diǎn):11.投入1元硬幣并按下飲料按鈕

12.按下[澄汁]或[啤酒]的按鈕

13.應(yīng)當(dāng)找5角硬幣并且售貨機(jī)有零錢(qián)找

14.錢(qián)已付清因?yàn)?/3,4/5不能同時(shí)發(fā)生,分別加上約束條件E(黑盒)因果圖法(4)由因果圖得到判定表(3)由于2與3,4與5不能同時(shí)發(fā)生,分別加上約束條件E。

(黑盒)錯(cuò)誤推測(cè)法

等價(jià)類劃分和邊界值分析法都只是孤立的考慮各種測(cè)試用例的效果,因果圖是比較機(jī)械的設(shè)計(jì)測(cè)試用例。他們都缺乏綜合考慮的效應(yīng)?;舅枷胪ㄟ^(guò)經(jīng)驗(yàn)或直覺(jué)推測(cè)程序中可能存在的各種錯(cuò)誤,從而有針對(duì)性設(shè)計(jì)測(cè)試用例。白盒(結(jié)構(gòu)性)測(cè)試用例的設(shè)計(jì)方法---覆蓋測(cè)試表結(jié)構(gòu)性測(cè)試覆蓋標(biāo)準(zhǔn)標(biāo)準(zhǔn)

覆蓋說(shuō)明語(yǔ)句覆蓋使被測(cè)程序中的每個(gè)語(yǔ)句至少執(zhí)行一次判定覆蓋語(yǔ)句覆蓋+每個(gè)判定的每種可能的結(jié)果至少執(zhí)行一次條件覆蓋語(yǔ)句覆蓋+判定表達(dá)式中的每個(gè)條件都取到各種可能的結(jié)果判定/條件覆蓋判定覆蓋+條件覆蓋條件組合覆蓋每個(gè)判定表達(dá)式中條件的各種可能組合都至少出現(xiàn)一次路徑覆蓋程序的每一條可能路徑都至少執(zhí)行一次(如果程序圖中有環(huán),則要求每個(gè)環(huán)至少要經(jīng)過(guò)一次)

白盒法需要了解程序的功能與結(jié)構(gòu),測(cè)試用例必須根據(jù)程序內(nèi)部的邏輯來(lái)設(shè)計(jì)。如果想用白盒法發(fā)現(xiàn)程序中的所有錯(cuò)誤,則至少必須使程序中每種可能的路徑都執(zhí)行一次。白盒法又稱為邏輯覆蓋法,目前常用的覆蓋標(biāo)準(zhǔn)有:白盒(結(jié)構(gòu)性)方法實(shí)例圖1被測(cè)模塊的流程圖被測(cè)模塊的源程序BEGIN

……

IF(A>1)AND(B=0)

THENX:=X/A

IF(A=2ORX>1)

THENX:=X+1

END入口A>1ANDB=0X=X/AA=2ORX>1X=X+1返回TTabcde1234567s白盒(結(jié)構(gòu)性)方法-語(yǔ)句覆蓋入口A>1ANDB=0X=X/AA=2ORX>1X=X+1返回TTabcde1234567圖2被測(cè)模塊的流程圖測(cè)試分析:1.該測(cè)試用例可以使每條語(yǔ)句都執(zhí)行一次2.如果將程序中的第2個(gè)判定的OR改為AND,將不能發(fā)現(xiàn)錯(cuò)誤3.將第2個(gè)判定的“X>1”誤寫(xiě)為”X<1”,將不能發(fā)現(xiàn)錯(cuò)誤測(cè)試用例程序執(zhí)行路徑A=2,B=0,X=4sacbed特點(diǎn):

語(yǔ)句覆蓋只關(guān)心判定表達(dá)式的值,而沒(méi)有分別測(cè)試判定表達(dá)式中每個(gè)條件取不同的值時(shí)的情況白盒(結(jié)構(gòu)性)方法-判定覆蓋圖3被測(cè)模塊的流程圖測(cè)試分析:1.該測(cè)試用例可以使每個(gè)判定分支都執(zhí)行一次2.將第2個(gè)判定的“X>1”誤寫(xiě)為”X<1”,仍然不能發(fā)現(xiàn)錯(cuò)誤測(cè)試用例程序執(zhí)行路徑A=3,B=0,X=3sacbdA=2,B=1,X=1sabed入口A>1ANDB=0X=X/AA=2ORX>1X=X+1返回TTabcde1234567s白盒(結(jié)構(gòu)性)方法-條件覆蓋入口A>1ANDB=0X=X/AA=2ORX>1X=X+1返回TTabcde1234567s圖4被測(cè)模塊的流程圖測(cè)試用例程序執(zhí)行路徑A=2,B=0,X=3sabdA=1,B=1,X=1scbed測(cè)試分析:1.該測(cè)試用例可以使每個(gè)判定內(nèi)部的條件都能夠取一次“真”和“假”

即:下面的每個(gè)取值都出現(xiàn)一次

A>1B=0A=2X>1

A<=1B<>0A<>2X<=12.仍然無(wú)法發(fā)現(xiàn)第2個(gè)判定表達(dá)式中的錯(cuò)誤3.條件覆蓋看起來(lái)似乎覆蓋了判定覆蓋,實(shí)際卻不一定。對(duì)于第1個(gè)判定式:若使用測(cè)試用例:A=2,B=1和A=0,B=0,則判定永遠(yuǎn)為假,后面的“X=X/A”語(yǔ)句永遠(yuǎn)也檢測(cè)不到。白盒(結(jié)構(gòu)性)方法-判定/條件覆蓋入口A>1ANDB=0X=X/AA=2ORX>1X=X+1返回TTabcde1234567s圖5被測(cè)模塊的流程圖測(cè)試用例(與條件覆蓋同)程序執(zhí)行路徑A=2,B=0,X=3sabdA=1,B=1,X=1scbed測(cè)試分析:1.該測(cè)試用例可以使判定中的條件都能夠取一次“真”和“假”,且每個(gè)判定本身的所有結(jié)果至少出現(xiàn)一次2.這組測(cè)試用例與上面的條件覆蓋的測(cè)試用例相同,這說(shuō)明,有時(shí)判定/條件覆蓋并不比條件覆蓋更強(qiáng)。白盒(結(jié)構(gòu)性)方法-條件組合覆蓋(1)入口A>1ANDB=0X=X/AA=2OR

X>1X=X+1返回TTabcde1234567s圖6被測(cè)模塊的流程圖測(cè)試分析:1.該測(cè)試用例可使判定表達(dá)式中條件的各種可能組合都至少出現(xiàn)一次2.滿足條件組合測(cè)試覆蓋標(biāo)準(zhǔn)的測(cè)試數(shù)據(jù),也一定滿足判定覆蓋、條件覆蓋、判定/條件覆蓋。3.滿足條件組合測(cè)試覆蓋標(biāo)準(zhǔn)的測(cè)試數(shù)據(jù)并不一定能使程序中的每條路徑都執(zhí)行到。例如:本測(cè)試方案中路徑sacbd就沒(méi)有測(cè)試到測(cè)試用例程序執(zhí)行路徑A=2,B=0,X=4sacbedA=2,B=1,X=1sabedA=1,B=0,X=2sabedA=1,B=1,X=1sabd白盒(結(jié)構(gòu)性)方法-條件組合覆蓋(2)A>1B=0A=2,B=0,X=4A>1B<>0A=2,B=1,X=1A<=1B=0A=1,B=0,X=2A<=1B<>0A=1,B=1,X=1A=2X>1A=2,B=0,X=4A=2X<=1A=2,B=1,X=1A<>2X>1A=1,B=0,X=2A<>2X<=1A=1,B=1,X=1入口A>1X=X/AA=2X=X+1返回TTabcdesB=0X>1TT圖7圖6的計(jì)算機(jī)執(zhí)行的實(shí)際流程圖白盒(結(jié)構(gòu)性)方法-路徑覆蓋入口A>1ANDB=0X=X/AA=2OR

X>1X=X+1返回TTabcde1234567s圖8被測(cè)模塊的流程圖測(cè)試分析:1.該測(cè)試用例可使使程序的每一條可能路徑都至少執(zhí)行一次2.路徑覆蓋是相當(dāng)強(qiáng)的邏輯覆蓋標(biāo)準(zhǔn),但他沒(méi)有檢驗(yàn)表達(dá)式中條件的各種可能組合情況;結(jié)合路經(jīng)測(cè)試和條件組合測(cè)試,可以設(shè)計(jì)出檢錯(cuò)能力更強(qiáng)的測(cè)試數(shù)據(jù)測(cè)試用例程序執(zhí)行路徑A=2,B=0,X=4sacbedA=1,B=1,X=1sabdA=1,B=1,X=2sabedA=3,B=0,X=3sacbd白盒(結(jié)構(gòu)性)測(cè)試用例的設(shè)計(jì)方法---基本路徑測(cè)試表控制結(jié)構(gòu)測(cè)試基本路徑測(cè)試測(cè)試用例能保證每條語(yǔ)句至少執(zhí)行一次,每個(gè)條件在執(zhí)行時(shí)分別取真假兩種值條件測(cè)試測(cè)試用例能檢查程序模塊中包含的邏輯條件循環(huán)測(cè)試測(cè)試循環(huán)結(jié)構(gòu)的有效性

現(xiàn)在的很多結(jié)構(gòu)性測(cè)試技術(shù),是根據(jù)程序的控制結(jié)構(gòu)設(shè)計(jì)測(cè)試數(shù)據(jù)的技術(shù),下面列出了幾種常用的控制結(jié)構(gòu)測(cè)試技術(shù)。本節(jié)重點(diǎn)介紹基本路徑測(cè)試(白盒)基本路徑法

基本路徑測(cè)試,首先計(jì)算程序的環(huán)形復(fù)雜度,并用該復(fù)雜度為指南定義執(zhí)行路徑的基本集合,從該基本集合導(dǎo)出的測(cè)試用例可以保證程序中的每條語(yǔ)句至少執(zhí)行一次,而且每個(gè)條件在執(zhí)行時(shí)都將分別取真、假兩種值。(白盒)基本路徑法第一步,根據(jù)過(guò)程設(shè)計(jì)結(jié)果畫(huà)出相應(yīng)的流圖。第二步,計(jì)算流圖的環(huán)形復(fù)雜度。第三步,確立線性獨(dú)立路徑的基本集合所謂獨(dú)立路徑是指至少引入程序的一個(gè)新處理語(yǔ)句集合或一個(gè)新條件的路徑,也就是說(shuō),獨(dú)立路徑至少包含一條在定義該路徑之前不曾用過(guò)的邊。使用基本路徑測(cè)試法設(shè)計(jì)測(cè)試用例時(shí),程序的環(huán)形復(fù)雜度決定了程序中獨(dú)立路徑的數(shù)量,而且這個(gè)數(shù)是確保程序中所有語(yǔ)句至少被執(zhí)行一次所需的測(cè)試數(shù)量的上界。第四步,設(shè)計(jì)可強(qiáng)制執(zhí)行基本集合中每條路徑的測(cè)試用例。(白盒)基本路徑法106分析例子流圖環(huán)形復(fù)雜度6基本集合(白盒)條件測(cè)試基本路徑測(cè)試簡(jiǎn)單高效,但是只有這樣的技術(shù)還不夠,為了進(jìn)一步提高白盒測(cè)試的質(zhì)量,還需要使用其他控制結(jié)構(gòu)技術(shù)。條件測(cè)試技術(shù)設(shè)計(jì)出的測(cè)試用例,能夠檢查程序模塊中包含的邏輯條件。條件測(cè)試基礎(chǔ)簡(jiǎn)單條件格式:一個(gè)布爾變量或一個(gè)關(guān)系表達(dá)式,在布爾變量或關(guān)系表達(dá)式之前還可能有一個(gè)NOT算符。關(guān)系表達(dá)式的形式如下:

E1<關(guān)系算符>E2

關(guān)系算符:>,<,≥≤≠=復(fù)合條件:復(fù)合條件由兩個(gè)或多個(gè)簡(jiǎn)單條件、布爾算符和括弧組成。布爾算符有OR,AND和NOT。不包含關(guān)系表達(dá)式的條件稱為布爾表達(dá)式。條件成分類型:包括布爾算符、布爾變量、布爾括弧、關(guān)系算符及算術(shù)表達(dá)式。(白盒)條件測(cè)試條件測(cè)試的目的不僅是檢測(cè)程序條件中的錯(cuò)誤,而且是檢測(cè)程序中的其他錯(cuò)誤。如果程序P的測(cè)試集能有效地檢測(cè)P中條件的錯(cuò)誤,則它很可能也可以有效地檢測(cè)P中的其他錯(cuò)誤

溫馨提示

  • 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)論