實現(xiàn)(第六版)(張海潘編著)_第1頁
實現(xiàn)(第六版)(張海潘編著)_第2頁
實現(xiàn)(第六版)(張海潘編著)_第3頁
實現(xiàn)(第六版)(張海潘編著)_第4頁
實現(xiàn)(第六版)(張海潘編著)_第5頁
已閱讀5頁,還剩137頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第第7章章 實現(xiàn)實現(xiàn)7.1 編碼編碼7.2 軟件測試基礎(chǔ)軟件測試基礎(chǔ)7.3 單元測試單元測試7.4 集成測試集成測試7.5 確認(rèn)測試確認(rèn)測試7.6 白盒測試技術(shù)白盒測試技術(shù)7.7 黑盒測試技術(shù)黑盒測試技術(shù)7.8 調(diào)試調(diào)試7.9 軟件可靠性軟件可靠性 n通常把編碼和測試統(tǒng)稱為實現(xiàn)。通常把編碼和測試統(tǒng)稱為實現(xiàn)。n所謂編碼就是把軟件設(shè)計結(jié)果翻譯成用某種程序設(shè)計所謂編碼就是把軟件設(shè)計結(jié)果翻譯成用某種程序設(shè)計語言書寫的程序。語言書寫的程序。n軟件測試在軟件生命周期中橫跨兩個階段。軟件測試在軟件生命周期中橫跨兩個階段。q通常在編寫出每個模塊之后就對它做單元測試。通常在編寫出每個模塊之后就對它做單元測試。q

2、在這個階段結(jié)束之后,對軟件系統(tǒng)還應(yīng)該進(jìn)行各種綜合測試,在這個階段結(jié)束之后,對軟件系統(tǒng)還應(yīng)該進(jìn)行各種綜合測試,通常由專門的測試人員承擔(dān)這項工作。通常由專門的測試人員承擔(dān)這項工作。n通過測試發(fā)現(xiàn)錯誤之后還必須診斷并改正錯誤,這就通過測試發(fā)現(xiàn)錯誤之后還必須診斷并改正錯誤,這就是調(diào)試的目的。調(diào)試是測試階段最困難的工作。是調(diào)試的目的。調(diào)試是測試階段最困難的工作。n在對測試結(jié)果進(jìn)行收集和評價的時候,使用故障率數(shù)在對測試結(jié)果進(jìn)行收集和評價的時候,使用故障率數(shù)據(jù),估計軟件將來出現(xiàn)故障的情況并預(yù)測軟件的可靠據(jù),估計軟件將來出現(xiàn)故障的情況并預(yù)測軟件的可靠性。性。 通常把編碼和測試統(tǒng)稱為實現(xiàn)。通常把編碼和測試統(tǒng)稱為

3、實現(xiàn)。所謂編碼就是把軟件設(shè)計結(jié)果翻譯成用某種程序所謂編碼就是把軟件設(shè)計結(jié)果翻譯成用某種程序設(shè)計語言書寫的程序。設(shè)計語言書寫的程序。作為軟件工程過程的一個階段,編碼是對設(shè)計的作為軟件工程過程的一個階段,編碼是對設(shè)計的進(jìn)一步具體化,因此,程序的質(zhì)量主要取決于進(jìn)一步具體化,因此,程序的質(zhì)量主要取決于軟軟件設(shè)計的質(zhì)量。件設(shè)計的質(zhì)量。但是,所選用的程序設(shè)計語言的特點及但是,所選用的程序設(shè)計語言的特點及編碼風(fēng)格也將對程序的可靠性、可讀性、編碼風(fēng)格也將對程序的可靠性、可讀性、可測試性和可維護(hù)性產(chǎn)生深遠(yuǎn)的影響。可測試性和可維護(hù)性產(chǎn)生深遠(yuǎn)的影響。在開發(fā)大型軟件系統(tǒng)的漫長過程中,面對著極其錯在開發(fā)大型軟件系統(tǒng)的漫

4、長過程中,面對著極其錯綜復(fù)雜的問題,人的主觀認(rèn)識不可能完全符合客觀綜復(fù)雜的問題,人的主觀認(rèn)識不可能完全符合客觀現(xiàn)實,與工程密切相關(guān)的各類人員之間的通信和配現(xiàn)實,與工程密切相關(guān)的各類人員之間的通信和配合也不可能完美無缺,合也不可能完美無缺,我們力求在每個階段結(jié)束之前通過嚴(yán)格的技術(shù)審查,我們力求在每個階段結(jié)束之前通過嚴(yán)格的技術(shù)審查,盡可能早地發(fā)現(xiàn)并糾正差錯;盡可能早地發(fā)現(xiàn)并糾正差錯;但是,經(jīng)驗表明審查但是,經(jīng)驗表明審查并不能發(fā)現(xiàn)所有差錯,此外在編碼過程中還不可避并不能發(fā)現(xiàn)所有差錯,此外在編碼過程中還不可避免地會引入新的錯誤免地會引入新的錯誤。因此,在軟件生命周期的每個階因此,在軟件生命周期的每個階

5、段都不可避免地會產(chǎn)生差錯。段都不可避免地會產(chǎn)生差錯。如果在軟件投入生產(chǎn)性運行之前,沒有發(fā)現(xiàn)并糾正如果在軟件投入生產(chǎn)性運行之前,沒有發(fā)現(xiàn)并糾正軟件中的大部分差錯,則這些差錯遲早會在生產(chǎn)過軟件中的大部分差錯,則這些差錯遲早會在生產(chǎn)過程中暴露出來。程中暴露出來。測試的目的測試的目的就是在軟件投入生產(chǎn)性運行之前,盡可就是在軟件投入生產(chǎn)性運行之前,盡可能多地發(fā)現(xiàn)軟件中的錯誤。能多地發(fā)現(xiàn)軟件中的錯誤。那時不僅改正這些錯誤的代價更高,那時不僅改正這些錯誤的代價更高,而且往往會造成很惡劣的后果。而且往往會造成很惡劣的后果。目前軟件測試仍然是保證軟件質(zhì)量的關(guān)鍵步驟,它是目前軟件測試仍然是保證軟件質(zhì)量的關(guān)鍵步驟,

6、它是對軟件規(guī)格說明、設(shè)計和編碼的最后復(fù)審。對軟件規(guī)格說明、設(shè)計和編碼的最后復(fù)審。軟件測試在軟件生命周期中橫跨兩個階段。軟件測試在軟件生命周期中橫跨兩個階段。(1)(1)通常在編寫出每個模塊之后就對它做必要的測通常在編寫出每個模塊之后就對它做必要的測試試( (稱為稱為單元測試單元測試) )。(2)(2)在這個階段結(jié)束之后,對軟件系統(tǒng)還應(yīng)該進(jìn)行在這個階段結(jié)束之后,對軟件系統(tǒng)還應(yīng)該進(jìn)行各種各種綜合測試綜合測試。模塊的編寫者和測試者是同一模塊的編寫者和測試者是同一個人,編碼和單元測試屬于軟個人,編碼和單元測試屬于軟件生命周期的同一個階段件生命周期的同一個階段.這是軟件生命周期中的另一個這是軟件生命周期

7、中的另一個獨立的階段,通常由專門的測獨立的階段,通常由專門的測試人員承擔(dān)這項工作試人員承擔(dān)這項工作.大量統(tǒng)計資料表明,大量統(tǒng)計資料表明,軟件測試的工作量軟件測試的工作量往往占軟件往往占軟件開發(fā)總工作量的開發(fā)總工作量的40%40%以上。以上。因此,必須高度重視軟件測試工作,絕不要以為寫因此,必須高度重視軟件測試工作,絕不要以為寫出程序之后軟件開發(fā)工作就接近完成了,實際上,出程序之后軟件開發(fā)工作就接近完成了,實際上,大約還有同樣多的開發(fā)工作量需要完成。大約還有同樣多的開發(fā)工作量需要完成。在極端情況,測試那種關(guān)系人的生命安全在極端情況,測試那種關(guān)系人的生命安全的軟件所花費的成本,可能相當(dāng)于軟件工的軟

