第6章 軟件測試_第1頁
第6章 軟件測試_第2頁
第6章 軟件測試_第3頁
第6章 軟件測試_第4頁
第6章 軟件測試_第5頁
已閱讀5頁,還剩98頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第2部分 結(jié)構(gòu)化軟件開發(fā)方法第第6章章 軟件測試軟件測試 6.1 軟件測試的基本概念 什么是軟件測試什么是軟件測試 軟件測試是在軟件投入生產(chǎn)性運行之前,對軟件軟件測試是在軟件投入生產(chǎn)性運行之前,對軟件需求分析、設(shè)計規(guī)格說明和編碼的最終復(fù)審,是需求分析、設(shè)計規(guī)格說明和編碼的最終復(fù)審,是軟件質(zhì)量控制的關(guān)鍵步驟。軟件質(zhì)量控制的關(guān)鍵步驟。 如果給軟件測試下定義的話,可以這樣講:如果給軟件測試下定義的話,可以這樣講:軟件軟件測試測試是為了發(fā)現(xiàn)錯誤而執(zhí)行程序的過程?;蛘哒f,是為了發(fā)現(xiàn)錯誤而執(zhí)行程序的過程?;蛘哒f,軟件測試軟件測試是根據(jù)軟件開發(fā)各階段的規(guī)格說明和程是根據(jù)軟件開發(fā)各階段的規(guī)格說明和程序的內(nèi)部結(jié)

2、構(gòu)而精心設(shè)計一批測試用例(即輸入序的內(nèi)部結(jié)構(gòu)而精心設(shè)計一批測試用例(即輸入數(shù)據(jù)及其預(yù)期的輸出結(jié)果),并利用這些測試用數(shù)據(jù)及其預(yù)期的輸出結(jié)果),并利用這些測試用例去運行程序,以發(fā)現(xiàn)程序錯誤的過程。例去運行程序,以發(fā)現(xiàn)程序錯誤的過程。 6.1 軟件測試的基本概念 軟件測試的目的和原則軟件測試的目的和原則 基于不同的立場,存在著兩種完全不同的測試目基于不同的立場,存在著兩種完全不同的測試目的。的。從用戶的角度出發(fā),普遍希望通過軟件測試檢驗從用戶的角度出發(fā),普遍希望通過軟件測試檢驗軟件中隱藏的錯誤和缺陷,以考慮是否可以接受軟件中隱藏的錯誤和缺陷,以考慮是否可以接受該產(chǎn)品。該產(chǎn)品。從軟件開發(fā)者的角度出發(fā)

3、,則希望測試成為表明從軟件開發(fā)者的角度出發(fā),則希望測試成為表明軟件產(chǎn)品中不存在錯誤的過程,驗證該軟件已正軟件產(chǎn)品中不存在錯誤的過程,驗證該軟件已正確地實現(xiàn)了用戶的要求,確立人們對軟件質(zhì)量的確地實現(xiàn)了用戶的要求,確立人們對軟件質(zhì)量的信心。信心。6.1 軟件測試的基本概念 Grenford J.Myers就就軟件測試目的軟件測試目的提出了提出了以下觀點。以下觀點。 6.1 軟件測試的基本概念根據(jù)以上測試目的,根據(jù)以上測試目的,軟件測試的原則軟件測試的原則如下:如下:(1 1)應(yīng)當(dāng)把)應(yīng)當(dāng)把“盡早地和不斷地進行軟件測試盡早地和不斷地進行軟件測試”作作 為軟件開發(fā)者的座右銘。為軟件開發(fā)者的座右銘。(2

4、 2)測試用例應(yīng)由測試輸入數(shù)據(jù)和與之對應(yīng)的預(yù))測試用例應(yīng)由測試輸入數(shù)據(jù)和與之對應(yīng)的預(yù) 期輸出結(jié)果這兩部分組成。期輸出結(jié)果這兩部分組成。(3 3)程序員應(yīng)避免檢查自己的程序。)程序員應(yīng)避免檢查自己的程序。 (4 4)在設(shè)計測試用例時,應(yīng)當(dāng)包括合理的輸入條)在設(shè)計測試用例時,應(yīng)當(dāng)包括合理的輸入條 件和不合理的輸入條件。件和不合理的輸入條件。(5 5)充分注意測試中的群集現(xiàn)象。)充分注意測試中的群集現(xiàn)象。 (6 6)嚴(yán)格執(zhí)行測試計劃,排除測試的隨意性。)嚴(yán)格執(zhí)行測試計劃,排除測試的隨意性。 (7 7)應(yīng)當(dāng)對每一個測試結(jié)果作全面檢查。)應(yīng)當(dāng)對每一個測試結(jié)果作全面檢查。(8 8)妥善保存測試計劃、測試用

5、例、出錯統(tǒng)計和)妥善保存測試計劃、測試用例、出錯統(tǒng)計和 最終分析報告,為維護提供方便。最終分析報告,為維護提供方便。 6.1 軟件測試的基本概念 軟件測試的對象軟件測試的對象 到程序的測試為止,軟件開發(fā)工作已經(jīng)經(jīng)歷了許到程序的測試為止,軟件開發(fā)工作已經(jīng)經(jīng)歷了許多環(huán)節(jié),每個環(huán)節(jié)都可能發(fā)生問題。為了把握各多環(huán)節(jié),每個環(huán)節(jié)都可能發(fā)生問題。為了把握各個環(huán)節(jié)的正確性,人們需要進行各種確認(rèn)和驗證個環(huán)節(jié)的正確性,人們需要進行各種確認(rèn)和驗證工作。工作。 6.1 軟件測試的基本概念 驗證驗證(verificationverification),則試圖證明在軟件生存),則試圖證明在軟件生存期各個階段,以及階段間的

6、邏輯協(xié)調(diào)性、完備性期各個階段,以及階段間的邏輯協(xié)調(diào)性、完備性和正確性。下圖為軟件生存期各個重要階段之間和正確性。下圖為軟件生存期各個重要階段之間所要保持的正確性。所要保持的正確性。6.1 軟件測試的基本概念6.1 軟件測試的基本概念 測試信息流如下圖所示。測試信息流如下圖所示。6.1 軟件測試的基本概念 測試信息流測試信息流 軟件開發(fā)過程是一個自頂向下、逐步細化的過程軟件開發(fā)過程是一個自頂向下、逐步細化的過程,而測試過程則是依相反的順序安排的自底向上,而測試過程則是依相反的順序安排的自底向上、逐步集成的過程。低一級測試為上一級測試準(zhǔn)、逐步集成的過程。低一級測試為上一級測試準(zhǔn)備條件。當(dāng)然不排除兩

7、者平行地進行測試。備條件。當(dāng)然不排除兩者平行地進行測試。 軟件測試與軟件開發(fā)過程的關(guān)系如下圖所示。軟件測試與軟件開發(fā)過程的關(guān)系如下圖所示。6.1 軟件測試的基本概念 測試與軟件開發(fā)各階段的關(guān)系測試與軟件開發(fā)各階段的關(guān)系 首先對每一個程序模塊進行單元測試,消除程序模塊內(nèi)部首先對每一個程序模塊進行單元測試,消除程序模塊內(nèi)部在邏輯上和功能上的錯誤和缺陷。再對照軟件設(shè)計進行集在邏輯上和功能上的錯誤和缺陷。再對照軟件設(shè)計進行集成測試,檢測和排除子系統(tǒng)(或系統(tǒng))結(jié)構(gòu)上的錯誤。隨成測試,檢測和排除子系統(tǒng)(或系統(tǒng))結(jié)構(gòu)上的錯誤。隨后再對照需求,進行確認(rèn)測試。最后從系統(tǒng)全體出發(fā),運后再對照需求,進行確認(rèn)測試。最

