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

下載本文檔

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

文檔簡介

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

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

3、,則希望測試成為表明從軟件開發(fā)者的角度出發(fā),則希望測試成為表明軟件產(chǎn)品中不存在錯(cuò)誤的過程,驗(yàn)證該軟件已正軟件產(chǎn)品中不存在錯(cuò)誤的過程,驗(yàn)證該軟件已正確地實(shí)現(xiàn)了用戶的要求,確立人們對軟件質(zhì)量的確地實(shí)現(xiàn)了用戶的要求,確立人們對軟件質(zhì)量的信心。信心。6.1 軟件測試的基本概念 Grenford J.Myers就就軟件測試目的軟件測試目的提出了提出了以下觀點(diǎn)。以下觀點(diǎn)。 6.1 軟件測試的基本概念根據(jù)以上測試目的,根據(jù)以上測試目的,軟件測試的原則軟件測試的原則如下:如下:(1 1)應(yīng)當(dāng)把)應(yīng)當(dāng)把“盡早地和不斷地進(jìn)行軟件測試盡早地和不斷地進(jìn)行軟件測試”作作 為軟件開發(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è)計(jì)測試用例時(shí),應(yīng)當(dāng)包括合理的輸入條)在設(shè)計(jì)測試用例時(shí),應(yīng)當(dāng)包括合理的輸入條 件和不合理的輸入條件。件和不合理的輸入條件。(5 5)充分注意測試中的群集現(xiàn)象。)充分注意測試中的群集現(xiàn)象。 (6 6)嚴(yán)格執(zhí)行測試計(jì)劃,排除測試的隨意性。)嚴(yán)格執(zhí)行測試計(jì)劃,排除測試的隨意性。 (7 7)應(yīng)當(dāng)對每一個(gè)測試結(jié)果作全面檢查。)應(yīng)當(dāng)對每一個(gè)測試結(jié)果作全面檢查。(8 8)妥善保存測試計(jì)劃、測試用

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

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

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

8、后從系統(tǒng)全體出發(fā),運(yùn)行系統(tǒng),看是否滿足要求。行系統(tǒng),看是否滿足要求。 6.1 軟件測試的基本概念1. 1. 黑盒測試黑盒測試 黑盒測試黑盒測試是把測試對象看做一個(gè)黑盒子,測試人員完是把測試對象看做一個(gè)黑盒子,測試人員完 全不考慮程序內(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)錯(cuò)誤或外部信息(例如數(shù)據(jù)文件果?是否有數(shù)據(jù)結(jié)構(gòu)錯(cuò)誤或外部信息(例如數(shù)據(jù)文件)訪問錯(cuò)誤?性能上是否能夠滿足要求?是否有初始)訪問錯(cuò)誤?性能上是否能夠滿足要求?是否有初始化或終止性錯(cuò)誤?所以,用黑盒測試發(fā)現(xiàn)程序中的錯(cuò)化或終止性錯(cuò)誤?所以,用黑盒測試發(fā)現(xiàn)程序中的錯(cuò)誤,必須在所有可能的輸入條件和輸出條件中確定測誤,必須在所有可能的輸入條件和輸出條件中確定測試數(shù)據(jù),檢查程序是否都能產(chǎn)生正確的輸出。試數(shù)據(jù),檢查程序是否都能產(chǎn)生正確的輸出。6.1 軟件測試的基本概念 白盒測試與黑盒測試白盒測試與黑盒測試 現(xiàn)在假設(shè)一個(gè)程序現(xiàn)在假設(shè)一個(gè)程序P有輸入量有輸入量X和和Y及輸出及輸出量

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

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

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

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

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

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

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

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

18、。條不同的路徑。為了清楚起見,分別對第為了清楚起見,分別對第1 1個(gè)判斷的個(gè)判斷的取假分支、取真分支及第取假分支、取真分支及第2 2個(gè)判斷的個(gè)判斷的取假分支、取真分支命名為取假分支、取真分支命名為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è)計(jì) 語句覆蓋語句覆蓋 所謂所謂語句覆蓋語句覆蓋就是設(shè)計(jì)若干個(gè)測試用例,運(yùn)行被測程序,使得每一個(gè)

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

