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

軟件實(shí)現(xiàn)5.1軟件編碼5.2軟件測(cè)試基礎(chǔ)5.3測(cè)試設(shè)計(jì)和管理5.4軟件測(cè)試過(guò)程5.5軟件測(cè)5.6軟件測(cè)試策略5.7白盒測(cè)試5.8黑盒測(cè)試5.9回歸測(cè)試5.10軟件調(diào)試5.11小結(jié)習(xí)題5

知識(shí)點(diǎn)

軟件編碼,軟件測(cè)試基礎(chǔ),軟件測(cè)試過(guò)程,軟件測(cè)試的基本方法,測(cè)試策略,黑盒與白盒測(cè)試,回歸測(cè)試與調(diào)試。

難點(diǎn)

軟件測(cè)試的策略,白盒測(cè)試和黑盒測(cè)試技術(shù),測(cè)試用例的設(shè)計(jì)。

基于工作過(guò)程的教學(xué)任務(wù)

通過(guò)本章的學(xué)習(xí),了解如何選擇程序設(shè)計(jì)語(yǔ)言,培養(yǎng)良好的編碼風(fēng)格,熟悉理解選擇良好的程序設(shè)計(jì)途徑的重要性;掌握軟件測(cè)試的目標(biāo)、準(zhǔn)則、方法和步驟,掌握單元測(cè)試、集成測(cè)試、確認(rèn)測(cè)試的方法步驟;掌握白盒測(cè)試和黑盒測(cè)試技術(shù)的概念、方法以及方案的設(shè)計(jì),能夠熟練按照測(cè)試的原則和技術(shù),分析確定高效的測(cè)試用例;掌握軟件調(diào)試的概念和策略,了解自動(dòng)測(cè)試工具和調(diào)試工具。掌握測(cè)試即找錯(cuò)、調(diào)試即糾錯(cuò)的核心概念。

5.1軟件編碼

軟件經(jīng)過(guò)結(jié)構(gòu)化設(shè)計(jì)后進(jìn)入程序編碼階段,編碼即編程序。程序的質(zhì)量基本上取決于軟件設(shè)計(jì)的質(zhì)量。編碼使用的語(yǔ)言和程序的布局風(fēng)格對(duì)程序質(zhì)量有相當(dāng)大的影響。

程序內(nèi)部的良好文檔資料,有規(guī)律的數(shù)據(jù)說(shuō)明格式,簡(jiǎn)單清晰的語(yǔ)句構(gòu)造和輸入輸出格式等,可以提高程序的可讀性,改進(jìn)程序的可維護(hù)性。

5.1.1編碼目的

軟件編碼的目的就是實(shí)現(xiàn)人和計(jì)算機(jī)的通信,指揮計(jì)算機(jī)按照人的意志正常工作,把模塊的過(guò)程描述翻譯成用語(yǔ)言書寫的源程序。源程序應(yīng)該正確可靠、簡(jiǎn)明清晰,而且具有較高的效率。

軟件工程項(xiàng)目對(duì)代碼編寫的要求,不僅僅是源代碼語(yǔ)法上的正確性,也不只是源程序中沒(méi)有各種錯(cuò)誤,還要求源代碼具有良好的結(jié)構(gòu)性和良好的程序設(shè)計(jì)風(fēng)格。

如果人們寫出的源程序既便于閱讀,又便于測(cè)試和排除所發(fā)現(xiàn)的程序故障,就能夠有效地在開(kāi)發(fā)期間消除絕大多數(shù)在程序中隱藏的錯(cuò)誤,使得程序可以做到正常穩(wěn)定的運(yùn)行,極大地減少運(yùn)行期間軟件失效的可能性,大大提高軟件的可靠性。

如果寫出的源程序在運(yùn)行過(guò)程中發(fā)現(xiàn)了問(wèn)題或錯(cuò)誤時(shí)容易修改,而且當(dāng)軟件在使用過(guò)程中,能根據(jù)用戶需要很容易擴(kuò)充其功能及改善其性能,這樣的程序就具有較好的可維護(hù)性。維護(hù)人員可以很方便地對(duì)它進(jìn)行修改、擴(kuò)充和移植。

盡管軟件的質(zhì)量更多地依賴于軟件設(shè)計(jì),但是,程序設(shè)計(jì)語(yǔ)言的特性和編碼途徑等,也會(huì)對(duì)程序的可靠性、可讀性、可測(cè)試性和可維護(hù)性產(chǎn)生影響。

5.1.2程序設(shè)計(jì)語(yǔ)言的選擇

雖然好的程序設(shè)計(jì)語(yǔ)言有助于寫出可靠而又容易維護(hù)的程序。但是,事在人為,工具再好,使用不當(dāng)也不會(huì)達(dá)到預(yù)期的效果。按照軟件工程方法論,程序是軟件設(shè)計(jì)的自然結(jié)果,程序的質(zhì)量基本上取決于設(shè)計(jì)的質(zhì)量。此外,編寫程序的途徑和編程經(jīng)驗(yàn)也很大程度上決定著程序的質(zhì)量。

現(xiàn)在,軟件公司使用面向?qū)ο蟮恼Z(yǔ)言,不管是哪一種面向?qū)ο笳Z(yǔ)言,開(kāi)發(fā)新的軟件都會(huì)承受壓力。隨之產(chǎn)生的問(wèn)題是:哪種面向?qū)ο笳Z(yǔ)言比較合適?今天,最廣泛應(yīng)用的面向?qū)ο缶幊陶Z(yǔ)言是C++和Java。

C++流行的真正原因是它與C具有明顯的相似性,因此,很多管理者把C++看作C的一個(gè)擴(kuò)展集,從而得出任何了解C的程序員都能夠迅速地掌握額外部分的結(jié)論。但是,只有在采用了面向?qū)ο蠹夹g(shù),而且產(chǎn)品是由對(duì)象和類而不是函數(shù)來(lái)組織的時(shí)候,C++的使用才有意義。

因此,在采用C++之前,相關(guān)軟件專業(yè)人員經(jīng)過(guò)面向?qū)ο蠓缎头矫娴呐嘤?xùn)是非常重要的。當(dāng)企業(yè)對(duì)從C轉(zhuǎn)換到C++帶來(lái)的結(jié)果感到失望時(shí),一個(gè)主要的原因是相關(guān)人員缺乏面向?qū)ο蠓缎偷呐嘤?xùn)。

如果軟件企業(yè)決定采用Java,從傳統(tǒng)的結(jié)構(gòu)化范型轉(zhuǎn)變到面向?qū)ο蠓缎褪遣豢赡艿?。Java是純面向?qū)ο蟪绦蛘Z(yǔ)言,不支持傳統(tǒng)的結(jié)構(gòu)化范型的函數(shù)和過(guò)程。不像C++這樣的混合面向?qū)ο笳Z(yǔ)言,Java程序員從一開(kāi)始就必須使用面向?qū)ο蠓缎?而且只能使用面向?qū)ο蠓缎?。由于需要從一個(gè)范型轉(zhuǎn)到另一個(gè)范型,與轉(zhuǎn)變到像C++這種混合型的面向?qū)ο笳Z(yǔ)言相比,采用Java所需的教育和培訓(xùn)就顯得更為重要。

決定了實(shí)現(xiàn)語(yǔ)言之后,下面的問(wèn)題是如何采用軟件工程原理獲得更高質(zhì)量的代碼。在實(shí)際選擇語(yǔ)言時(shí)不能僅僅使用理論上的標(biāo)準(zhǔn),還必須同時(shí)考慮實(shí)用方面的各種限制。下面是選擇語(yǔ)言的主要標(biāo)準(zhǔn)。

(1)系統(tǒng)用戶的要求。如果所開(kāi)發(fā)的系統(tǒng)由用戶負(fù)責(zé)維護(hù),用戶通常要求用他們熟悉的語(yǔ)言書寫程序。

(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)程序員的知識(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.3良好的編程實(shí)踐

源代碼的邏輯簡(jiǎn)明清晰、易讀易懂是好程序的一個(gè)重要標(biāo)準(zhǔn)。關(guān)于編程風(fēng)格,許多建議都和特定的語(yǔ)言相關(guān)。目前主流開(kāi)發(fā)工具主要以Java和C++為主,因此這里為Java和C++這樣的面向?qū)ο笳Z(yǔ)言給出一些與語(yǔ)言無(wú)關(guān)的良好編程實(shí)踐建議,這就需要從程序內(nèi)部的文檔入手建立良好的編程風(fēng)格。所謂程序內(nèi)部的文檔,包括恰當(dāng)?shù)臉?biāo)識(shí)符、適當(dāng)?shù)淖⑨尯统绦虻囊曈X(jué)組織等。

1.標(biāo)識(shí)符使用一致和有意義的變量名

選取含義鮮明的名字,使它能正確地提示程序?qū)ο笏淼膶?shí)體,這對(duì)于幫助閱讀者理解程序是很重要的。如果使用縮寫,那么縮寫規(guī)則應(yīng)該一致,并且應(yīng)該給每個(gè)名字加注解。程序員給出只對(duì)自己有意義的變量名是遠(yuǎn)遠(yuǎn)不夠的,在軟件工程領(lǐng)域,有意義的變量名是指“從將來(lái)維護(hù)程序員的角度來(lái)看是有意義的”。例如:

在20世紀(jì)70年代后期,南非約翰內(nèi)斯堡有個(gè)小型軟件公司,由兩個(gè)編程團(tuán)隊(duì)組成。團(tuán)隊(duì)A由來(lái)自莫桑比克的人組成,擁有葡萄牙血統(tǒng),母語(yǔ)是葡萄牙語(yǔ),代碼寫得很好,變量名是有意義的,但是僅對(duì)說(shuō)葡萄牙語(yǔ)的人有意義。團(tuán)隊(duì)B由以色列移民組成,母語(yǔ)是希伯來(lái)語(yǔ),代碼寫得一樣好,選擇的變量名同樣是有意義的,但是僅對(duì)說(shuō)希伯來(lái)語(yǔ)的人有意義。

一天,團(tuán)隊(duì)A和負(fù)責(zé)人一同辭職了。團(tuán)隊(duì)B完全無(wú)法維護(hù)團(tuán)隊(duì)A曾經(jīng)編寫的任何優(yōu)秀代碼,因?yàn)樗麄儾粫?huì)講葡萄牙語(yǔ),對(duì)講葡萄牙語(yǔ)的人有意義的變量名,對(duì)于語(yǔ)言能力僅限于希伯來(lái)語(yǔ)和英語(yǔ)的以色列人是完全不可理解的。公司老板無(wú)法雇用足夠的會(huì)說(shuō)葡萄牙語(yǔ)的程序員代替團(tuán)隊(duì)A,很快在大量不滿客戶的訴訟壓力下破產(chǎn)了,因?yàn)檫@些客戶的代碼基本上是不可維護(hù)的了。

這種情況很容易避免,公司的領(lǐng)導(dǎo)應(yīng)當(dāng)在一開(kāi)始就堅(jiān)持用英語(yǔ)命名全部的變量名,而英語(yǔ)是每個(gè)計(jì)算機(jī)專業(yè)人員都理解的語(yǔ)言,于是變量名對(duì)每個(gè)維護(hù)人員就都是有意義的。

有些命名約定可以使代碼更容易理解,其思想是變量名應(yīng)該包括類型信息。例如,ptrChTmp可能表示一個(gè)臨時(shí)變量(Tmp)用來(lái)指向字符(Ch)的指針(ptr),這種方案最著名的是匈牙利命名法。這類方案的缺點(diǎn)是,當(dāng)參與者不能拼讀出變量名時(shí),代碼審查的效果會(huì)降低,逐個(gè)地讀出變量名尤其痛苦。但是,對(duì)有匈牙利命名法經(jīng)驗(yàn)的人來(lái)說(shuō),該方法增強(qiáng)了代碼的可讀性。

2.注釋—自文檔化代碼的問(wèn)題

當(dāng)問(wèn)到為何代碼沒(méi)有包含注釋時(shí),程序員常常會(huì)自豪地說(shuō):“我寫的是自文檔化代碼”。意思是程序中的變量名經(jīng)過(guò)認(rèn)真選擇,代碼編寫得十分精巧,以至于沒(méi)有添加注釋的必要。自文檔化代碼的確存在,但非常稀少。通常的情形是程序員在編寫代碼制品時(shí)認(rèn)真考慮代碼中每個(gè)名詞的細(xì)微差別,并進(jìn)行注釋。

另外,在每個(gè)代碼段中序言注釋是必須有的,每個(gè)代碼的頂部必須提供圖5-1中列出的最基本信息。除了序言注釋外,應(yīng)當(dāng)在代碼中插入行內(nèi)注釋,以幫助維護(hù)程序員理解代碼。專家建議,行內(nèi)注釋的使用場(chǎng)合應(yīng)該僅僅是當(dāng)代碼編寫的方式不明顯,或使用了該語(yǔ)言中某些難以理解的方法的時(shí)候。相反,含糊不清的代碼應(yīng)當(dāng)以清晰的方式重新編寫,行內(nèi)注釋是幫助程序員維護(hù)的一種手段,不應(yīng)當(dāng)助長(zhǎng)拙劣的編程實(shí)踐或?yàn)槠鋵ふ医杩凇?/p>

