




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、現(xiàn)代軟件工程 第13章 測試戰(zhàn)術(shù) 主要內(nèi)容 v軟件測試基礎(chǔ)軟件測試基礎(chǔ) v黑盒測試與白盒測試概述黑盒測試與白盒測試概述 v白盒測試白盒測試 v基本路徑測試基本路徑測試 v控制結(jié)構(gòu)測試控制結(jié)構(gòu)測試 v黑盒測試黑盒測試 v面向?qū)ο鬁y試方法面向?qū)ο鬁y試方法 v類級(jí)可應(yīng)用的測試方法類級(jí)可應(yīng)用的測試方法 v類間測試用例設(shè)計(jì)類間測試用例設(shè)計(jì) v小結(jié)小結(jié) 測試戰(zhàn)術(shù) v一旦生成了源代碼,必須測試軟件,以便一旦生成了源代碼,必須測試軟件,以便 在交付客戶之前盡可能多地發(fā)現(xiàn)和改正錯(cuò)在交付客戶之前盡可能多地發(fā)現(xiàn)和改正錯(cuò) 誤。目標(biāo)是設(shè)計(jì)一組測試用例,它們發(fā)現(xiàn)誤。目標(biāo)是設(shè)計(jì)一組測試用例,它們發(fā)現(xiàn) 錯(cuò)誤的可能性很大。但是
2、,如何做呢?這錯(cuò)誤的可能性很大。但是,如何做呢?這 就是軟件測試技術(shù)發(fā)揮作用的地方。這些就是軟件測試技術(shù)發(fā)揮作用的地方。這些 技術(shù)為測試設(shè)計(jì)提供系統(tǒng)化的指導(dǎo):技術(shù)為測試設(shè)計(jì)提供系統(tǒng)化的指導(dǎo):(1) 執(zhí)行每個(gè)軟件構(gòu)件的內(nèi)部邏輯和接口執(zhí)行每個(gè)軟件構(gòu)件的內(nèi)部邏輯和接口;(2) 測試程序的輸入和輸出域以發(fā)現(xiàn)程序功能、測試程序的輸入和輸出域以發(fā)現(xiàn)程序功能、 行為和性能方面的錯(cuò)誤。行為和性能方面的錯(cuò)誤。 測試戰(zhàn)術(shù) v在測試的早期階段,軟件工程師完成所有在測試的早期階段,軟件工程師完成所有 的測試。然而,隨著測試過程的進(jìn)展,測的測試。然而,隨著測試過程的進(jìn)展,測 試專家可能介入。試專家可能介入。 v評(píng)審和其
3、他軟件質(zhì)量保證活動(dòng)可以且確實(shí)評(píng)審和其他軟件質(zhì)量保證活動(dòng)可以且確實(shí) 能夠發(fā)現(xiàn)錯(cuò)誤,但它們是遠(yuǎn)遠(yuǎn)不夠的。每能夠發(fā)現(xiàn)錯(cuò)誤,但它們是遠(yuǎn)遠(yuǎn)不夠的。每 次執(zhí)行程序,用戶都在測試它。因此,在次執(zhí)行程序,用戶都在測試它。因此,在 程序交付給客戶之前,就必須以發(fā)現(xiàn)并消程序交付給客戶之前,就必須以發(fā)現(xiàn)并消 除錯(cuò)誤為目的來執(zhí)行它。為盡可能多地發(fā)除錯(cuò)誤為目的來執(zhí)行它。為盡可能多地發(fā) 現(xiàn)錯(cuò)誤,必須系統(tǒng)化地執(zhí)行測試,而且必現(xiàn)錯(cuò)誤,必須系統(tǒng)化地執(zhí)行測試,而且必 須利用嚴(yán)格的技術(shù)來設(shè)計(jì)測試用例。須利用嚴(yán)格的技術(shù)來設(shè)計(jì)測試用例。 測試戰(zhàn)術(shù) v 對(duì)于傳統(tǒng)的應(yīng)用系統(tǒng),從兩個(gè)不同的視角測試對(duì)于傳統(tǒng)的應(yīng)用系統(tǒng),從兩個(gè)不同的視角測試 軟
4、件:利用軟件:利用“白盒白盒”測試用例設(shè)計(jì)技術(shù)執(zhí)行程測試用例設(shè)計(jì)技術(shù)執(zhí)行程 序內(nèi)部邏輯;利用序內(nèi)部邏輯;利用“黑盒黑盒”測試用例設(shè)計(jì)技術(shù)測試用例設(shè)計(jì)技術(shù) 確認(rèn)軟件需求。對(duì)于面向?qū)ο髴?yīng)用,源代碼一確認(rèn)軟件需求。對(duì)于面向?qū)ο髴?yīng)用,源代碼一 旦生成,就設(shè)計(jì)一系列的測試以檢查類的操作旦生成,就設(shè)計(jì)一系列的測試以檢查類的操作 以及在該類與其他類進(jìn)行協(xié)作的過程中是否存以及在該類與其他類進(jìn)行協(xié)作的過程中是否存 在錯(cuò)誤。當(dāng)集成類以形成一個(gè)子系統(tǒng)時(shí),結(jié)合在錯(cuò)誤。當(dāng)集成類以形成一個(gè)子系統(tǒng)時(shí),結(jié)合 基于故障的測試方法,運(yùn)用基于使用的測試以基于故障的測試方法,運(yùn)用基于使用的測試以 對(duì)整個(gè)相互協(xié)作的類進(jìn)行徹底測試。最后
5、,用對(duì)整個(gè)相互協(xié)作的類進(jìn)行徹底測試。最后,用 例可輔助測試設(shè)計(jì)在軟件確認(rèn)階段發(fā)現(xiàn)錯(cuò)誤。例可輔助測試設(shè)計(jì)在軟件確認(rèn)階段發(fā)現(xiàn)錯(cuò)誤。 在每種情況下,其基本意圖都是以最少的工作在每種情況下,其基本意圖都是以最少的工作 量和時(shí)間來發(fā)現(xiàn)最大數(shù)量的錯(cuò)誤。量和時(shí)間來發(fā)現(xiàn)最大數(shù)量的錯(cuò)誤。 測試戰(zhàn)術(shù) v一組針對(duì)內(nèi)部邏輯、接口、構(gòu)件協(xié)作和外一組針對(duì)內(nèi)部邏輯、接口、構(gòu)件協(xié)作和外 部需求的測試用例被設(shè)計(jì)出來并文檔化;部需求的測試用例被設(shè)計(jì)出來并文檔化; 對(duì)期望結(jié)果進(jìn)行定義;并記錄實(shí)際結(jié)果。對(duì)期望結(jié)果進(jìn)行定義;并記錄實(shí)際結(jié)果。 v當(dāng)開始測試時(shí),改變視角,努力去當(dāng)開始測試時(shí),改變視角,努力去“破壞破壞” 軟件!規(guī)范化地設(shè)計(jì)
6、測試用例并對(duì)測試用軟件!規(guī)范化地設(shè)計(jì)測試用例并對(duì)測試用 例進(jìn)行周密的評(píng)審。另外,評(píng)估測試覆蓋例進(jìn)行周密的評(píng)審。另外,評(píng)估測試覆蓋 率并追蹤錯(cuò)誤檢測活動(dòng)。率并追蹤錯(cuò)誤檢測活動(dòng)。 測試戰(zhàn)術(shù) v測試為軟件工程師展示出有趣異?,F(xiàn)象。測試為軟件工程師展示出有趣異?,F(xiàn)象。 測試要求開發(fā)者首先拋棄測試要求開發(fā)者首先拋棄“剛開發(fā)的軟件剛開發(fā)的軟件 是正確的是正確的”這一先入為主的觀念,然后努這一先入為主的觀念,然后努 力去構(gòu)造測試用例來力去構(gòu)造測試用例來“破壞破壞”軟件。軟件。 v本章討論軟件測試用例設(shè)計(jì)技術(shù),該技術(shù)本章討論軟件測試用例設(shè)計(jì)技術(shù),該技術(shù) 重點(diǎn)關(guān)注的是一系列符合總體測試目標(biāo)及重點(diǎn)關(guān)注的是一系列符
7、合總體測試目標(biāo)及 第第12章所述測試策略的測試用例創(chuàng)建技術(shù)。章所述測試策略的測試用例創(chuàng)建技術(shù)。 軟件測試基礎(chǔ) v測試目標(biāo)是發(fā)現(xiàn)錯(cuò)誤,且好的測試發(fā)現(xiàn)錯(cuò)測試目標(biāo)是發(fā)現(xiàn)錯(cuò)誤,且好的測試發(fā)現(xiàn)錯(cuò) 誤的可能性較大。因此,軟件工程師在設(shè)誤的可能性較大。因此,軟件工程師在設(shè) 計(jì)與實(shí)現(xiàn)基于計(jì)算機(jī)的系統(tǒng)或產(chǎn)品時(shí),心計(jì)與實(shí)現(xiàn)基于計(jì)算機(jī)的系統(tǒng)或產(chǎn)品時(shí),心 中應(yīng)該想著可測試性。同時(shí),測試本身必中應(yīng)該想著可測試性。同時(shí),測試本身必 須展示一系列特征以達(dá)到用最小的工作量須展示一系列特征以達(dá)到用最小的工作量 發(fā)現(xiàn)最多錯(cuò)誤的目標(biāo)。發(fā)現(xiàn)最多錯(cuò)誤的目標(biāo)。 軟件測試基礎(chǔ) v軟件可測試性就是能夠被測試的容易程度。下軟件可測試性就是能夠
8、被測試的容易程度。下 述特征導(dǎo)致可測試的軟件。述特征導(dǎo)致可測試的軟件。 v可操作性??刹僮餍?。“運(yùn)行得越好,越能有效地測試。運(yùn)行得越好,越能有效地測試?!?v可觀察性??捎^察性。“你所看見的就是你所測的。你所看見的就是你所測的。” v可控制性??煽刂菩浴!皩?duì)軟件控制得越好,測試越能被自動(dòng)執(zhí)行或優(yōu)對(duì)軟件控制得越好,測試越能被自動(dòng)執(zhí)行或優(yōu) 化?;?。” v可分解性。可分解性?!巴ㄟ^控制測試范圍,能夠更快地分解問題,完通過控制測試范圍,能夠更快地分解問題,完 成更靈巧的再測試。成更靈巧的再測試?!?v簡單性。簡單性。“需要測試的內(nèi)容越少,測試的速度越快。需要測試的內(nèi)容越少,測試的速度越快。” v穩(wěn)定性
9、。穩(wěn)定性?!白兏缴伲瑢?duì)測試的破壞越小。變更越少,對(duì)測試的破壞越小。” v易理解性。易理解性?!暗玫降男畔⒃蕉?,進(jìn)行的測試越靈巧。得到的信息越多,進(jìn)行的測試越靈巧?!?軟件測試基礎(chǔ) v測試特征。測試特征?!昂煤谩钡臏y試具有以下的測試具有以下 特性:特性: v好的測試具有較高的發(fā)現(xiàn)錯(cuò)誤的可能好的測試具有較高的發(fā)現(xiàn)錯(cuò)誤的可能 性。性。 v好的測試是不冗余的。好的測試是不冗余的。 v好的測試應(yīng)該是好的測試應(yīng)該是”最佳品種最佳品種“。 v好的測試應(yīng)該既不太簡單也不太復(fù)雜。好的測試應(yīng)該既不太簡單也不太復(fù)雜。 黑盒測試與白盒測試 v任何工程化的產(chǎn)品都可以采用以下兩種方任何工程化的產(chǎn)品都可以采用以下兩種方
10、式之一進(jìn)行測試:式之一進(jìn)行測試:(1)了解已設(shè)計(jì)的產(chǎn)品了解已設(shè)計(jì)的產(chǎn)品 所完成的指定功能,可以執(zhí)行測試以顯示所完成的指定功能,可以執(zhí)行測試以顯示 每個(gè)功能是可操作的,同時(shí)查找在每個(gè)功每個(gè)功能是可操作的,同時(shí)查找在每個(gè)功 能中的錯(cuò)誤;能中的錯(cuò)誤;(2)了解產(chǎn)品的內(nèi)部運(yùn)行情了解產(chǎn)品的內(nèi)部運(yùn)行情 況,可以執(zhí)行測試以確保況,可以執(zhí)行測試以確?!八旋X輪吻所有齒輪吻 合合”即內(nèi)部操作依據(jù)規(guī)格說明執(zhí)行,而即內(nèi)部操作依據(jù)規(guī)格說明執(zhí)行,而 且以所有的內(nèi)部構(gòu)件已進(jìn)行了充分測試。且以所有的內(nèi)部構(gòu)件已進(jìn)行了充分測試。 第一種測試方法稱為黑盒測試,第二種方第一種測試方法稱為黑盒測試,第二種方 法稱為白盒測試。法稱為白
11、盒測試。 黑盒測試與白盒測試 v黑盒測試暗指在軟件接口處執(zhí)行測試。黑黑盒測試暗指在軟件接口處執(zhí)行測試。黑 盒測試檢查系統(tǒng)的基本方面,很少關(guān)心軟盒測試檢查系統(tǒng)的基本方面,很少關(guān)心軟 件的內(nèi)部結(jié)構(gòu)。軟件的白盒測試是基于過件的內(nèi)部結(jié)構(gòu)。軟件的白盒測試是基于過 程細(xì)節(jié)的封閉檢查。通過提供檢查特定條程細(xì)節(jié)的封閉檢查。通過提供檢查特定條 件集和件集和(或或)循環(huán)的測試用例,測試貫穿軟循環(huán)的測試用例,測試貫穿軟 件的邏輯路徑和構(gòu)件間的協(xié)作。件的邏輯路徑和構(gòu)件間的協(xié)作。 白盒測試 v白盒測試,有時(shí)也稱為玻璃盒測試,是一種測白盒測試,有時(shí)也稱為玻璃盒測試,是一種測 試用例設(shè)計(jì)方法,它利用作為構(gòu)件層設(shè)計(jì)的一試用例
12、設(shè)計(jì)方法,它利用作為構(gòu)件層設(shè)計(jì)的一 部分而描述的控制結(jié)構(gòu)來生成測試用例。利用部分而描述的控制結(jié)構(gòu)來生成測試用例。利用 白盒測試方法,軟件工程師設(shè)計(jì)的測試用例可白盒測試方法,軟件工程師設(shè)計(jì)的測試用例可 以:以:(1)保證一個(gè)模塊中的所有獨(dú)立路徑至少被保證一個(gè)模塊中的所有獨(dú)立路徑至少被 執(zhí)行一次;執(zhí)行一次;(2)對(duì)所有的邏輯值均需測試真和假;對(duì)所有的邏輯值均需測試真和假; (3)在上下邊界及可操作的范圍內(nèi)執(zhí)行所有的循在上下邊界及可操作的范圍內(nèi)執(zhí)行所有的循 環(huán);環(huán);(4)檢驗(yàn)內(nèi)部數(shù)據(jù)結(jié)構(gòu)以確保其有效性。檢驗(yàn)內(nèi)部數(shù)據(jù)結(jié)構(gòu)以確保其有效性。 基本路徑測試 v基本路徑測試是由基本路徑測試是由MCC76首先提
13、出的首先提出的 一種白盒測試技術(shù)?;韭窂綔y試方法使一種白盒測試技術(shù)?;韭窂綔y試方法使 測試用例設(shè)計(jì)者產(chǎn)生一種過程設(shè)計(jì)的邏輯測試用例設(shè)計(jì)者產(chǎn)生一種過程設(shè)計(jì)的邏輯 復(fù)雜性測度,這種測度為執(zhí)行路徑的基本復(fù)雜性測度,這種測度為執(zhí)行路徑的基本 集的定義提供指導(dǎo)。執(zhí)行該基本集所生成集的定義提供指導(dǎo)。執(zhí)行該基本集所生成 的測試用例保證程序中的每一條語句至少的測試用例保證程序中的每一條語句至少 執(zhí)行一次。執(zhí)行一次。 流圖表示 v流圖利用圖流圖利用圖13-1所示的表示描述邏輯控制流。每所示的表示描述邏輯控制流。每 種結(jié)構(gòu)化的結(jié)構(gòu)有相應(yīng)的流圖符號(hào)。種結(jié)構(gòu)化的結(jié)構(gòu)有相應(yīng)的流圖符號(hào)。 圖13-1 流圖表示 流圖表
14、示 v考慮考慮13-2a所示的過程設(shè)計(jì)表示。這里,流程圖用所示的過程設(shè)計(jì)表示。這里,流程圖用 于描述程序控制結(jié)構(gòu)。圖于描述程序控制結(jié)構(gòu)。圖13-2b將這個(gè)流程圖映射將這個(gè)流程圖映射 為相應(yīng)的流圖為相應(yīng)的流圖(假設(shè)流程圖的菱形判定框中不包含假設(shè)流程圖的菱形判定框中不包含 復(fù)合條件復(fù)合條件)。在圖。在圖13-2b中,圓稱為流圖結(jié)點(diǎn),表中,圓稱為流圖結(jié)點(diǎn),表 示一個(gè)或多個(gè)過程語句。處理框序列和一個(gè)菱形判示一個(gè)或多個(gè)過程語句。處理框序列和一個(gè)菱形判 定框可以映射為單個(gè)結(jié)點(diǎn)。流圖中的箭頭稱為邊或定框可以映射為單個(gè)結(jié)點(diǎn)。流圖中的箭頭稱為邊或 連接,表示控制流,類似于流程圖中的箭頭。一條連接,表示控制流,類
15、似于流程圖中的箭頭。一條 邊必須終止于一個(gè)結(jié)點(diǎn),即使該結(jié)點(diǎn)并不代表任何邊必須終止于一個(gè)結(jié)點(diǎn),即使該結(jié)點(diǎn)并不代表任何 過程語句。由邊和結(jié)點(diǎn)限定的區(qū)間稱為域。當(dāng)計(jì)算過程語句。由邊和結(jié)點(diǎn)限定的區(qū)間稱為域。當(dāng)計(jì)算 域時(shí),將圖形的外部作為一個(gè)域。域時(shí),將圖形的外部作為一個(gè)域。 流圖表示 圖13-2 流程圖和流圖 流圖表示 圖13-2 流程圖和流圖 流圖表示 v當(dāng)在過程設(shè)計(jì)中遇到復(fù)合條件時(shí),流圖的生當(dāng)在過程設(shè)計(jì)中遇到復(fù)合條件時(shí),流圖的生 成變得稍微復(fù)雜一些。當(dāng)一個(gè)條件語句中存成變得稍微復(fù)雜一些。當(dāng)一個(gè)條件語句中存 在一個(gè)或多個(gè)布爾運(yùn)算符時(shí),復(fù)合條件出現(xiàn)。在一個(gè)或多個(gè)布爾運(yùn)算符時(shí),復(fù)合條件出現(xiàn)。 圖圖13-
16、3給出了一段給出了一段PDL程序及其對(duì)應(yīng)的流圖。程序及其對(duì)應(yīng)的流圖。 注意,分別為條件語句注意,分別為條件語句”IF a OR b”的每個(gè)的每個(gè) 條件條件(a和和b)創(chuàng)建不同的結(jié)點(diǎn)。包含條件的結(jié)創(chuàng)建不同的結(jié)點(diǎn)。包含條件的結(jié) 點(diǎn)稱為判定結(jié)點(diǎn),用兩條或多條由它發(fā)射出點(diǎn)稱為判定結(jié)點(diǎn),用兩條或多條由它發(fā)射出 的邊來描述。的邊來描述。 流圖表示 圖13-3 復(fù)合邏輯 獨(dú)立程序路徑 v獨(dú)立路徑是任何貫穿程序的、至少引入一組新的處理語獨(dú)立路徑是任何貫穿程序的、至少引入一組新的處理語 句或一個(gè)新的條件的路徑。當(dāng)按照流圖進(jìn)行描述時(shí),獨(dú)句或一個(gè)新的條件的路徑。當(dāng)按照流圖進(jìn)行描述時(shí),獨(dú) 立路徑必須沿著至少一條邊移動(dòng)
17、。這條邊在定義該路徑立路徑必須沿著至少一條邊移動(dòng)。這條邊在定義該路徑 之前未被遍歷。例如,圖之前未被遍歷。例如,圖13-2b所示的流圖的一組獨(dú)立所示的流圖的一組獨(dú)立 路徑如下:路徑如下: 路徑路徑1:1-11 路徑路徑2: 1-2-3-4-5-10-1-11 路徑路徑3: 1-2-3-6-8-9-10-1-11 路徑路徑4: 1-2-3-6-7-9-10-1-11 v路徑路徑1、2、3和和4構(gòu)成圖構(gòu)成圖13-2b所示流圖的基本集合。所示流圖的基本集合。 也就是說,若設(shè)計(jì)測試強(qiáng)迫執(zhí)行這些路徑,則可以保證也就是說,若設(shè)計(jì)測試強(qiáng)迫執(zhí)行這些路徑,則可以保證 程序中的每條語句至少執(zhí)行一次,且執(zhí)行每個(gè)條件
18、值為程序中的每條語句至少執(zhí)行一次,且執(zhí)行每個(gè)條件值為 真和假。應(yīng)該注意到,基本集合不是唯一的。事實(shí)上,真和假。應(yīng)該注意到,基本集合不是唯一的。事實(shí)上, 對(duì)給定的過程設(shè)計(jì),可以產(chǎn)生一些不同的基本集合。對(duì)給定的過程設(shè)計(jì),可以產(chǎn)生一些不同的基本集合。 獨(dú)立程序路徑 v如何知道要找出多少路徑?環(huán)復(fù)雜性的計(jì)如何知道要找出多少路徑?環(huán)復(fù)雜性的計(jì) 算提供了這個(gè)答案。環(huán)復(fù)雜性是一種軟件算提供了這個(gè)答案。環(huán)復(fù)雜性是一種軟件 度量,它為程序的邏輯復(fù)雜度提供一個(gè)量度量,它為程序的邏輯復(fù)雜度提供一個(gè)量 化的測度。當(dāng)用在基本路徑測試方法的環(huán)化的測度。當(dāng)用在基本路徑測試方法的環(huán) 境下,環(huán)復(fù)雜性的值是用基本集合定義程境下,
19、環(huán)復(fù)雜性的值是用基本集合定義程 序的獨(dú)立路徑數(shù),它為我們提供了保證所序的獨(dú)立路徑數(shù),它為我們提供了保證所 有語句被執(zhí)行一次所需測試數(shù)量的上限。有語句被執(zhí)行一次所需測試數(shù)量的上限。 獨(dú)立程序路徑 v環(huán)復(fù)雜性以圖論為基礎(chǔ),可以通過以下三種方環(huán)復(fù)雜性以圖論為基礎(chǔ),可以通過以下三種方 法之一來計(jì)算:法之一來計(jì)算: 1.域的數(shù)量與環(huán)復(fù)雜性相對(duì)應(yīng)。域的數(shù)量與環(huán)復(fù)雜性相對(duì)應(yīng)。 2.對(duì)流圖對(duì)流圖G,環(huán)復(fù)雜性,環(huán)復(fù)雜性V(G)定義如下:定義如下: V(G)=E-N+2 其中其中E為流圖的邊數(shù),為流圖的邊數(shù),N為流圖的結(jié)點(diǎn)數(shù)。為流圖的結(jié)點(diǎn)數(shù)。 3.對(duì)流圖對(duì)流圖G,環(huán)復(fù)雜性,環(huán)復(fù)雜性V(G)也可以定義如下:也可以定
20、義如下: V(G)=P+1 其中其中P為包含在流圖為包含在流圖G中的判定結(jié)點(diǎn)數(shù)。中的判定結(jié)點(diǎn)數(shù)。 V(G)的值提供了組成基本集的獨(dú)立路徑的上界,的值提供了組成基本集的獨(dú)立路徑的上界, 并由此得出覆蓋所有程序語句所需測試數(shù)量的并由此得出覆蓋所有程序語句所需測試數(shù)量的 上界。上界。 導(dǎo)出測試用例 v基本路徑測試方法可以應(yīng)用于過程設(shè)計(jì)或基本路徑測試方法可以應(yīng)用于過程設(shè)計(jì)或 源代碼。以下以圖源代碼。以下以圖13-4中用中用PDL描述的過描述的過 程程average為例,說明測試用例設(shè)計(jì)方法為例,說明測試用例設(shè)計(jì)方法 中的各個(gè)步驟。中的各個(gè)步驟。 導(dǎo)出測試用例 圖13-4 已標(biāo)識(shí)結(jié)點(diǎn)的PDL 導(dǎo)出測試用
21、例 v1、以設(shè)計(jì)或源代碼為基礎(chǔ),畫出相應(yīng)的流圖。、以設(shè)計(jì)或源代碼為基礎(chǔ),畫出相應(yīng)的流圖。 v2、確定所得流圖的環(huán)復(fù)雜性。、確定所得流圖的環(huán)復(fù)雜性。 v3、確定線性獨(dú)立路徑的基本集合。、確定線性獨(dú)立路徑的基本集合。 v4、準(zhǔn)備測試用例,強(qiáng)制執(zhí)行基本集合中每條路、準(zhǔn)備測試用例,強(qiáng)制執(zhí)行基本集合中每條路 徑。徑。 v某些獨(dú)立路徑不能單獨(dú)進(jìn)行測試。即遍歷路徑某些獨(dú)立路徑不能單獨(dú)進(jìn)行測試。即遍歷路徑 所需的數(shù)據(jù)組合不能形成程序的正常流。在這所需的數(shù)據(jù)組合不能形成程序的正常流。在這 種情況下,這些路徑作為另一個(gè)路徑的一部分種情況下,這些路徑作為另一個(gè)路徑的一部分 進(jìn)行測試。進(jìn)行測試。 導(dǎo)出測試用例 圖13
22、-5 過程average的流圖 條件測試 v條件測試通過檢查程序模塊中包含的邏輯條件條件測試通過檢查程序模塊中包含的邏輯條件 進(jìn)行測試用例設(shè)計(jì)。簡單條件是一個(gè)布爾變量進(jìn)行測試用例設(shè)計(jì)。簡單條件是一個(gè)布爾變量 或前面可能帶有或前面可能帶有NOT算符的關(guān)系表達(dá)式。關(guān)系算符的關(guān)系表達(dá)式。關(guān)系 表達(dá)式的形式如下:表達(dá)式的形式如下: E1E2 v若條件不正確,則至少有一個(gè)條件元素不正確。若條件不正確,則至少有一個(gè)條件元素不正確。 因此,條件中錯(cuò)誤類型包括布爾算符錯(cuò)誤、布因此,條件中錯(cuò)誤類型包括布爾算符錯(cuò)誤、布 爾變量錯(cuò)誤、括號(hào)錯(cuò)誤、關(guān)系算符錯(cuò)誤以及算爾變量錯(cuò)誤、括號(hào)錯(cuò)誤、關(guān)系算符錯(cuò)誤以及算 術(shù)表達(dá)式錯(cuò)誤
23、。條件測試方法側(cè)重于測試程序術(shù)表達(dá)式錯(cuò)誤。條件測試方法側(cè)重于測試程序 中的每個(gè)條件以確保其不包含錯(cuò)誤。中的每個(gè)條件以確保其不包含錯(cuò)誤。 數(shù)據(jù)流測試 v數(shù)據(jù)流測試方法就是根據(jù)變量的定義和使用位數(shù)據(jù)流測試方法就是根據(jù)變量的定義和使用位 置來選擇程序測試路徑的測試方法。為說明數(shù)置來選擇程序測試路徑的測試方法。為說明數(shù) 據(jù)流測試方法,假設(shè)程序的每條語句都賦予了據(jù)流測試方法,假設(shè)程序的每條語句都賦予了 獨(dú)特的語句號(hào),而且每個(gè)函數(shù)都不改變其參數(shù)獨(dú)特的語句號(hào),而且每個(gè)函數(shù)都不改變其參數(shù) 或全局變量。對(duì)于語句為或全局變量。對(duì)于語句為S的語句,的語句, DEF(S)=X|語句語句S包含包含X的定義的定義 USE
24、(S)=X|語句語句S包含包含X的使用的使用 v若語句若語句S是一個(gè)是一個(gè)if或或loop循環(huán)的語句,它的循環(huán)的語句,它的DEF 集為空而集為空而USE集取決于集取決于S的條件。若存在的條件。若存在S到到S 的路徑且該路徑不含的路徑且該路徑不含X的其他定義,則稱變量的其他定義,則稱變量X 在語句在語句S處的定義在語句處的定義在語句S仍有效。仍有效。 數(shù)據(jù)流測試 v變量變量X的定義的定義-使用鏈?zhǔn)褂面?或稱或稱DU鏈鏈)的形式為的形式為 X,S,S,其中,其中S和和S為語句號(hào),為語句號(hào),X在在DEF(S)和和 USE(S)中,且在語句中,且在語句S中定義的中定義的X在語句在語句S中有中有 效。效
25、。 v一個(gè)簡單的數(shù)據(jù)流測試策略要求每個(gè)一個(gè)簡單的數(shù)據(jù)流測試策略要求每個(gè)DU鏈至少鏈至少 覆蓋一次,我們稱之為覆蓋一次,我們稱之為DU測試策略。已經(jīng)證明測試策略。已經(jīng)證明 DU測試并不能保證覆蓋程序的所有分支。然而,測試并不能保證覆蓋程序的所有分支。然而, DU測試不覆蓋每個(gè)分支僅在測試不覆蓋每個(gè)分支僅在if-then-else中的中的 then沒有定義變量且不存在沒有定義變量且不存在else部分的情況下。部分的情況下。 在這種情況下,在這種情況下,if語句和語句和else分支并不需要由分支并不需要由DU 測試覆蓋。測試覆蓋。 循環(huán)測試 v循環(huán)是大多數(shù)軟件實(shí)現(xiàn)算法的重要部分。循環(huán)是大多數(shù)軟件實(shí)現(xiàn)
26、算法的重要部分。 v循環(huán)測試是一種白盒測試技術(shù),它僅側(cè)重循環(huán)測試是一種白盒測試技術(shù),它僅側(cè)重 于循環(huán)構(gòu)成元素的有效性。可以定義四種于循環(huán)構(gòu)成元素的有效性??梢远x四種 不同的循環(huán):簡單循環(huán)、串接循環(huán)、嵌套不同的循環(huán):簡單循環(huán)、串接循環(huán)、嵌套 循環(huán)和非結(jié)構(gòu)化循環(huán)。如圖循環(huán)和非結(jié)構(gòu)化循環(huán)。如圖13-6所示。所示。 循環(huán)測試 圖13-6 循環(huán)的類別 循環(huán)測試 v簡單循環(huán)簡單循環(huán)。下列測試集可用于簡單循環(huán),。下列測試集可用于簡單循環(huán), 其中,其中,n是允許通過循環(huán)的最大次數(shù)。是允許通過循環(huán)的最大次數(shù)。 1、跳過整個(gè)循環(huán);、跳過整個(gè)循環(huán); 2、只有一次通過循環(huán);、只有一次通過循環(huán); 3、兩次通過循環(huán);、
27、兩次通過循環(huán); 4、m次通過循環(huán),其中次通過循環(huán),其中mn; 5、n-1,n,n+1次通過循環(huán)。次通過循環(huán)。 循環(huán)測試 v嵌套循環(huán)嵌套循環(huán)。若將簡單循環(huán)的測試方法擴(kuò)展應(yīng)用于。若將簡單循環(huán)的測試方法擴(kuò)展應(yīng)用于 嵌套循環(huán),則可能測試數(shù)將隨著嵌套層次的增加嵌套循環(huán),則可能測試數(shù)將隨著嵌套層次的增加 而成幾何級(jí)數(shù)增長。這將導(dǎo)致不切實(shí)際的測試數(shù)而成幾何級(jí)數(shù)增長。這將導(dǎo)致不切實(shí)際的測試數(shù) 量。量。BEI90提出了一種有助于減少測試數(shù)的方提出了一種有助于減少測試數(shù)的方 法:法: 1、從最內(nèi)層循環(huán)開始,將其他循環(huán)設(shè)置為最小、從最內(nèi)層循環(huán)開始,將其他循環(huán)設(shè)置為最小 值;值; 2、對(duì)最內(nèi)層循環(huán)執(zhí)行簡單循環(huán)測試,而
28、使外層、對(duì)最內(nèi)層循環(huán)執(zhí)行簡單循環(huán)測試,而使外層 循環(huán)的迭代參數(shù)值循環(huán)的迭代參數(shù)值(即循環(huán)計(jì)數(shù)即循環(huán)計(jì)數(shù))最小,并對(duì)范圍最小,并對(duì)范圍 以外或不包括在內(nèi)的值增加其他測試;以外或不包括在內(nèi)的值增加其他測試; 3、由內(nèi)向外構(gòu)造下一個(gè)循環(huán)的測試,但使其他、由內(nèi)向外構(gòu)造下一個(gè)循環(huán)的測試,但使其他 外層循環(huán)具有最小值并使其他嵌套循環(huán)為外層循環(huán)具有最小值并使其他嵌套循環(huán)為“典型典型” 值;值; 4、繼續(xù)上述過程,直到測試完所有的循環(huán)。、繼續(xù)上述過程,直到測試完所有的循環(huán)。 循環(huán)測試 v串接循環(huán)串接循環(huán)。若串接循環(huán)的每個(gè)循環(huán)彼此獨(dú)。若串接循環(huán)的每個(gè)循環(huán)彼此獨(dú) 立,則可以使用簡單循環(huán)測試方法。然而,立,則可以使
29、用簡單循環(huán)測試方法。然而, 若兩個(gè)循環(huán)串接起來,且第一個(gè)循環(huán)的循若兩個(gè)循環(huán)串接起來,且第一個(gè)循環(huán)的循 環(huán)計(jì)數(shù)為第二個(gè)循環(huán)的初始值。則這兩個(gè)環(huán)計(jì)數(shù)為第二個(gè)循環(huán)的初始值。則這兩個(gè) 循環(huán)并不獨(dú)立。若循環(huán)不獨(dú)立,建議使用循環(huán)并不獨(dú)立。若循環(huán)不獨(dú)立,建議使用 嵌套循環(huán)的測試方法。嵌套循環(huán)的測試方法。 v非結(jié)構(gòu)化循環(huán)非結(jié)構(gòu)化循環(huán)。若有可能,應(yīng)該重新設(shè)計(jì)。若有可能,應(yīng)該重新設(shè)計(jì) 這類循環(huán)以反映結(jié)構(gòu)化程序結(jié)構(gòu)的使用。這類循環(huán)以反映結(jié)構(gòu)化程序結(jié)構(gòu)的使用。 黑盒測試 v黑盒測試,也稱為行為測試,側(cè)重于軟件黑盒測試,也稱為行為測試,側(cè)重于軟件 的功能需求。即,黑盒測試使軟件工程師的功能需求。即,黑盒測試使軟件工程師
30、 能設(shè)計(jì)出將測試程序所有功能需求的輸入能設(shè)計(jì)出將測試程序所有功能需求的輸入 條件集。黑盒測試并不是白盒測試的替代條件集。黑盒測試并不是白盒測試的替代 品,而是作為發(fā)現(xiàn)其他類型錯(cuò)誤的輔助方品,而是作為發(fā)現(xiàn)其他類型錯(cuò)誤的輔助方 法。法。 黑盒測試 v黑盒測試試圖發(fā)現(xiàn)以下類型的錯(cuò)誤:黑盒測試試圖發(fā)現(xiàn)以下類型的錯(cuò)誤: (1)功能不正確或遺漏;)功能不正確或遺漏; (2)接口錯(cuò)誤;)接口錯(cuò)誤; (3)數(shù)據(jù)結(jié)構(gòu)或外部數(shù)據(jù)庫訪問錯(cuò)誤;)數(shù)據(jù)結(jié)構(gòu)或外部數(shù)據(jù)庫訪問錯(cuò)誤; (4)行為或性能錯(cuò)誤;)行為或性能錯(cuò)誤; (5)初始化和終止錯(cuò)誤。)初始化和終止錯(cuò)誤。 v與白盒測試不同,白盒測試在測試過程的與白盒測試不同,
31、白盒測試在測試過程的 早期執(zhí)行,而黑盒測試傾向于應(yīng)用在測試早期執(zhí)行,而黑盒測試傾向于應(yīng)用在測試 的后期階段。黑盒測試故意不考慮控制結(jié)的后期階段。黑盒測試故意不考慮控制結(jié) 構(gòu),而是側(cè)重于信息域。構(gòu),而是側(cè)重于信息域。 黑盒測試 v設(shè)計(jì)黑盒測試要回答下述問題:設(shè)計(jì)黑盒測試要回答下述問題: v如何測試功能的有效性?如何測試功能的有效性? v如何測試系統(tǒng)的行為和性能?如何測試系統(tǒng)的行為和性能? v哪種類型的輸入會(huì)產(chǎn)生好的測試用例?哪種類型的輸入會(huì)產(chǎn)生好的測試用例? v系統(tǒng)是否對(duì)特定的輸入值特別敏感?系統(tǒng)是否對(duì)特定的輸入值特別敏感? v如何分離數(shù)據(jù)類的邊界?如何分離數(shù)據(jù)類的邊界? v系統(tǒng)能承受什么樣的數(shù)
32、據(jù)率和數(shù)據(jù)量?系統(tǒng)能承受什么樣的數(shù)據(jù)率和數(shù)據(jù)量? v特定類型的數(shù)據(jù)組合會(huì)對(duì)系統(tǒng)的運(yùn)行產(chǎn)生什么樣的特定類型的數(shù)據(jù)組合會(huì)對(duì)系統(tǒng)的運(yùn)行產(chǎn)生什么樣的 影響?影響? 黑盒測試 v通過運(yùn)用黑盒測試技術(shù),可以生成滿足下通過運(yùn)用黑盒測試技術(shù),可以生成滿足下 述準(zhǔn)則的測試用例集:述準(zhǔn)則的測試用例集: v(1)能夠減少達(dá)到合理測試所需的附加測試用例)能夠減少達(dá)到合理測試所需的附加測試用例 數(shù);數(shù); v(2)能夠告知某些錯(cuò)誤類型是否存在,而不是僅)能夠告知某些錯(cuò)誤類型是否存在,而不是僅 僅知道與特定測試相關(guān)的錯(cuò)誤。僅知道與特定測試相關(guān)的錯(cuò)誤。 等價(jià)劃分 v等價(jià)劃分是一種黑盒測試方法,它將程序等價(jià)劃分是一種黑盒測試方
33、法,它將程序 的輸入劃分為若干個(gè)數(shù)據(jù)類,從中生成測的輸入劃分為若干個(gè)數(shù)據(jù)類,從中生成測 試用例。理想的測試用例是可以單獨(dú)發(fā)現(xiàn)試用例。理想的測試用例是可以單獨(dú)發(fā)現(xiàn) 一類錯(cuò)誤。等價(jià)劃分試圖定義一個(gè)測試用一類錯(cuò)誤。等價(jià)劃分試圖定義一個(gè)測試用 例以期發(fā)現(xiàn)一類錯(cuò)誤,由此減少所需設(shè)計(jì)例以期發(fā)現(xiàn)一類錯(cuò)誤,由此減少所需設(shè)計(jì) 測試用例的總數(shù)。測試用例的總數(shù)。 等價(jià)劃分 v等價(jià)劃分的測試用例設(shè)計(jì)是基于對(duì)輸入條等價(jià)劃分的測試用例設(shè)計(jì)是基于對(duì)輸入條 件的等價(jià)類的評(píng)估。若對(duì)象可以由具有對(duì)件的等價(jià)類的評(píng)估。若對(duì)象可以由具有對(duì) 稱性、傳遞性和自反性的關(guān)系連接,則存稱性、傳遞性和自反性的關(guān)系連接,則存 在等價(jià)類。等價(jià)類表示輸
34、入條件的一組有在等價(jià)類。等價(jià)類表示輸入條件的一組有 效或無效的狀態(tài)。通常情況下,輸入條件效或無效的狀態(tài)。通常情況下,輸入條件 要么是一個(gè)特定值、一個(gè)數(shù)據(jù)域、一組相要么是一個(gè)特定值、一個(gè)數(shù)據(jù)域、一組相 關(guān)的值,要么是一個(gè)布爾條件。關(guān)的值,要么是一個(gè)布爾條件。 等價(jià)劃分 v可以根據(jù)下述指導(dǎo)原則定義等價(jià)類:可以根據(jù)下述指導(dǎo)原則定義等價(jià)類: v1、若輸入條件指定一個(gè)范圍,則可以定義一個(gè)有效和、若輸入條件指定一個(gè)范圍,則可以定義一個(gè)有效和 兩個(gè)無效的等價(jià)類;兩個(gè)無效的等價(jià)類; v2、若輸入條件需要特定的值,則可以定義一個(gè)有效的、若輸入條件需要特定的值,則可以定義一個(gè)有效的 和兩個(gè)無效的等價(jià)類;和兩個(gè)無效
35、的等價(jià)類; v3、若輸入條件指定集合的某個(gè)元素,則可以定義一個(gè)、若輸入條件指定集合的某個(gè)元素,則可以定義一個(gè) 有效和一個(gè)無效的等價(jià)類;有效和一個(gè)無效的等價(jià)類; v4、若輸入條件為布爾值,則可以定義一個(gè)有效和一個(gè)、若輸入條件為布爾值,則可以定義一個(gè)有效和一個(gè) 無效的等價(jià)類。無效的等價(jià)類。 v通過運(yùn)用設(shè)計(jì)等價(jià)類的指導(dǎo)原則,可以為每個(gè)輸入域數(shù)通過運(yùn)用設(shè)計(jì)等價(jià)類的指導(dǎo)原則,可以為每個(gè)輸入域數(shù) 據(jù)對(duì)象設(shè)計(jì)測試用例并執(zhí)行它。選擇測試用例以便一次據(jù)對(duì)象設(shè)計(jì)測試用例并執(zhí)行它。選擇測試用例以便一次 測試一個(gè)等價(jià)類的盡可能多的屬性。測試一個(gè)等價(jià)類的盡可能多的屬性。 邊界值分析 v多數(shù)錯(cuò)誤出現(xiàn)在輸入域的邊界處,而多
36、數(shù)錯(cuò)誤出現(xiàn)在輸入域的邊界處,而 不是在其不是在其“中間中間”。這是將邊界值分析。這是將邊界值分析 (BVA)作為一種測試技術(shù)的原因。作為一種測試技術(shù)的原因。邊界邊界 值分析選擇一組測試用例檢查邊界值。值分析選擇一組測試用例檢查邊界值。 v邊界值分析是對(duì)邊界值分析是對(duì)“等價(jià)劃分等價(jià)劃分”測試用測試用 例設(shè)計(jì)技術(shù)的一種補(bǔ)充。例設(shè)計(jì)技術(shù)的一種補(bǔ)充。BVA不是選擇不是選擇 等價(jià)類的任何元素,而是選擇等價(jià)類等價(jià)類的任何元素,而是選擇等價(jià)類 “邊緣邊緣”的測試用例。的測試用例。BVA不是僅僅側(cè)不是僅僅側(cè) 重于輸入條件,也從輸出域中生成測試。重于輸入條件,也從輸出域中生成測試。 邊界值分析 vBVA的指導(dǎo)原
37、則在很多方面與等價(jià)劃分的原則的指導(dǎo)原則在很多方面與等價(jià)劃分的原則 相類似:相類似: 1、若輸入條件指定為以、若輸入條件指定為以a和和b為邊界的范圍,則為邊界的范圍,則 測試用例應(yīng)該包括測試用例應(yīng)該包括a、b、略大于、略大于a和略小于和略小于b; 2、若輸入條件指定為一組值,則測試用例應(yīng)當(dāng)、若輸入條件指定為一組值,則測試用例應(yīng)當(dāng) 執(zhí)行其中的最大值和最小值,以及略大于最小執(zhí)行其中的最大值和最小值,以及略大于最小 值和略小于最大值的值;值和略小于最大值的值; 3、指導(dǎo)原則、指導(dǎo)原則1和和2也適用于輸出條件;也適用于輸出條件; 4、若內(nèi)部程序數(shù)據(jù)結(jié)構(gòu)有預(yù)定義的邊界值,要、若內(nèi)部程序數(shù)據(jù)結(jié)構(gòu)有預(yù)定義的邊
38、界值,要 在其邊界處測試數(shù)據(jù)結(jié)構(gòu)。在其邊界處測試數(shù)據(jù)結(jié)構(gòu)。 面向?qū)ο鬁y試方法 v面向?qū)ο篌w系結(jié)構(gòu)導(dǎo)致包括相互協(xié)面向?qū)ο篌w系結(jié)構(gòu)導(dǎo)致包括相互協(xié) 作類的一系列分層子系統(tǒng)的產(chǎn)生。每作類的一系列分層子系統(tǒng)的產(chǎn)生。每 個(gè)系統(tǒng)成分完成有助于滿足系統(tǒng)需求個(gè)系統(tǒng)成分完成有助于滿足系統(tǒng)需求 的功能。有必要在不同的層次上測試的功能。有必要在不同的層次上測試 面向?qū)ο笙到y(tǒng),以發(fā)現(xiàn)錯(cuò)誤。在類相面向?qū)ο笙到y(tǒng),以發(fā)現(xiàn)錯(cuò)誤。在類相 互協(xié)作以及子系統(tǒng)跨體系結(jié)構(gòu)層次通互協(xié)作以及子系統(tǒng)跨體系結(jié)構(gòu)層次通 信時(shí)可能出現(xiàn)這些錯(cuò)誤。信時(shí)可能出現(xiàn)這些錯(cuò)誤。 面向?qū)ο鬁y試方法 v在方法上,面向?qū)ο鬁y試與傳統(tǒng)系統(tǒng)測試相類在方法上,面向?qū)ο鬁y試
39、與傳統(tǒng)系統(tǒng)測試相類 似,但它們的測試戰(zhàn)術(shù)是不同的。由于面向?qū)λ?,但它們的測試戰(zhàn)術(shù)是不同的。由于面向?qū)?象分析與設(shè)計(jì)模型在結(jié)構(gòu)和內(nèi)容上與所得的面象分析與設(shè)計(jì)模型在結(jié)構(gòu)和內(nèi)容上與所得的面 向?qū)ο蟪绦蛳囝愃?,因此,向?qū)ο蟪绦蛳囝愃?,因此,“測試測試”可以起始可以起始 于對(duì)這些模型的評(píng)審。一旦產(chǎn)生了代碼,真正于對(duì)這些模型的評(píng)審。一旦產(chǎn)生了代碼,真正 的面向?qū)ο鬁y試以設(shè)計(jì)一系列檢驗(yàn)類操作的的面向?qū)ο鬁y試以設(shè)計(jì)一系列檢驗(yàn)類操作的 “小型測試小型測試”以及當(dāng)一個(gè)類與其他類進(jìn)行協(xié)作以及當(dāng)一個(gè)類與其他類進(jìn)行協(xié)作 時(shí)是否出現(xiàn)錯(cuò)誤開始。當(dāng)集成類形成一個(gè)子系時(shí)是否出現(xiàn)錯(cuò)誤開始。當(dāng)集成類形成一個(gè)子系 統(tǒng)時(shí),結(jié)合基于故障
40、的方法,運(yùn)用基于使用的統(tǒng)時(shí),結(jié)合基于故障的方法,運(yùn)用基于使用的 測試對(duì)相互協(xié)作的類進(jìn)行完全檢查。最后,利測試對(duì)相互協(xié)作的類進(jìn)行完全檢查。最后,利 用用例發(fā)現(xiàn)軟件確認(rèn)層的錯(cuò)誤。用用例發(fā)現(xiàn)軟件確認(rèn)層的錯(cuò)誤。 面向?qū)ο鬁y試方法 v傳統(tǒng)的測試用例是通過軟件的輸入傳統(tǒng)的測試用例是通過軟件的輸入-處理處理- 輸出視圖或單個(gè)模塊的算法細(xì)節(jié)來設(shè)計(jì)的。輸出視圖或單個(gè)模塊的算法細(xì)節(jié)來設(shè)計(jì)的。 面向?qū)ο鬁y試重于設(shè)計(jì)適當(dāng)?shù)牟僮餍蛄幸悦嫦驅(qū)ο鬁y試重于設(shè)計(jì)適當(dāng)?shù)牟僮餍蛄幸?檢查類的狀態(tài)。檢查類的狀態(tài)。 面向?qū)ο蟾拍畹臏y試用例設(shè)計(jì)的含義 v類經(jīng)過分析模型到設(shè)計(jì)模型的演變,它成類經(jīng)過分析模型到設(shè)計(jì)模型的演變,它成 為測試用例
41、設(shè)計(jì)的目標(biāo)。由于操作和屬性為測試用例設(shè)計(jì)的目標(biāo)。由于操作和屬性 是封裝的,從類的外面測試操作通常是徒是封裝的,從類的外面測試操作通常是徒 勞的。盡管封裝是面向?qū)ο蟮谋举|(zhì)特征之勞的。盡管封裝是面向?qū)ο蟮谋举|(zhì)特征之 一,但它可能成為測試的一個(gè)小障礙。一,但它可能成為測試的一個(gè)小障礙。 “測試需要對(duì)象的具體和抽象狀態(tài)測試需要對(duì)象的具體和抽象狀態(tài)”。然。然 而,封裝使獲取這些信息有些困難,除非而,封裝使獲取這些信息有些困難,除非 提供內(nèi)置操作來報(bào)告類型屬性值。提供內(nèi)置操作來報(bào)告類型屬性值。 面向?qū)ο蟾拍畹臏y試用例設(shè)計(jì)的含義 v繼承也為測試用例設(shè)計(jì)者提出了額外的挑戰(zhàn)。繼承也為測試用例設(shè)計(jì)者提出了額外的挑
42、戰(zhàn)。 即使已取得復(fù)用,每個(gè)新的使用環(huán)境也需要重即使已取得復(fù)用,每個(gè)新的使用環(huán)境也需要重 新測試。另外,由于增加了所需測試環(huán)境的數(shù)新測試。另外,由于增加了所需測試環(huán)境的數(shù) 量,多重繼承使測試進(jìn)一步復(fù)雜化。量,多重繼承使測試進(jìn)一步復(fù)雜化。 v若從超類中派生的子類實(shí)例使用在相同的問題若從超類中派生的子類實(shí)例使用在相同的問題 域,則當(dāng)測試子類時(shí),使用超類中生成的測試域,則當(dāng)測試子類時(shí),使用超類中生成的測試 用例集是可能的。然而,若子類用在一個(gè)完全用例集是可能的。然而,若子類用在一個(gè)完全 不同的環(huán)境中,則超類的測試用例將具有很小不同的環(huán)境中,則超類的測試用例將具有很小 的可應(yīng)用性,因而必須設(shè)計(jì)新的測試用
43、例。的可應(yīng)用性,因而必須設(shè)計(jì)新的測試用例。 傳統(tǒng)測試用例設(shè)計(jì)方法的可應(yīng)用性 v白盒測試方法可以應(yīng)用于類中定義的操作。白盒測試方法可以應(yīng)用于類中定義的操作。 基本路徑、循環(huán)測試或數(shù)據(jù)流技術(shù)有助于基本路徑、循環(huán)測試或數(shù)據(jù)流技術(shù)有助于 確保測試一個(gè)操作的每條語句。然而,許確保測試一個(gè)操作的每條語句。然而,許 多類操作的簡潔結(jié)構(gòu)使某些人認(rèn)為:用于多類操作的簡潔結(jié)構(gòu)使某些人認(rèn)為:用于 白盒測試的工作量最好直接用于類層次的白盒測試的工作量最好直接用于類層次的 測試。測試。 v與利用傳統(tǒng)的軟件工程方法所開發(fā)的系統(tǒng)與利用傳統(tǒng)的軟件工程方法所開發(fā)的系統(tǒng) 一樣,黑盒測試方法也適用于面向?qū)ο笙狄粯?,黑盒測試方法也適
44、用于面向?qū)ο笙?統(tǒng)。用例可為黑盒測試和基于狀態(tài)的測試統(tǒng)。用例可為黑盒測試和基于狀態(tài)的測試 設(shè)計(jì)提供有用的輸入。設(shè)計(jì)提供有用的輸入。 基于故障的測試 v在面向?qū)ο笙到y(tǒng)中,基于故障測試的目標(biāo)是設(shè)在面向?qū)ο笙到y(tǒng)中,基于故障測試的目標(biāo)是設(shè) 計(jì)最有可能發(fā)現(xiàn)似乎可能故障計(jì)最有可能發(fā)現(xiàn)似乎可能故障(以下稱為似然故以下稱為似然故 障障)的測試。由于產(chǎn)品或系統(tǒng)必須符合用戶需求,的測試。由于產(chǎn)品或系統(tǒng)必須符合用戶需求, 完成基于故障的測試所需的初步計(jì)劃是從分析完成基于故障的測試所需的初步計(jì)劃是從分析 模型開始的。測試者查找似然故障。為確定這模型開始的。測試者查找似然故障。為確定這 些故障是否存在,設(shè)計(jì)測試用例以檢
45、查設(shè)計(jì)或些故障是否存在,設(shè)計(jì)測試用例以檢查設(shè)計(jì)或 代碼。代碼。 v若分析和設(shè)計(jì)模型可以洞察有可能出錯(cuò)的事物,若分析和設(shè)計(jì)模型可以洞察有可能出錯(cuò)的事物, 則基于故障的測試可以花費(fèi)相當(dāng)少的工作量而則基于故障的測試可以花費(fèi)相當(dāng)少的工作量而 發(fā)現(xiàn)大量的錯(cuò)誤。發(fā)現(xiàn)大量的錯(cuò)誤。 基于故障的測試 v集成測試尋找操作調(diào)用或信息連接中的似然錯(cuò)誤。在這集成測試尋找操作調(diào)用或信息連接中的似然錯(cuò)誤。在這 種環(huán)境下,有三種錯(cuò)誤可以發(fā)現(xiàn):非預(yù)期的結(jié)果、錯(cuò)誤種環(huán)境下,有三種錯(cuò)誤可以發(fā)現(xiàn):非預(yù)期的結(jié)果、錯(cuò)誤 的操作的操作/消息使用,以及不正確的調(diào)用。為確定函數(shù)消息使用,以及不正確的調(diào)用。為確定函數(shù)(操操 作作)調(diào)用時(shí)的似然故
46、障,必須檢查操作的行為。調(diào)用時(shí)的似然故障,必須檢查操作的行為。 v集成測試適用于屬性與操作。對(duì)象集成測試適用于屬性與操作。對(duì)象“行為行為”通過賦予屬通過賦予屬 性值來定義。測試應(yīng)該檢查屬性以確定不同類型的對(duì)象性值來定義。測試應(yīng)該檢查屬性以確定不同類型的對(duì)象 行為是否存在合適的值。行為是否存在合適的值。 v集成測試試圖發(fā)現(xiàn)用戶對(duì)象而不是服務(wù)對(duì)象中的錯(cuò)誤。集成測試試圖發(fā)現(xiàn)用戶對(duì)象而不是服務(wù)對(duì)象中的錯(cuò)誤。 集成測試的重點(diǎn)是確定調(diào)用代碼而不是被調(diào)用代碼中是集成測試的重點(diǎn)是確定調(diào)用代碼而不是被調(diào)用代碼中是 否存在錯(cuò)誤。利用操作調(diào)用為線索,是找出檢查調(diào)用代否存在錯(cuò)誤。利用操作調(diào)用為線索,是找出檢查調(diào)用代
47、碼的測試需求的一種方式。碼的測試需求的一種方式。 測試用例與類層次 v繼承并不能排除對(duì)所有派生類進(jìn)行全面測繼承并不能排除對(duì)所有派生類進(jìn)行全面測 試的需要。事實(shí)上,它確實(shí)使測試過程更試的需要。事實(shí)上,它確實(shí)使測試過程更 復(fù)雜。考慮下列情形,類復(fù)雜。考慮下列情形,類Base包含了操包含了操 作作inherited()和和redefined(),類類 Derived重定義重定義redefined()以用于某個(gè)以用于某個(gè) 局部環(huán)境中局部環(huán)境中。毫無疑問,。毫無疑問, Derived:redefined()必須被測試,因?yàn)楸仨毐粶y試,因?yàn)?它表示一個(gè)新的設(shè)計(jì)和新的代碼。但是,它表示一個(gè)新的設(shè)計(jì)和新的代碼
48、。但是, Derived:inherited()需要重新測試嗎?需要重新測試嗎? 測試用例與類層次 v若若Derived:inherited()調(diào)用調(diào)用 redefined(),而,而redefined()的行為已經(jīng)的行為已經(jīng) 發(fā)生變化,發(fā)生變化,Derived:inherited()可能具可能具 有新的行為,因此,它需要新的測試,盡有新的行為,因此,它需要新的測試,盡 管設(shè)計(jì)與代碼沒有發(fā)生變化。需要注意的管設(shè)計(jì)與代碼沒有發(fā)生變化。需要注意的 是,只有是,只有Derived:inherited()的所有測的所有測 試的一個(gè)子集需要執(zhí)行。若試的一個(gè)子集需要執(zhí)行。若inherited()的的 部分
49、設(shè)計(jì)和代碼與部分設(shè)計(jì)和代碼與redefined()無關(guān),則在無關(guān),則在 派生類中的代碼不需要重新測試。派生類中的代碼不需要重新測試。 測試用例與類層次 vBase:redefined()和和Derived:redefined()是具是具 有不同規(guī)格說明和實(shí)現(xiàn)的兩個(gè)操作。它們各自有一有不同規(guī)格說明和實(shí)現(xiàn)的兩個(gè)操作。它們各自有一 組從其規(guī)格說明和實(shí)現(xiàn)中生成的測試需求。那些測組從其規(guī)格說明和實(shí)現(xiàn)中生成的測試需求。那些測 試需求探查似然故障:集成故障、條件故障、邊界試需求探查似然故障:集成故障、條件故障、邊界 故障,等等。但操作有可能是類似的,它們的測試故障,等等。但操作有可能是類似的,它們的測試 需
50、求集將重迭。面向?qū)ο笤O(shè)計(jì)得越好,重迭就越多。需求集將重迭。面向?qū)ο笤O(shè)計(jì)得越好,重迭就越多。 新的測試僅需要從不被新的測試僅需要從不被Base:redefined()測試滿測試滿 足的足的Derived:redefined()的需求中生成。的需求中生成。 v總之,總之,Base:redefined()測試可應(yīng)用于類測試可應(yīng)用于類 Derived的對(duì)象。測試輸入可能同時(shí)滿足基類和的對(duì)象。測試輸入可能同時(shí)滿足基類和 派生類。但是,在派生類中預(yù)期的結(jié)果可能有所派生類。但是,在派生類中預(yù)期的結(jié)果可能有所 不同。不同。 基于場景的測試 v基于故障測試忽略了兩種主要錯(cuò)誤類型:基于故障測試忽略了兩種主要錯(cuò)誤類
51、型: (1)不正確的規(guī)格說明;()不正確的規(guī)格說明;(2)子系統(tǒng)間)子系統(tǒng)間 的交互。當(dāng)出現(xiàn)了與不正確的規(guī)格說明相的交互。當(dāng)出現(xiàn)了與不正確的規(guī)格說明相 關(guān)的錯(cuò)誤時(shí),產(chǎn)品并不做客戶希望的事情,關(guān)的錯(cuò)誤時(shí),產(chǎn)品并不做客戶希望的事情, 它有可能做錯(cuò)誤的事情或漏掉重要的功能。它有可能做錯(cuò)誤的事情或漏掉重要的功能。 但是,在這兩種情況下,質(zhì)量均受到損害。但是,在這兩種情況下,質(zhì)量均受到損害。 當(dāng)一個(gè)子系統(tǒng)的行為創(chuàng)建的環(huán)境使另一個(gè)當(dāng)一個(gè)子系統(tǒng)的行為創(chuàng)建的環(huán)境使另一個(gè) 系統(tǒng)失效時(shí),則與子系統(tǒng)交互相關(guān)的錯(cuò)誤系統(tǒng)失效時(shí),則與子系統(tǒng)交互相關(guān)的錯(cuò)誤 出現(xiàn)。出現(xiàn)。 基于場景的測試 v基于場景的測試基于場景的測試關(guān)心用
52、戶做什么,而關(guān)心用戶做什么,而 不是產(chǎn)品做什么。這意味著捕獲用戶不是產(chǎn)品做什么。這意味著捕獲用戶 必須完成的任務(wù),然后在測試時(shí)使用必須完成的任務(wù),然后在測試時(shí)使用 它們及其變體。它們及其變體。 v場景可以發(fā)現(xiàn)交互錯(cuò)誤。為了達(dá)到這場景可以發(fā)現(xiàn)交互錯(cuò)誤。為了達(dá)到這 個(gè)目標(biāo),測試用例必須比基于故障的個(gè)目標(biāo),測試用例必須比基于故障的 測試更復(fù)雜且更切合實(shí)際?;趫鼍皽y試更復(fù)雜且更切合實(shí)際?;趫鼍?的測試傾向于用單一測試檢查多個(gè)子的測試傾向于用單一測試檢查多個(gè)子 系統(tǒng)。系統(tǒng)。 類級(jí)可應(yīng)用的測試方法 v軟件測試從軟件測試從“小型小型”測試開始,慢慢測試開始,慢慢 進(jìn)展到進(jìn)展到“大型大型”測試。測試?!靶?/p>
53、型小型”測試測試 側(cè)重于單個(gè)類及該類封裝的方法。面?zhèn)戎赜趩蝹€(gè)類及該類封裝的方法。面 向?qū)ο鬁y試期間,隨機(jī)測試和分割是向?qū)ο鬁y試期間,隨機(jī)測試和分割是 可以用于檢查類的方法??梢杂糜跈z查類的方法。 面向?qū)ο蟮碾S機(jī)測試 v考慮一個(gè)銀行應(yīng)用,其中考慮一個(gè)銀行應(yīng)用,其中Account類類 有下列操作:有下列操作:open()、setup()、 deposit()、withdraw()、 balance()、summarize()、 creditLimit()和和close()。其中,每個(gè)。其中,每個(gè) 操作均可應(yīng)用于操作均可應(yīng)用于Account類,但問題類,但問題 的本質(zhì)隱含了一些限制。即使有了這的本質(zhì)
54、隱含了一些限制。即使有了這 些限制,仍存在很多種操作排列。些限制,仍存在很多種操作排列。 面向?qū)ο蟮碾S機(jī)測試 v一個(gè)一個(gè)Account對(duì)象的最小行為的生命歷史包含以下對(duì)象的最小行為的生命歷史包含以下 操作:操作: open setup deposit withdraw close v這表示這表示Account的最小測試序列。然而,大量其他的最小測試序列。然而,大量其他 行為可以在這個(gè)序列中發(fā)生:行為可以在這個(gè)序列中發(fā)生: open setup deposit deposit|withdraw|balance|summarize|creditlimitn withdraw close 一些不同的
55、操作序列可以隨機(jī)產(chǎn)生,例如:一些不同的操作序列可以隨機(jī)產(chǎn)生,例如: 測試用例測試用例r1: open setup deposit balance summarize withdraw close 測試用例測試用例r2: open setup deposit withdraw deposit balance creditLimit withdraw close v執(zhí)行這些序列和其他隨機(jī)順序測試以檢查不同的類執(zhí)行這些序列和其他隨機(jī)順序測試以檢查不同的類 實(shí)例的生命歷史。實(shí)例的生命歷史。 類級(jí)的劃分測試 v與傳統(tǒng)軟件的等價(jià)劃分基本相似,劃與傳統(tǒng)軟件的等價(jià)劃分基本相似,劃 分測試減小測試特定類所需的測
56、試用分測試減小測試特定類所需的測試用 例數(shù)量。對(duì)輸入和輸出進(jìn)行分類,設(shè)例數(shù)量。對(duì)輸入和輸出進(jìn)行分類,設(shè) 計(jì)測試用例以檢查每個(gè)類。計(jì)測試用例以檢查每個(gè)類。 類級(jí)的劃分測試 v基于狀態(tài)劃分就是根據(jù)它們改變類狀態(tài)的能基于狀態(tài)劃分就是根據(jù)它們改變類狀態(tài)的能 力對(duì)類操作進(jìn)行分類。再考慮力對(duì)類操作進(jìn)行分類。再考慮Account類,狀類,狀 態(tài)操作包括態(tài)操作包括deposit()和和withdraw(),而非,而非 狀態(tài)操作包括狀態(tài)操作包括balance()、summarize()和和 creditLimit()。將改變狀態(tài)的操作和不改變。將改變狀態(tài)的操作和不改變 狀態(tài)的操作分開,分別進(jìn)行測試。狀態(tài)的操作分
57、開,分別進(jìn)行測試。 測試用例測試用例p1:open setup deposit deposit withdraw withdraw close 測試用例測試用例p2:open setup deposit summarize creditLimit withdraw close v測試用例測試用例p1檢查改變狀態(tài)的操作,而測試檢查改變狀態(tài)的操作,而測試 用例用例p2檢查不改變狀態(tài)的操作。檢查不改變狀態(tài)的操作。 類級(jí)的劃分測試 v基于屬性劃分基于屬性劃分就是根據(jù)它們所使用的就是根據(jù)它們所使用的 屬性進(jìn)行劃分類操作。對(duì)于類屬性進(jìn)行劃分類操作。對(duì)于類 Account,屬性,屬性balance和和 cr
58、editLimit可用于定義劃分。操作可可用于定義劃分。操作可 分為三類:分為三類:(1)使用使用creditLimit的操的操 作;作;(2)修改修改creditLimit的操作;的操作;(3) 既不使用也不修改既不使用也不修改creditLimit的操作。的操作。 然后為每個(gè)劃分設(shè)計(jì)測試用例。然后為每個(gè)劃分設(shè)計(jì)測試用例。 類級(jí)的劃分測試 v基于類別劃分就是根據(jù)每個(gè)操作所完成基于類別劃分就是根據(jù)每個(gè)操作所完成 的一般功能進(jìn)行劃分類操作。例如,在的一般功能進(jìn)行劃分類操作。例如,在 類類Account中,操作可分為中,操作可分為初始化操初始化操 作作open()、setup(),計(jì)算操作計(jì)算操作 deposit()、withdraw(),查詢操作查詢操作 balance()、summarize()、 creditLimit()以及終止操作以及終止操作close(). 類間測試用例設(shè)計(jì) v當(dāng)開始集成面向?qū)ο笙到y(tǒng)時(shí),測試用當(dāng)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 零售商業(yè)銷售額對(duì)比分析表
- 廣東省深圳市寶安區(qū)2024-2025學(xué)年高二上學(xué)期1月期末調(diào)研測試生物學(xué)試題(含答案)
- 公司季度發(fā)展調(diào)研報(bào)告分析
- 采購成本預(yù)算表格
- 電子競技產(chǎn)業(yè)投資合作協(xié)議
- 智能安防系統(tǒng)合作協(xié)議
- 高科技產(chǎn)業(yè)園建設(shè)投資合同
- 大型企業(yè)采購管理優(yōu)化合作協(xié)議
- 生物學(xué)中的細(xì)胞生物學(xué)練習(xí)題集
- 新員工快速上手工作指南
- 工程計(jì)量報(bào)審表
- 人教版音樂八年級(jí)下冊(cè)《奧林匹克頌、奧林匹克號(hào)角》課件
- 2022年河北公務(wù)員考試《申論》真題及參考答案
- 汽車涂裝工藝完整版ppt課件全套教程
- 十年來北京蓋了多少住宅
- 25項(xiàng)品質(zhì)保證展開計(jì)劃PPT課件
- 畢業(yè)設(shè)計(jì)(論文)-白菜收獲機(jī)的設(shè)計(jì)與研究
- 初中歷史興趣小組活動(dòng)方案
- 【班會(huì)課件】時(shí)代先鋒雷鋒精神 高中主題班會(huì)課件
- 西南交通大學(xué)工程測量
- 電梯基本結(jié)構(gòu)
評(píng)論
0/150
提交評(píng)論