8、后從系統(tǒng)全體出發(fā),運行系統(tǒng),看是否滿足要求。行系統(tǒng),看是否滿足要求。 6.1 軟件測試的基本概念1. 1. 黑盒測試黑盒測試 黑盒測試黑盒測試是把測試對象看做一個黑盒子,測試人員完是把測試對象看做一個黑盒子,測試人員完 全不考慮程序內(nèi)部的邏輯結(jié)構(gòu)和內(nèi)部特性,只依據(jù)程全不考慮程序內(nèi)部的邏輯結(jié)構(gòu)和內(nèi)部特性,只依據(jù)程 序的需求規(guī)格說明書,檢查程序的功能是否符合它的序的需求規(guī)格說明書,檢查程序的功能是否符合它的 功能說明。功能說明。 黑盒測試方法主要是為了發(fā)現(xiàn):是否有不正確或遺漏黑盒測試方法主要是為了發(fā)現(xiàn):是否有不正確或遺漏了的功能?輸入能否正確地接收?能否輸出正確的結(jié)了的功能?輸入能否正確地接收?能

9、否輸出正確的結(jié)果?是否有數(shù)據(jù)結(jié)構(gòu)錯誤或外部信息(例如數(shù)據(jù)文件果?是否有數(shù)據(jù)結(jié)構(gòu)錯誤或外部信息(例如數(shù)據(jù)文件)訪問錯誤?性能上是否能夠滿足要求?是否有初始)訪問錯誤?性能上是否能夠滿足要求?是否有初始化或終止性錯誤?所以,用黑盒測試發(fā)現(xiàn)程序中的錯化或終止性錯誤?所以,用黑盒測試發(fā)現(xiàn)程序中的錯誤,必須在所有可能的輸入條件和輸出條件中確定測誤,必須在所有可能的輸入條件和輸出條件中確定測試數(shù)據(jù),檢查程序是否都能產(chǎn)生正確的輸出。試數(shù)據(jù),檢查程序是否都能產(chǎn)生正確的輸出。6.1 軟件測試的基本概念 白盒測試與黑盒測試白盒測試與黑盒測試 現(xiàn)在假設(shè)一個程序現(xiàn)在假設(shè)一個程序P有輸入量有輸入量X和和Y及輸出及輸出量

10、量Z,如右圖所示。在字長為,如右圖所示。在字長為32位的計算位的計算機上運行,如果機上運行,如果X,Y只取整數(shù),考慮把所只取整數(shù),考慮把所有的有的X,Y值都作為測試數(shù)據(jù),按黑盒方法值都作為測試數(shù)據(jù),按黑盒方法進行窮舉測試,力圖全面、無遺漏地進行窮舉測試,力圖全面、無遺漏地“挖掘挖掘”出程序中的出程序中的所所有錯誤。這樣作可能采用的測試數(shù)據(jù)組(有錯誤。這樣作可能采用的測試數(shù)據(jù)組(Xi,Yi),不同測),不同測試數(shù)據(jù)組合的最大可能數(shù)目為試數(shù)據(jù)組合的最大可能數(shù)目為232232=264。如果程序如果程序P測試一組測試一組X,Y數(shù)據(jù)需要數(shù)據(jù)需要1毫秒,而且假定一天工毫秒,而且假定一天工作作24小時,一年

11、工作小時,一年工作365天,要完成天,要完成264組測試,需要組測試,需要5億億年。年。 6.1 軟件測試的基本概念6.1 軟件測試的基本概念2. 2. 白盒測試白盒測試 白盒測試白盒測試是是對軟件的過程性細節(jié)做細致的檢查。這一對軟件的過程性細節(jié)做細致的檢查。這一方法是把測試對象看做一個打開的盒子或透明的盒子方法是把測試對象看做一個打開的盒子或透明的盒子,它允許測試人員利用程序內(nèi)部的邏輯結(jié)構(gòu)及有關(guān)信,它允許測試人員利用程序內(nèi)部的邏輯結(jié)構(gòu)及有關(guān)信息,設(shè)計或選擇測試用例,對程序所有邏輯路徑進行息,設(shè)計或選擇測試用例,對程序所有邏輯路徑進行測試。通過在不同點檢查程序的狀態(tài),確定實際的狀測試。通過在不

12、同點檢查程序的狀態(tài),確定實際的狀態(tài)是否與預(yù)期的狀態(tài)一致。因此,白盒測試又稱為結(jié)態(tài)是否與預(yù)期的狀態(tài)一致。因此,白盒測試又稱為結(jié)構(gòu)測試或邏輯驅(qū)動測試。構(gòu)測試或邏輯驅(qū)動測試。 白盒測試主要是對程序模塊進行檢查:對程序模塊的白盒測試主要是對程序模塊進行檢查:對程序模塊的所有獨立的執(zhí)行路徑至少測試一次;對所有的邏輯判所有獨立的執(zhí)行路徑至少測試一次;對所有的邏輯判定,取定,取“真真”與取與取“假假”的兩種情況都能至少測試一的兩種情況都能至少測試一次;在循環(huán)的邊界和運行界限內(nèi)執(zhí)行循環(huán)體;測試內(nèi)次;在循環(huán)的邊界和運行界限內(nèi)執(zhí)行循環(huán)體;測試內(nèi)部數(shù)據(jù)結(jié)構(gòu)的有效性等。部數(shù)據(jù)結(jié)構(gòu)的有效性等。然而,對一個具有多重選擇和

13、循環(huán)嵌套的程序,獨立的路徑數(shù)目可能是然而,對一個具有多重選擇和循環(huán)嵌套的程序,獨立的路徑數(shù)目可能是天文數(shù)字。而且即使精確地實現(xiàn)了白盒測試,也不能斷言測試過的程序天文數(shù)字。而且即使精確地實現(xiàn)了白盒測試,也不能斷言測試過的程序完全正確。舉例來說,右圖所示完全正確。舉例來說,右圖所示的小程序流程圖,它對應(yīng)了一個的小程序流程圖,它對應(yīng)了一個有有100行源代碼的行源代碼的PASCAL語言語言程序,其中包括了一個執(zhí)行達程序,其中包括了一個執(zhí)行達20次的循環(huán)。它所包含的獨立執(zhí)行次的循環(huán)。它所包含的獨立執(zhí)行路徑數(shù)高達路徑數(shù)高達 520 條,條,若要對它進行窮舉測試,即要設(shè)若要對它進行窮舉測試,即要設(shè)計測試用例

14、,覆蓋所有的路徑。計測試用例,覆蓋所有的路徑。假使有這么一個測試程序,對每一條路徑進行測試需要假使有這么一個測試程序,對每一條路徑進行測試需要1毫秒,同樣假定毫秒,同樣假定一天工作一天工作24小時,一年工作小時,一年工作365天,那么要想把如圖天,那么要想把如圖6-6所示的小程序的所示的小程序的所有路徑測試完,則需要所有路徑測試完,則需要3170年。年。 6.1 軟件測試的基本概念 通過以上兩個例子表明,實行窮舉測試,由于工作量過通過以上兩個例子表明,實行窮舉測試,由于工作量過大,需用的時間過長,實施起來是不現(xiàn)實的。既然窮舉測大,需用的時間過長,實施起來是不現(xiàn)實的。既然窮舉測試不可行,就必須精