圖5-1一個(gè)代碼制品的序言注釋

3.業(yè)務(wù)數(shù)據(jù)常量建議使用參數(shù)

很少有真正的常量,也就是說(shuō),值“永遠(yuǎn)不會(huì)”改變。例如,銷售稅不是真正的常量,可能不時(shí)會(huì)調(diào)整銷售稅率,假定銷售稅率當(dāng)前是6.0%,如果數(shù)值6.0硬性編碼到某產(chǎn)品的許多代碼中,那么改變?cè)摦a(chǎn)品將是一項(xiàng)浩大的工程,可能導(dǎo)致忽視“常量”6.0的一個(gè)或兩個(gè)實(shí)例,也可能錯(cuò)誤地改變一個(gè)不相關(guān)的6.0。

更好的解決方案是像下面的Java聲明:

publicstaticfinalfloatSALESTAXRATE=(float)6.0;

或在C++中聲明:

constfloatSALESTAXRATE=6.0;

這樣,無(wú)論哪里需要銷售稅率的值,都應(yīng)當(dāng)使用常量SALESTAXRATE而不是數(shù)值6.0。如果銷售稅率改變了,只需采用編輯器替換包含SALESTAXRATE值的那行代碼即可。更好的方法是,運(yùn)行開(kāi)始時(shí)從參數(shù)文件或數(shù)據(jù)庫(kù)基表中讀入銷售稅率的值。因此,常量都應(yīng)該當(dāng)作參數(shù)處理,這樣,當(dāng)某個(gè)值發(fā)生變化時(shí),就可以快速有效地實(shí)現(xiàn)改變。

4.視覺(jué)組織—代碼編排以增加可讀性

要想代碼易于閱讀相當(dāng)簡(jiǎn)單。例如,即使編程語(yǔ)言允許,一行中也不應(yīng)當(dāng)出現(xiàn)多個(gè)語(yǔ)句。縮進(jìn)是增加代碼可讀性最重要的技術(shù),設(shè)想一下如果沒(méi)使用縮進(jìn)來(lái)幫助理解代碼,很多代碼都難于閱讀。在Java或C++中,縮進(jìn)可以用來(lái)匹配相應(yīng)的{…}對(duì),還能顯示哪些語(yǔ)句屬于給定的代碼塊。因此,正確的縮進(jìn)太重要了,可使用CASE工具確??s進(jìn)的正確性。

另一個(gè)有用的方法是插入空行。方法之間應(yīng)當(dāng)用空行隔開(kāi),此外,用空行隔開(kāi)大的代碼塊通常有助于閱讀。額外的“空白區(qū)域”使代碼更容易閱讀,也更容易理解。

5.語(yǔ)句構(gòu)造

設(shè)計(jì)期間確定了軟件的邏輯結(jié)構(gòu),然而個(gè)別語(yǔ)句的構(gòu)造卻是編寫程序的一個(gè)主要任務(wù)。構(gòu)造語(yǔ)句時(shí)應(yīng)該遵循的原則是,每個(gè)語(yǔ)句都應(yīng)該簡(jiǎn)單而直接,不能為了提高效率而使程序變得過(guò)分復(fù)雜。下述規(guī)則有助于使語(yǔ)句簡(jiǎn)單明了:

不要為了節(jié)省空間而把多個(gè)語(yǔ)句寫在同一行;

盡量避免復(fù)雜的條件測(cè)試;

盡量減少對(duì)“非”條件的測(cè)試;

避免大量使用循環(huán)嵌套和條件嵌套;

利用括號(hào)使邏輯表達(dá)式或算術(shù)表達(dá)式的運(yùn)算次序清晰直觀。

6.輸入/輸出

設(shè)計(jì)輸入/輸出界面的原則是友好、簡(jiǎn)潔、統(tǒng)一,符合用戶的日常工作習(xí)慣。在設(shè)計(jì)和編寫程序時(shí)應(yīng)該考慮下述有關(guān)輸入/輸出風(fēng)格的規(guī)則:

對(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)志。

7.編碼標(biāo)準(zhǔn)與效率

編碼標(biāo)準(zhǔn)是福也是禍。帶有偶然性內(nèi)聚的模塊通常是使用某些規(guī)則的結(jié)果,如“每個(gè)模塊將由35~50條可執(zhí)行語(yǔ)句組成”。與這種死板的風(fēng)格不同的是,“程序員在構(gòu)造一個(gè)少于35條或多于50條可執(zhí)行語(yǔ)句的模塊之前,應(yīng)當(dāng)征求管理層的意見(jiàn)”。因?yàn)?,沒(méi)有哪種編碼標(biāo)準(zhǔn)能適用所有可能的情形。

根據(jù)有關(guān)資料,以下原則對(duì)提高程序效率有一些幫助:

在編碼之前,先化簡(jiǎn)算術(shù)和邏輯表達(dá)式,盡量使用整型算術(shù)和邏輯表達(dá)式;

?if語(yǔ)句嵌套不應(yīng)當(dāng)超過(guò)3層,除非得到上級(jí)的許可;

特別注意嵌套的循環(huán),以確定是否有語(yǔ)句可以從循環(huán)內(nèi)層移到循環(huán)外層;

應(yīng)當(dāng)避免使用goto語(yǔ)句,非要使用的話,盡量使用前向goto語(yǔ)句,用于處理錯(cuò)誤;

盡量避免使用多維數(shù)組和復(fù)雜的表格;

盡量使用執(zhí)行時(shí)間短的算術(shù)運(yùn)算;

盡量避免混合使用不同數(shù)據(jù)類型的量。

5.1.4程序員的基本素質(zhì)

要成為一名合格的程序員,不僅要具備編程功底和動(dòng)手能力,還需要具備以下素質(zhì)。

1.團(tuán)隊(duì)精神和協(xié)作能力

隨著軟件規(guī)模擴(kuò)大,一個(gè)人的力量開(kāi)發(fā)大型軟件十分困難,甚至是不可能實(shí)現(xiàn)的。因此,團(tuán)隊(duì)精神和協(xié)作能力是程序員應(yīng)具備的基本素質(zhì)之一。

2.文檔習(xí)慣

編寫良好的文檔是正規(guī)軟件開(kāi)發(fā)流程中非常重要的環(huán)節(jié)。缺乏文檔,一個(gè)軟件系統(tǒng)就會(huì)缺乏生命力,在未來(lái)的查錯(cuò)、升級(jí)以及模塊復(fù)用時(shí)就會(huì)遇到極大的麻煩。因此,具備良好和規(guī)范的文檔編寫習(xí)慣同樣是程序員應(yīng)具備的基本素質(zhì)之一。

3.規(guī)范化、標(biāo)準(zhǔn)化的代碼編寫習(xí)慣

早期的軟件生產(chǎn)往往只注重個(gè)人的編程技巧,強(qiáng)調(diào)程序簡(jiǎn)練和執(zhí)行效率,而不重視程序源代碼的可讀性和可維護(hù)性。作為一些國(guó)外知名軟件公司,對(duì)代碼的變量命名,代碼內(nèi)注釋格式,甚至嵌套中行縮進(jìn)的長(zhǎng)度和函數(shù)間的空行數(shù)字都有明確規(guī)定。良好的編寫習(xí)慣,不但有助于代碼的移植和糾錯(cuò),也有助于不同技術(shù)人員之間的協(xié)作。因此,程序員要養(yǎng)成良好的編碼習(xí)慣。

4.需求理解能力

程序員需要理解一個(gè)模塊的需求,寫程序時(shí)往往只關(guān)注一個(gè)功能需求,他們把性能指標(biāo)全部歸結(jié)到硬件、操作系統(tǒng)和開(kāi)發(fā)環(huán)境上,而忽視了代碼本身的性能。性能需求指標(biāo)中,穩(wěn)定性、并訪支撐能力以及安全性都很重要,作為程序員需要評(píng)估該模塊在系統(tǒng)運(yùn)營(yíng)中所處的環(huán)境,將要受到的負(fù)荷壓力以及各種潛在的危險(xiǎn)和惡意攻擊的可能性。

5.復(fù)用性和模塊化思維能力

復(fù)用性和模塊化思維能力是要求程序員在完成任何一個(gè)功能模塊或函數(shù)時(shí),多想一些,不要局限在完成當(dāng)前任務(wù)的簡(jiǎn)單思路上,想想看該模塊是否可以脫離這個(gè)系統(tǒng)存在,是否可以通過(guò)簡(jiǎn)單的修改參數(shù)的方式在其他系統(tǒng)和應(yīng)用環(huán)境下直接引用,實(shí)現(xiàn)模塊或函數(shù)的復(fù)用,如此可以極大地避免重復(fù)性開(kāi)發(fā)工作,使程序員將更多時(shí)間和精力投入到創(chuàng)建新代碼的工作中。

6.測(cè)試習(xí)慣

對(duì)于一個(gè)軟件工程,問(wèn)題發(fā)現(xiàn)越早,解決問(wèn)題的代價(jià)就越小。程序員在每段代碼、每個(gè)模塊完成后都進(jìn)行認(rèn)真測(cè)試,就可以盡早發(fā)現(xiàn)和解決潛在的問(wèn)題。

7.學(xué)習(xí)和總結(jié)的能力

程序員是一個(gè)知識(shí)更新很快的職業(yè)。程序員如果想安身立命,就必須不斷跟進(jìn)新的技術(shù),學(xué)習(xí)新的技能。

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

軟件的質(zhì)量就是軟件的生命,為了保證軟件的質(zhì)量,人們?cè)陂L(zhǎng)期的開(kāi)發(fā)過(guò)程中積累了許多經(jīng)驗(yàn),并形成了許多行之有效的方法。但是借助這些方法,我們只能盡量減少軟件中的錯(cuò)誤和不足,而不能完全避免所有的錯(cuò)誤。因此,軟件測(cè)試是保證軟件質(zhì)量,提高軟件可靠性的關(guān)鍵,是對(duì)軟件規(guī)格說(shuō)明、設(shè)計(jì)和編碼的最后復(fù)審。軟件產(chǎn)品最大的成本是檢測(cè)軟件錯(cuò)誤、修正軟件錯(cuò)誤的成本。

1.什么是軟件測(cè)試

軟件測(cè)試的經(jīng)典定義是:在規(guī)定條件下對(duì)軟件進(jìn)行操作,以發(fā)現(xiàn)錯(cuò)誤,對(duì)軟件質(zhì)量進(jìn)行評(píng)估。我們知道,軟件是由文檔、數(shù)據(jù)以及程序組成的,其中,程序是按照事先設(shè)計(jì)的功能和性能等要求執(zhí)行的指令序列;數(shù)據(jù)是程序能正常操縱信息的數(shù)據(jù)結(jié)構(gòu);文檔是與程序開(kāi)發(fā)維護(hù)和使用有關(guān)的各種圖文資料。那么,軟件測(cè)試就應(yīng)該是對(duì)軟件開(kāi)發(fā)過(guò)程中形成的文檔、數(shù)據(jù)以及程序進(jìn)行的測(cè)試,而不僅僅是對(duì)程序進(jìn)行的測(cè)試。

大量統(tǒng)計(jì)資料表明,在整個(gè)軟件開(kāi)發(fā)中,測(cè)試工作量一般占30%~40%,甚至超過(guò)50%。在極端情況下,測(cè)試那種關(guān)系到人的生命安全的軟件所花費(fèi)的成本,可能相當(dāng)于軟件工程其他開(kāi)發(fā)步驟總成本的3倍到5倍。因此,必須高度重視軟件測(cè)試工作,絕不要以為寫出程序之后軟件開(kāi)發(fā)工作就接近完成了,實(shí)際上,大約還有同樣多的開(kāi)發(fā)工作量需要完成。

軟件測(cè)試只能證明軟件存在缺陷,而不能證明軟件沒(méi)有缺陷。軟件缺陷必須眼見(jiàn)為實(shí)。思考:如果軟件中的問(wèn)題沒(méi)有人發(fā)現(xiàn),那么它算不算軟件缺陷?

2.軟件測(cè)試的目的

軟件測(cè)試的目的就是把軟件的缺陷控制在一個(gè)可以進(jìn)行軟件系統(tǒng)交付/發(fā)布的程度上,可以交付/發(fā)布的軟件系統(tǒng)并不是不存在任何缺陷,而是對(duì)于軟件系統(tǒng)而言,沒(méi)有主要的缺陷,或者說(shuō)沒(méi)有影響業(yè)務(wù)正常進(jìn)行的缺陷,因此軟件測(cè)試不可能無(wú)休止地進(jìn)行下去,而是要把缺陷控制在一個(gè)合理的范圍之內(nèi),因?yàn)檐浖y(cè)試也是需要花費(fèi)巨大成本的。

因此,在測(cè)試階段,測(cè)試人員應(yīng)該努力設(shè)計(jì)出一系列測(cè)試方案,目的是為了“破壞”已經(jīng)建造好的軟件系統(tǒng),即竭力證明程序中有錯(cuò)誤,不能按照預(yù)定要求正確工作。有研究表明,發(fā)現(xiàn)并糾正軟件中缺陷的費(fèi)用可能占整個(gè)開(kāi)發(fā)費(fèi)用的40%~80%。因此,軟件企業(yè)投入大量的資金不僅僅是為了“驗(yàn)證軟件正確運(yùn)行”,而是要找出導(dǎo)致軟件無(wú)法正確運(yùn)行的在軟件中存在的大量缺陷。