8、件所花費的成本,可能相當(dāng)于軟件工程其他開發(fā)步驟總成本的程其他開發(fā)步驟總成本的3倍到倍到5倍。倍。防不勝防的軟件錯誤防不勝防的軟件錯誤 例例:1963年年, 美國美國, 飛往火星的火箭爆炸飛往火星的火箭爆炸, 損失損失1千千萬美元萬美元.原因原因: FORTRAN循環(huán)循環(huán) DO 5 I = 1, 3 誤寫為誤寫為 DO 5 I = 1.3w 軟件測試是保證軟件質(zhì)量的關(guān)鍵步驟,是對軟軟件測試是保證軟件質(zhì)量的關(guān)鍵步驟,是對軟件規(guī)格說明、設(shè)計和編碼的最后復(fù)審件規(guī)格說明、設(shè)計和編碼的最后復(fù)審o軟件測試技術(shù)要求不高,至少比編程容易多了軟件測試技術(shù)要求不高,至少比編程容易多了對軟件測試的誤解對軟件測試的誤解

9、o軟件測試隨便找一個能力差的人就能做軟件測試隨便找一個能力差的人就能做o有時間就多測一些,來不及就少測一些有時間就多測一些,來不及就少測一些o軟件測試是測試人員的事,與開發(fā)人員無關(guān)軟件測試是測試人員的事,與開發(fā)人員無關(guān)把證明程序無錯當(dāng)作測試目的不僅是不正確的把證明程序無錯當(dāng)作測試目的不僅是不正確的, 完全做不到的,而且對做好測試沒有任何益處完全做不到的,而且對做好測試沒有任何益處,甚至是,甚至是十分有害的十分有害的.軟件測試要設(shè)法使軟件發(fā)生故障,暴露軟件錯誤。軟件測試要設(shè)法使軟件發(fā)生故障,暴露軟件錯誤。測試的測試的“成功成功”與與“失敗失敗” w能夠發(fā)現(xiàn)錯誤的測試是成功的測試能夠發(fā)現(xiàn)錯誤的測試

10、是成功的測試w否則是失敗的測試。否則是失敗的測試?!皽y試的目的是說明程序正確地執(zhí)行它應(yīng)有測試的目的是說明程序正確地執(zhí)行它應(yīng)有的功能的功能” 這種說法正確嗎?這種說法正確嗎?n例:程序例:程序Triangle,輸入三個整數(shù),表示一個三,輸入三個整數(shù),表示一個三角形的三個邊長,該程序產(chǎn)生一個結(jié)果,指出角形的三個邊長,該程序產(chǎn)生一個結(jié)果,指出該三角形是等邊三角形、等腰三角形還是不等該三角形是等邊三角形、等腰三角形還是不等邊三角形。邊三角形。n 為說明其能正確執(zhí)行它的功能,可使用為說明其能正確執(zhí)行它的功能,可使用“測試測試用例用例”(3,4,5),(5,5,6),(6,6,6), n程序都能給出正確結(jié)

11、果,是否就可認(rèn)為程序是程序都能給出正確結(jié)果,是否就可認(rèn)為程序是正確的正確的僅就測試而言,它的目標(biāo)是發(fā)現(xiàn)軟件中的錯誤。僅就測試而言,它的目標(biāo)是發(fā)現(xiàn)軟件中的錯誤。軟件工程的根本目標(biāo)是開發(fā)出高質(zhì)量的完全符合用軟件工程的根本目標(biāo)是開發(fā)出高質(zhì)量的完全符合用戶需要的軟件戶需要的軟件,因此,通過測試發(fā)現(xiàn)錯誤之后還必因此,通過測試發(fā)現(xiàn)錯誤之后還必須診斷并改正錯誤,這就是須診斷并改正錯誤,這就是調(diào)試調(diào)試的目的。的目的。在對測試結(jié)果進(jìn)行收集和評價的時候,軟件所達(dá)到在對測試結(jié)果進(jìn)行收集和評價的時候,軟件所達(dá)到的可靠性也開始明朗了。的可靠性也開始明朗了。但是,發(fā)現(xiàn)錯誤并不是最終目的但是,發(fā)現(xiàn)錯誤并不是最終目的調(diào)試是測

12、試階段最困難的工作。調(diào)試是測試階段最困難的工作。7.1 編碼編碼7.1.1 選擇程序設(shè)計語言選擇程序設(shè)計語言n機器語言,幾乎不使用。機器語言,幾乎不使用。n匯編語言,特殊場合使用。匯編語言,特殊場合使用。n高級語言,明顯優(yōu)于匯編語言。高級語言,明顯優(yōu)于匯編語言。 程序設(shè)計語言的劃代:程序設(shè)計語言的劃代: 劃代劃代語言語言特點特點級別級別1GL機器語言機器語言程序不直觀,編程出錯率高程序不直觀,編程出錯率高運行效率高運行效率高低級低級2GL匯編語言匯編語言比機器語言直觀,減少了出錯率比機器語言直觀,減少了出錯率與機器碼一樣長與機器碼一樣長特殊情況下才使用特殊情況下才使用3GLBASICPASCA

13、LC、C+等等利用類英語的語句和命令利用類英語的語句和命令一條語句相當(dāng)于一條語句相當(dāng)于5-10條機器碼條機器碼要規(guī)定詳細(xì)的算法過程要規(guī)定詳細(xì)的算法過程高級高級4GL數(shù)據(jù)庫查詢語言數(shù)據(jù)庫查詢語言程序生成器程序生成器圖形語言圖形語言與自然語言接近與自然語言接近一條語句相當(dāng)于一條語句相當(dāng)于30-50條機器碼條機器碼非過程化問題定義非過程化問題定義運行開銷大,效率低運行開銷大,效率低選擇語言的理想標(biāo)準(zhǔn):選擇語言的理想標(biāo)準(zhǔn):n為了使程序容易測試和維護(hù)以減少軟件的總成本,為了使程序容易測試和維護(hù)以減少軟件的總成本,所選用的高級語言應(yīng)該有理想的模塊化機制,以所選用的高級語言應(yīng)該有理想的模塊化機制,以及可讀性

14、好的控制結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu);及可讀性好的控制結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu);n為了便于調(diào)試和提高軟件可靠性,語言特點應(yīng)該為了便于調(diào)試和提高軟件可靠性,語言特點應(yīng)該使編譯程序能夠盡可能多地發(fā)現(xiàn)程序中的錯誤;使編譯程序能夠盡可能多地發(fā)現(xiàn)程序中的錯誤;n為了降低軟件開發(fā)和維護(hù)的成本,選用的高級語為了降低軟件開發(fā)和維護(hù)的成本,選用的高級語言應(yīng)該有良好的獨立編譯機制。言應(yīng)該有良好的獨立編譯機制。 主要的實用標(biāo)準(zhǔn):主要的實用標(biāo)準(zhǔn):n系統(tǒng)用戶的要求系統(tǒng)用戶的要求n可以使用的編譯程序可以使用的編譯程序n可以得到的軟件工具可以得到的軟件工具n工程規(guī)模工程規(guī)模n程序員的知識程序員的知識n軟件可移植性要求軟件可移植性要求n軟件的應(yīng)用領(lǐng)

15、域軟件的應(yīng)用領(lǐng)域7.1.2 編碼風(fēng)格編碼風(fēng)格1. 程序內(nèi)部的文檔程序內(nèi)部的文檔n恰當(dāng)?shù)臉?biāo)識符恰當(dāng)?shù)臉?biāo)識符n適當(dāng)?shù)淖⒔膺m當(dāng)?shù)淖⒔鈔程序的視覺組織程序的視覺組織例例1:注釋:注釋/* ADD AMOUNT TO TOTAL */TOTAL = AMOUNT+TOTAL/* ADD MONTHLY-SALES TO ANNUAL-TOTAL */TOTAL = AMOUNT+TOTAL例例2:視覺組織:視覺組織空格空格 (A17)ANDNOT(B49)ORC (A17) AND NOT (B49) OR C 例例3:視覺組織:視覺組織移行移行 IF () THEN IF () THEN ELSE E