15、心設(shè)計測試用例,從數(shù)量極大的可用試不可行,就必須精心設(shè)計測試用例,從數(shù)量極大的可用測試用例中精心地挑選少量的測試數(shù)據(jù),使得采用這些測測試用例中精心地挑選少量的測試數(shù)據(jù),使得采用這些測試數(shù)據(jù)能夠達到最佳的測試效果,或者說它們能夠高效率試數(shù)據(jù)能夠達到最佳的測試效果,或者說它們能夠高效率地把隱藏的錯誤盡可能多地揭露出來。地把隱藏的錯誤盡可能多地揭露出來。 以上事實說明,軟件測試有一個致命的缺陷,即測試的以上事實說明,軟件測試有一個致命的缺陷,即測試的不完全不完全、不徹底性不徹底性。由于任何程序只能進行少量(相對于。由于任何程序只能進行少量(相對于窮舉的巨大數(shù)量而言)的有限的測試,在發(fā)現(xiàn)錯誤時能說窮舉

16、的巨大數(shù)量而言)的有限的測試,在發(fā)現(xiàn)錯誤時能說明程序有問題;但在未發(fā)現(xiàn)錯誤時,不能說明程序中沒有明程序有問題;但在未發(fā)現(xiàn)錯誤時,不能說明程序中沒有錯誤,不能說明程序中沒有問題。錯誤,不能說明程序中沒有問題。6.1 軟件測試的基本概念6.2 白盒測試的測試用例設(shè)計 邏輯覆蓋邏輯覆蓋 邏輯覆蓋邏輯覆蓋是以程序內(nèi)部的邏輯結(jié)構(gòu)為基礎(chǔ)的設(shè)計測試用例是以程序內(nèi)部的邏輯結(jié)構(gòu)為基礎(chǔ)的設(shè)計測試用例的技術(shù),它的技術(shù),它屬于白盒測試屬于白盒測試。這一方法要求測試人員對程序。這一方法要求測試人員對程序的邏輯結(jié)構(gòu)有清楚的了解,甚至要能掌握源程序的所有細的邏輯結(jié)構(gòu)有清楚的了解,甚至要能掌握源程序的所有細節(jié)。由于覆蓋測試的

17、目標(biāo)不同,邏輯覆蓋又可分為語句覆節(jié)。由于覆蓋測試的目標(biāo)不同,邏輯覆蓋又可分為語句覆蓋、判定覆蓋、判定蓋、判定覆蓋、判定條件覆蓋、條件組合覆蓋及路徑覆條件覆蓋、條件組合覆蓋及路徑覆蓋。以下將分別做扼要的介紹。在所介紹的幾種邏輯覆蓋蓋。以下將分別做扼要的介紹。在所介紹的幾種邏輯覆蓋中,均以下圖所示的程序段為例。其中有兩個判斷,每中,均以下圖所示的程序段為例。其中有兩個判斷,每個判斷都包含復(fù)合條件的邏輯表達式,符號個判斷都包含復(fù)合條件的邏輯表達式,符號“”表示表示“and”運算,運算,“”表示表示“or”運算。運算。6.2 白盒測試的測試用例設(shè)計圖中所示的程序段有圖中所示的程序段有4 4條不同的路徑

18、。條不同的路徑。為了清楚起見,分別對第為了清楚起見,分別對第1 1個判斷的個判斷的取假分支、取真分支及第取假分支、取真分支及第2 2個判斷的個判斷的取假分支、取真分支命名為取假分支、取真分支命名為b b、c c、d d、e e。這樣所有。這樣所有4 4條路徑可表示為:條路徑可表示為:L1L1(aceace),),L2L2(abdabd),),L3L3(abeabe)和)和L4L4(acdacd),),或簡寫為或簡寫為aceace、abdabd、abeabe和和acdacd。6.2 白盒測試的測試用例設(shè)計 語句覆蓋語句覆蓋 所謂所謂語句覆蓋語句覆蓋就是設(shè)計若干個測試用例,運行被測程序,使得每一個