G?.?Myers給出了關(guān)于測(cè)試的一些規(guī)則,這些規(guī)則可以看作是軟件測(cè)試的目標(biāo):

(1)測(cè)試是為了發(fā)現(xiàn)程序中的錯(cuò)誤而執(zhí)行程序的過(guò)程;

(2)測(cè)試是為了證明程序有錯(cuò),而不是證明程序無(wú)錯(cuò);

(3)好的測(cè)試方案是極可能發(fā)現(xiàn)迄今為止尚未發(fā)現(xiàn)的錯(cuò)誤的測(cè)試方案;

(4)成功的測(cè)試是發(fā)現(xiàn)了至今為止尚未發(fā)現(xiàn)的錯(cuò)誤的測(cè)試。

僅就測(cè)試而言,它的目標(biāo)是發(fā)現(xiàn)軟件中的錯(cuò)誤,它只能證明軟件存在缺陷,而不能證明軟件沒(méi)有缺陷。但是,發(fā)現(xiàn)錯(cuò)誤并不是最終目的。對(duì)任何軟件來(lái)說(shuō),開(kāi)發(fā)完成時(shí)都會(huì)遺留沒(méi)有被發(fā)現(xiàn)的缺陷,所以,軟件測(cè)試并非是簡(jiǎn)單的“挑錯(cuò)”,而是貫穿于軟件開(kāi)發(fā)過(guò)程的始終,是一套完善的質(zhì)量管理體系,這就要求測(cè)試工程師應(yīng)該具有系統(tǒng)的測(cè)試專業(yè)知識(shí)及對(duì)軟件的整體把握能力。

3.軟件測(cè)試方法和測(cè)試策略

軟件的測(cè)試設(shè)計(jì)與軟件產(chǎn)品的設(shè)計(jì)一樣,是一項(xiàng)需要花費(fèi)許多人力和時(shí)間的工作,我們希望以最少量的時(shí)間和人力,最大可能地發(fā)現(xiàn)最多的錯(cuò)誤。目前常用的測(cè)試方法主要有:白盒測(cè)試法、黑盒測(cè)試法。常用的軟件測(cè)試策略主要有:?jiǎn)卧獪y(cè)試、集成測(cè)試、確認(rèn)測(cè)試、系統(tǒng)測(cè)試和驗(yàn)收測(cè)試。

實(shí)際上,為了保證軟件質(zhì)量,從項(xiàng)目開(kāi)始測(cè)試人員就要介入,要了解客戶需求,參與項(xiàng)目評(píng)審,把握測(cè)試要點(diǎn)。如果測(cè)試人員數(shù)量少,軟件質(zhì)量是得不到保證的。因此測(cè)試行業(yè)的確需要大量人才,尤其是性能測(cè)試。

5.3測(cè)試設(shè)計(jì)和管理

對(duì)于軟件項(xiàng)目測(cè)試來(lái)說(shuō),測(cè)試團(tuán)隊(duì)?wèi)?yīng)該合理地統(tǒng)籌安排軟件測(cè)試工作,做好測(cè)試設(shè)計(jì)工作,例如測(cè)試策略的設(shè)計(jì)、測(cè)試方案的設(shè)計(jì)、測(cè)試用例的設(shè)計(jì)等;在測(cè)試工作開(kāi)始后,要有效地管理好測(cè)試,例如測(cè)試用例管理、配置管理、測(cè)試缺陷跟蹤管理等,否則會(huì)使得測(cè)試工作效率低下,甚至導(dǎo)致整個(gè)軟件開(kāi)發(fā)的低效率。

5.3.1錯(cuò)誤曲線

軟件是程序、數(shù)據(jù)、文檔及其相關(guān)服務(wù)的完整集合,它并不是一種有形的產(chǎn)品。但是在軟件開(kāi)發(fā)過(guò)程中隱藏的錯(cuò)誤會(huì)引起程序使用初期較高的故障率,錯(cuò)誤改正之后,故障曲線會(huì)趨于平穩(wěn)。理想情況下,軟件的故障率呈現(xiàn)如圖5-2所示的理想曲線。

圖5-2軟件故障率曲線

在軟件的運(yùn)行初期,未知的錯(cuò)誤使得程序有較高的故障率,當(dāng)修正了這些錯(cuò)誤而且未引入新的錯(cuò)誤時(shí),軟件將進(jìn)入一種比較理想的平穩(wěn)運(yùn)行期。如圖5-2中的實(shí)際曲線那樣。這是因?yàn)檐浖_(kāi)發(fā)時(shí)的需求環(huán)境、軟硬件環(huán)境在不斷變化,因此軟件在其生命周期中會(huì)經(jīng)歷多次修改,每次修改都不可避免地會(huì)引入新的錯(cuò)誤,導(dǎo)致軟件的失效率升高,而對(duì)這些錯(cuò)誤又要進(jìn)行新的修改,使得軟件的故障曲線呈現(xiàn)一種鋸齒形,導(dǎo)致最后的故障率慢慢升高,即軟件產(chǎn)生了退化,從而使得軟件可靠性下降,當(dāng)修改的成本變得難以接受時(shí),軟件就被拋棄。

5.3.2軟件測(cè)試配置

要實(shí)現(xiàn)軟件測(cè)試,就要對(duì)軟件測(cè)試進(jìn)行配置,包括編寫測(cè)試計(jì)劃、配置相應(yīng)的軟件測(cè)試環(huán)境、設(shè)計(jì)測(cè)試用例、編寫測(cè)試文檔等。本節(jié)主要介紹測(cè)試計(jì)劃、測(cè)試環(huán)境和測(cè)試文檔,測(cè)試用例將在下節(jié)中詳細(xì)介紹。

1.軟件測(cè)試計(jì)劃

軟件測(cè)試計(jì)劃描述測(cè)試活動(dòng)的目標(biāo)、范圍、方法、策略、資源、組織和進(jìn)度等,并確定測(cè)試項(xiàng)、哪些功能特性將被測(cè)試、哪些功能特性將無(wú)需測(cè)試,識(shí)別和明確測(cè)試過(guò)程中的風(fēng)險(xiǎn),使得測(cè)試活動(dòng)能夠在準(zhǔn)備充分且定義清晰的條件下進(jìn)行。

借助軟件測(cè)試計(jì)劃,可以使測(cè)試人員明確測(cè)試活動(dòng)的意圖,了解整個(gè)項(xiàng)目測(cè)試情況以及項(xiàng)目測(cè)試不同階段所要進(jìn)行的工作,方便管理者做宏觀調(diào)控,進(jìn)行相應(yīng)資源配置,確保測(cè)試實(shí)施過(guò)程順暢,有效地跟蹤和控制測(cè)試過(guò)程,并能容易應(yīng)對(duì)可能發(fā)生的各種變更。它規(guī)范了軟件測(cè)試內(nèi)容、方法和過(guò)程,為有組織地完成測(cè)試任務(wù)提供保障。

測(cè)試計(jì)劃的文檔可以作為軟件測(cè)試人員之間,以及測(cè)試人員和軟件開(kāi)發(fā)人員等之間的交流工具,為軟件測(cè)試的管理提供依據(jù),并能夠幫助及早地發(fā)現(xiàn)和修正軟件需求分析、設(shè)計(jì)等階段存在的問(wèn)題。應(yīng)該在軟件需求分析階段甚至更早的時(shí)候制定測(cè)試計(jì)劃。

測(cè)試計(jì)劃應(yīng)當(dāng)足夠完整但也不應(yīng)當(dāng)過(guò)于詳盡。通常來(lái)說(shuō),一個(gè)正規(guī)的測(cè)試計(jì)劃應(yīng)該包含以下幾個(gè)項(xiàng)目:

測(cè)試的基本信息:包括測(cè)試目的、背景、測(cè)試范圍等;

測(cè)試的具體目標(biāo):列出軟件需要進(jìn)行的測(cè)試部分和不需要進(jìn)行的測(cè)試部分;

測(cè)試的策略:測(cè)試人員采用的測(cè)試方法,如回歸測(cè)試、功能測(cè)試、自動(dòng)測(cè)試等;

測(cè)試的通過(guò)標(biāo)準(zhǔn):測(cè)試是否通過(guò)的界定標(biāo)準(zhǔn)以及沒(méi)有通過(guò)情況的處理方法;

停測(cè)標(biāo)準(zhǔn):給出每個(gè)測(cè)試階段停止測(cè)試的標(biāo)準(zhǔn);

測(cè)試用例:詳細(xì)描述測(cè)試用例,包括測(cè)試值、測(cè)試操作過(guò)程、測(cè)試期待值等;

測(cè)試的基本支持:測(cè)試所需硬件支持、自動(dòng)測(cè)試軟件等;

部門責(zé)任分工:明確所有參與軟件管理、開(kāi)發(fā)、測(cè)試、技術(shù)支持等部門的職責(zé);

測(cè)試人力資源分配:列出測(cè)試所需人力資源以及軟件測(cè)試人員的培訓(xùn)計(jì)劃;

測(cè)試進(jìn)度安排:制定每一個(gè)階段的詳細(xì)測(cè)試進(jìn)度安排表;

總之,軟件測(cè)試計(jì)劃是整個(gè)軟件測(cè)試流程工作的基本依據(jù),測(cè)試計(jì)劃中所列條目在實(shí)際測(cè)試中必須一一執(zhí)行。在測(cè)試的過(guò)程中,若發(fā)現(xiàn)新的測(cè)試用例,就要盡早補(bǔ)充到測(cè)試計(jì)劃中。若預(yù)先制定的測(cè)試計(jì)劃項(xiàng)目在實(shí)際測(cè)試中不適用或無(wú)法實(shí)現(xiàn),那么也要盡快對(duì)計(jì)劃進(jìn)行修改,使計(jì)劃具有可行性。

2.軟件測(cè)試環(huán)境

軟件測(cè)試環(huán)境是指為了完成軟件測(cè)試工作所必需的計(jì)算機(jī)硬件、軟件、網(wǎng)絡(luò)設(shè)備、歷史數(shù)據(jù)的總稱。它包括測(cè)試設(shè)計(jì)環(huán)境、測(cè)試實(shí)施環(huán)境和測(cè)試管理環(huán)境三部分。測(cè)試環(huán)境可以模擬實(shí)際運(yùn)行時(shí)可能的各種情況,是測(cè)試實(shí)施的一個(gè)重要階段,也是軟件測(cè)試的基礎(chǔ)。測(cè)試環(huán)境適合與否會(huì)嚴(yán)重影響測(cè)試結(jié)果的真實(shí)性和正確性,合理的測(cè)試環(huán)境可以提高軟件測(cè)試的工作效率。

經(jīng)過(guò)良好規(guī)劃和配置的測(cè)試環(huán)境,可以盡可能地減少環(huán)境的變動(dòng)對(duì)測(cè)試工作的不利影響,并可以對(duì)測(cè)試工作的效率和質(zhì)量的提高產(chǎn)生積極的作用。配置測(cè)試環(huán)境是測(cè)試實(shí)施的一個(gè)重要階段,一般來(lái)說(shuō),配置測(cè)試環(huán)境有五個(gè)基本要素:硬件、軟件、網(wǎng)絡(luò)環(huán)境、數(shù)據(jù)準(zhǔn)備、測(cè)試工具。其中,硬件、軟件是測(cè)試環(huán)境中最基本的兩個(gè)要素,并派生出后三者。

3.測(cè)試文檔

軟件測(cè)試是一個(gè)很復(fù)雜的過(guò)程,涉及軟件開(kāi)發(fā)其他階段的工作,對(duì)于提高軟件質(zhì)量、保證軟件正常運(yùn)行有著十分重要的意義,因此必須把對(duì)測(cè)試的要求、過(guò)程及測(cè)試結(jié)果以正式的文檔形式寫下來(lái)。測(cè)試文檔的編制是軟件測(cè)試工作規(guī)范化的一個(gè)重要組成部分。

軟件測(cè)試文檔不只在測(cè)試階段才開(kāi)始考慮,它應(yīng)在軟件開(kāi)發(fā)的需求分析階段就開(kāi)始著手編制,軟件開(kāi)發(fā)人員的一些設(shè)計(jì)方案也應(yīng)在測(cè)試文檔中得到反映,以利于設(shè)計(jì)的檢驗(yàn)。測(cè)試文檔對(duì)于測(cè)試階段的工作有著非常明顯的指導(dǎo)作用和評(píng)價(jià)作用。即便在軟件投入運(yùn)行的維護(hù)階段,也常常要進(jìn)行再測(cè)試或回歸測(cè)試,這時(shí)仍會(huì)用到軟件測(cè)試文檔。

整個(gè)測(cè)試流程會(huì)產(chǎn)生很多個(gè)測(cè)試文檔,一般可以把測(cè)試文檔分為兩類:測(cè)試計(jì)劃和測(cè)試分析報(bào)告。

測(cè)試計(jì)劃前面已經(jīng)描述過(guò),測(cè)試計(jì)劃文檔描述將要進(jìn)行的測(cè)試活動(dòng)的范圍、方法、資源和時(shí)間進(jìn)度等,其中羅列了詳細(xì)的測(cè)試要求,包括測(cè)試的目的、內(nèi)容、方法、步驟以及測(cè)試的準(zhǔn)則等。