16、NDIF ELSE ENDIF2. 數(shù)據(jù)說明數(shù)據(jù)說明n數(shù)據(jù)說明的次序應(yīng)該標(biāo)準(zhǔn)化。數(shù)據(jù)說明的次序應(yīng)該標(biāo)準(zhǔn)化。n當(dāng)多個變量名在一個語句中說明時,應(yīng)該按字當(dāng)多個變量名在一個語句中說明時,應(yīng)該按字母順序排列這些變量。母順序排列這些變量。n如果設(shè)計時使用了一個復(fù)雜的數(shù)據(jù)結(jié)構(gòu),則應(yīng)如果設(shè)計時使用了一個復(fù)雜的數(shù)據(jù)結(jié)構(gòu),則應(yīng)該用注解說明用程序設(shè)計語言實現(xiàn)這個數(shù)據(jù)結(jié)該用注解說明用程序設(shè)計語言實現(xiàn)這個數(shù)據(jù)結(jié)構(gòu)的方法和特點。構(gòu)的方法和特點。 例例4:數(shù)據(jù)說明標(biāo)準(zhǔn)化:數(shù)據(jù)說明標(biāo)準(zhǔn)化 INTEGER size,length,width,cost,price INTEGER cost,length,price,size,

17、width3. 語句構(gòu)造語句構(gòu)造n不要為了節(jié)省空間而把多個語句寫在同一行;不要為了節(jié)省空間而把多個語句寫在同一行;n盡量避免復(fù)雜的條件測試;盡量避免復(fù)雜的條件測試;n盡量減少對盡量減少對“非非”條件的測試;條件的測試;n避免大量使用循環(huán)嵌套和條件嵌套;避免大量使用循環(huán)嵌套和條件嵌套;n利用括號使邏輯表達(dá)式或算術(shù)表達(dá)式的運算次序利用括號使邏輯表達(dá)式或算術(shù)表達(dá)式的運算次序清晰直觀。清晰直觀。 例例5:一行一條語句:一行一條語句 FOR I:=1 TO N-1 DO BEGIN T:=I; FOR J:=I+1 TO N DO IF AJAT THEN T:=J; IF TI THEN BEGIN

18、WORK:=AT; AT:=AI; AI:=WORK; END END; FOR I:=1 TO N-1 DO BEGIN T:=I; FOR J:=I+1 TO N DO IF AJAT THEN T:=J; IF TI THEN BEGIN WORK:=AT; AT:=AI; AI:=WORK; END END;例例6:強調(diào)清晰性:強調(diào)清晰性 AI=AI+AT; AT=AI-AT; AI=AI-AT; WORK=AT; AT=AI; AI=WORK;例例7:簡單直接:簡單直接 for (i=1; i=n; i+) for (j=1; j=n; j+) Vij=(i/j)*(j/i) for

19、 (i=1; i=n; i+) for (j=1; j=n; j+) if (i=j) Vij=1; else Vij=0;例例8:避免不必要的轉(zhuǎn)移:避免不必要的轉(zhuǎn)移 IF (XY) GOTO 30 IF (YZ) GOTO 50 SMALL=Z GOTO 70 30 IF (XZ) GOTO 60 SMALL=Z GOTO 70 50 SMALL=Y GOTO 70 60 SMALL=X 70 CONTINUESMALL=X;IF (YSMALL) SMALL=Y;IF (Z=a)if (char=z) cout “This is a letter.”;else cout =a &

20、char=z) cout “This is a letter.”;else cout “This is not a letter.”;例例10:少用否定條件:少用否定條件if ( !(char 9) )if (char = 0 & char = 9)4. 輸入輸出輸入輸出n對所有輸入數(shù)據(jù)都進(jìn)行檢驗;對所有輸入數(shù)據(jù)都進(jìn)行檢驗;n檢查輸入項重要組合的合法性;檢查輸入項重要組合的合法性;n保持輸入格式簡單;保持輸入格式簡單;n使用數(shù)據(jù)結(jié)束標(biāo)記,不要要求用戶指定數(shù)據(jù)的數(shù)目;使用數(shù)據(jù)結(jié)束標(biāo)記,不要要求用戶指定數(shù)據(jù)的數(shù)目;n明確提示交互式輸入的請求,詳細(xì)說明可用的選擇或明確提示交互式輸入的請求,詳

21、細(xì)說明可用的選擇或邊界數(shù)值;邊界數(shù)值;n當(dāng)程序設(shè)計語言對格式有嚴(yán)格要求時,應(yīng)保持輸入格當(dāng)程序設(shè)計語言對格式有嚴(yán)格要求時,應(yīng)保持輸入格式一致;式一致;n設(shè)計良好的輸出報表;設(shè)計良好的輸出報表;n給所有輸出數(shù)據(jù)加標(biāo)志。給所有輸出數(shù)據(jù)加標(biāo)志。 5. 效率效率n效率主要指處理機時間和存儲器容量兩個方面。效率主要指處理機時間和存儲器容量兩個方面。n效率是性能要求,因此應(yīng)該在需求分析階段確效率是性能要求,因此應(yīng)該在需求分析階段確定效率方面的要求。定效率方面的要求。n效率是靠好設(shè)計來提高的。效率是靠好設(shè)計來提高的。n程序的效率和程序的簡單程度是一致的,不要程序的效率和程序的簡單程度是一致的,不要犧牲程序的清

22、晰性和可讀性來不必要地提高效犧牲程序的清晰性和可讀性來不必要地提高效率。率。 n程序運行時間程序運行時間n存儲器效率存儲器效率n輸入輸出的效率輸入輸出的效率(1) 程序運行時間程序運行時間n寫程序之前先簡化算術(shù)的和邏輯的表達(dá)式;寫程序之前先簡化算術(shù)的和邏輯的表達(dá)式;n仔細(xì)研究嵌套的循環(huán),以確定是否有語句可以從內(nèi)層仔細(xì)研究嵌套的循環(huán),以確定是否有語句可以從內(nèi)層往外移;往外移;n盡量避免使用多維數(shù)組;盡量避免使用多維數(shù)組;n盡量避免使用指針和復(fù)雜的表;盡量避免使用指針和復(fù)雜的表;n使用執(zhí)行時間短的算術(shù)運算;使用執(zhí)行時間短的算術(shù)運算;n不要混合使用不同的數(shù)據(jù)類型;不要混合使用不同的數(shù)據(jù)類型;n盡量使

23、用整數(shù)運算和布爾表達(dá)式。盡量使用整數(shù)運算和布爾表達(dá)式。n在效率是決定性因素的應(yīng)用領(lǐng)域,盡量使用有良好優(yōu)在效率是決定性因素的應(yīng)用領(lǐng)域,盡量使用有良好優(yōu)化特性的編譯程序,以自動生成高效目標(biāo)代碼?;匦缘木幾g程序,以自動生成高效目標(biāo)代碼。 (2) 存儲器效率存儲器效率n使用能保持功能域的結(jié)構(gòu)化控制結(jié)構(gòu),是提高使用能保持功能域的結(jié)構(gòu)化控制結(jié)構(gòu),是提高效率的好方法。效率的好方法。n在微處理機中如果要求使用最少的存儲單元,在微處理機中如果要求使用最少的存儲單元,則應(yīng)選用有緊縮存儲器特性的編譯程序,在非則應(yīng)選用有緊縮存儲器特性的編譯程序,在非常必要時可以使用匯編語言。常必要時可以使用匯編語言。n提高執(zhí)行效率