19、就是設(shè)計若干個測試用例,運行被測程序,使得每一個可執(zhí)行語句至少執(zhí)行一次。例如,在上圖所給出的例子中,正好可執(zhí)行語句至少執(zhí)行一次。例如,在上圖所給出的例子中,正好所有的可執(zhí)行語句都在路徑所有的可執(zhí)行語句都在路徑L1L1上,所以選擇路徑上,所以選擇路徑L1L1設(shè)計測試用例,設(shè)計測試用例,就可以覆蓋所有的可執(zhí)行語句。就可以覆蓋所有的可執(zhí)行語句。 測試用例的設(shè)計格式如下:測試用例的設(shè)計格式如下: 【輸入的(輸入的(A A,B B,x x),輸出的(),輸出的(A A,B B,x x)】 為圖中所示例子設(shè)計滿足語句覆蓋的測試用例:為圖中所示例子設(shè)計滿足語句覆蓋的測試用例: 【(2 2,0 0,4 4),

20、(),(2 2,0 0,3 3)】覆蓋覆蓋aceace【L1L1】 從程序中每個可執(zhí)行語句都得到執(zhí)行這一點來看,語句覆蓋的方從程序中每個可執(zhí)行語句都得到執(zhí)行這一點來看,語句覆蓋的方 法似乎能夠比較全面地檢驗每一個可執(zhí)行語句。但與后面介紹的法似乎能夠比較全面地檢驗每一個可執(zhí)行語句。但與后面介紹的 其他覆蓋相比,語句覆蓋是最弱的邏輯覆蓋準(zhǔn)則。其他覆蓋相比,語句覆蓋是最弱的邏輯覆蓋準(zhǔn)則。所謂所謂判定覆蓋判定覆蓋就是設(shè)計若干個測試用例,運行被測程序,使得程序中每個就是設(shè)計若干個測試用例,運行被測程序,使得程序中每個判斷的取真分支和取假分支至少經(jīng)歷一次。判定覆蓋又稱為分支覆蓋,如判斷的取真分支和取假分支

21、至少經(jīng)歷一次。判定覆蓋又稱為分支覆蓋,如對于圖中給出的例子,如果選擇路徑對于圖中給出的例子,如果選擇路徑L1L1和和L2L2,可得滿足要求的測試用例:,可得滿足要求的測試用例: 【(2 2,0 0,4 4),(),(2 2,0 0,3 3)】覆蓋覆蓋aceace【L1L1】 【(1 1,1 1,1 1),(),(1 1,1 1,1 1)】覆蓋覆蓋abdabd【L2L2】如果選擇路徑如果選擇路徑L3L3和和L4L4,還可得另一組可用的測試用例:,還可得另一組可用的測試用例: 【(2 2,1 1,1 1),(),(2 2,1 1,2 2)】覆蓋覆蓋abeabe【L3L3】 【(3 3,0 0,3

22、3),(),(3 3,1 1,1 1)】覆蓋覆蓋acdacd【L4L4】所以,測試用例的取法不唯一。注意有例外情形,例如,若把圖中第所以,測試用例的取法不唯一。注意有例外情形,例如,若把圖中第2 2個個判斷中的條件判斷中的條件x x1 1錯寫成錯寫成x x1 1,那么利用上面兩組測試用例,仍能得到同,那么利用上面兩組測試用例,仍能得到同樣結(jié)果。這表明,只是判定覆蓋,還不能保證一定能查出在判斷的條件中樣結(jié)果。這表明,只是判定覆蓋,還不能保證一定能查出在判斷的條件中存在的錯誤,因此,還需要更強的邏輯覆蓋準(zhǔn)則檢驗判斷內(nèi)部條件。存在的錯誤,因此,還需要更強的邏輯覆蓋準(zhǔn)則檢驗判斷內(nèi)部條件。6.2 白盒測

23、試的測試用例設(shè)計 判定覆蓋判定覆蓋 所謂所謂條件覆蓋條件覆蓋就是設(shè)計若干個測試用例,運行被測程序,使就是設(shè)計若干個測試用例,運行被測程序,使得程序中每個判斷的每個條件的可能取值至少執(zhí)行一次。例得程序中每個判斷的每個條件的可能取值至少執(zhí)行一次。例如,在上圖所給出的例子中,我們事先可對所有條件的取值如,在上圖所給出的例子中,我們事先可對所有條件的取值加以標(biāo)記。例如,對于第加以標(biāo)記。例如,對于第1 1個判斷:個判斷: 條件條件A A1 1取真值為取真值為T1T1,取假值為,取假值為 條件條件B B0 0取真值為取真值為T2T2,取假值為,取假值為對于第對于第2 2個判斷:個判斷: 條件條件A A2

24、2取真值為取真值為T3T3,取假值為,取假值為 條件條件x x1 1取真值為取真值為T4T4,取假值為,取假值為則可選取測試用例如下:則可選取測試用例如下:6.2 白盒測試的測試用例設(shè)計 條件覆蓋條件覆蓋 T1T2T3T46.2 白盒測試的測試用例設(shè)計注意,前一組測試用例不但覆蓋了所有判斷的取真分支和取注意,前一組測試用例不但覆蓋了所有判斷的取真分支和取假分支,而且覆蓋了判斷中所有條件的可能取值。后一組測假分支,而且覆蓋了判斷中所有條件的可能取值。后一組測試用例雖滿足了條件覆蓋,但只覆蓋了第試用例雖滿足了條件覆蓋,但只覆蓋了第1 1個判斷的取假分個判斷的取假分支和第支和第2 2個判斷的取真分支

25、,不滿足判定覆蓋的要求。為解個判斷的取真分支,不滿足判定覆蓋的要求。為解決這一矛盾,需要對條件和分支兼顧,有必要考慮以下的判決這一矛盾,需要對條件和分支兼顧,有必要考慮以下的判定定條件覆蓋。條件覆蓋。6.2 白盒測試的測試用例設(shè)計所謂所謂判定判定- -條件覆蓋條件覆蓋就是設(shè)計足夠的測試用例,使得判斷中就是設(shè)計足夠的測試用例,使得判斷中每個條件的所有可能取值至少執(zhí)行一次,同時每個判斷本身每個條件的所有可能取值至少執(zhí)行一次,同時每個判斷本身的所有可能判斷結(jié)果至少執(zhí)行一次。例如,對于圖中的各判的所有可能判斷結(jié)果至少執(zhí)行一次。例如,對于圖中的各判斷,若斷,若T1T1,T2T2,T3T3,T4T4及及

26、的含義如前所述,則的含義如前所述,則只需設(shè)計以下兩個測試用例便可覆蓋圖中的只需設(shè)計以下兩個測試用例便可覆蓋圖中的8 8個條件取值以個條件取值以及及4 4個判斷分支。個判斷分支。 判定判定-條件覆蓋條件覆蓋 T1,T2,T3,T46.2 白盒測試的測試用例設(shè)計判定判定-條件覆蓋也有缺陷。從表面上來看,它測試了所有條條件覆蓋也有缺陷。從表面上來看,它測試了所有條件的取值,但是事實并非如此,因為往往某些條件掩蓋了另件的取值,但是事實并非如此,因為往往某些條件掩蓋了另一些條件。對于條件表達式(一些條件。對于條件表達式(A1)and(B=0)來說,若)來說,若(A1)的測試結(jié)果為真,則還要測試()的測試

27、結(jié)果為真,則還要測試(B=0),才能決定),才能決定表達式的值;而若(表達式的值;而若(A1)的測試結(jié)果為假,可以立刻確)的測試結(jié)果為假,可以立刻確定表達式的結(jié)果為假,這時,往往就不再測試(定表達式的結(jié)果為假,這時,往往就不再測試(B=0)的?。┑娜≈盗?,因此,條件(值了,因此,條件(B=0)就沒有檢查。同樣,對于條件表)就沒有檢查。同樣,對于條件表達式(達式(A=2)or(X1)來說,若()來說,若(A=2)的測試結(jié)果為)的測試結(jié)果為真,就可以立即確定表達式的結(jié)果為真,這時,條件(真,就可以立即確定表達式的結(jié)果為真,這時,條件(X1)就沒有檢查,因此,采用判定)就沒有檢查,因此,采用判定-條

28、件覆蓋,邏輯表達式條件覆蓋,邏輯表達式中的錯誤不一定能夠查得出來。中的錯誤不一定能夠查得出來。6.2 白盒測試的測試用例設(shè)計為徹底地檢查所有條件的取值,可以將上圖中給出的多重條為徹底地檢查所有條件的取值,可以將上圖中給出的多重條件判定分解,形成下圖所示的由多個基本判斷組成的流程件判定分解,形成下圖所示的由多個基本判斷組成的流程圖。這樣可以有效地檢查所有的條件是否正確。圖。這樣可以有效地檢查所有的條件是否正確。6.2 白盒測試的測試用例設(shè)計 條件組合覆蓋條件組合覆蓋 T2T1T1T2T4 6.2 白盒測試的測試用例設(shè)計T3T3T4 6.2 白盒測試的測試用例設(shè)計 路徑測試路徑測試 6.3 基本路

29、徑測試 6.3 基本路徑測試6.3 基本路徑測試 利用第五章介紹的符號和構(gòu)造規(guī)則生成控制流圖。對于利用第五章介紹的符號和構(gòu)造規(guī)則生成控制流圖。對于以上用以上用PDL描述的描述的averagy過程過程 ,對將要映射為對應(yīng)控制,對將要映射為對應(yīng)控制流圖中一個結(jié)點的流圖中一個結(jié)點的PDL語句或語句組,加上用數(shù)字表示的語句或語句組,加上用數(shù)字表示的標(biāo)號。加了標(biāo)號的標(biāo)號。加了標(biāo)號的PDL程序及對應(yīng)的控制流圖如下所示。程序及對應(yīng)的控制流圖如下所示。 6.3 基本路徑測試6.3 基本路徑測試averagyaveragy過程的控制流圖過程的控制流圖 對對averagyaveragy過程定義結(jié)點過程定義結(jié)點 6

30、.3 基本路徑測試2. 由過程描述導(dǎo)出控制流圖由過程描述導(dǎo)出控制流圖 利用在前面給出的計算控制流圖環(huán)路復(fù)雜性的方法,算利用在前面給出的計算控制流圖環(huán)路復(fù)雜性的方法,算出控制流圖出控制流圖G的環(huán)路復(fù)雜性。如果一開始就知道判斷結(jié)點的環(huán)路復(fù)雜性。如果一開始就知道判斷結(jié)點的個數(shù),甚至不必畫出整個控制流圖,就可以計算出該圖的個數(shù),甚至不必畫出整個控制流圖,就可以計算出該圖的環(huán)路復(fù)雜性的值。對于以上控制流圖,可以算出:的環(huán)路復(fù)雜性的值。對于以上控制流圖,可以算出: V(G)=6(區(qū)域數(shù))(區(qū)域數(shù))=5(判定結(jié)點數(shù))(判定結(jié)點數(shù))+1=63. 確定線性無關(guān)的基本路徑集確定線性無關(guān)的基本路徑集 計算出的環(huán)路復(fù)

31、雜性的值,就是該圖已有的線性無關(guān)基計算出的環(huán)路復(fù)雜性的值,就是該圖已有的線性無關(guān)基本路徑集中路徑的數(shù)目。該圖所有的本路徑集中路徑的數(shù)目。該圖所有的6條路徑是:條路徑是: path1:1-2-10-11-13 path2:1-2-10-12-13 path3:1-2-3-10-11-13 path4:1-2-3-4-5-8-9-2 path5:1-2-3-4-5-6-8-9-2 path6:1-2-3-4-5-6-7-8-9-2路徑路徑4、5、6后面的省略號(后面的省略號()表示在控制結(jié)構(gòu)中以后)表示在控制結(jié)構(gòu)中以后剩下的路徑是可選擇的。在很多情況下,標(biāo)識判斷結(jié)點,常剩下的路徑是可選擇的。在很多

32、情況下,標(biāo)識判斷結(jié)點,常常能夠有效地幫助導(dǎo)出測試用例。在上例中,結(jié)點常能夠有效地幫助導(dǎo)出測試用例。在上例中,結(jié)點2、3、5、6和和10都是判斷結(jié)點。都是判斷結(jié)點。 6.3 基本路徑測試6.3 基本路徑測試4. 準(zhǔn)備測試用例,確保基本路徑集中的每一條路徑的執(zhí)行準(zhǔn)備測試用例,確保基本路徑集中的每一條路徑的執(zhí)行 根據(jù)判斷結(jié)點給出的條件,選擇適當(dāng)?shù)臄?shù)據(jù)以保證某一條根據(jù)判斷結(jié)點給出的條件,選擇適當(dāng)?shù)臄?shù)據(jù)以保證某一條路徑可以被測試到。滿足上例基本路徑集的測試用例如下。路徑可以被測試到。滿足上例基本路徑集的測試用例如下。 path1:輸入數(shù)據(jù):輸入數(shù)據(jù):valuek=有效輸入,限于有效輸入,限于ki(i定義

33、如下)定義如下) valuei=999, 當(dāng)當(dāng)2i100 預(yù)期結(jié)果:預(yù)期結(jié)果:n個值的正確的平均值、正確的總計數(shù)。個值的正確的平均值、正確的總計數(shù)。 注意:不能孤立地進行測試,應(yīng)當(dāng)作為路徑注意:不能孤立地進行測試,應(yīng)當(dāng)作為路徑4、5、6測試的一測試的一 部分來測試。部分來測試。 path2:輸入數(shù)據(jù):輸入數(shù)據(jù):value1=999 預(yù)期結(jié)果:平均值預(yù)期結(jié)果:平均值=999,總計數(shù)取初始值。,總計數(shù)取初始值。 path3:輸入數(shù)據(jù):試圖處理:輸入數(shù)據(jù):試圖處理101個或更多的值,而前個或更多的值,而前100個應(yīng)當(dāng)是有個應(yīng)當(dāng)是有 效的值。效的值。 預(yù)期結(jié)果:與測試用例預(yù)期結(jié)果:與測試用例1相同。相