測(cè)試分析報(bào)告是執(zhí)行測(cè)試階段的測(cè)試文檔,對(duì)測(cè)試結(jié)果進(jìn)行分析說(shuō)明,說(shuō)明軟件經(jīng)過(guò)測(cè)試以后,結(jié)論性的意見(jiàn)如何,軟件的能力如何,存在哪些缺陷和限制等,這些意見(jiàn)既是對(duì)軟件質(zhì)量的評(píng)價(jià),又是決定該軟件能否交付用戶使用的依據(jù)。由于測(cè)試分析報(bào)告要反映測(cè)試工作的情況,自然應(yīng)該在測(cè)試階段編寫。

《計(jì)算機(jī)軟件測(cè)試文檔編制規(guī)范》(GB/T9386

2008)標(biāo)準(zhǔn)給出了更具體的測(cè)試文檔編制建議,規(guī)定了各個(gè)測(cè)試文檔的格式和內(nèi)容,主要涉及測(cè)試計(jì)劃、測(cè)試說(shuō)明和測(cè)試報(bào)告等。

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

測(cè)試用例是為了高效率地發(fā)現(xiàn)軟件缺陷而精心設(shè)計(jì)并執(zhí)行的少量測(cè)試數(shù)據(jù)。在實(shí)際測(cè)試中,由于無(wú)法達(dá)到窮舉測(cè)試,所以要從大量輸入數(shù)據(jù)中精選有代表性或特殊性的數(shù)據(jù)作為測(cè)試數(shù)據(jù)。不同的測(cè)試數(shù)據(jù)發(fā)現(xiàn)程序錯(cuò)誤的能力差別很大,為了提高測(cè)試效率、降低測(cè)試成本,應(yīng)該選用高效的測(cè)試數(shù)據(jù)。一個(gè)好的測(cè)試用例應(yīng)該能發(fā)現(xiàn)尚未發(fā)現(xiàn)的軟件缺陷。從測(cè)試用例本身構(gòu)成的角度來(lái)看,測(cè)試用例是測(cè)試執(zhí)行的最小實(shí)體,是為特定的目的而設(shè)計(jì)的一組測(cè)試輸入、執(zhí)行條件和預(yù)期結(jié)果。

測(cè)試用例通俗一點(diǎn)來(lái)講就是編寫一組前提條件、輸入、執(zhí)行條件、預(yù)期結(jié)果以完成對(duì)某個(gè)特定需求或目標(biāo)測(cè)試的數(shù)據(jù),體現(xiàn)測(cè)試方案、方法、技術(shù)和策略的文檔。

1.測(cè)試用例的作用

測(cè)試用例始終貫穿于整個(gè)軟件測(cè)試,是軟件測(cè)試的核心。在軟件測(cè)試過(guò)程中,參照測(cè)試用例,任何人員的流動(dòng)對(duì)測(cè)試的影響、對(duì)項(xiàng)目質(zhì)量的影響都可以說(shuō)是微乎其微的。所以,測(cè)試用例可以預(yù)防部分風(fēng)險(xiǎn)或減少潛在風(fēng)險(xiǎn)的發(fā)生。

2.測(cè)試用例的主要內(nèi)容

一個(gè)完整的測(cè)試用例應(yīng)該包括以下內(nèi)容:

測(cè)試用例的編號(hào);

測(cè)試日期;

測(cè)試用例設(shè)計(jì)人員和測(cè)試人員;

測(cè)試用例的優(yōu)先級(jí);

測(cè)試標(biāo)題;

測(cè)試目標(biāo);

測(cè)試環(huán)境;

輸入數(shù)據(jù)/動(dòng)作;

測(cè)試的操作步驟;

測(cè)試預(yù)期的結(jié)果。

3.測(cè)試用例的編寫

在測(cè)試用例編寫中主要涉及測(cè)試設(shè)計(jì)說(shuō)明、測(cè)試用例說(shuō)明和測(cè)試程序說(shuō)明。ANSI/IEEE829標(biāo)準(zhǔn)分別對(duì)其進(jìn)行了描述、規(guī)定,并制定了相應(yīng)的格式和內(nèi)容。

1)測(cè)試設(shè)計(jì)說(shuō)明

測(cè)試設(shè)計(jì)說(shuō)明是為單個(gè)軟件功能定義測(cè)試方法的細(xì)節(jié)描述。ANSI/IEEE829定義測(cè)試說(shuō)明為“提煉測(cè)試方法,明確指出設(shè)計(jì)包含的特性及其相關(guān)測(cè)試”。測(cè)試設(shè)計(jì)說(shuō)明包括的要素有:標(biāo)識(shí)符、要測(cè)試的特性、測(cè)試方法、測(cè)試用例信息、通過(guò)/失敗規(guī)則等。

2)測(cè)試用例說(shuō)明

有了測(cè)試設(shè)計(jì)說(shuō)明,就可以按照測(cè)試設(shè)計(jì)說(shuō)明進(jìn)行描述,對(duì)每一個(gè)測(cè)試項(xiàng)設(shè)計(jì)具體的測(cè)試用例。ANSI/IEEE829稱測(cè)試用例說(shuō)明為“編寫用于輸入的實(shí)際數(shù)值和預(yù)期結(jié)果”,測(cè)試用例說(shuō)明還明確指出使用具體測(cè)試用例產(chǎn)生的測(cè)試程序的各種限制。測(cè)試用例說(shuō)明包括的要素有:標(biāo)識(shí)符、測(cè)試標(biāo)題、測(cè)試日期、測(cè)試項(xiàng)、測(cè)試環(huán)境要求、特殊要求、測(cè)試輸入說(shuō)明、操作步驟、預(yù)期結(jié)果、測(cè)試用例之間的關(guān)聯(lián)以及測(cè)試用例設(shè)計(jì)人員和測(cè)試人員等。

3)測(cè)試程序說(shuō)明

測(cè)試程序說(shuō)明也稱作測(cè)試腳本說(shuō)明,詳細(xì)定義執(zhí)行測(cè)試用例的每一步操作。ANSI/IEEE829定義測(cè)試程序說(shuō)明為“明確指出為實(shí)現(xiàn)相關(guān)測(cè)試設(shè)計(jì)而操作軟件系統(tǒng)和試驗(yàn)具體測(cè)試用例的全部步驟”。測(cè)試程序說(shuō)明包括的要素有:標(biāo)識(shí)符、測(cè)試目的、特殊要求、程序步驟、操作日志、環(huán)境設(shè)置、啟動(dòng)步驟、程序運(yùn)行步驟、結(jié)果判斷、程序關(guān)閉、程序終止、測(cè)試環(huán)境重置、異常事件流等。

4.測(cè)試用例的設(shè)計(jì)

測(cè)試用例是整個(gè)測(cè)試工作中的重中之重,測(cè)試的一般流程包括制定測(cè)試計(jì)劃、編寫測(cè)試用例、執(zhí)行測(cè)試、跟蹤測(cè)試缺陷、編寫測(cè)試報(bào)告等。測(cè)試計(jì)劃、大綱制定后就需要進(jìn)行測(cè)試用例的設(shè)計(jì),之后所有的工作全都是在測(cè)試用例的基礎(chǔ)上展開(kāi)的。

測(cè)試用例的設(shè)計(jì)應(yīng)注意以下幾點(diǎn)問(wèn)題:

利用成熟的測(cè)試用例設(shè)計(jì)方法來(lái)指導(dǎo)設(shè)計(jì);

保證測(cè)試用例的正確性;

保證測(cè)試用例的明確性,避免測(cè)試用例存在含糊的因素,使測(cè)試人員在測(cè)試過(guò)程中不會(huì)出現(xiàn)模棱兩可的測(cè)試結(jié)果;

保證測(cè)試用例的代表性,盡量將具有相似功能的測(cè)試用例抽象合并,使每一個(gè)測(cè)試用例都具有代表性,可以測(cè)試一類或一系列的系統(tǒng)功能;

保證測(cè)試用例的簡(jiǎn)潔性,避免冗長(zhǎng)和復(fù)雜的測(cè)試用例,使其具有良好的可讀性,便于測(cè)試人員的理解和操作;

要有足夠詳細(xì)、準(zhǔn)確和清晰的步驟;

設(shè)計(jì)測(cè)試用例時(shí),要使得測(cè)試結(jié)果具有可判定性和可重現(xiàn)性;

測(cè)試用例應(yīng)該從系統(tǒng)的最高級(jí)別向最低級(jí)別逐一展開(kāi);

每個(gè)測(cè)試用例都應(yīng)單獨(dú)放在文檔中;

系統(tǒng)中的所有功能都應(yīng)該對(duì)應(yīng)到測(cè)試用例中;

每個(gè)測(cè)試用例都應(yīng)該依據(jù)需求進(jìn)行設(shè)計(jì);

利用測(cè)試用例文檔編寫測(cè)試用例時(shí)必須符合內(nèi)部的規(guī)范要求;

測(cè)試用例的設(shè)計(jì)人員最好是具有豐富經(jīng)驗(yàn)的測(cè)試人員。

5.測(cè)試用例的設(shè)計(jì)方法

測(cè)試用例是多樣的、復(fù)雜的而且也是簡(jiǎn)單的,設(shè)計(jì)的技術(shù)也不唯一,一般包括白盒測(cè)試用例的設(shè)計(jì)、黑盒測(cè)試用例的設(shè)計(jì)和綜合設(shè)計(jì)。具體的內(nèi)容在后面章節(jié)中會(huì)詳細(xì)介紹到。

5.4軟件測(cè)試過(guò)程

軟件測(cè)試的過(guò)程分成若干個(gè)階段,每個(gè)階段各有特點(diǎn)。按照盡早進(jìn)行測(cè)試的原則,測(cè)試人員應(yīng)該在需求階段就介入,并貫穿軟件開(kāi)發(fā)的全過(guò)程。測(cè)試過(guò)程的各個(gè)階段為:

測(cè)試需求的分析和確定;

測(cè)試計(jì)劃;

測(cè)試設(shè)計(jì);

測(cè)試執(zhí)行;

測(cè)試記錄和缺陷跟蹤;

回歸測(cè)試;

測(cè)試總結(jié)和報(bào)告。

首先在分析清楚需求的前提下對(duì)測(cè)試活動(dòng)進(jìn)行計(jì)劃和設(shè)計(jì),然后按既定的計(jì)劃執(zhí)行測(cè)試和記錄測(cè)試,對(duì)測(cè)試的結(jié)果進(jìn)行檢查分析,形成測(cè)試報(bào)告,這些測(cè)試結(jié)果和分析報(bào)告又能指導(dǎo)下一步的測(cè)試設(shè)計(jì),因此形成了一個(gè)循環(huán)的環(huán),如圖5-3所示。

圖5-3軟件測(cè)試的過(guò)程

5.4.1軟件測(cè)試基本原則

軟件測(cè)試的目標(biāo)是以最少的時(shí)間和人力找出軟件中潛在的各種錯(cuò)誤和缺陷。為了能設(shè)計(jì)出有效的測(cè)試方案,軟件工程師必須遵循以下測(cè)試準(zhǔn)則。

1.所有的測(cè)試都應(yīng)追溯到用戶需求

最嚴(yán)重的錯(cuò)誤(從用戶角度)是那些導(dǎo)致軟件無(wú)法滿足需求的錯(cuò)誤。

2.盡早地和不斷地進(jìn)行軟件測(cè)試

概要設(shè)計(jì)時(shí)應(yīng)完成測(cè)試計(jì)劃。詳細(xì)的測(cè)試用例定義可在設(shè)計(jì)模型確定后開(kāi)始,所有測(cè)試可在任何代碼被產(chǎn)生之前進(jìn)行計(jì)劃和設(shè)計(jì)。

3.不可能做窮盡測(cè)試

對(duì)于程序本身,在很多情況下,由于其運(yùn)算復(fù)雜性和邏輯復(fù)雜性,在有限的時(shí)間內(nèi)窮舉測(cè)試也是不可能的。所以在測(cè)試過(guò)程中,應(yīng)該采用具有代表性、最有可能查出系統(tǒng)問(wèn)題的測(cè)試用例,盡量去發(fā)現(xiàn)錯(cuò)誤。

4.軟件測(cè)試不等于程序測(cè)試

軟件測(cè)試應(yīng)貫穿于軟件定義與開(kāi)發(fā)的整個(gè)期間。據(jù)美國(guó)一家公司統(tǒng)計(jì),軟件錯(cuò)誤屬于需求分析和軟件設(shè)計(jì)的錯(cuò)誤約占64%,屬于程序編寫的錯(cuò)誤僅占36%。程序編寫的許多錯(cuò)誤是“先天的”。

5.應(yīng)由獨(dú)立的第三方測(cè)試機(jī)構(gòu)來(lái)構(gòu)造測(cè)試

由于思維定式,人們難于發(fā)現(xiàn)自己的錯(cuò)誤或缺陷。因此,為達(dá)到測(cè)試目的,應(yīng)采取互相自測(cè),由客觀、公正、嚴(yán)格的獨(dú)立的測(cè)試部門測(cè)試或者獨(dú)立的第三方測(cè)試機(jī)構(gòu)進(jìn)行測(cè)試。