24、的技術(shù)通常也能提高存儲器效率。提高執(zhí)行效率的技術(shù)通常也能提高存儲器效率。提高存儲器效率的關(guān)鍵同樣是提高存儲器效率的關(guān)鍵同樣是“簡單簡單”。 (3) 輸入輸出的效率輸入輸出的效率n如果用戶為了給計算機提供輸入信息或為了理解如果用戶為了給計算機提供輸入信息或為了理解計算機輸出的信息,所需花費的腦力勞動是經(jīng)濟計算機輸出的信息,所需花費的腦力勞動是經(jīng)濟的,那么人和計算機之間通信的效率就高。因此,的,那么人和計算機之間通信的效率就高。因此,簡單清晰同樣是提高人機通信效率的關(guān)鍵。簡單清晰同樣是提高人機通信效率的關(guān)鍵。 7.2 軟件測試基礎(chǔ)軟件測試基礎(chǔ)7.2.1 軟件測試的目標(biāo)軟件測試的目標(biāo)n測試是為了發(fā)現(xiàn)

25、程序中的錯誤而執(zhí)行程序的過測試是為了發(fā)現(xiàn)程序中的錯誤而執(zhí)行程序的過程;程;n好的測試方案是極可能發(fā)現(xiàn)迄今為止尚未發(fā)現(xiàn)好的測試方案是極可能發(fā)現(xiàn)迄今為止尚未發(fā)現(xiàn)的錯誤的測試方案;的錯誤的測試方案;n成功的測試是發(fā)現(xiàn)了至今為止尚未發(fā)現(xiàn)的錯誤成功的測試是發(fā)現(xiàn)了至今為止尚未發(fā)現(xiàn)的錯誤的測試。的測試。 n所有測試都應(yīng)該能追溯到用戶需求;所有測試都應(yīng)該能追溯到用戶需求;n應(yīng)該遠(yuǎn)在測試開始之前就制定出測試計劃;應(yīng)該遠(yuǎn)在測試開始之前就制定出測試計劃;n把把Pareto原理應(yīng)用到軟件測試中;原理應(yīng)用到軟件測試中;n應(yīng)該從應(yīng)該從“小規(guī)模小規(guī)模”測試開始,并逐步進(jìn)行測試開始,并逐步進(jìn)行“大規(guī)模大規(guī)?!睖y試;測試;n窮

26、舉測試是不可能的;窮舉測試是不可能的;n為了達(dá)到最佳的測試效果,應(yīng)該由獨立的第為了達(dá)到最佳的測試效果,應(yīng)該由獨立的第三方從事測試工作。三方從事測試工作。7.2.2 軟件測試準(zhǔn)則軟件測試準(zhǔn)則7.2.3 測試方法測試方法n把程序看作一個黑盒子;把程序看作一個黑盒子;n完全不考慮程序的內(nèi)部結(jié)構(gòu)和處理過程;完全不考慮程序的內(nèi)部結(jié)構(gòu)和處理過程;n是在程序接口進(jìn)行的測試。是在程序接口進(jìn)行的測試。n把程序看成裝在一個透明的盒子里;把程序看成裝在一個透明的盒子里;n測試者完全知道程序的結(jié)構(gòu)和處理算法;測試者完全知道程序的結(jié)構(gòu)和處理算法;n按照程序內(nèi)部的邏輯測試程序,檢測程序中的主按照程序內(nèi)部的邏輯測試程序,檢

27、測程序中的主要執(zhí)行通路是否都能按預(yù)定要求正確工作。要執(zhí)行通路是否都能按預(yù)定要求正確工作。n假設(shè)有程序假設(shè)有程序P,輸入量,輸入量A和和B,輸出量為,輸出量為C。n如果計算機的字長為如果計算機的字長為32位,位,A和和B的數(shù)據(jù)類型都是的數(shù)據(jù)類型都是整數(shù)類型。將整數(shù)類型。將A和和B的可能取值進(jìn)行排列組合,輸?shù)目赡苋≈颠M(jìn)行排列組合,輸入數(shù)據(jù)的可能性有:入數(shù)據(jù)的可能性有:232232264種。種。n假設(shè)這個程序執(zhí)行一次需要假設(shè)這個程序執(zhí)行一次需要1毫秒,要完成所有的毫秒,要完成所有的測試,計算機需要連續(xù)工作測試,計算機需要連續(xù)工作5億年。億年。n圖中所示的一個小程序的控圖中所示的一個小程序的控制流程。

28、曲線代表執(zhí)行次數(shù)制流程。曲線代表執(zhí)行次數(shù)不超過不超過20的循環(huán),循環(huán)體中的循環(huán),循環(huán)體中共有共有5條通路。條通路。n可能執(zhí)行的路徑有可能執(zhí)行的路徑有520條,近條,近似為似為1014條可能的路徑。條可能的路徑。n如果完成一個路徑的測試需如果完成一個路徑的測試需要要1毫秒,那么整個測試過程毫秒,那么整個測試過程需要需要3170年。年。黑盒測試黑盒測試白盒測試白盒測試優(yōu)優(yōu)點點適用于各階段測試適用于各階段測試從產(chǎn)品功能角度測試從產(chǎn)品功能角度測試容易入手生成測試數(shù)據(jù)容易入手生成測試數(shù)據(jù)可構(gòu)成測試數(shù)據(jù)使特定程可構(gòu)成測試數(shù)據(jù)使特定程 序部分得到測試序部分得到測試有一定的充分性度量手段有一定的充分性度量手段

29、可獲較多工具支持可獲較多工具支持缺缺點點某些代碼得不到測試某些代碼得不到測試如果規(guī)格說明有誤,則無如果規(guī)格說明有誤,則無法發(fā)現(xiàn)法發(fā)現(xiàn)不易進(jìn)行充分性測試不易進(jìn)行充分性測試通常不易生成測試數(shù)據(jù)通常不易生成測試數(shù)據(jù)無法對未實現(xiàn)規(guī)格說明的部無法對未實現(xiàn)規(guī)格說明的部分進(jìn)行測試分進(jìn)行測試工作量大,通常只用于單元工作量大,通常只用于單元測試,有應(yīng)用局限測試,有應(yīng)用局限性性質(zhì)質(zhì)一種確認(rèn)技術(shù),回答一種確認(rèn)技術(shù),回答“我們我們在構(gòu)造一個正確的系統(tǒng)嗎?在構(gòu)造一個正確的系統(tǒng)嗎?”一種驗證技術(shù),回答一種驗證技術(shù),回答“我們在我們在正確地構(gòu)造一個系統(tǒng)嗎?正確地構(gòu)造一個系統(tǒng)嗎?”7.2.4 測試步驟測試步驟1. 模塊測試模

30、塊測試(單元測試單元測試)n保證每個模塊作為一個單元能正確運行;保證每個模塊作為一個單元能正確運行;n發(fā)現(xiàn)的往往是編碼和詳細(xì)設(shè)計的錯誤。發(fā)現(xiàn)的往往是編碼和詳細(xì)設(shè)計的錯誤。2. 子系統(tǒng)測試子系統(tǒng)測試n把經(jīng)過單元測試的模塊放在一起形成一個子系把經(jīng)過單元測試的模塊放在一起形成一個子系統(tǒng)來測試;統(tǒng)來測試;n著重測試模塊的接口。著重測試模塊的接口。3. 系統(tǒng)測試系統(tǒng)測試n把經(jīng)過測試的子系統(tǒng)裝配成一個完整的系統(tǒng)來把經(jīng)過測試的子系統(tǒng)裝配成一個完整的系統(tǒng)來測試;測試;n發(fā)現(xiàn)的往往是軟件設(shè)計中的錯誤,也可能發(fā)現(xiàn)發(fā)現(xiàn)的往往是軟件設(shè)計中的錯誤,也可能發(fā)現(xiàn)需求說明中的錯誤;需求說明中的錯誤;n不論是子系統(tǒng)測試還是系統(tǒng)