34、同。 6.3 基本路徑測試 path4:輸入數(shù)據(jù):輸入數(shù)據(jù):valuei=有效輸入,且有效輸入,且i100 valuek最小值,當(dāng)最小值,當(dāng)ki時時 預(yù)期結(jié)果:預(yù)期結(jié)果:n個值的正確的平均值,正確的總計數(shù)個值的正確的平均值,正確的總計數(shù) path5:輸入數(shù)據(jù):輸入數(shù)據(jù):valuei=有效輸入,且有效輸入,且i最大值,當(dāng)最大值,當(dāng)ki時時 預(yù)期結(jié)果:預(yù)期結(jié)果:n個值的正確的平均值,正確的總計數(shù)個值的正確的平均值,正確的總計數(shù) path6:輸入數(shù)據(jù):輸入數(shù)據(jù):valuei=有效輸入,且有效輸入,且i100 預(yù)期結(jié)果:預(yù)期結(jié)果:n個值的正確的平均值,正確的總計數(shù)個值的正確的平均值,正確的總計數(shù) 每個

35、測試用例執(zhí)行之后,與預(yù)期結(jié)果進行比較。如果所有每個測試用例執(zhí)行之后,與預(yù)期結(jié)果進行比較。如果所有測試用例都執(zhí)行完畢,則可以確信程序中所有的可執(zhí)行語句測試用例都執(zhí)行完畢,則可以確信程序中所有的可執(zhí)行語句至少被執(zhí)行了一次。但是必須注意的是,一些獨立的路徑至少被執(zhí)行了一次。但是必須注意的是,一些獨立的路徑(如此例中的路徑(如此例中的路徑1),往往不是完全孤立的,有時它是程序),往往不是完全孤立的,有時它是程序正常的控制流的一部分,這時,這些路徑的測試可以是另一正常的控制流的一部分,這時,這些路徑的測試可以是另一條路徑測試的一部分。條路徑測試的一部分。 5. 圖形矩陣圖形矩陣 圖形矩陣圖形矩陣是在基本

36、路徑測試中起輔助作用的軟件工具,是在基本路徑測試中起輔助作用的軟件工具,利用它可以實現(xiàn)自動地確定一個基本路徑集。一個圖形矩利用它可以實現(xiàn)自動地確定一個基本路徑集。一個圖形矩陣是一個方陣,其行陣是一個方陣,其行/列數(shù)等于控制流圖中的結(jié)點數(shù)。每行列數(shù)等于控制流圖中的結(jié)點數(shù)。每行和每列依次對應(yīng)到一個被標(biāo)識的結(jié)點,矩陣元素對應(yīng)到結(jié)和每列依次對應(yīng)到一個被標(biāo)識的結(jié)點,矩陣元素對應(yīng)到結(jié)點間的連接(即邊)。下圖所示為一個簡單的控制流圖點間的連接(即邊)。下圖所示為一個簡單的控制流圖和它所對應(yīng)的圖形矩陣。在此圖中,控制流圖的每一個結(jié)和它所對應(yīng)的圖形矩陣。在此圖中,控制流圖的每一個結(jié)點都用數(shù)字加以標(biāo)識,每一條邊都

37、用字母加以標(biāo)識。如果點都用數(shù)字加以標(biāo)識,每一條邊都用字母加以標(biāo)識。如果在控制流圖中第在控制流圖中第i個結(jié)點到第個結(jié)點到第j個結(jié)點有一條名為個結(jié)點有一條名為x的邊相連的邊相連接,則在對應(yīng)的圖形矩陣中第接,則在對應(yīng)的圖形矩陣中第i行行/第第j列有一個非空的元素列有一個非空的元素x。 6.3 基本路徑測試在控制流圖中對每一條邊加上一個連接權(quán),圖形矩陣就成為測試過程在控制流圖中對每一條邊加上一個連接權(quán),圖形矩陣就成為測試過程中評價程序控制結(jié)構(gòu)的工具。連接權(quán)提供了關(guān)于控制流的附加信息。中評價程序控制結(jié)構(gòu)的工具。連接權(quán)提供了關(guān)于控制流的附加信息。最簡單的情形,連接權(quán)為最簡單的情形,連接權(quán)為“1”,表示存在