6.設(shè)計(jì)完善的測(cè)試用例,并長(zhǎng)期保留測(cè)試用例,直至系統(tǒng)廢棄

測(cè)試用例是執(zhí)行程序的最小實(shí)體。軟件測(cè)試的本質(zhì)就是針對(duì)要測(cè)試的內(nèi)容確定一組測(cè)試用例。測(cè)試用例應(yīng)由輸入數(shù)據(jù)和預(yù)期的輸出結(jié)果兩部分組成,同時(shí)還要兼顧合理的輸入和不合理的輸入數(shù)據(jù)。

7.軟件測(cè)試只能表明缺陷的存在,而不能證明產(chǎn)品已經(jīng)沒(méi)有缺陷

軟件測(cè)試只是查找軟件缺陷的過(guò)程,即使測(cè)試人員使用了大量的測(cè)試用例、不同的測(cè)試方法對(duì)軟件產(chǎn)品進(jìn)行測(cè)試,測(cè)試成功以后也不能說(shuō)明軟件產(chǎn)品已經(jīng)準(zhǔn)確無(wú)誤,完全符合用戶的需求。也就是人們常說(shuō)的“軟件測(cè)試只能說(shuō)明錯(cuò)誤,不能說(shuō)明正確”。

8.注意測(cè)試中的群集現(xiàn)象

經(jīng)驗(yàn)表明,軟件產(chǎn)品中所存在的缺陷數(shù)與已發(fā)現(xiàn)的缺陷數(shù)成正比。根據(jù)這個(gè)規(guī)律,應(yīng)當(dāng)對(duì)缺陷群集的軟件部分進(jìn)行重點(diǎn)測(cè)試,以提高測(cè)試投資的效益。

在所測(cè)的軟件部分中,若發(fā)現(xiàn)缺陷數(shù)目多,則可能殘存的缺陷數(shù)目也比較多。這種缺陷群集性現(xiàn)象已被許多軟件的測(cè)試實(shí)踐所證實(shí)。例如,在美國(guó)IBM公司的OS/370操作系統(tǒng)中,47%的錯(cuò)誤或缺陷僅與該系統(tǒng)4%的程序模塊有關(guān)。這種現(xiàn)象對(duì)測(cè)試很有用。

9.及時(shí)更新測(cè)試,并進(jìn)行回歸測(cè)試

程序員在編寫程序時(shí)經(jīng)常會(huì)有這樣的經(jīng)驗(yàn),對(duì)一個(gè)程序的缺陷進(jìn)行了修改,而重新調(diào)試時(shí),發(fā)現(xiàn)由于上一個(gè)改動(dòng)而導(dǎo)致了更多缺陷的出現(xiàn)。同樣,軟件測(cè)試發(fā)現(xiàn)缺陷并改正后,很可能引入新的軟件缺陷,往往是因?yàn)槌绦蛑g的關(guān)聯(lián)性,或者缺陷的表現(xiàn)和缺陷的原因不在同一個(gè)地方等。所以,任何一次軟件缺陷改正并提交后,都必須進(jìn)行回歸測(cè)試?;貧w測(cè)試的目的是對(duì)修正缺陷后的應(yīng)用程序進(jìn)行測(cè)試,以確保缺陷被修復(fù),并且沒(méi)有引入新的軟件缺陷。

10.軟件測(cè)試應(yīng)該有計(jì)劃、有組織地進(jìn)行

作為軟件開(kāi)發(fā)中的重要活動(dòng),軟件測(cè)試應(yīng)該由軟件測(cè)試計(jì)劃進(jìn)行指導(dǎo),成立合適的軟件測(cè)試團(tuán)隊(duì),妥善并長(zhǎng)期保存一切軟件測(cè)試過(guò)程文檔,并建立有效的軟件缺陷發(fā)現(xiàn)、上報(bào)、改正、跟蹤、統(tǒng)計(jì)機(jī)制,避免軟件測(cè)試過(guò)程中的盲目性、隨意性和重復(fù)勞動(dòng)。

5.4.2軟件測(cè)試的步驟、測(cè)試信息流

1.軟件測(cè)試的步驟

軟件測(cè)試過(guò)程按各測(cè)試階段的先后順序可分為單元測(cè)試、集成(組裝)測(cè)試、確認(rèn)(有效性)測(cè)試、系統(tǒng)測(cè)試和驗(yàn)收(用戶)測(cè)試五個(gè)步驟,如圖5-4所示。

圖5-4軟件測(cè)試的步驟

(1)單元測(cè)試:測(cè)試執(zhí)行的開(kāi)始階段。測(cè)試對(duì)象是每個(gè)單元。測(cè)試目的是保證每個(gè)模塊或組件能正常工作。單元測(cè)試主要采用白盒測(cè)試方法,檢測(cè)程序的內(nèi)部結(jié)構(gòu)。

(2)集成測(cè)試:也稱組裝測(cè)試,在單元測(cè)試基礎(chǔ)上,對(duì)已測(cè)試過(guò)的模塊進(jìn)行組裝,進(jìn)行集成測(cè)試。測(cè)試目的是檢驗(yàn)與接口有關(guān)的模塊之間的問(wèn)題。集成測(cè)試主要采用黑盒測(cè)試方法。

(3)確認(rèn)測(cè)試:也稱有效性測(cè)試,在完成集成測(cè)試后,驗(yàn)證軟件的功能和性能及其他特性是否符合用戶要求。測(cè)試目的是保證系統(tǒng)能夠按照用戶預(yù)定的要求工作。確認(rèn)測(cè)試通常采用黑盒測(cè)試方法。

(4)系統(tǒng)測(cè)試:在完成確認(rèn)測(cè)試后,為了檢驗(yàn)它能否與實(shí)際環(huán)境(如軟硬件平臺(tái)、數(shù)據(jù)和人員等)協(xié)調(diào)工作,還需要進(jìn)行系統(tǒng)測(cè)試??梢哉f(shuō),系統(tǒng)測(cè)試之后,軟件產(chǎn)品基本滿足開(kāi)發(fā)要求。

(5)驗(yàn)收測(cè)試:測(cè)試過(guò)程的最后一個(gè)階段。驗(yàn)收測(cè)試主要突出用戶的作用,同時(shí)軟件開(kāi)發(fā)人員也應(yīng)該參與進(jìn)去。

上述步驟是傳統(tǒng)軟件測(cè)試的步驟,測(cè)試作為軟件工程的一個(gè)階段,它的根本任務(wù)是保證軟件的質(zhì)量,因此除了進(jìn)行測(cè)試之外,還有另外一些與測(cè)試密切相關(guān)的工作(如軟件配置、測(cè)試配置等)應(yīng)該完成。

2.軟件測(cè)試信息流

軟件測(cè)試階段的信息流如圖5-5所示,這個(gè)階段的輸入信息包括兩類:

圖5-5測(cè)試階段的信息流

軟件配置:指測(cè)試對(duì)象。通常包括需求說(shuō)明書、設(shè)計(jì)說(shuō)明書和被測(cè)試的源程序等;

測(cè)試配置:通常包括測(cè)試計(jì)劃、測(cè)試步驟、測(cè)試用例以及具體實(shí)施測(cè)試的測(cè)試程序、測(cè)試工具等。

實(shí)際上測(cè)試配置是軟件配置的一個(gè)子集,最終交出的軟件配置應(yīng)該包括上述測(cè)試配置以及測(cè)試的實(shí)際結(jié)果和調(diào)試的記錄。

對(duì)測(cè)試結(jié)果與預(yù)期的結(jié)果進(jìn)行比較以后,即可判斷是否存在錯(cuò)誤,決定是否進(jìn)入排錯(cuò)階段,進(jìn)行調(diào)試任務(wù)。通常根據(jù)出錯(cuò)的情況得到出錯(cuò)率來(lái)預(yù)估被測(cè)軟件的可靠性,這將對(duì)軟件運(yùn)行后的維護(hù)工作有重要價(jià)值。

5.4.3軟件測(cè)試組織與人員

隨著軟件開(kāi)發(fā)規(guī)模的增大、復(fù)雜程度的增加,以尋找軟件中的錯(cuò)誤為目的的測(cè)試工作就顯得更加困難。為了盡可能多地找出程序中的錯(cuò)誤,生產(chǎn)出高質(zhì)量的軟件產(chǎn)品,加強(qiáng)對(duì)測(cè)試工作的組織和管理就顯得尤為重要。

1.軟件測(cè)試的組織

軟件測(cè)試是一個(gè)復(fù)雜的過(guò)程,它的組織形式包括以下三個(gè)部分:

1)測(cè)試的過(guò)程及組織

根據(jù)軟件測(cè)試計(jì)劃,由一位對(duì)整個(gè)系統(tǒng)設(shè)計(jì)熟悉的設(shè)計(jì)人員編寫測(cè)試大綱,明確測(cè)試的內(nèi)容和測(cè)試通過(guò)的準(zhǔn)則,設(shè)計(jì)完整合理的測(cè)試用例,以便系統(tǒng)實(shí)現(xiàn)后進(jìn)行全面測(cè)試。當(dāng)軟件由開(kāi)發(fā)人員完成并檢驗(yàn)后,提交測(cè)試組,由測(cè)試負(fù)責(zé)人組織測(cè)試,測(cè)試一般可以下列方式組織:編寫測(cè)試大綱、測(cè)試用例,將測(cè)試過(guò)程分階段——單元測(cè)試、集成測(cè)試、確認(rèn)(有效性)測(cè)試、系統(tǒng)測(cè)試和驗(yàn)收(用戶)測(cè)試。

2)測(cè)試人員組織

要成功地完成項(xiàng)目測(cè)試任務(wù),必須建立一個(gè)高素質(zhì)的軟件測(cè)試團(tuán)隊(duì),并將成員有效地組織起來(lái),進(jìn)行合理分工,以達(dá)到最高的工作效率。測(cè)試團(tuán)隊(duì)的組織和人員管理是軟件測(cè)試管理中非常重要的一部分,直接影響軟件測(cè)試效率和軟件產(chǎn)品質(zhì)量。

3)軟件測(cè)試文檔組織

軟件測(cè)試文檔描述要執(zhí)行的軟件測(cè)試及測(cè)試的結(jié)果。測(cè)試文檔不只在測(cè)試階段才考慮,它在軟件開(kāi)發(fā)的需求分析階段就開(kāi)始著手,因?yàn)闇y(cè)試文檔與用戶有著密切的關(guān)系。在設(shè)計(jì)階段的一些設(shè)計(jì)方案也應(yīng)在測(cè)試文檔中得到反映,以利于設(shè)計(jì)的檢驗(yàn);在已開(kāi)發(fā)的軟件投入運(yùn)行的維護(hù)階段,常常還要進(jìn)行再測(cè)試或回歸測(cè)試,這時(shí)仍須用到測(cè)試文檔。所以,在整個(gè)測(cè)試過(guò)程中,對(duì)測(cè)試文檔的類型、使用和編寫等的組織非常重要。

2.軟件測(cè)試人員

軟件測(cè)試人員是用戶的眼睛,是最早看到并使用軟件的人,所以應(yīng)該站在用戶的角度,代表用戶說(shuō)話,及時(shí)發(fā)現(xiàn)問(wèn)題,力求使軟件功能趨于完善。

為了讓測(cè)試團(tuán)隊(duì)的每個(gè)成員都清楚自己的任務(wù),并使得每一個(gè)任務(wù)都落實(shí)到具體的負(fù)責(zé)人,測(cè)試團(tuán)隊(duì)管理者應(yīng)當(dāng)明確定義測(cè)試團(tuán)隊(duì)的角色和職責(zé)。典型的測(cè)試團(tuán)隊(duì)的角色和相應(yīng)的職責(zé)如下所述。

(1)測(cè)試經(jīng)理:代表團(tuán)隊(duì)與其他部門進(jìn)行交流,與用戶進(jìn)行溝通,人員招聘、管理和培訓(xùn),制定測(cè)試預(yù)算、進(jìn)度,估計(jì)測(cè)試工作量;制定測(cè)試計(jì)劃,引入測(cè)試工具;定義和改進(jìn)測(cè)試過(guò)程;監(jiān)控測(cè)試活動(dòng)進(jìn)行并跟蹤進(jìn)展情況。

(2)測(cè)試工程師:負(fù)責(zé)設(shè)計(jì)和實(shí)現(xiàn)測(cè)試腳本,確定測(cè)試特定需求和測(cè)試用例優(yōu)先級(jí);備份和歸檔所有測(cè)試文檔和資料;生成測(cè)試復(fù)用包和測(cè)試總結(jié)報(bào)告;向測(cè)試經(jīng)理匯報(bào)并在開(kāi)始測(cè)試前向測(cè)試人員介紹各自的任務(wù)。

(3)測(cè)試人員:建立和初始化測(cè)試環(huán)境,準(zhǔn)備測(cè)試數(shù)據(jù)和軟硬件;執(zhí)行測(cè)試工程師建立的測(cè)試腳本,并負(fù)責(zé)解釋和記錄測(cè)試用例的執(zhí)行結(jié)果。根據(jù)具體分工不同,測(cè)試人員可以分為系統(tǒng)結(jié)構(gòu)測(cè)試人員、系統(tǒng)功能測(cè)試人員、系統(tǒng)流程測(cè)試人員、可用性測(cè)試人員、網(wǎng)絡(luò)測(cè)試人員、安全測(cè)試人員等。