31、測試,都兼有檢測不論是子系統(tǒng)測試還是系統(tǒng)測試,都兼有檢測和組裝兩重含義,通常稱為集成測試。和組裝兩重含義,通常稱為集成測試。 4. 驗收測試驗收測試(確認(rèn)測試確認(rèn)測試)n把軟件系統(tǒng)作為單一的實體進(jìn)行測試;把軟件系統(tǒng)作為單一的實體進(jìn)行測試;n它是在用戶積極參與下進(jìn)行的,而且可能主要它是在用戶積極參與下進(jìn)行的,而且可能主要使用實際數(shù)據(jù)使用實際數(shù)據(jù)(系統(tǒng)將來要處理的信息系統(tǒng)將來要處理的信息)進(jìn)行測進(jìn)行測試;試;n發(fā)現(xiàn)的往往是系統(tǒng)需求說明書中的錯誤。發(fā)現(xiàn)的往往是系統(tǒng)需求說明書中的錯誤。5. 平行運行平行運行n同時運行新開發(fā)出來的系統(tǒng)和將被它取代的舊系同時運行新開發(fā)出來的系統(tǒng)和將被它取代的舊系統(tǒng);以便比

32、較新舊兩個系統(tǒng)的處理結(jié)果;統(tǒng);以便比較新舊兩個系統(tǒng)的處理結(jié)果;目的:目的:n可以在準(zhǔn)生產(chǎn)環(huán)境中運行新系統(tǒng)而又不冒風(fēng)險;可以在準(zhǔn)生產(chǎn)環(huán)境中運行新系統(tǒng)而又不冒風(fēng)險;n用戶能有一段熟悉新系統(tǒng)的時間;用戶能有一段熟悉新系統(tǒng)的時間;n可以驗證用戶指南和使用手冊之類的文檔;可以驗證用戶指南和使用手冊之類的文檔;n能夠以準(zhǔn)生產(chǎn)模式對新系統(tǒng)進(jìn)行全負(fù)荷測試,可能夠以準(zhǔn)生產(chǎn)模式對新系統(tǒng)進(jìn)行全負(fù)荷測試,可以用測試結(jié)果驗證性能指標(biāo)。以用測試結(jié)果驗證性能指標(biāo)。 7.2.5 測試階段的信息流測試階段的信息流n輸入信息有兩類:輸入信息有兩類: q軟件配置,包括需求說明書、設(shè)計說明書和源程序軟件配置,包括需求說明書、設(shè)計說明

33、書和源程序清單等;清單等; q測試配置,包括測試計劃和測試方案。測試配置,包括測試計劃和測試方案。 7.3 單元測試單元測試n單元測試集中檢測模塊;單元測試集中檢測模塊;n單元測試和編碼屬于軟件過程的同一個階段;單元測試和編碼屬于軟件過程的同一個階段;n可以應(yīng)用人工測試和計算機測試這樣兩種不同可以應(yīng)用人工測試和計算機測試這樣兩種不同類型的測試方法;類型的測試方法;n單元測試主要使用白盒測試技術(shù),對多個模塊單元測試主要使用白盒測試技術(shù),對多個模塊的測試可以并行地進(jìn)行。的測試可以并行地進(jìn)行。 7.3.1 測試重點測試重點n模塊接口模塊接口n局部數(shù)據(jù)結(jié)構(gòu)局部數(shù)據(jù)結(jié)構(gòu)n重要的執(zhí)行通路重要的執(zhí)行通路n出

34、錯處理通路出錯處理通路n邊界條件邊界條件7.3.2 代碼審查代碼審查n由審查小組正式進(jìn)行測試稱為代碼審查;由審查小組正式進(jìn)行測試稱為代碼審查;n可查出可查出30%70%的邏輯設(shè)計錯誤和編碼錯誤;的邏輯設(shè)計錯誤和編碼錯誤;n審查小組組成:審查小組組成:q組長組長q程序的設(shè)計者程序的設(shè)計者q程序的編寫者程序的編寫者q程序的測試者程序的測試者n一次審查會上可以發(fā)現(xiàn)許多錯誤,可以減少系統(tǒng)一次審查會上可以發(fā)現(xiàn)許多錯誤,可以減少系統(tǒng)驗證的總工作量。驗證的總工作量。 7.3.3 計算機測試計算機測試n必須為每個單元測試開發(fā)驅(qū)動程序和必須為每個單元測試開發(fā)驅(qū)動程序和(或或)存根存根程序。程序。q驅(qū)動程序是一個

35、驅(qū)動程序是一個“主程序主程序”,它接收測試數(shù)據(jù),它接收測試數(shù)據(jù),傳送給被測試的模塊,并且輸出有關(guān)的結(jié)果。傳送給被測試的模塊,并且輸出有關(guān)的結(jié)果。q存根程序代替被測試的模塊所調(diào)用的模塊。它使存根程序代替被測試的模塊所調(diào)用的模塊。它使用被它代替的模塊的接口,可能做最少量的數(shù)據(jù)用被它代替的模塊的接口,可能做最少量的數(shù)據(jù)操作,輸出對入口的檢驗或操作結(jié)果,并且把控操作,輸出對入口的檢驗或操作結(jié)果,并且把控制歸還給調(diào)用它的模塊。制歸還給調(diào)用它的模塊。n驅(qū)動程序和存根程序代表開銷,通常并不把驅(qū)動程序和存根程序代表開銷,通常并不把它們作為軟件產(chǎn)品的一部分交給用戶。它們作為軟件產(chǎn)品的一部分交給用戶。被測模塊被測

36、模塊存根模塊存根模塊驅(qū)動模塊驅(qū)動模塊存根模塊存根模塊存根模塊存根模塊單元測試下計算機測試的環(huán)境單元測試下計算機測試的環(huán)境圖圖7.27.2是一個正文加工系統(tǒng)的部分層次圖,假定要測是一個正文加工系統(tǒng)的部分層次圖,假定要測試其中編號為試其中編號為3.03.0的關(guān)鍵模塊的關(guān)鍵模塊正文正文編輯編輯模塊。模塊。圖圖7.2 7.2 正文加工系統(tǒng)的層次正文加工系統(tǒng)的層次圖圖驅(qū)動模塊驅(qū)動模塊存根存根changechange存根存根appendappendn. TEST DRIVER. TEST DRIVERn ( (* *測試正文編輯模塊用的測試正文編輯模塊用的驅(qū)動程序驅(qū)動程序* *) )n說明長度為說明長度為

37、25002500個字符的一個緩沖區(qū);個字符的一個緩沖區(qū);n把把CFUNCTCFUNCT置為希望測試的狀態(tài);置為希望測試的狀態(tài);n輸入字符串;輸入字符串;n調(diào)用正文編輯模塊;調(diào)用正文編輯模塊;n停止或再次初啟;停止或再次初啟;nEND TEST DRIVEREND TEST DRIVERn. TEST STUB(TEST STUB(* *測試正文編輯模塊用的測試正文編輯模塊用的存根程序存根程序* *) )n初始化;初始化;n輸出信息輸出信息“進(jìn)入了正文編輯程序進(jìn)入了正文編輯程序”;n輸出輸出“輸入的控制信息是輸入的控制信息是”CFUNCTCFUNCT;n輸出緩沖區(qū)中的字符串;輸出緩沖區(qū)中的字符串

38、;nIF CFUNCT=CHANGEIF CFUNCT=CHANGEnTHENTHENn 把緩沖區(qū)中第二個字改為把緩沖區(qū)中第二個字改為* * * *nELSEELSEn 在緩沖區(qū)的尾部加在緩沖區(qū)的尾部加?nENDENDIFIF;n輸出緩沖區(qū)中的新字符串;輸出緩沖區(qū)中的新字符串;n END TEST STUBEND TEST STUB7.4 集成測試集成測試n集成測試是測試和組裝軟件的系統(tǒng)化技術(shù),主集成測試是測試和組裝軟件的系統(tǒng)化技術(shù),主要目標(biāo)是發(fā)現(xiàn)與接口有關(guān)的問題。要目標(biāo)是發(fā)現(xiàn)與接口有關(guān)的問題。n由模塊組裝成程序時有兩種方法:由模塊組裝成程序時有兩種方法:q非漸增式測試方法非漸增式測試方法q漸