38、一個連接,或者為,表示存在一個連接,或者為“0”,表,表示示不存在一個連接。但在其他情況,連接權(quán)可以表示如下特性:連接不存在一個連接。但在其他情況,連接權(quán)可以表示如下特性:連接(邊)執(zhí)行的可能性(概率)、通過一個連接需花費的時間、在通過(邊)執(zhí)行的可能性(概率)、通過一個連接需花費的時間、在通過一個連接時所需的存儲、在通過一個連接時所需的資源一個連接時所需的存儲、在通過一個連接時所需的資源。6.3 基本路徑測試 為了舉例說明,用最簡單的權(quán)限(為了舉例說明,用最簡單的權(quán)限(0或者或者1)來表明連接。下圖為上)來表明連接。下圖為上圖圖形矩陣改畫后的結(jié)果。每個字母用圖圖形矩陣改畫后的結(jié)果。每個字母用

39、“1”取代,表明存在一個連接。取代,表明存在一個連接。在圖中,在圖中,“0”未畫出。采用這種表示時,圖形矩陣稱為連接矩陣。未畫出。采用這種表示時,圖形矩陣稱為連接矩陣。 圖中,若一行有圖中,若一行有2個或更多的元素,則這行所代表的結(jié)點一定是判定個或更多的元素,則這行所代表的結(jié)點一定是判定結(jié)點。因而通過計算排列在連接矩陣右邊的算式,可以得到確定該圖環(huán)結(jié)點。因而通過計算排列在連接矩陣右邊的算式,可以得到確定該圖環(huán)路復(fù)雜性的另一種方法。路復(fù)雜性的另一種方法。 6.3 基本路徑測試等價類劃分是一種典型的黑盒測試方法,也是一種非常實等價類劃分是一種典型的黑盒測試方法,也是一種非常實用的重要測試方法用的重

40、要測試方法,它是用來解決如何選擇適當(dāng)?shù)淖蛹顾怯脕斫鉀Q如何選擇適當(dāng)?shù)淖蛹?,使其盡可能多地發(fā)現(xiàn)錯誤。使用這一方法設(shè)計測試用例要經(jīng)其盡可能多地發(fā)現(xiàn)錯誤。使用這一方法設(shè)計測試用例要經(jīng)歷劃分等價類(列出等價類表)和選取測試用例兩步。歷劃分等價類(列出等價類表)和選取測試用例兩步。1. 劃分等價類劃分等價類 所謂所謂等價類等價類是指某個輸入域的子集合。在該子集合中,是指某個輸入域的子集合。在該子集合中,各個輸入數(shù)據(jù)對于揭露程序中的錯誤都是等效的,并合理各個輸入數(shù)據(jù)對于揭露程序中的錯誤都是等效的,并合理地假定:測試某等價類的代表值等價于對這一類其他值的地假定:測試某等價類的代表值等價于對這一類其他值的

41、測試?;蛘哒f,如果某個等價類中的一個數(shù)據(jù)作為測試數(shù)測試。或者說,如果某個等價類中的一個數(shù)據(jù)作為測試數(shù)據(jù)進行測試查出了錯誤,那么使用這一等價類中的其他數(shù)據(jù)進行測試查出了錯誤,那么使用這一等價類中的其他數(shù)6.4 黑盒測試的測試用例設(shè)計 等價類劃分等價類劃分 據(jù)進行測試也會查出同樣的錯誤;反之,若使用某個等價類據(jù)進行測試也會查出同樣的錯誤;反之,若使用某個等價類中的一個數(shù)據(jù)作為測試數(shù)據(jù)進行測試沒有查出錯誤,則使中的一個數(shù)據(jù)作為測試數(shù)據(jù)進行測試沒有查出錯誤,則使用這個等價類中的其他數(shù)據(jù)也同樣查不出錯誤。用這個等價類中的其他數(shù)據(jù)也同樣查不出錯誤。 等價類的劃分有兩種不同的情況。等價類的劃分有兩種不同的情

42、況。 (1)有效等價類:是指對于程序的規(guī)格說明來說,是合理)有效等價類:是指對于程序的規(guī)格說明來說,是合理 的、有意義的輸入數(shù)據(jù)構(gòu)成的集合。利用它,可以檢的、有意義的輸入數(shù)據(jù)構(gòu)成的集合。利用它,可以檢 驗程序是否實現(xiàn)了規(guī)格說明預(yù)先規(guī)定的功能和性能。驗程序是否實現(xiàn)了規(guī)格說明預(yù)先規(guī)定的功能和性能。 (2)無效等價類:是指對于程序的規(guī)格說明來說,是不合)無效等價類:是指對于程序的規(guī)格說明來說,是不合 理的、無意義的輸入數(shù)據(jù)構(gòu)成的集合。程序員主要利理的、無意義的輸入數(shù)據(jù)構(gòu)成的集合。程序員主要利 用這一類測試用例檢查程序中功能和性能的實現(xiàn)是否用這一類測試用例檢查程序中功能和性能的實現(xiàn)是否 有不符合規(guī)格說

43、明要求的地方。有不符合規(guī)格說明要求的地方。6.4 黑盒測試的測試用例設(shè)計在設(shè)計測試用例時,要同時考慮有效等價類和無效等價類的在設(shè)計測試用例時,要同時考慮有效等價類和無效等價類的設(shè)計。軟件不能都只接受合理的數(shù)據(jù),還要經(jīng)受意外的考設(shè)計。軟件不能都只接受合理的數(shù)據(jù),還要經(jīng)受意外的考驗,檢驗出無效的或不合理的數(shù)據(jù),這樣的軟件測試才是全驗,檢驗出無效的或不合理的數(shù)據(jù),這樣的軟件測試才是全面的。面的。以下結(jié)合具體實例給出幾條劃分等價類的原則。以下結(jié)合具體實例給出幾條劃分等價類的原則。(1)如果輸入數(shù)據(jù)規(guī)定了取值范圍或值的個數(shù),則可以確)如果輸入數(shù)據(jù)規(guī)定了取值范圍或值的個數(shù),則可以確 定一個有效等價類和兩個

44、無效等價類。例如,在程序定一個有效等價類和兩個無效等價類。例如,在程序 的規(guī)格說明中,對輸入數(shù)據(jù)有一句話:的規(guī)格說明中,對輸入數(shù)據(jù)有一句話: “項數(shù)可以從項數(shù)可以從1到到999” 則有效等價類是則有效等價類是“1項數(shù)項數(shù)999”,兩個無效等價類是,兩個無效等價類是 “項數(shù)項數(shù)999”。在數(shù)軸上表示為。在數(shù)軸上表示為6.4 黑盒測試的測試用例設(shè)計 無效等價類| 有效等價類| 無效等價類 1 999 (2)如果規(guī)格說明規(guī)定了數(shù)據(jù)值的集合,或者是規(guī)定了)如果規(guī)格說明規(guī)定了數(shù)據(jù)值的集合,或者是規(guī)定了 “必須如何必須如何”的條件,這時可確定一個有效等價類和的條件,這時可確定一個有效等價類和一一 個無效等

45、價類。例如,在個無效等價類。例如,在PASCAL語言中對變量標(biāo)識語言中對變量標(biāo)識 符規(guī)定為符規(guī)定為“以字母打頭的以字母打頭的串串”,那么所有以字母,那么所有以字母打打 頭的串構(gòu)成有效等價類,而不在此集合內(nèi)(不以字母頭的串構(gòu)成有效等價類,而不在此集合內(nèi)(不以字母 打打 頭)的串歸于無效等價類。頭)的串歸于無效等價類。(3)如果規(guī)格說明中規(guī)定的是一個條件數(shù)據(jù),則可確定一)如果規(guī)格說明中規(guī)定的是一個條件數(shù)據(jù),則可確定一 個有效等價類和一個無效等價類。例如:個有效等價類和一個無效等價類。例如:“成人成人 (年滿(年滿18歲)須歲)須”,則考慮成人為一有效等價類;,則考慮成人為一有效等價類; 未滿未滿1