5.5軟件測(cè)試的基本方法

5.5.1軟件測(cè)試方法與技術(shù)

1.靜態(tài)測(cè)試與動(dòng)態(tài)測(cè)試

根據(jù)程序是否運(yùn)行可以把軟件測(cè)試方法分為靜態(tài)測(cè)試和動(dòng)態(tài)測(cè)試兩大類。

1)靜態(tài)測(cè)試

靜態(tài)測(cè)試方法的主要特征是走讀源代碼,對(duì)軟件進(jìn)行分析、檢查和審閱,不實(shí)際運(yùn)行被測(cè)試的軟件。因此,靜態(tài)方法常稱為“分析”。所謂靜態(tài)分析,就是不需要執(zhí)行所測(cè)試的程序,而只是通過(guò)掃描程序正文,對(duì)程序的數(shù)據(jù)流和控制流等信息進(jìn)行分析,找出系統(tǒng)的缺陷,得出測(cè)試報(bào)告。

靜態(tài)測(cè)試包括代碼檢查、靜態(tài)結(jié)構(gòu)分析、代碼質(zhì)量度量等。它可以由人工進(jìn)行,充分發(fā)揮人的邏輯思維優(yōu)勢(shì),也可以借助軟件工具自動(dòng)進(jìn)行。

在靜態(tài)測(cè)試中,主要就是對(duì)軟件配置(包括需求規(guī)格說(shuō)明書、軟件設(shè)計(jì)說(shuō)明書、源程序等)做檢查和審閱,具體包括:

檢查算法的邏輯正確性,確定算法是否實(shí)現(xiàn)了所要求的功能;

檢查模塊接口的正確性,確定形參的個(gè)數(shù)、數(shù)據(jù)類型、順序是否正確,確定返回值類型及返回值的正確性;

檢查輸入?yún)?shù)是否有合法性檢查。如果沒(méi)有合法性檢查,則應(yīng)確定該參數(shù)是否不需要合法性檢查,否則應(yīng)加上參數(shù)的合法性檢查;

檢查調(diào)用其他模塊的接口是否正確,檢查實(shí)參類型、實(shí)參個(gè)數(shù)是否正確,返回值是否正確。若被調(diào)用模塊出現(xiàn)異?;蝈e(cuò)誤,檢查程序是否有適當(dāng)?shù)某鲥e(cuò)處理代碼;

檢查是否設(shè)置了適當(dāng)?shù)某鲥e(cuò)處理,以便在程序出錯(cuò)時(shí),能對(duì)出錯(cuò)部分進(jìn)行重新安排,保證其邏輯的正確性;

檢查表達(dá)式、語(yǔ)句是否正確,是否含有二義性;

檢查常量或全局變量使用是否正確;

檢查標(biāo)識(shí)符的使用是否規(guī)范、一致,變量命名是否好理解、簡(jiǎn)潔、規(guī)范和易記;

檢查程序風(fēng)格的一致性、規(guī)范性,代碼是否符合行業(yè)規(guī)范,是否所有模塊的代碼風(fēng)格一致、規(guī)范;

檢查代碼注釋是否完整,是否正確反映了代碼的功能,并查找錯(cuò)誤的注釋。

實(shí)踐表明,通過(guò)靜態(tài)測(cè)試,可找出30%~70%的邏輯設(shè)計(jì)錯(cuò)誤。但程序中仍會(huì)隱藏許多錯(cuò)誤,無(wú)法通過(guò)靜態(tài)測(cè)試來(lái)發(fā)現(xiàn),因此必須通過(guò)動(dòng)態(tài)測(cè)試進(jìn)行詳細(xì)分析。

2)動(dòng)態(tài)測(cè)試

動(dòng)態(tài)測(cè)試方法通過(guò)運(yùn)行軟件來(lái)檢驗(yàn)軟件的動(dòng)態(tài)行為和運(yùn)行結(jié)果的正確性。動(dòng)態(tài)測(cè)試真正運(yùn)行被測(cè)程序,在執(zhí)行過(guò)程中,通過(guò)輸入有效的測(cè)試用例,對(duì)其輸入與輸出的對(duì)應(yīng)關(guān)系進(jìn)行分析,以達(dá)到檢測(cè)的目的。動(dòng)態(tài)測(cè)試方法的基本步驟如下:

選取定義域的有效值,或選取定義域外的無(wú)效值;

對(duì)已選取值決定預(yù)期的結(jié)果;

用選取值執(zhí)行程序;

將執(zhí)行結(jié)果與預(yù)期的結(jié)果相比,不吻合則說(shuō)明程序有錯(cuò)。

不同的測(cè)試方法其各自的目標(biāo)和側(cè)重點(diǎn)不一樣,在實(shí)際工作中要將靜態(tài)測(cè)試和動(dòng)態(tài)測(cè)試結(jié)合起來(lái),以達(dá)到更加完美的效果。

在動(dòng)態(tài)測(cè)試中,又有基于程序結(jié)構(gòu)的白盒測(cè)試(或稱為覆蓋測(cè)試)和基于功能的黑盒測(cè)試。

2.白盒測(cè)試與黑盒測(cè)試

根據(jù)軟件測(cè)試的不同方面,軟件測(cè)試可以分為針對(duì)系統(tǒng)外部功能的黑盒測(cè)試和針對(duì)系統(tǒng)內(nèi)部邏輯結(jié)構(gòu)白盒測(cè)試。

1)黑盒測(cè)試—測(cè)試對(duì)象為程序的功能

黑盒測(cè)試也稱功能測(cè)試或數(shù)據(jù)驅(qū)動(dòng)測(cè)試,它在已知產(chǎn)品所應(yīng)具有的功能,通過(guò)測(cè)試來(lái)檢測(cè)每個(gè)功能是否都能正常使用——逐一驗(yàn)證程序的功能。

黑盒測(cè)試方法主要有等價(jià)類劃分、邊值分析、因果圖、錯(cuò)誤推測(cè)等,主要用于軟件確認(rèn)測(cè)試。黑盒法著眼于程序外部結(jié)構(gòu),不考慮內(nèi)部邏輯結(jié)構(gòu),針對(duì)軟件界面和軟件功能進(jìn)行測(cè)試。黑盒法是窮舉輸入測(cè)試,只有把所有可能的輸入都作為測(cè)試情況使用,才能查出程序中所有的錯(cuò)誤。實(shí)際上測(cè)試情況有無(wú)窮多個(gè),人們不僅要測(cè)試所有合法的輸入,而且還要對(duì)那些不合法但是可能的輸入進(jìn)行測(cè)試。

2)白盒測(cè)試—測(cè)試對(duì)象為程序的邏輯結(jié)構(gòu)

白盒測(cè)試也稱結(jié)構(gòu)測(cè)試或邏輯驅(qū)動(dòng)測(cè)試,它知道產(chǎn)品內(nèi)部工作過(guò)程,通過(guò)測(cè)試來(lái)檢測(cè)產(chǎn)品內(nèi)部動(dòng)作是否按照規(guī)格說(shuō)明書的規(guī)定正常進(jìn)行。白盒測(cè)試按照程序內(nèi)部的結(jié)構(gòu)測(cè)試程序,檢驗(yàn)程序中的每條通路是否都能按預(yù)定要求正確工作,而不顧它的功能——程序的每一組成部分至少被測(cè)試一次。這一階段測(cè)試以軟件開(kāi)發(fā)人員為主。

白盒測(cè)試的主要方法有邏輯覆蓋、路徑分析等,主要用于軟件驗(yàn)證。白盒法全面了解程序內(nèi)部邏輯結(jié)構(gòu),對(duì)所有邏輯路徑進(jìn)行測(cè)試。白盒法是窮舉路徑測(cè)試,在使用白盒法時(shí),測(cè)試者必須檢查程序的內(nèi)部結(jié)構(gòu),從檢查程序的邏輯著手,得出測(cè)試數(shù)據(jù)。

3.驗(yàn)證測(cè)試與確認(rèn)測(cè)試

驗(yàn)證和確認(rèn)是軟件能力成熟度集成模型(CMMI)三級(jí)的兩個(gè)過(guò)程域,是對(duì)軟件測(cè)試過(guò)程中的兩種不同目的的測(cè)試過(guò)程。

1)驗(yàn)證測(cè)試(Verification)

驗(yàn)證測(cè)試指測(cè)試人員在模擬用戶環(huán)境的測(cè)試環(huán)境下,對(duì)軟件進(jìn)行測(cè)試,驗(yàn)證已經(jīng)實(shí)現(xiàn)的軟件產(chǎn)品或產(chǎn)品組件是否實(shí)現(xiàn)了需求中所描述的所有需求項(xiàng)。也就是組織開(kāi)發(fā)工作產(chǎn)品的同行對(duì)工作產(chǎn)品進(jìn)行系統(tǒng)性的檢查,發(fā)現(xiàn)工作產(chǎn)品中的缺陷,并提出必要的修改意見(jiàn),達(dá)到消除工作產(chǎn)品缺陷的目的,適用于所有立項(xiàng)開(kāi)發(fā)的軟件項(xiàng)目及產(chǎn)品。其中白盒測(cè)試法是一種驗(yàn)證技術(shù),回答了“我們?cè)谡_地構(gòu)造一個(gè)系統(tǒng)嗎?”的問(wèn)題。

2)確認(rèn)測(cè)試(Validation)

確認(rèn)測(cè)試指測(cè)試人員在真實(shí)的用戶環(huán)境下,確認(rèn)軟件產(chǎn)品或產(chǎn)品組件不僅實(shí)現(xiàn)了需求中所描述的所有需求項(xiàng),而且它也是滿足用戶的最終需要的,也就是確保產(chǎn)品或產(chǎn)品構(gòu)件適合其預(yù)定的用途。確認(rèn)主要是對(duì)中間及最終產(chǎn)品的檢查與驗(yàn)收,表現(xiàn)形式為審批、簽字確認(rèn)、正式的驗(yàn)收?qǐng)?bào)告等。確認(rèn)與驗(yàn)證緊密結(jié)合,并采用驗(yàn)證的方法,如同行評(píng)審、檢查、走查、測(cè)試等。它適用于所有立項(xiàng)開(kāi)發(fā)的軟件項(xiàng)目與產(chǎn)品。其中黑盒測(cè)試法是一種確認(rèn)技術(shù),回答了“我們?cè)跇?gòu)造一個(gè)正確的系統(tǒng)嗎?”的問(wèn)題。

驗(yàn)證和確認(rèn)二者的區(qū)別是:測(cè)試環(huán)境和測(cè)試目的不同,但都是軟件產(chǎn)品在發(fā)布前必須進(jìn)行的測(cè)試活動(dòng)。

5.5.2軟件測(cè)試的誤區(qū)

隨著市場(chǎng)對(duì)軟件質(zhì)量要求的不斷提高,軟件測(cè)試不斷受到重視。但是,我國(guó)不少軟件企業(yè)的軟件開(kāi)發(fā)模式仍然處在無(wú)序開(kāi)發(fā)的不規(guī)范狀態(tài),導(dǎo)致重視編碼和輕視測(cè)試的現(xiàn)象。對(duì)于很多人(甚至是軟件項(xiàng)目組的技術(shù)人員)還存在對(duì)軟件測(cè)試的認(rèn)識(shí)誤區(qū),這進(jìn)一步影響了軟件測(cè)試活動(dòng)的開(kāi)展和軟件測(cè)試質(zhì)量的提高。

誤區(qū)1:軟件開(kāi)發(fā)完成后進(jìn)行軟件測(cè)試。

軟件測(cè)試的對(duì)象不僅僅是軟件代碼,還包括軟件需求文檔和設(shè)計(jì)文檔。軟件開(kāi)發(fā)與軟件測(cè)試應(yīng)該是交互進(jìn)行的,例如,單元編碼需要單元測(cè)試,模塊組合階段需要集成測(cè)試。如果等到軟件編碼結(jié)束后才進(jìn)行測(cè)試,那么測(cè)試的時(shí)間將會(huì)很短,測(cè)試的覆蓋面將很不全面,測(cè)試的效果也將大打折扣。更嚴(yán)重的是,如果此時(shí)發(fā)現(xiàn)了軟件需求階段或概要設(shè)計(jì)階段的錯(cuò)誤,修復(fù)該類錯(cuò)誤將會(huì)耗費(fèi)大量的時(shí)間和人力。

誤區(qū)2:軟件發(fā)布后如果發(fā)現(xiàn)質(zhì)量問(wèn)題,那是軟件測(cè)試人員的錯(cuò)。

從軟件開(kāi)發(fā)的角度看,軟件的高質(zhì)量不是軟件測(cè)試人員測(cè)出來(lái)的,是在軟件生命周期的各個(gè)過(guò)程中設(shè)計(jì)出來(lái)的。出現(xiàn)軟件錯(cuò)誤,不能簡(jiǎn)單地歸結(jié)為某一個(gè)人的責(zé)任,有些錯(cuò)誤的產(chǎn)生可能不是技術(shù)原因,可能來(lái)自于混亂的項(xiàng)目管理。