39、增式測試方法漸增式測試方法非漸增式測試方法:非漸增式測試方法:n先分別測試每個模塊,再把所有模塊按設(shè)計要求放在先分別測試每個模塊,再把所有模塊按設(shè)計要求放在一起結(jié)合成所要的程序;一起結(jié)合成所要的程序;n非漸增式測試一下子把所有模塊放在一起,并把龐大非漸增式測試一下子把所有模塊放在一起,并把龐大的程序作為一個整體來測試,測試者面對的情況十分的程序作為一個整體來測試,測試者面對的情況十分復(fù)雜。復(fù)雜。n在龐大的程序中想要診斷定位一個錯誤是非常困難的,在龐大的程序中想要診斷定位一個錯誤是非常困難的,改正錯誤更是極端困難,而且一旦改正一個錯誤之后,改正錯誤更是極端困難,而且一旦改正一個錯誤之后,馬上又會

40、遇到新的錯誤。馬上又會遇到新的錯誤。 漸增式測試方法:漸增式測試方法:n把下一個要測試的模塊同已經(jīng)測試好的那些模塊結(jié)把下一個要測試的模塊同已經(jīng)測試好的那些模塊結(jié)合起來進(jìn)行測試;合起來進(jìn)行測試;n測試完以后再把下一個應(yīng)該測試的模塊結(jié)合進(jìn)來測測試完以后再把下一個應(yīng)該測試的模塊結(jié)合進(jìn)來測試,每次增加一個模塊;試,每次增加一個模塊;n實際上同時完成單元測試和集成測試;實際上同時完成單元測試和集成測試;n把程序劃分成小段來構(gòu)造和測試,在這個過程中比把程序劃分成小段來構(gòu)造和測試,在這個過程中比較容易定位和改正錯誤;較容易定位和改正錯誤;n漸增方式有兩種集成策略:漸增方式有兩種集成策略:q自頂向下自頂向下q

41、自底向上自底向上7.4.1 自頂向下集成自頂向下集成n從主控制模塊開始,沿著程序的控制層次向下從主控制模塊開始,沿著程序的控制層次向下移動,逐漸把各個模塊結(jié)合起來。移動,逐漸把各個模塊結(jié)合起來。n在把附屬于主控制模塊的在把附屬于主控制模塊的那些模塊組裝到程序結(jié)構(gòu)那些模塊組裝到程序結(jié)構(gòu)中去時,或者使用中去時,或者使用的策略,或者使用的策略,或者使用的策略。的策略。q深度優(yōu)先:先組裝在軟件深度優(yōu)先:先組裝在軟件結(jié)構(gòu)的一條主控制通路上結(jié)構(gòu)的一條主控制通路上的所有模塊。的所有模塊。q寬度優(yōu)先:沿軟件結(jié)構(gòu)水寬度優(yōu)先:沿軟件結(jié)構(gòu)水平地移動,把處于同一個平地移動,把處于同一個控制層次上的所有模塊組控制層次上

42、的所有模塊組裝起來。裝起來。按深度優(yōu)先策略組裝按深度優(yōu)先策略組裝按寬度優(yōu)先策略組裝按寬度優(yōu)先策略組裝總結(jié):把模塊結(jié)合進(jìn)軟件結(jié)構(gòu)的過程由下述總結(jié):把模塊結(jié)合進(jìn)軟件結(jié)構(gòu)的過程由下述4個步驟完成:個步驟完成:n第一步第一步,對主控制模塊進(jìn)行測試,測試時用存根程序代,對主控制模塊進(jìn)行測試,測試時用存根程序代替所有直接附屬于主控制模塊的模塊;替所有直接附屬于主控制模塊的模塊;n第二步第二步,根據(jù)選定的結(jié)合策略,根據(jù)選定的結(jié)合策略(深度優(yōu)先或?qū)挾葍?yōu)先深度優(yōu)先或?qū)挾葍?yōu)先),每次用一個實際模塊代換一個存根程序每次用一個實際模塊代換一個存根程序(新結(jié)合進(jìn)來的模新結(jié)合進(jìn)來的模塊往往又需要新的存根程序塊往往又需要新

43、的存根程序);n第三步,第三步,在結(jié)合進(jìn)一個模塊的同時進(jìn)行測試;在結(jié)合進(jìn)一個模塊的同時進(jìn)行測試;n第四步,第四步,為了保證加入模塊沒有引進(jìn)新的錯誤,可能需為了保證加入模塊沒有引進(jìn)新的錯誤,可能需要進(jìn)行回歸測試要進(jìn)行回歸測試(即,全部或部分地重復(fù)以前做過的測即,全部或部分地重復(fù)以前做過的測試試)。n從第二步開始不斷地從第二步開始不斷地重復(fù)重復(fù)進(jìn)行上述過程,直到構(gòu)造起完進(jìn)行上述過程,直到構(gòu)造起完整的軟件結(jié)構(gòu)為止。整的軟件結(jié)構(gòu)為止。 優(yōu)點:優(yōu)點:n能夠在測試的早期對主要的控制或關(guān)鍵的抉擇進(jìn)能夠在測試的早期對主要的控制或關(guān)鍵的抉擇進(jìn)行檢驗。行檢驗。n如果選擇深度優(yōu)先的結(jié)合方法,可以在早期實現(xiàn)如果選擇深

44、度優(yōu)先的結(jié)合方法,可以在早期實現(xiàn)軟件的一個完整的功能并且驗證這個功能。軟件的一個完整的功能并且驗證這個功能。缺點:缺點:n存根程序代替了低層次的模塊,在軟件結(jié)構(gòu)中沒存根程序代替了低層次的模塊,在軟件結(jié)構(gòu)中沒有重要的數(shù)據(jù)自下往上流。有重要的數(shù)據(jù)自下往上流。結(jié)合策略:結(jié)合策略:n第一步,把低層模塊組合成實現(xiàn)某個特定的軟件第一步,把低層模塊組合成實現(xiàn)某個特定的軟件子功能的族;子功能的族;n第二步,寫一個驅(qū)動程序第二步,寫一個驅(qū)動程序(用于測試的控制程序用于測試的控制程序),協(xié)調(diào)測試數(shù)據(jù)的輸入和輸出;協(xié)調(diào)測試數(shù)據(jù)的輸入和輸出;n第三步,對由模塊組成的子功能族進(jìn)行測試;第三步,對由模塊組成的子功能族進(jìn)行

45、測試;n第四步,去掉驅(qū)動程序,沿軟件結(jié)構(gòu)自下向上移第四步,去掉驅(qū)動程序,沿軟件結(jié)構(gòu)自下向上移動,把子功能族組合起來形成更大的子功能族。動,把子功能族組合起來形成更大的子功能族。n上述第二步到第四步實質(zhì)上構(gòu)成了一個循環(huán)。上述第二步到第四步實質(zhì)上構(gòu)成了一個循環(huán)。 7.4.2 自底向上集成自底向上集成自底向上結(jié)合自底向上結(jié)合自底向上結(jié)合自底向上結(jié)合7.4.3 不同集成測試策略的比較不同集成測試策略的比較混合策略:混合策略:n改進(jìn)的自頂向下測試方法改進(jìn)的自頂向下測試方法q基本上使用自頂向下的測試方法,但是在早期使用基本上使用自頂向下的測試方法,但是在早期使用自底向上的方法測試軟件中的少數(shù)關(guān)鍵模塊。自底