20、(),(2 2,0 0,3 3)】覆蓋覆蓋aceace【L1L1】 從程序中每個(gè)可執(zhí)行語句都得到執(zhí)行這一點(diǎn)來看,語句覆蓋的方從程序中每個(gè)可執(zhí)行語句都得到執(zhí)行這一點(diǎn)來看,語句覆蓋的方 法似乎能夠比較全面地檢驗(yàn)每一個(gè)可執(zhí)行語句。但與后面介紹的法似乎能夠比較全面地檢驗(yàn)每一個(gè)可執(zhí)行語句。但與后面介紹的 其他覆蓋相比,語句覆蓋是最弱的邏輯覆蓋準(zhǔn)則。其他覆蓋相比,語句覆蓋是最弱的邏輯覆蓋準(zhǔn)則。所謂所謂判定覆蓋判定覆蓋就是設(shè)計(jì)若干個(gè)測試用例,運(yùn)行被測程序,使得程序中每個(gè)就是設(shè)計(jì)若干個(gè)測試用例,運(yùn)行被測程序,使得程序中每個(gè)判斷的取真分支和取假分支至少經(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個(gè)個(gè)判斷中的條件判斷中的條件x x1 1錯(cuò)寫成錯(cuò)寫成x x1 1,那么利用上面兩組測試用例,仍能得到同,那么利用上面兩組測試用例,仍能得到同樣結(jié)果。這表明,只是判定覆蓋,還不能保證一定能查出在判斷的條件中樣結(jié)果。這表明,只是判定覆蓋,還不能保證一定能查出在判斷的條件中存在的錯(cuò)誤,因此,還需要更強(qiáng)的邏輯覆蓋準(zhǔn)則檢驗(yàn)判斷內(nèi)部條件。存在的錯(cuò)誤,因此,還需要更強(qiáng)的邏輯覆蓋準(zhǔn)則檢驗(yàn)判斷內(nèi)部條件。6.2 白盒測

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

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

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

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

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

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

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

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

31、雜性的值,就是該圖已有的線性無關(guān)基計(jì)算出的環(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é)點(diǎn),常剩下的路徑是可選擇的。在很多

32、情況下,標(biāo)識判斷結(jié)點(diǎn),常常能夠有效地幫助導(dǎo)出測試用例。在上例中,結(jié)點(diǎn)常能夠有效地幫助導(dǎo)出測試用例。在上例中,結(jié)點(diǎn)2、3、5、6和和10都是判斷結(jié)點(diǎn)。都是判斷結(jié)點(diǎn)。 6.3 基本路徑測試6.3 基本路徑測試4. 準(zhǔn)備測試用例,確保基本路徑集中的每一條路徑的執(zhí)行準(zhǔn)備測試用例,確保基本路徑集中的每一條路徑的執(zhí)行 根據(jù)判斷結(jié)點(diǎn)給出的條件,選擇適當(dāng)?shù)臄?shù)據(jù)以保證某一條根據(jù)判斷結(jié)點(diǎn)給出的條件,選擇適當(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個(gè)值的正確的平均值、正確的總計(jì)數(shù)。個(gè)值的正確的平均值、正確的總計(jì)數(shù)。 注意:不能孤立地進(jìn)行測試,應(yīng)當(dāng)作為路徑注意:不能孤立地進(jìn)行測試,應(yīng)當(dāng)作為路徑4、5、6測試的一測試的一 部分來測試。部分來測試。 path2:輸入數(shù)據(jù):輸入數(shù)據(jù):value1=999 預(yù)期結(jié)果:平均值預(yù)期結(jié)果:平均值=999,總計(jì)數(shù)取初始值。,總計(jì)數(shù)取初始值。 path3:輸入數(shù)據(jù):試圖處理:輸入數(shù)據(jù):試圖處理101個(gè)或更多的值,而前個(gè)或更多的值,而前100個(gè)應(yīng)當(dāng)是有個(gè)應(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時(shí)時(shí) 預(yù)期結(jié)果:預(yù)期結(jié)果:n個(gè)值的正確的平均值,正確的總計(jì)數(shù)個(gè)值的正確的平均值,正確的總計(jì)數(shù) path5:輸入數(shù)據(jù):輸入數(shù)據(jù):valuei=有效輸入,且有效輸入,且i最大值,當(dāng)最大值,當(dāng)ki時(shí)時(shí) 預(yù)期結(jié)果:預(yù)期結(jié)果:n個(gè)值的正確的平均值,正確的總計(jì)數(shù)個(gè)值的正確的平均值,正確的總計(jì)數(shù) path6:輸入數(shù)據(jù):輸入數(shù)據(jù):valuei=有效輸入,且有效輸入,且i100 預(yù)期結(jié)果:預(yù)期結(jié)果:n個(gè)值的正確的平均值,正確的總計(jì)數(shù)個(gè)值的正確的平均值,正確的總計(jì)數(shù) 每個(gè)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

50、規(guī)定的要求,本著前述的劃分原則,建立輸入等價(jià)類表,如下表所示(表中括號中的數(shù)字為等價(jià)劃分原則,建立輸入等價(jià)類表,如下表所示(表中括號中的數(shù)字為等價(jià)類編號)。類編號)。 下面選取了下面選取了8個(gè)測試用例,它們覆蓋了所有的等價(jià)類。個(gè)測試用例,它們覆蓋了所有的等價(jià)類。 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個(gè)字符個(gè)字符 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è)計(jì)6.4 黑盒測試的測試用例設(shè)計(jì) 邊界值分析邊界值分析 1. 邊界值分析方法的考慮邊界值分析方法的考慮 邊界值分析邊界值分析也是一種黑盒測試方法,是對等價(jià)類劃分方法也是一種黑盒測試方法,是對等價(jià)類劃分方法的補(bǔ)充。人們從長期的測試工作經(jīng)驗(yàn)中得知,大量的錯(cuò)誤是的補(bǔ)充。人們從長期的測試工作經(jīng)驗(yàn)中得知,大量的錯(cuò)誤是發(fā)生在輸入或輸出范圍的邊界上,而不是在輸入范圍的內(nèi)部,發(fā)生在輸入或輸出范圍的

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

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

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

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

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

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

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

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

60、第80個(gè)字符處標(biāo)以數(shù)字個(gè)字符處標(biāo)以數(shù)字“3”,每個(gè)學(xué),每個(gè)學(xué)生生 的答卷在若干個(gè)記錄中給出。例如,某甲的首記錄第的答卷在若干個(gè)記錄中給出。例如,某甲的首記錄第19個(gè)字符個(gè)字符 給出學(xué)生的學(xué)號,第給出學(xué)生的學(xué)號,第1059個(gè)字符列出的是某甲所作的第個(gè)字符列出的是某甲所作的第150題題 的解答。若試題數(shù)超過的解答。若試題數(shù)超過50,則其第,則其第2、第、第3個(gè)記錄分別給出的個(gè)記錄分別給出的 第第51100題、第題、第101150題的解答。然后是某乙的答卷記題的解答。然后是某乙的答卷記 錄。學(xué)生人數(shù)不超過錄。學(xué)生人數(shù)不超過200人,試題個(gè)數(shù)不超過人,試題個(gè)數(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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論