解決之道是:應(yīng)該分析軟件項(xiàng)目的各個(gè)過(guò)程,從過(guò)程改進(jìn)方面尋找產(chǎn)生錯(cuò)誤的原因和改進(jìn)的措施。

誤區(qū)3:軟件測(cè)試要求不高,隨便找個(gè)人都行。

很多人都認(rèn)為軟件測(cè)試就是安裝和運(yùn)行程序,點(diǎn)點(diǎn)鼠標(biāo)、按按鍵盤的工作,這是由于不了解軟件測(cè)試的具體技術(shù)和方法造成的。隨著軟件工程學(xué)的發(fā)展和軟件項(xiàng)目管理經(jīng)驗(yàn)的提高,軟件測(cè)試已經(jīng)形成了一個(gè)獨(dú)立的技術(shù)學(xué)科,演變成一個(gè)具有巨大市場(chǎng)需求的行業(yè)。軟件測(cè)試技術(shù)不斷更新和完善,新工具、新流程、新測(cè)試設(shè)計(jì)方法都在不斷更新,需要掌握和學(xué)習(xí)很多測(cè)試知識(shí),所以具有編程經(jīng)驗(yàn)的程序員不一定是一名優(yōu)秀的測(cè)試工程師。

誤區(qū)4:軟件自動(dòng)測(cè)試效率高,將取代軟件手工測(cè)試。

自動(dòng)測(cè)試具有測(cè)試效率高、人工干涉少、靈活方便等優(yōu)點(diǎn)。然而,自動(dòng)測(cè)試技術(shù)應(yīng)用范圍受到限制,需要針對(duì)被測(cè)軟件單獨(dú)編寫和調(diào)試比較復(fù)雜的測(cè)試腳本,而且自動(dòng)測(cè)試工具價(jià)格通常十分昂貴,非一般軟件公司可以購(gòu)買得起。當(dāng)前軟件測(cè)試領(lǐng)域,測(cè)試工程師的手工測(cè)試仍然處于十分重要的地位,軟件自動(dòng)測(cè)試僅是手工測(cè)試的輔助手段。

誤區(qū)5:軟件測(cè)試是測(cè)試人員的事情,與程序員無(wú)關(guān)。

開(kāi)發(fā)和測(cè)試是相輔相成的過(guò)程,需要軟件測(cè)試人員、程序員和系統(tǒng)分析師等保持密切聯(lián)系,需要更多的交流和協(xié)調(diào),以便提高測(cè)試效率。對(duì)于單元測(cè)試主要應(yīng)該由程序員完成,必要時(shí)測(cè)試人員可以幫助設(shè)計(jì)測(cè)試用例。對(duì)測(cè)試中發(fā)現(xiàn)的軟件錯(cuò)誤,很多需要程序員通過(guò)修改編碼才能修復(fù)。程序員可以有目的地分析軟件錯(cuò)誤的類型、數(shù)量,找出產(chǎn)生錯(cuò)誤的位置和原因,以便在今后的編程中避免同樣的錯(cuò)誤,積累編程經(jīng)驗(yàn),提高編程能力。

誤區(qū)6:項(xiàng)目進(jìn)度吃緊時(shí)少做些測(cè)試,時(shí)間富裕時(shí)多做測(cè)試。

這是不重視軟件測(cè)試的表現(xiàn),也是軟件項(xiàng)目過(guò)程管理混亂的表現(xiàn),必然會(huì)降低軟件測(cè)試的質(zhì)量。因?yàn)榭s短測(cè)試時(shí)間帶來(lái)的測(cè)試不完整,會(huì)給項(xiàng)目質(zhì)量帶來(lái)潛在風(fēng)險(xiǎn),往往造成更大的浪費(fèi)??朔@種現(xiàn)象的最好辦法是加強(qiáng)軟件過(guò)程的計(jì)劃和控制,包括軟件測(cè)試計(jì)劃、測(cè)試設(shè)計(jì)、測(cè)試執(zhí)行、測(cè)試度量和測(cè)試控制。

誤區(qū)7:軟件測(cè)試是沒(méi)有前途的工作,只有程序員才是軟件高手。

項(xiàng)目的成功往往依靠個(gè)別全能程序員,他們負(fù)責(zé)總體設(shè)計(jì)和程序詳細(xì)設(shè)計(jì),認(rèn)為軟件開(kāi)發(fā)就是編寫代碼,給人的印象往往是程序員是真正的牛人,具有很高的地位和待遇。因此,軟件測(cè)試很不受重視,軟件測(cè)試人員的地位和待遇自然就很低了,甚至軟件測(cè)試變得可有可無(wú)。

總之,隨著市場(chǎng)對(duì)軟件質(zhì)量的要求不斷提高,軟件測(cè)試將變得越來(lái)越重要,相應(yīng)的軟件測(cè)試人員的地位和待遇將會(huì)逐漸提高。在微軟等軟件過(guò)程比較規(guī)范的大公司,軟件測(cè)試人員的數(shù)量和待遇與程序員沒(méi)有多大差別,優(yōu)秀測(cè)試人員的待遇甚至比程序員還要高。軟件測(cè)試將會(huì)成為一個(gè)具有很大發(fā)展前景的行業(yè),市場(chǎng)需要更多具有豐富測(cè)試技術(shù)和管理經(jīng)驗(yàn)的測(cè)試人員,他們同樣是軟件專家。

5.6軟件測(cè)試策略

一個(gè)好的測(cè)試策略和測(cè)試方法,必將給軟件測(cè)試帶來(lái)事半功倍的效果。依據(jù)軟件本身的性質(zhì)、規(guī)模及應(yīng)用場(chǎng)合的不同,可以選擇不同的測(cè)試方案。以最少的軟件、硬件及人力資源投入得到最佳的測(cè)試效果,這就是測(cè)試策略的目標(biāo)所在。

5.6.1測(cè)試策略

1.什么是軟件測(cè)試策略

軟件測(cè)試策略是指在一定的軟件測(cè)試標(biāo)準(zhǔn)、測(cè)試規(guī)范的指導(dǎo)下,依據(jù)測(cè)試項(xiàng)目的特定環(huán)境約束而規(guī)定的軟件測(cè)試的原則、方式、方法的集合。測(cè)試策略通常描述測(cè)試工程的總體方法和目標(biāo),描述目前在進(jìn)行哪個(gè)階段的測(cè)試(如單元測(cè)試、集成測(cè)試、系統(tǒng)測(cè)試)以及每個(gè)階段內(nèi)進(jìn)行的測(cè)試種類(如功能測(cè)試、性能測(cè)試、壓力測(cè)試等),以確定合理的測(cè)試方案,使得測(cè)試更有效。

軟件測(cè)試策略包含以下四個(gè)特征:

(1)測(cè)試從模塊層開(kāi)始,然后擴(kuò)大延伸到整個(gè)基于計(jì)算機(jī)的系統(tǒng)集合中;

(2)不同的測(cè)試技術(shù)適用于不同的時(shí)間點(diǎn);

(3)測(cè)試是由軟件的開(kāi)發(fā)人員和(對(duì)于大型系統(tǒng)而言)獨(dú)立的測(cè)試組來(lái)管理的;

(4)測(cè)試和調(diào)試是不同的活動(dòng),但是調(diào)試必須能夠適應(yīng)任何的測(cè)試策略。

2.影響測(cè)試策略的因素

軟件測(cè)試策略隨著軟件生命周期的變化、軟件測(cè)試方法、技術(shù)與工具的不同而發(fā)生變化。這就要求在制定測(cè)試策略的時(shí)候,應(yīng)該綜合考慮測(cè)試策略的影響因素及其依賴關(guān)系。這些影響因素可能包括測(cè)試項(xiàng)目資源因素、項(xiàng)目的約束和測(cè)試項(xiàng)目的特殊需要等。

3.測(cè)試策略的確定

一個(gè)好的測(cè)試策略應(yīng)該包括實(shí)施的測(cè)試類型和測(cè)試的目標(biāo),實(shí)施測(cè)試的階段、技術(shù),用于評(píng)估測(cè)試結(jié)果和測(cè)試是否完成的評(píng)測(cè)和標(biāo)準(zhǔn),對(duì)測(cè)試策略所述的測(cè)試工作存在影響的特殊事項(xiàng)等內(nèi)容。為了確定一個(gè)好的測(cè)試策略,可以從基于測(cè)試技術(shù)的測(cè)試策略和基于測(cè)試方案的測(cè)試策略兩個(gè)方面來(lái)考慮。

1)基于測(cè)試技術(shù)的測(cè)試策略

在任何情況下都應(yīng)使用邊界值分析方法;

必要時(shí)使用等價(jià)類劃分法補(bǔ)充一定數(shù)量的測(cè)試用例;

必要時(shí)再用錯(cuò)誤推測(cè)法補(bǔ)充測(cè)試方案;

對(duì)照程序邏輯,檢查已設(shè)計(jì)出的測(cè)試用例的邏輯覆蓋程度,看其是否達(dá)到了要求;

根據(jù)對(duì)程序可靠性的要求采用不同的邏輯覆蓋標(biāo)準(zhǔn),再補(bǔ)充一些測(cè)試方案。

2)基于測(cè)試方案的測(cè)試策略

根據(jù)程序的重要性和一旦發(fā)生故障將造成的損失來(lái)確定它的測(cè)試等級(jí)和測(cè)試重點(diǎn);認(rèn)真研究,使用盡可能少的測(cè)試用例發(fā)現(xiàn)盡可能多的程序錯(cuò)誤,以避免測(cè)試過(guò)度和測(cè)試不足。

除此之外,測(cè)試策略的制定從策略本身來(lái)說(shuō),包括宏觀的測(cè)試戰(zhàn)略和微觀的測(cè)試戰(zhàn)術(shù),如圖5-6所示。

圖5-6測(cè)試策略

總之,測(cè)試活動(dòng)需要采用各種不同的策略。這些策略表明了為確保軟件質(zhì)量而采用的不同的出發(fā)點(diǎn)、不同的事例、不同手段和測(cè)試方案。

5.6.2單元測(cè)試

程序員編寫代碼時(shí),一定會(huì)反復(fù)調(diào)試自己編寫的程序代碼以保證其能夠編譯通過(guò)。如果是編譯沒(méi)有通過(guò)的代碼,沒(méi)有任何人會(huì)愿意交付給自己的老板。沒(méi)有任何人可以輕易承諾這段代碼的運(yùn)行結(jié)果一定是正確的。這時(shí),單元測(cè)試會(huì)為此做出保證。

1.單元測(cè)試的定義

單元測(cè)試是針對(duì)軟件設(shè)計(jì)中的最小單位—程序模塊進(jìn)行正確性檢驗(yàn)的測(cè)試工作。作為一個(gè)最小的單元應(yīng)該有明確的功能定義、性能定義和接口定義,而且可以清晰地與其他單元區(qū)分開(kāi)來(lái)。一個(gè)菜單、一個(gè)顯示界面或者能夠獨(dú)立完成的具體功能都可以是一個(gè)單元。從某種意義上,單元的概念已經(jīng)擴(kuò)展為組件。

單元測(cè)試主要測(cè)試每個(gè)程序模塊內(nèi)部在語(yǔ)法、格式和邏輯上可能存在的錯(cuò)誤。通常,一個(gè)單元測(cè)試是用于判斷某個(gè)特定條件(或者場(chǎng)景)下某個(gè)特定函數(shù)的行為。因此,單元測(cè)試通常是由程序員自己來(lái)完成的。

2.單元測(cè)試的目的

單元測(cè)試的主要目的是確保各單元模塊被正確地編碼。單元測(cè)試除了保證測(cè)試代碼的功能性外,還需要保證代碼在結(jié)構(gòu)上具有可靠性和健全性,并且能夠在所有條件下正確響應(yīng)。進(jìn)行全面的單元測(cè)試,可以減少應(yīng)用級(jí)別所需的工作量,并且徹底減少系統(tǒng)產(chǎn)生錯(cuò)誤的可能性。如果手動(dòng)執(zhí)行,單元測(cè)試可能需要大量的工作,自動(dòng)化測(cè)試會(huì)提高測(cè)試效率。

除此之外,單元測(cè)試也應(yīng)驗(yàn)證代碼是否根據(jù)詳細(xì)設(shè)計(jì)說(shuō)明書進(jìn)行。例如,驗(yàn)證代碼是否與設(shè)計(jì)規(guī)格相符合、跟蹤需求和設(shè)計(jì)的實(shí)施、發(fā)現(xiàn)需求和設(shè)計(jì)中存在的錯(cuò)誤等。

3.單元測(cè)試的內(nèi)容

單元測(cè)試的任務(wù)是測(cè)試構(gòu)造軟件系統(tǒng)的各個(gè)模塊。一般來(lái)說(shuō),單元測(cè)試主要側(cè)重于測(cè)試各個(gè)模塊的模塊接口、局部數(shù)據(jù)結(jié)構(gòu)、獨(dú)立路徑、出錯(cuò)處理、邊界條件,如圖5-7所示。

圖5-7單元測(cè)試的內(nèi)容

(1)模塊接口測(cè)試:對(duì)通過(guò)被測(cè)模塊的數(shù)據(jù)流進(jìn)行測(cè)試。為此,對(duì)模塊接口,包括參數(shù)表、調(diào)用子模塊的參數(shù)、全程數(shù)據(jù)、文件輸入/輸出操作都必須檢查。