46、向上的方法測試軟件中的少數(shù)關(guān)鍵模塊。q能在測試的早期發(fā)現(xiàn)關(guān)鍵模塊中的錯誤;測試關(guān)鍵能在測試的早期發(fā)現(xiàn)關(guān)鍵模塊中的錯誤;測試關(guān)鍵模塊時需要驅(qū)動程序。模塊時需要驅(qū)動程序。n混合法混合法q對軟件結(jié)構(gòu)中較上層使用的自頂向下方法與對軟件對軟件結(jié)構(gòu)中較上層使用的自頂向下方法與對軟件結(jié)構(gòu)中較下層使用的自底向上方法相結(jié)合。結(jié)構(gòu)中較下層使用的自底向上方法相結(jié)合。q兼有兩種方法的優(yōu)缺點,當(dāng)被測試的軟件中關(guān)鍵模兼有兩種方法的優(yōu)缺點,當(dāng)被測試的軟件中關(guān)鍵模塊比較多時,這種混合法可能是最好的折衷方法。塊比較多時,這種混合法可能是最好的折衷方法。7.4.4 回歸測試回歸測試n回歸測試是指重新執(zhí)行已經(jīng)做過的測試的某個子集,

47、回歸測試是指重新執(zhí)行已經(jīng)做過的測試的某個子集,以保證測試過程中的變化沒有帶來非預(yù)期的副作用。以保證測試過程中的變化沒有帶來非預(yù)期的副作用。n回歸測試就是回歸測試就是用于保證用于保證由于調(diào)試或其他原因引起的由于調(diào)試或其他原因引起的變化,不會導(dǎo)致非預(yù)期的軟件行為或額外錯誤的測變化,不會導(dǎo)致非預(yù)期的軟件行為或額外錯誤的測試活動。試活動。n回歸測試回歸測試可以通過可以通過重新執(zhí)行全部測試用例的一個子重新執(zhí)行全部測試用例的一個子集人工地進(jìn)行,也可以使用自動化的捕獲回放工具集人工地進(jìn)行,也可以使用自動化的捕獲回放工具自動進(jìn)行。自動進(jìn)行。 7.5 確認(rèn)測試確認(rèn)測試n確認(rèn)測試也稱為驗收測試,它的目標(biāo)是驗證軟確

48、認(rèn)測試也稱為驗收測試,它的目標(biāo)是驗證軟件的有效性。件的有效性。n軟件有效性的一個簡單定義是:如果軟件的功軟件有效性的一個簡單定義是:如果軟件的功能和性能如同用戶所合理期待的那樣,軟件就能和性能如同用戶所合理期待的那樣,軟件就是有效的。是有效的。n需求分析階段產(chǎn)生的軟件需求規(guī)格說明書,準(zhǔn)需求分析階段產(chǎn)生的軟件需求規(guī)格說明書,準(zhǔn)確地描述了用戶對軟件的合理期望,因此是軟確地描述了用戶對軟件的合理期望,因此是軟件有效性的標(biāo)準(zhǔn),也是進(jìn)行確認(rèn)測試的基礎(chǔ)。件有效性的標(biāo)準(zhǔn),也是進(jìn)行確認(rèn)測試的基礎(chǔ)。 n確認(rèn)測試必須有用戶積極參與,或者以用戶為確認(rèn)測試必須有用戶積極參與,或者以用戶為主進(jìn)行。主進(jìn)行。n使用用戶界面

49、輸入測試數(shù)據(jù)并且分析評價測試使用用戶界面輸入測試數(shù)據(jù)并且分析評價測試的輸出結(jié)果。的輸出結(jié)果。n通常在驗收之前由開發(fā)單位對用戶進(jìn)行培訓(xùn)。通常在驗收之前由開發(fā)單位對用戶進(jìn)行培訓(xùn)。 7.5.1 確認(rèn)測試的范圍確認(rèn)測試的范圍n確認(rèn)測試的一個重要內(nèi)容是復(fù)查軟件配置。確認(rèn)測試的一個重要內(nèi)容是復(fù)查軟件配置。n復(fù)查的目的是保證軟件配置的所有成分都齊全,復(fù)查的目的是保證軟件配置的所有成分都齊全,質(zhì)量符合要求,文檔與程序完全一致,具有完質(zhì)量符合要求,文檔與程序完全一致,具有完成軟件維護(hù)所必須的細(xì)節(jié),而且已經(jīng)編好目錄。成軟件維護(hù)所必須的細(xì)節(jié),而且已經(jīng)編好目錄。 7.5.2 軟件配置復(fù)查軟件配置復(fù)查nAlpha測試由

50、用戶在開發(fā)者的場所進(jìn)行,并且測試由用戶在開發(fā)者的場所進(jìn)行,并且在開發(fā)者對用戶的在開發(fā)者對用戶的“指導(dǎo)指導(dǎo)”下進(jìn)行測試。下進(jìn)行測試。Alpha測試是在受控的環(huán)境中進(jìn)行的。測試是在受控的環(huán)境中進(jìn)行的。nBeta測試由軟件的最終用戶們在一個或多個客測試由軟件的最終用戶們在一個或多個客戶場所進(jìn)行。開發(fā)者通常不在戶場所進(jìn)行。開發(fā)者通常不在Beta測試的現(xiàn)場,測試的現(xiàn)場,因此,因此,Beta測試是軟件在開發(fā)者不能控制的環(huán)測試是軟件在開發(fā)者不能控制的環(huán)境中的境中的“真實真實”應(yīng)用。應(yīng)用。7.5.3 Alpha和和Beta測試測試測試階段測試階段主要依據(jù)主要依據(jù)測試人員測試人員 測試方式測試方式主要測試內(nèi)容主

51、要測試內(nèi)容單元測試單元測試 系統(tǒng)設(shè)計文檔系統(tǒng)設(shè)計文檔 開發(fā)小組開發(fā)小組 白盒測試白盒測試接口測試接口測試路徑測試路徑測試 子系統(tǒng)子系統(tǒng)測試測試系統(tǒng)設(shè)計文檔系統(tǒng)設(shè)計文檔需求文檔需求文檔獨立測試獨立測試小組小組白盒測試白盒測試黑盒測試黑盒測試接口測試接口測試路徑測試路徑測試功能測試功能測試性能測試性能測試 系統(tǒng)測試系統(tǒng)測試 需求文檔需求文檔獨立測試獨立測試小組小組黑盒測試黑盒測試功能測試功能測試健壯性測試健壯性測試性能測試性能測試用戶界面測試用戶界面測試安全性測試安全性測試可靠性測試可靠性測試安裝安裝/反安裝測試反安裝測試 驗收測試驗收測試 需求文檔需求文檔用戶用戶黑盒測試黑盒測試測試步驟小結(jié)測試

52、步驟小結(jié)7.6 白盒測試技術(shù)白盒測試技術(shù)n所謂測試方案包括具體的測試目的(例如,預(yù)定要所謂測試方案包括具體的測試目的(例如,預(yù)定要測試的具體功能),應(yīng)該輸入的測試數(shù)據(jù)和預(yù)期的測試的具體功能),應(yīng)該輸入的測試數(shù)據(jù)和預(yù)期的結(jié)果。結(jié)果。n通常又把測試數(shù)據(jù)和預(yù)期的輸出結(jié)果稱為通常又把測試數(shù)據(jù)和預(yù)期的輸出結(jié)果稱為測試用例測試用例。最困難的問題是設(shè)計測試用的輸入數(shù)據(jù)。最困難的問題是設(shè)計測試用的輸入數(shù)據(jù)。不同的測試數(shù)據(jù)發(fā)現(xiàn)程序錯誤的能力差別很大,為不同的測試數(shù)據(jù)發(fā)現(xiàn)程序錯誤的能力差別很大,為了提高測試效率降低測試成本,應(yīng)該選用高效的測了提高測試效率降低測試成本,應(yīng)該選用高效的測試數(shù)據(jù)。試數(shù)據(jù)。因為不可能進(jìn)行