46、8歲者為無效等價類。歲者為無效等價類。(4)如果我們確知,已劃分的等價類中各元素在程序中的)如果我們確知,已劃分的等價類中各元素在程序中的 處理方式不同,則應(yīng)將此等價類進一步劃分成更小的處理方式不同,則應(yīng)將此等價類進一步劃分成更小的 等價類。等價類。 6.4 黑盒測試的測試用例設(shè)計2. 確定測試用例確定測試用例 在確定了等價類之后,建立等價類表,列出所有劃分出的在確定了等價類之后,建立等價類表,列出所有劃分出的 等價類如下:等價類如下: 6.4 黑盒測試的測試用例設(shè)計再從劃分出的等價類中按以下原則選擇測試用例。再從劃分出的等價類中按以下原則選擇測試用例。(1)為每一個等價類規(guī)定一個唯一的編號。

47、)為每一個等價類規(guī)定一個唯一的編號。(2)設(shè)計一個新的測試用例,使其盡可能多地覆蓋尚未被)設(shè)計一個新的測試用例,使其盡可能多地覆蓋尚未被 覆蓋的有效等價類,重復(fù)這一步,直到所有的有效等覆蓋的有效等價類,重復(fù)這一步,直到所有的有效等 價類都被覆蓋為止。價類都被覆蓋為止。(3)設(shè)計一個新的測試用例,使其僅覆蓋一個尚未被覆蓋)設(shè)計一個新的測試用例,使其僅覆蓋一個尚未被覆蓋 的無效等價類,重復(fù)這一步,直到所有的無效等價類的無效等價類,重復(fù)這一步,直到所有的無效等價類 都被覆蓋為止。都被覆蓋為止。上述原則中,(上述原則中,(2)完全是為了把測試工作量減到最小,)完全是為了把測試工作量減到最小,(3)則可

48、把多個錯誤分開。例如,學(xué)校領(lǐng)導(dǎo)分為校長、副)則可把多個錯誤分開。例如,學(xué)校領(lǐng)導(dǎo)分為校長、副校長、書記、副書記,年齡(校長、書記、副書記,年齡(AGE)在)在25AGE75。若。若給出一個無效等價類的測試用例為(婦聯(lián)主任,給出一個無效等價類的測試用例為(婦聯(lián)主任,5歲),它歲),它覆蓋了兩個錯誤的輸入條件(職務(wù),年齡),但當(dāng)程序檢覆蓋了兩個錯誤的輸入條件(職務(wù),年齡),但當(dāng)程序檢查到職務(wù)時發(fā)現(xiàn)了錯誤,就可能不再去檢查年齡錯誤,因查到職務(wù)時發(fā)現(xiàn)了錯誤,就可能不再去檢查年齡錯誤,因此必須針對每一個無效等價類,分別設(shè)計測試用例。此必須針對每一個無效等價類,分別設(shè)計測試用例。 6.4 黑盒測試的測試用例

49、設(shè)計6.4 黑盒測試的測試用例設(shè)計3. 用等價類劃分法設(shè)計測試用例的實例用等價類劃分法設(shè)計測試用例的實例 在某一在某一PASCAL語言版本中規(guī)定:語言版本中規(guī)定:“標(biāo)識符是由字母開頭、后跟字母標(biāo)識符是由字母開頭、后跟字母或數(shù)字的任意組合構(gòu)成。有效字符數(shù)為或數(shù)字的任意組合構(gòu)成。有效字符數(shù)為8個,最大字符數(shù)為個,最大字符數(shù)為80個。個?!辈⒉⑶乙?guī)定:且規(guī)定:“標(biāo)識符必須先說明,再使用。標(biāo)識符必須先說明,再使用?!薄啊薄霸谕徽f明語句中,標(biāo)識在同一說明語句中,標(biāo)識符至少必須有一個。符至少必須有一個?!?為用等價類劃分的方法得到上述規(guī)格說明所規(guī)定的要求,本著前述的為用等價類劃分的方法得到上述規(guī)格說明所

50、規(guī)定的要求,本著前述的劃分原則,建立輸入等價類表,如下表所示(表中括號中的數(shù)字為等價劃分原則,建立輸入等價類表,如下表所示(表中括號中的數(shù)字為等價類編號)。類編號)。 下面選取了下面選取了8個測試用例,它們覆蓋了所有的等價類。個測試用例,它們覆蓋了所有的等價類。 VAR x,T1234567:REAL; (1)()(2)()(4)()(7)()(8)()(11) (13) BEGIN x:=3.414;T1234567:=2.732; VAR :REAL; (3) VAR x,:,:REAL; (5) VAR T12345:REAL; (6)多于)多于80個字符個字符 VAR T $:CHAR

51、; (9) VAR GOTO:INTEGER; (10) VAR 2T:REAL; (12) VAR PAR:REAL; (14) BEGIN PAP:=SIN(3.14*0.8)/6; 6.4 黑盒測試的測試用例設(shè)計6.4 黑盒測試的測試用例設(shè)計 邊界值分析邊界值分析 1. 邊界值分析方法的考慮邊界值分析方法的考慮 邊界值分析邊界值分析也是一種黑盒測試方法,是對等價類劃分方法也是一種黑盒測試方法,是對等價類劃分方法的補充。人們從長期的測試工作經(jīng)驗中得知,大量的錯誤是的補充。人們從長期的測試工作經(jīng)驗中得知,大量的錯誤是發(fā)生在輸入或輸出范圍的邊界上,而不是在輸入范圍的內(nèi)部,發(fā)生在輸入或輸出范圍的

52、邊界上,而不是在輸入范圍的內(nèi)部,因此,針對各種邊界情況設(shè)計測試用例,可以查出許多容易因此,針對各種邊界情況設(shè)計測試用例,可以查出許多容易發(fā)生的錯誤。這里所說的邊界是指,相當(dāng)于輸入等價類和輸發(fā)生的錯誤。這里所說的邊界是指,相當(dāng)于輸入等價類和輸出等價類而言,稍高于其邊界值及稍低于其邊界值的一些特出等價類而言,稍高于其邊界值及稍低于其邊界值的一些特定情況。定情況。 使用邊界值分析方法設(shè)計測試用例,首先應(yīng)分析邊界情況。使用邊界值分析方法設(shè)計測試用例,首先應(yīng)分析邊界情況。通常輸入等價類與輸出等價類的邊界是需要認(rèn)真考慮的。應(yīng)通常輸入等價類與輸出等價類的邊界是需要認(rèn)真考慮的。應(yīng)當(dāng)選取正好等于、剛剛大于或剛剛

53、小于邊界的值作為測試數(shù)當(dāng)選取正好等于、剛剛大于或剛剛小于邊界的值作為測試數(shù)據(jù),而不是選取等價類中的典型值或任意值作為測試數(shù)據(jù)。據(jù),而不是選取等價類中的典型值或任意值作為測試數(shù)據(jù)。6.4 黑盒測試的測試用例設(shè)計2. 選擇測試用例的原則選擇測試用例的原則 (1)如果輸入數(shù)據(jù)規(guī)定了值的范圍,則應(yīng)取剛達到這個范圍的邊界)如果輸入數(shù)據(jù)規(guī)定了值的范圍,則應(yīng)取剛達到這個范圍的邊界 的值,以及剛剛超越這個范圍邊界的值作為測試輸入數(shù)據(jù)。例如,的值,以及剛剛超越這個范圍邊界的值作為測試輸入數(shù)據(jù)。例如, 若輸入值的范圍是若輸入值的范圍是“1.01.0”,則可選取,則可選取“1.0”,“1.0”, “1.001”,“