(2)局部數(shù)據(jù)結(jié)構(gòu)測(cè)試:設(shè)計(jì)測(cè)試用例檢查數(shù)據(jù)類型說(shuō)明、初始化、默認(rèn)值等方面的問(wèn)題,還要查清全程數(shù)據(jù)對(duì)模塊的影響。

(3)獨(dú)立路徑測(cè)試:選擇適當(dāng)?shù)臏y(cè)試用例,對(duì)模塊中重要的執(zhí)行路徑進(jìn)行測(cè)試?;韭窂綔y(cè)試和循環(huán)測(cè)試可以發(fā)現(xiàn)大量的路徑錯(cuò)誤,是最常用且最有效的測(cè)試技術(shù)。

(4)錯(cuò)誤處理測(cè)試:檢查模塊的錯(cuò)誤處理功能是否包含有錯(cuò)誤或缺陷。例如,是否拒絕不合理的輸入、出錯(cuò)的描述是否難以理解、是否對(duì)錯(cuò)誤定位有誤、是否出錯(cuò)原因報(bào)告有誤、是否對(duì)錯(cuò)誤條件的處理不正確等。

(5)邊界條件測(cè)試:要特別注意數(shù)據(jù)流、控制流中剛好等于、大于或小于確定的比較值時(shí)出錯(cuò)的可能性。對(duì)這些地方要仔細(xì)地選擇測(cè)試用例,認(rèn)真加以測(cè)試。此外,如果對(duì)模塊運(yùn)行時(shí)間有要求的話,還要專門進(jìn)行關(guān)鍵路徑測(cè)試,以確定最壞情況下和平均意義下影響模塊運(yùn)行時(shí)間的因素。這類信息對(duì)進(jìn)行軟件性能評(píng)價(jià)是十分有用的。

4.單元測(cè)試的步驟

通常單元測(cè)試在編碼階段進(jìn)行。當(dāng)源程序代碼編制完成,經(jīng)過(guò)評(píng)審和驗(yàn)證,確認(rèn)沒(méi)有語(yǔ)法錯(cuò)誤之后,就開(kāi)始進(jìn)行單元測(cè)試的測(cè)試用例設(shè)計(jì)。利用設(shè)計(jì)文檔,設(shè)計(jì)可以驗(yàn)證程序功能、找出程序錯(cuò)誤的多個(gè)測(cè)試用例。對(duì)于每一組輸入,應(yīng)有預(yù)期的正確輸出結(jié)果。

模塊接口測(cè)試中的被測(cè)模塊并不是一個(gè)獨(dú)立的程序,在考慮測(cè)試模塊時(shí),同時(shí)要考慮它和外界的聯(lián)系,用一些輔助模塊去模擬與被測(cè)模塊相關(guān)聯(lián)的模塊。輔助模塊可分為驅(qū)動(dòng)模塊和樁模塊兩種。

(1)驅(qū)動(dòng)模塊:用來(lái)模擬被測(cè)模塊的上級(jí)調(diào)用模塊,功能要比真正的上級(jí)模塊簡(jiǎn)單得多。它接收測(cè)試數(shù)據(jù),把這些數(shù)據(jù)傳送給被測(cè)模塊,最后輸出實(shí)測(cè)結(jié)果。

(2)樁模塊:用以代替被測(cè)模塊調(diào)用的子模塊,作用是返回被測(cè)模塊所需的信息。

被測(cè)模塊、與它相關(guān)的驅(qū)動(dòng)模塊以及樁模塊共同構(gòu)成了一個(gè)單元測(cè)試環(huán)境,如圖5-8所示。

圖5-8單元測(cè)試環(huán)境

如果一個(gè)模塊要完成多種功能,并且以程序包或?qū)ο箢惖男问匠霈F(xiàn),例如Ada中的包,MODULA中的模塊、C++中的類,這時(shí)可以將模塊看成由幾個(gè)小程序組成。對(duì)其中的每個(gè)小程序先進(jìn)行單元測(cè)試要做的工作,對(duì)關(guān)鍵模塊還要做性能測(cè)試。對(duì)支持某些標(biāo)準(zhǔn)規(guī)程的程序,更要著手進(jìn)行互聯(lián)測(cè)試。有人把這種情況特別稱為模塊測(cè)試,以區(qū)別單元測(cè)試。

5.6.3集成測(cè)試(組裝測(cè)試)

通常經(jīng)過(guò)單元測(cè)試后的模塊能夠單獨(dú)工作,能夠達(dá)到設(shè)計(jì)要求,但在把模塊集成后并不能保證各模塊能夠正常地協(xié)同工作。其原因在于:模塊相互調(diào)用時(shí)接口會(huì)引入許多新問(wèn)題,程序在某些局部反映不出來(lái)的問(wèn)題,在全局上很有可能暴露出來(lái),而單元測(cè)試是無(wú)法找出這類錯(cuò)誤的。因此,在各模塊完成單元測(cè)試的基礎(chǔ)上,還應(yīng)將模塊按設(shè)計(jì)要求組裝起來(lái),針對(duì)程序整體結(jié)構(gòu)進(jìn)行組裝集成測(cè)試。

1.集成測(cè)試的定義

集成測(cè)試是介于單元測(cè)試和系統(tǒng)測(cè)試之間的過(guò)渡階段,與軟件開(kāi)發(fā)計(jì)劃中的軟件概要設(shè)計(jì)階段相對(duì)應(yīng),是單元測(cè)試的擴(kuò)展和延伸。采用的測(cè)試方法主要為白盒測(cè)試方法。集成測(cè)試是根據(jù)實(shí)際情況對(duì)程序模塊采用適當(dāng)?shù)募蓽y(cè)試策略組裝起來(lái),對(duì)系統(tǒng)的接口以及集成后的功能進(jìn)行正確校驗(yàn)的測(cè)試工作,也稱為組裝測(cè)試或聯(lián)合測(cè)試。

在集成測(cè)試時(shí)需要考慮以下問(wèn)題:

模塊集成后,穿越模塊接口的數(shù)據(jù)是否會(huì)丟失?

模塊集成后,各模塊的功能是否會(huì)相互抑制?

模塊集成后的功能能否達(dá)到預(yù)期的要求?

各模塊的接口是否一致、各模塊間的數(shù)據(jù)流和控制流是否按照設(shè)計(jì)實(shí)現(xiàn)其功能?

全局及局部數(shù)據(jù)的作用域是否存在問(wèn)題,是否會(huì)被非法修改?

單個(gè)模塊的誤差通過(guò)累積是否會(huì)放大到不能接受的程度?

單個(gè)模塊的錯(cuò)誤是否會(huì)導(dǎo)致數(shù)據(jù)庫(kù)錯(cuò)誤?

2.集成測(cè)試的模式

選擇用何種方式把模塊組裝起來(lái)形成一個(gè)可運(yùn)行的系統(tǒng)是軟件集成測(cè)試中的策略體現(xiàn),其重要性是明顯的,集成的方式直接關(guān)系到模塊測(cè)試用例的形式、所用測(cè)試工具的類型、模塊編號(hào)的次序和測(cè)試的次序、生成測(cè)試用例的費(fèi)用和調(diào)試的費(fèi)用等,一般是根據(jù)軟件的具體情況來(lái)決定采用哪種模式。通常,把模塊組裝成為系統(tǒng)的測(cè)試方式有一次性集成測(cè)試和增量式集成測(cè)試兩種方式。

1)一次性集成測(cè)試(也稱作非漸增式集成測(cè)試)

它首先對(duì)每個(gè)模塊分別進(jìn)行單元測(cè)試,然后把所有的模塊按設(shè)計(jì)要求組裝在一起,再進(jìn)行整體測(cè)試。圖5-9所示的是一次性集成測(cè)試方式的實(shí)例。如圖5-9(a)所示,表示的是整個(gè)系統(tǒng)結(jié)構(gòu),共包含6個(gè)模塊。具體測(cè)試過(guò)程如下:

如圖5-9(b)所示,為模塊B配備驅(qū)動(dòng)模塊D1來(lái)模擬模塊A對(duì)B的調(diào)用。為模塊B配備樁模塊S1來(lái)模擬模塊E被B調(diào)用。對(duì)模塊B進(jìn)行單元測(cè)試。

如圖5-9(d)所示,為模塊D配備驅(qū)動(dòng)模塊D3來(lái)模擬模塊A對(duì)D的調(diào)用。為模塊D配備樁模塊S2來(lái)模擬模塊F被D調(diào)用。對(duì)模塊D進(jìn)行單元測(cè)試。

如圖5-9(c)、圖5-9(e)、圖5-9(f)所示,為模塊C、E、F分別配備驅(qū)動(dòng)模塊D2、D4、D5。對(duì)模塊C、E、F分別進(jìn)行單元測(cè)試。

如圖5-9(g)表示,為主模塊A配備三個(gè)樁模塊S3、S4、S5。對(duì)模塊A進(jìn)行單元測(cè)試。

在將模塊A、B、C、D、E分別進(jìn)行了單元測(cè)試之后,再一次性進(jìn)行集成測(cè)試。

測(cè)試結(jié)束。

圖5-9一次性集成測(cè)試方式實(shí)例

2)增量式集成測(cè)試(也稱漸增式集成測(cè)試)

增量式集成測(cè)試方式逐個(gè)把未經(jīng)過(guò)測(cè)試的模塊組裝到已經(jīng)測(cè)試過(guò)的模塊上,進(jìn)行集成測(cè)試。每加入一個(gè)新模塊,進(jìn)行一次集成測(cè)試,重復(fù)此過(guò)程直至程序組裝完畢。在組裝過(guò)程中,如果出現(xiàn)錯(cuò)誤,則錯(cuò)誤發(fā)生在新加入的模塊中。

增量式集成測(cè)試有自頂向下增量測(cè)試方式、自底向上增量測(cè)試方式和混合增量測(cè)試方式三種方式。

(1)自頂向下增量測(cè)試方式:該方式從主控模塊開(kāi)始,按照軟件的控制層次結(jié)構(gòu),以深度優(yōu)先或廣度優(yōu)先的策略,逐步把各個(gè)模塊集成在一起。該方法不需要編寫驅(qū)動(dòng)模塊,只需編寫樁模塊。

自頂向下集成測(cè)試的步驟如下:

①以主控模塊作為測(cè)試驅(qū)動(dòng)模塊,把對(duì)主控模塊進(jìn)行單元測(cè)試時(shí)引入的所有樁模塊用實(shí)際模塊替代;

②依據(jù)所選的集成策略(深度優(yōu)先或廣度優(yōu)先),每次只替代一個(gè)樁模塊;

③每集成一個(gè)模塊立即測(cè)試一遍,只有每組測(cè)試完成后,才著手替換下一個(gè)樁模塊;

④循環(huán)執(zhí)行上述步驟②~③,直至整個(gè)程序構(gòu)造完畢。

如圖5-10所示,表示的是按照深度優(yōu)先方式遍歷的自頂向下增值的集成測(cè)試實(shí)例。

具體測(cè)試過(guò)程如下:

在樹(shù)狀結(jié)構(gòu)圖中,按照先左后右的順序確定模塊集成路線。

如圖5-10(a)所示,先對(duì)頂層的主模塊A進(jìn)行單元測(cè)試。就是對(duì)模塊A配以樁模塊S1、S2和S3,用來(lái)模擬它所實(shí)際調(diào)用的模塊B、C、D,然后進(jìn)行測(cè)試。

如圖5-10(b)所示,用實(shí)際模塊B替換掉樁模塊S1,與模塊A連接,再對(duì)模塊B配以樁模塊S4,用來(lái)模擬模塊B對(duì)E的調(diào)用,然后進(jìn)行測(cè)試。

判斷模塊E沒(méi)有葉子結(jié)點(diǎn),也就是說(shuō)以A為根結(jié)點(diǎn)的樹(shù)狀結(jié)構(gòu)圖中的最左側(cè)分支深度遍歷結(jié)束,轉(zhuǎn)向下一個(gè)分支。

如圖5-10(d)所示,模塊C替換掉樁模塊S2,連到模塊A上,然后進(jìn)行測(cè)試。

判斷模塊C沒(méi)有樁模塊,轉(zhuǎn)到樹(shù)狀結(jié)構(gòu)圖的最后一個(gè)分支。

如圖5-10(e)所示,模塊D替換掉樁模塊S3,連到模塊A上,同時(shí)給模塊D配以樁模塊S5,來(lái)模擬其對(duì)模塊F的調(diào)用,然后進(jìn)行測(cè)試。

如圖5-10(f)所示,去掉樁模塊S5,替換成實(shí)際模塊F,連接到模塊D上,然后進(jìn)行測(cè)試。

對(duì)樹(shù)狀結(jié)構(gòu)圖進(jìn)行了完全測(cè)試,測(cè)試結(jié)束。圖5-10自頂向下增量測(cè)試方式實(shí)例

(2)自底向上增量測(cè)試方式:自底向上集成從軟件結(jié)構(gòu)最低層的模塊開(kāi)始組裝測(cè)試,因測(cè)試到較高層模塊時(shí),所需的下層模塊功能均已具備,所以該方法僅需編

溫馨提示

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