53、窮盡的測試,選用少量因為不可能進(jìn)行窮盡的測試,選用少量“最有效的最有效的”測試數(shù)據(jù),做到盡可能完備的測試就更重要了。測試數(shù)據(jù),做到盡可能完備的測試就更重要了。設(shè)計測試方案的設(shè)計測試方案的,確定一組最可能發(fā)現(xiàn),確定一組最可能發(fā)現(xiàn)某個錯誤或某類錯誤的測試數(shù)據(jù)。某個錯誤或某類錯誤的測試數(shù)據(jù)。已經(jīng)研究出許多設(shè)計測試數(shù)據(jù)的技術(shù),這些技術(shù)各已經(jīng)研究出許多設(shè)計測試數(shù)據(jù)的技術(shù),這些技術(shù)各有優(yōu)缺點,沒有哪一種是最好的,更沒有哪一種可有優(yōu)缺點,沒有哪一種是最好的,更沒有哪一種可以代替其余所有技術(shù);同一種技術(shù)在不同的應(yīng)用場以代替其余所有技術(shù);同一種技術(shù)在不同的應(yīng)用場合效果可能相差很大,因此,通常需要聯(lián)合使用多合效果

54、可能相差很大,因此,通常需要聯(lián)合使用多種設(shè)計測試數(shù)據(jù)的技術(shù)。種設(shè)計測試數(shù)據(jù)的技術(shù)。7.6.1 邏輯覆蓋邏輯覆蓋n有選擇地執(zhí)行程序中某些最有代表性的通路是對窮盡有選擇地執(zhí)行程序中某些最有代表性的通路是對窮盡測試的惟一可行的替代辦法。測試的惟一可行的替代辦法。n從覆蓋源程序語句的詳盡程度分析,大致有以下一些從覆蓋源程序語句的詳盡程度分析,大致有以下一些不同的覆蓋標(biāo)準(zhǔn):不同的覆蓋標(biāo)準(zhǔn):q語句覆蓋語句覆蓋q判定覆蓋判定覆蓋 q條件覆蓋條件覆蓋 q判定判定/條件覆蓋條件覆蓋 q條件組合覆蓋條件組合覆蓋q路徑覆蓋路徑覆蓋 1. 語句覆蓋語句覆蓋n含義:選擇足夠多的測含義:選擇足夠多的測試數(shù)據(jù),使被測程序中

55、試數(shù)據(jù),使被測程序中每個語句至少執(zhí)行一次。每個語句至少執(zhí)行一次。n分析:分析: 執(zhí)行路徑執(zhí)行路徑sacbedn測試用例:測試用例: A2,B0,X4 覆蓋覆蓋sacbed語句覆蓋特點:語句覆蓋特點:n語句覆蓋對程序的邏輯覆蓋很少。語句覆蓋對程序的邏輯覆蓋很少。n語句覆蓋只關(guān)心判定表達(dá)式的值,而沒有分別語句覆蓋只關(guān)心判定表達(dá)式的值,而沒有分別測試判定表達(dá)式中每個條件取不同值時的情況。測試判定表達(dá)式中每個條件取不同值時的情況。n語句覆蓋是很弱的邏輯覆蓋標(biāo)準(zhǔn)。語句覆蓋是很弱的邏輯覆蓋標(biāo)準(zhǔn)。 2. 判定覆蓋(分支覆蓋)判定覆蓋(分支覆蓋)n含義:不僅每個語句必須含義:不僅每個語句必須至少執(zhí)行一次,而且

56、每個至少執(zhí)行一次,而且每個判定的每種可能的結(jié)果都判定的每種可能的結(jié)果都應(yīng)該至少執(zhí)行一次。應(yīng)該至少執(zhí)行一次。n所有判定分支:所有判定分支: (1) a點判定為點判定為T (2) a點判定為點判定為F (3) b點判定為點判定為T (4) b點判定為點判定為F2. 判定覆蓋(分支覆蓋)判定覆蓋(分支覆蓋)n測試用例:測試用例: . 滿足滿足(1)(4) A3,B0,X3 覆蓋覆蓋sacbd . 滿足滿足(2)(3) A2,B1,X1 覆蓋覆蓋sabed2. 判定覆蓋(分支覆蓋)判定覆蓋(分支覆蓋)n或者或者 . 滿足滿足(1)(3) A2,B0,X3 覆蓋覆蓋sacbed . 滿足滿足(2)(4)

57、 A3,B1,X1 覆蓋覆蓋sabdn特點:比語句覆蓋強,但特點:比語句覆蓋強,但對程序邏輯的覆蓋程度仍對程序邏輯的覆蓋程度仍不高。不高。 3. 條件覆蓋條件覆蓋n含義:不僅每個語句至少含義:不僅每個語句至少執(zhí)行一次,而且使判定表執(zhí)行一次,而且使判定表達(dá)式中的每個條件都取到達(dá)式中的每個條件都取到各種可能的結(jié)果。各種可能的結(jié)果。n所有條件:所有條件: (1)A1 (2)A1 (3)B0 (4)B0 (5)A2 (6)A2 (7)X1 (8)X13. 條件覆蓋條件覆蓋n測試用例:測試用例: . 滿足滿足(1)(3)(5)(7) A2,B0,X4 覆蓋覆蓋sacbed . 滿足滿足(2)(4)(6)

58、(8) A1,B1,X1 覆蓋覆蓋sabd 3. 條件覆蓋條件覆蓋n或者或者 . 滿足滿足(1)(3)(5)(8) A2,B0,X1 覆蓋覆蓋sacbed . 滿足滿足(2)(4)(6)(7) A1,B1,X2 覆蓋覆蓋sabedn或者或者條件覆蓋特點:條件覆蓋特點:n條件覆蓋通常比判定覆蓋強,因為它使每個條條件覆蓋通常比判定覆蓋強,因為它使每個條件都取到了兩個不同的結(jié)果,判定覆蓋卻只關(guān)件都取到了兩個不同的結(jié)果,判定覆蓋卻只關(guān)心整個判定表達(dá)式的值。但也有反例,如第二心整個判定表達(dá)式的值。但也有反例,如第二組測試用例。組測試用例。n判定覆蓋不一定包含條件覆蓋,條件覆蓋也不判定覆蓋不一定包含條件覆

59、蓋,條件覆蓋也不一定包含判定覆蓋。一定包含判定覆蓋。4. 判定判定/條件覆蓋條件覆蓋n含義:使得判定表達(dá)式中的每個條件都取到各種可能含義:使得判定表達(dá)式中的每個條件都取到各種可能的值,每個判定表達(dá)式也都取到各種可能的結(jié)果。的值,每個判定表達(dá)式也都取到各種可能的結(jié)果。n測試用例:測試用例: . 滿足條件滿足條件(1)(3)(5)(7) 和判定和判定(1)(3) A2,B0,X4 覆蓋覆蓋sacbed . 滿足條件滿足條件(2)(4)(6)(8) 和判定和判定(2)(4) A1,B1,X1 覆蓋覆蓋sabd n特點:有時判定特點:有時判定/條件覆蓋也并不比條件覆蓋更強。條件覆蓋也并不比條件覆蓋更強

60、。 5. 條件組合覆蓋條件組合覆蓋n含義:要求選取足夠多的測試數(shù)據(jù),使得每個判定表達(dá)含義:要求選取足夠多的測試數(shù)據(jù),使得每個判定表達(dá)式中條件的各種可能組合都至少出現(xiàn)一次。式中條件的各種可能組合都至少出現(xiàn)一次。n條件組合:條件組合: (1)A1,B0 (2)A1,B0 (3)A1,B0 (4)A1,B0 (5)A2,X1 (6)A2,X1 (7)A2,X1 (8)A2,X1 5. 條件組合覆蓋條件組合覆蓋n測試用例:測試用例: .滿足滿足(1)(5) A2,B0,X4 覆蓋覆蓋sacbed .滿足滿足(2)(6) A2,B1,X1 覆蓋覆蓋sabed .滿足滿足(3)(7) A1,B0,X2 覆蓋覆蓋sabed

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論