54、1.001”作為測試輸入數(shù)據(jù)。作為測試輸入數(shù)據(jù)。 (2)如果輸入數(shù)據(jù)規(guī)定了值的個數(shù),則用最大個數(shù)、最小個數(shù)、比)如果輸入數(shù)據(jù)規(guī)定了值的個數(shù),則用最大個數(shù)、最小個數(shù)、比 最大個數(shù)多最大個數(shù)多1、比最小個數(shù)少、比最小個數(shù)少1的數(shù)作為測試數(shù)據(jù)。例如,一個輸入的數(shù)作為測試數(shù)據(jù)。例如,一個輸入 文件有文件有1255個記錄,設(shè)計測試用例時則可以分別設(shè)計有個記錄,設(shè)計測試用例時則可以分別設(shè)計有1個記個記 錄、錄、255個記錄以及個記錄以及0個記錄和個記錄和256個記錄的輸入文件。個記錄的輸入文件。 (3)根據(jù)規(guī)格說明的每個輸出數(shù)據(jù),使用前面的原則()根據(jù)規(guī)格說明的每個輸出數(shù)據(jù),使用前面的原則(1)。例)。例

55、 如,某程序的功能是計算折扣量,最低折扣量是如,某程序的功能是計算折扣量,最低折扣量是0元,最高折扣量元,最高折扣量 是是1 050元,則設(shè)計一些測試用例,使它們恰好產(chǎn)生元,則設(shè)計一些測試用例,使它們恰好產(chǎn)生0元和元和1 050元元 的結(jié)果。此外,還可考慮設(shè)計結(jié)果為負(fù)值或大于的結(jié)果。此外,還可考慮設(shè)計結(jié)果為負(fù)值或大于1 050元的測試用元的測試用 例。由于輸入值的邊界不與輸出值的邊界相對應(yīng),所以要檢查輸出例。由于輸入值的邊界不與輸出值的邊界相對應(yīng),所以要檢查輸出 值的邊界不一定可能,要產(chǎn)生超出輸出值值域之外的結(jié)果也不一定值的邊界不一定可能,要產(chǎn)生超出輸出值值域之外的結(jié)果也不一定辦得到。盡管如此

56、,必要時還需一試。辦得到。盡管如此,必要時還需一試。(4)根據(jù)規(guī)格說明的每個輸出數(shù)據(jù),使用前面的原則()根據(jù)規(guī)格說明的每個輸出數(shù)據(jù),使用前面的原則(2)。例如,一)。例如,一個信息檢索系統(tǒng)根據(jù)用戶打入的命令,顯示有關(guān)文獻的摘要,但最多個信息檢索系統(tǒng)根據(jù)用戶打入的命令,顯示有關(guān)文獻的摘要,但最多只顯示只顯示4篇摘要。這時可設(shè)計一些測試用例,使得程序分別顯示篇摘要。這時可設(shè)計一些測試用例,使得程序分別顯示1篇、篇、4篇、篇、0篇摘要,并設(shè)計一個有可能使程序錯誤地顯示篇摘要,并設(shè)計一個有可能使程序錯誤地顯示5篇摘要的測試篇摘要的測試用例。用例。(5)如果程序的規(guī)格說明給出的輸入域或輸出域是有序集合(

57、如有序)如果程序的規(guī)格說明給出的輸入域或輸出域是有序集合(如有序表,順序文件等),則應(yīng)選取集合的第一個元素和最后一個元素作為表,順序文件等),則應(yīng)選取集合的第一個元素和最后一個元素作為測試用例。測試用例。(6)如果程序中使用了一個內(nèi)部數(shù)據(jù)結(jié)構(gòu),則應(yīng)當(dāng)選擇這個內(nèi)部數(shù)據(jù))如果程序中使用了一個內(nèi)部數(shù)據(jù)結(jié)構(gòu),則應(yīng)當(dāng)選擇這個內(nèi)部數(shù)據(jù)結(jié)構(gòu)的邊界上的值作為測試用例。例如,如果程序中定義了一個數(shù)組,結(jié)構(gòu)的邊界上的值作為測試用例。例如,如果程序中定義了一個數(shù)組,其元素下標(biāo)的下界是其元素下標(biāo)的下界是0,上界是,上界是100,那么應(yīng)選擇達到這個數(shù)組下標(biāo),那么應(yīng)選擇達到這個數(shù)組下標(biāo)邊界的值,如邊界的值,如0與與100

58、,作為測試用例。,作為測試用例。(7)分析規(guī)格說明,找出其他可能的邊界條件。)分析規(guī)格說明,找出其他可能的邊界條件。 6.4 黑盒測試的測試用例設(shè)計6.4 黑盒測試的測試用例設(shè)計3. 應(yīng)用邊界值分析方法設(shè)計測試用例的實例應(yīng)用邊界值分析方法設(shè)計測試用例的實例 假如一個為學(xué)生標(biāo)準(zhǔn)化假如一個為學(xué)生標(biāo)準(zhǔn)化考試批閱試卷、產(chǎn)生成績考試批閱試卷、產(chǎn)生成績報告的程序,程序的輸入報告的程序,程序的輸入文件由一些有文件由一些有80個字符的個字符的記錄(卡片)組成。輸入記錄(卡片)組成。輸入數(shù)據(jù)記錄格式如右圖所數(shù)據(jù)記錄格式如右圖所示。示。 把以上所有記錄分為把以上所有記錄分為3組組:(1)標(biāo)題。標(biāo)題。這一組只有一個

59、記錄,其內(nèi)容是成績報告的名字。這一組只有一個記錄,其內(nèi)容是成績報告的名字。(2)各題的標(biāo)準(zhǔn)答案。各題的標(biāo)準(zhǔn)答案。每個記錄均在第每個記錄均在第80個字符處標(biāo)以數(shù)字個字符處標(biāo)以數(shù)字“2”。該。該組組 的第的第1個記錄的第個記錄的第13個字符為試題數(shù)(取值為個字符為試題數(shù)(取值為1999)。第)。第 1059個字符給出第個字符給出第150題的標(biāo)準(zhǔn)答案(每個合法字符表示一個題的標(biāo)準(zhǔn)答案(每個合法字符表示一個 答案)。該組的第答案)。該組的第2、第、第3個記錄相應(yīng)為第個記錄相應(yīng)為第51100題、第題、第 101150題題題的標(biāo)準(zhǔn)答案。題的標(biāo)準(zhǔn)答案。(3)學(xué)生的答卷。學(xué)生的答卷。每個記錄均在第每個記錄均在

60、第80個字符處標(biāo)以數(shù)字個字符處標(biāo)以數(shù)字“3”,每個學(xué),每個學(xué)生生 的答卷在若干個記錄中給出。例如,某甲的首記錄第的答卷在若干個記錄中給出。例如,某甲的首記錄第19個字符個字符 給出學(xué)生的學(xué)號,第給出學(xué)生的學(xué)號,第1059個字符列出的是某甲所作的第個字符列出的是某甲所作的第150題題 的解答。若試題數(shù)超過的解答。若試題數(shù)超過50,則其第,則其第2、第、第3個記錄分別給出的個記錄分別給出的 第第51100題、第題、第101150題的解答。然后是某乙的答卷記題的解答。然后是某乙的答卷記 錄。學(xué)生人數(shù)不超過錄。學(xué)生人數(shù)不超過200人,試題個數(shù)不超過人,試題個數(shù)不超過999。程序的輸出有。程序的輸出有4

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論