下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
白盒測(cè)試白盒測(cè)試概述靜態(tài)白盒測(cè)試動(dòng)態(tài)白盒測(cè)試邏輯覆蓋基本路徑測(cè)試方法2022/12/232白盒測(cè)試方法為什么要進(jìn)行白盒測(cè)試?如果所有軟件錯(cuò)誤的根源都可以追溯到某個(gè)唯一原因,那么問(wèn)題就簡(jiǎn)單了。然而,事實(shí)上一個(gè)bug常常是由多個(gè)因素共同導(dǎo)致的,如下圖所示。假設(shè)此時(shí)編碼工作已結(jié)束,沒(méi)有人知道代碼中有一個(gè)潛在的被0除的錯(cuò)誤。若測(cè)試時(shí)采用的測(cè)試用例的執(zhí)行路徑?jīng)]有同時(shí)經(jīng)過(guò)x=0和y=5/x進(jìn)行測(cè)試,顯然測(cè)試工作似乎非常完善,測(cè)試用例覆蓋了所有執(zhí)行語(yǔ)句,也沒(méi)有被0除的錯(cuò)誤發(fā)生。白盒測(cè)試白盒測(cè)試又稱透明盒測(cè)試、邏輯驅(qū)動(dòng)測(cè)試是測(cè)試被測(cè)單元內(nèi)部如何工作的一種測(cè)試方法根據(jù)程序內(nèi)部邏輯結(jié)構(gòu)及有關(guān)信息來(lái)設(shè)計(jì)和選擇測(cè)試用例,對(duì)程序的邏輯結(jié)構(gòu)進(jìn)行測(cè)試可覆蓋全部代碼、分支、條件和路徑等4/39白盒測(cè)試目的保證程序中所有關(guān)鍵路徑的測(cè)試,防止由于沒(méi)有執(zhí)行的路徑在實(shí)際投入運(yùn)行后執(zhí)行到發(fā)生意外的情況衡量測(cè)試完整性程序內(nèi)部所有的邏輯值真、假兩個(gè)分支的覆蓋檢查內(nèi)存泄漏異常處理的分支語(yǔ)句的執(zhí)行解決實(shí)驗(yàn)條件下很難搭建真實(shí)測(cè)試環(huán)境的問(wèn)題檢查代碼符合一定的編碼規(guī)范,減少由于編碼不規(guī)范而引入錯(cuò)誤5/39白盒測(cè)試概述靜態(tài)白盒測(cè)試動(dòng)態(tài)白盒測(cè)試邏輯覆蓋基本路徑測(cè)試方法2022/12/236靜態(tài)白盒測(cè)試靜態(tài)白盒測(cè)試:檢查設(shè)計(jì)和代碼靜態(tài)測(cè)試是指測(cè)試非運(yùn)行部分---檢查和審查.白盒(或者稱為透明盒)測(cè)試是指訪問(wèn)代碼,能夠察看和審查.指在不執(zhí)行軟件的條件下有條理地仔細(xì)審查軟件設(shè)計(jì)、體系結(jié)構(gòu)和代碼,從而找出軟件缺陷地過(guò)程,有時(shí)稱為結(jié)構(gòu)化分析。進(jìn)行靜態(tài)白盒測(cè)試的首要原因是盡早發(fā)現(xiàn)軟件缺陷,以找出動(dòng)態(tài)黑盒測(cè)試難以發(fā)現(xiàn)或隔離的軟件缺陷。另一個(gè)好處是給黑盒測(cè)試人員提供思路。靜態(tài)白盒測(cè)試代碼走查(walkthrough)開發(fā)組內(nèi)部進(jìn)行的,采用講解、討論和模擬運(yùn)行的方式進(jìn)行的查找錯(cuò)誤的活動(dòng)代碼審查(Inspection)開發(fā)組內(nèi)部進(jìn)行的,采用講解、提問(wèn)并使用Checklist方式進(jìn)行的查找錯(cuò)誤的活動(dòng)。一般有正式的計(jì)劃、流程和結(jié)果報(bào)告技術(shù)評(píng)審(Review)開發(fā)組、測(cè)試組和相關(guān)人員(QA、產(chǎn)品經(jīng)理等)聯(lián)合進(jìn)行的,采用講解、提問(wèn)并使用Checklist方式進(jìn)行的查找錯(cuò)誤的活動(dòng)。一般有正式的計(jì)劃、流程和結(jié)果報(bào)告正式審查正式審查(formalreview)就是進(jìn)行靜態(tài)白盒測(cè)試的過(guò)程.正式審查的含義很廣,從兩個(gè)程序員的交談,到軟件設(shè)計(jì)和代碼的詳細(xì),嚴(yán)格檢查均屬于此過(guò)程.正式審查的4個(gè)基本要素:
確定問(wèn)題 遵守規(guī)則 準(zhǔn)備 編寫報(bào)告編碼規(guī)范和標(biāo)準(zhǔn)堅(jiān)持標(biāo)準(zhǔn)和規(guī)范的原因可靠性:按照某種標(biāo)準(zhǔn)或規(guī)范編寫的代碼比不規(guī)范的代碼更可靠,缺陷更少可讀性/可維護(hù)性符合標(biāo)準(zhǔn)和規(guī)范的代碼,易于閱讀、理解和維護(hù)移植性不同平臺(tái)、不同硬件,不同編譯器10/39代碼審查單代碼審查單用于把代碼與標(biāo)準(zhǔn)或規(guī)范進(jìn)行對(duì)照補(bǔ)充,并確保代碼符合項(xiàng)目的設(shè)計(jì)要求。11/39數(shù)據(jù)引用錯(cuò)誤數(shù)據(jù)聲明錯(cuò)誤計(jì)算錯(cuò)誤函數(shù)參數(shù)錯(cuò)誤比較錯(cuò)誤輸入/輸出錯(cuò)誤其它檢查控制流程錯(cuò)誤關(guān)于靜態(tài)白盒測(cè)試在正式審查中驗(yàn)證軟件應(yīng)該查找的問(wèn)題:數(shù)據(jù)引用錯(cuò)誤 數(shù)據(jù)引用錯(cuò)誤是指使用未經(jīng)正確聲明和初始化的變量、常量、數(shù)組、字符串或記錄而導(dǎo)致的軟件缺陷。是否引用了未初始化的變量?查找遺漏之處與查找錯(cuò)誤同等重要數(shù)組和字符串的下標(biāo)是整數(shù)值嗎?下標(biāo)總是在數(shù)組和字符串長(zhǎng)度范圍之內(nèi)嗎?在檢索操作或者引用數(shù)組下標(biāo)時(shí)是否包含“丟掉一個(gè)”這樣的潛在錯(cuò)誤?變量是否被賦予不同類型的值?例如,無(wú)意中使代碼為整形變量賦予一個(gè)浮點(diǎn)數(shù)值?為引用的指針?lè)峙鋬?nèi)存了嗎?一個(gè)數(shù)據(jù)結(jié)構(gòu)是否在多個(gè)函數(shù)或者子程序中引用,在每一個(gè)引用中明確定義結(jié)構(gòu)了嗎?通用代碼審查清單2.數(shù)據(jù)聲明數(shù)據(jù)數(shù)據(jù)聲明缺陷產(chǎn)生的原因是不正確地聲明或使用變量和常量.所有變量都賦予正常的長(zhǎng)度、類型和存儲(chǔ)類了嗎?例如,本應(yīng)聲明為字符串的變量聲明為字符數(shù)組了嗎?變量是否在聲明的同時(shí)進(jìn)行了初始化?是否正確初始化并與其類型一致?變量有相似的名稱嗎?這基本上不算軟件缺陷,但有可能是程序中其他地方出現(xiàn)名稱混淆的信息。存在聲明過(guò)、但從未引用或者只引用過(guò)一次的變量嗎?所有變量在特定模塊中都顯示聲明了嗎?如果沒(méi)有,是否可以理解為該變量與更高級(jí)別的模塊共享3.計(jì)算錯(cuò)誤計(jì)算或者運(yùn)算錯(cuò)誤實(shí)質(zhì)上是糟糕的數(shù)學(xué)問(wèn)題.計(jì)算無(wú)法得到預(yù)期結(jié)果.計(jì)算中是否使用了不同數(shù)據(jù)類型的變量,例如將整數(shù)與浮點(diǎn)數(shù)相加?計(jì)算中是否使用了類型相同但長(zhǎng)度不同的變量---例如,將字節(jié)與字相加?計(jì)算時(shí)是否了解和考慮到編譯器對(duì)類型或長(zhǎng)度不一致的變量的轉(zhuǎn)換規(guī)則?賦值的目的變量是否小于賦值表達(dá)式的值?在數(shù)值計(jì)算過(guò)程中是否可能出現(xiàn)溢出?除數(shù)/模是否可能為零?對(duì)于整型算術(shù)運(yùn)算,處理某些計(jì)算(特別是除法)的代碼是否會(huì)導(dǎo)致精度丟失?變量的值是否超過(guò)有意義的范圍?例如,可能性的計(jì)算結(jié)果是否小于0%或者大于100%對(duì)于包含多個(gè)操作數(shù)的表達(dá)式,求值的次序是否混亂,運(yùn)算優(yōu)先級(jí)對(duì)嗎?需要加括號(hào)使其清晰嗎?4.比較錯(cuò)誤小于、大于、等于、不等于、真、假。比較和判斷錯(cuò)誤很可能是由于邊界條件問(wèn)題。比較得正確嗎?雖然聽起來(lái)簡(jiǎn)單,但是比較應(yīng)該是小于還是小于等于常常發(fā)生混淆。存在分?jǐn)?shù)或者浮點(diǎn)值之間的比較嗎?如果有,精度問(wèn)題會(huì)影響比較嗎?1.000001和1.000002非常接近,它們相等么?每一個(gè)邏輯表達(dá)式都正確表達(dá)了么?邏輯計(jì)算按預(yù)計(jì)的進(jìn)行了嗎?求值次序有疑問(wèn)嗎?邏輯表達(dá)式的操作數(shù)是邏輯值嗎?例如,是否包含整數(shù)值的整型變量用于邏輯計(jì)算中?5.控制流程錯(cuò)誤 控制流程錯(cuò)誤的原因是編程語(yǔ)言中循環(huán)等控制結(jié)構(gòu)未按預(yù)期方式工作.它們通常由計(jì)算或者比較錯(cuò)誤直接或者間接造成.如果程序包含begin…end和do…while等語(yǔ)句組,end是否明確給出并與語(yǔ)句組對(duì)應(yīng)?程序、模塊、子程序和循環(huán)能否終止?如果不能,可以接受嗎?可能存在永遠(yuǎn)不停的循環(huán)嗎?循環(huán)是否可能永不執(zhí)行?如果是這樣,可以接受嗎?如果程序包含像switch…case語(yǔ)句這樣的多個(gè)分支,索引變量能超出可能的分支數(shù)目嗎?如果超出,該情況能正確處理嗎?是否存在”丟掉一個(gè)”情況,導(dǎo)致循環(huán)意外的流程?6.子程序參數(shù)錯(cuò)誤子程序參數(shù)錯(cuò)誤的來(lái)源是軟件子程序不正確地傳遞數(shù)據(jù).子程序接收的參數(shù)類型和大小與調(diào)用代碼發(fā)送的匹配嗎?次序正確嗎?如果子程序有多個(gè)入口點(diǎn),引用的參數(shù)是否與當(dāng)前入口點(diǎn)沒(méi)有關(guān)聯(lián)?常量是否當(dāng)做形參傳遞,在子程序中被意外改動(dòng)?子程序更改了僅作為輸入值的參數(shù)嗎?每一個(gè)參數(shù)的單位是否與相應(yīng)的形參匹配---例如,英寸對(duì)米如果存在全局變量,在所有引用子程序中是否有相同的定義和屬性?7.輸入/輸出錯(cuò)誤 輸入/輸出錯(cuò)誤包括文件讀取、接受鍵盤或者鼠標(biāo)輸入以及向打印機(jī)或者屏幕等輸出設(shè)備寫入錯(cuò)誤。下列條目非常簡(jiǎn)單、通用、應(yīng)該在使用時(shí)補(bǔ)充,以涵蓋所測(cè)試的軟件軟件是否嚴(yán)格遵守外部設(shè)備讀寫數(shù)據(jù)的專用格式?文件或者外設(shè)不存在或者未準(zhǔn)備好的錯(cuò)誤情況有處理嗎?軟件是否處理外部設(shè)備未連接、不可用,或者讀寫過(guò)程中存貯空間占滿等情況?軟件以預(yù)期方式處理預(yù)計(jì)的錯(cuò)誤嗎?檢查錯(cuò)誤提示信息的準(zhǔn)確性、正確性、語(yǔ)法和拼寫了嗎?8.其他檢查 定義了一些不適合放在其他類別的條目。這不是為了完整,而是提示為定制軟件項(xiàng)目清單應(yīng)該加入的內(nèi)容。軟件是否使用其他外語(yǔ)?是否處理擴(kuò)展ASCII字符?是否需要用統(tǒng)一編碼取代ASCII?軟件是否要移植到其他編譯器和CPU,具有這樣做的許可嗎?如果沒(méi)有計(jì)劃或者測(cè)試,那么,移植性可能成為一個(gè)大難題。是否考慮了兼容性,以使軟件能夠運(yùn)行于不同數(shù)量的可用內(nèi)存?程序編譯是否產(chǎn)生“警告”或者“提示”信息?動(dòng)態(tài)測(cè)試和靜態(tài)測(cè)試靜態(tài)測(cè)試靜態(tài)測(cè)試不實(shí)際運(yùn)行軟件,主要是對(duì)軟件的編程格式、結(jié)構(gòu)等方面進(jìn)行評(píng)估靜態(tài)測(cè)試包括代碼檢查、程序結(jié)構(gòu)分析、代碼質(zhì)量度量等。它可以由人工進(jìn)行,也可以借助軟件工具自動(dòng)進(jìn)行代碼檢查比動(dòng)態(tài)測(cè)試更有效率,能快速找到缺陷,發(fā)現(xiàn)30%~70%的邏輯設(shè)計(jì)和編碼缺陷白盒測(cè)試概述靜態(tài)白盒測(cè)試動(dòng)態(tài)白盒測(cè)試邏輯覆蓋基本路徑測(cè)試方法2022/12/2321動(dòng)態(tài)白盒測(cè)試動(dòng)態(tài)白盒測(cè)試:由于是動(dòng)態(tài)的,就一定是測(cè)試運(yùn)行中的程序,由于是白盒,就一定要洞察盒子里面,檢查代碼并觀察運(yùn)行狀況。生成測(cè)試數(shù)據(jù)、分析測(cè)試結(jié)果的工作量大,使開展測(cè)試工作費(fèi)時(shí)、費(fèi)力、費(fèi)人。白盒測(cè)試用例的設(shè)計(jì)方法邏輯覆蓋方法:以程序的內(nèi)部邏輯結(jié)構(gòu)為基礎(chǔ)。有以下6種:語(yǔ)句覆蓋判定覆蓋條件覆蓋判定-條件覆蓋條件組合覆蓋路徑覆蓋基本路徑測(cè)試:在程序控制流程的基礎(chǔ)上,分析控制構(gòu)造的環(huán)路復(fù)雜性,導(dǎo)出基本可執(zhí)行路徑集合,從而設(shè)計(jì)測(cè)試用例。白盒測(cè)試概述靜態(tài)白盒測(cè)試動(dòng)態(tài)白盒測(cè)試邏輯覆蓋基本路徑測(cè)試方法2022/12/2324邏輯覆蓋語(yǔ)句覆蓋測(cè)試判定(分支)覆蓋測(cè)試條件覆蓋測(cè)試判定-條件覆蓋測(cè)試條件組合覆蓋測(cè)試路徑覆蓋測(cè)試?yán)簩?shí)現(xiàn)一個(gè)簡(jiǎn)單的數(shù)學(xué)運(yùn)算
Dima,bAsIntegerDimcAsDoubleIf(a>0Andb>0)Thenc=c/aEndifIf(a>1orc>1)Thenc=c+1Endifc=b+c語(yǔ)句覆蓋基本思想是:設(shè)計(jì)若干測(cè)試用例,運(yùn)行被測(cè)程序,使程序中每個(gè)可執(zhí)行語(yǔ)句至少執(zhí)行一次。1if(條件表達(dá)式)
{
語(yǔ)句1}先計(jì)算(條件1)中表達(dá)式的值,如果其值為非零,則執(zhí)行(語(yǔ)句1)…條件應(yīng)該是個(gè)bool類型if(condition==true)
應(yīng)該簡(jiǎn)寫成
if(condition),沒(méi)有必要將bool值表達(dá)式和一個(gè)bool值比較后再返回bool值。
語(yǔ)句覆蓋只需一個(gè)測(cè)試用例:a=2,b=1,c=6;即達(dá)到了語(yǔ)句覆蓋。語(yǔ)句覆蓋【優(yōu)點(diǎn)】
:可以很直觀地從源代碼得到測(cè)試用例,無(wú)須細(xì)分每條判定表達(dá)式。【缺點(diǎn)】
:由于這種測(cè)試方法僅僅針對(duì)程序邏輯中顯式存在的語(yǔ)句,但對(duì)于隱藏的條件是無(wú)法測(cè)試的。例如在第一個(gè)判定((a>0)and(b>0))中把“and”錯(cuò)誤的寫成了“or”,這時(shí)仍可使用該測(cè)試用例,語(yǔ)句覆蓋是最弱的邏輯覆蓋。判定覆蓋基本思想是:設(shè)計(jì)若干測(cè)試用例,運(yùn)行被測(cè)程序,使得程序中每個(gè)判斷的取真分支和取假分支至少經(jīng)歷一次,即判斷真假值均曾被滿足。1判定覆蓋a=2,b=1,c=6可覆蓋判斷M的Y分支和判斷Q的Y分支;
a=-2,b=-1,c=-3可覆蓋判斷M的N分支和判斷Q的N分支
。這兩組測(cè)試用例可覆蓋所有判定的真假分支。判斷M判斷Q判定覆蓋a=1,b=1,c=-3可覆蓋判斷M的Y分支和判斷Q的N分支
;
a=1,b=-2,c=3可覆蓋判斷M的N分支和判斷Q的Y分支
;
同樣的這兩組測(cè)試用例也可覆蓋所有判定的真假分支。判斷M判斷Q判定覆蓋【優(yōu)點(diǎn)】:判定覆蓋具有比語(yǔ)句覆蓋強(qiáng)的測(cè)試能力。同樣判定覆蓋也具有和語(yǔ)句覆蓋一樣的簡(jiǎn)單性,無(wú)須細(xì)分每個(gè)判定就可以得到測(cè)試用例?!救秉c(diǎn)】:往往大部分的判定語(yǔ)句是由多個(gè)邏輯條件組合而成,若僅僅判斷其整個(gè)最終結(jié)果,而忽略每個(gè)條件的取值情況,必然會(huì)遺漏部分測(cè)試路徑。判定覆蓋仍是弱的邏輯覆蓋。16352789410說(shuō)明:以上僅考慮了兩出口的判斷,我們還應(yīng)把判定覆蓋準(zhǔn)則擴(kuò)充到多出口判斷(如Case語(yǔ)句)的情況。因此,判定覆蓋更為廣泛的含義應(yīng)該是使得每一個(gè)判定獲得每一種可能的結(jié)果至少一次。判定覆蓋條件覆蓋在實(shí)際程序代碼中,一個(gè)判定中通常都包含若干條件。條件覆蓋的目的是設(shè)計(jì)若干測(cè)試用例,在執(zhí)行被測(cè)程序后,要使每個(gè)判定中每個(gè)條件的可能值至少滿足一次。1條件覆蓋判斷M表達(dá)式:設(shè)條件a>0
取真記為T1
假F1
條件b>0
取真記為T2
假F2判斷Q表達(dá)式:設(shè)條件a>1取真記為T3
假F3
條件c>1取真記為T4
假F4判斷M判斷Q條件覆蓋測(cè)試用例覆蓋條件具體取值條件a=2,b=-1,c=-2T1,F2,T3,F4a>0,b<=0,a>1,c<=1a=-1,b=2,c=3F1,T2,F3,T4a<=0,b>0,a<=1,c>1它覆蓋了判定M的N分支和判斷Q的Y分支我們用條件覆蓋設(shè)計(jì)的思想就是讓測(cè)試用例能覆蓋T1、T2、T3、T4、F1、F2、F3、F4判斷M判斷Q條件覆蓋【優(yōu)點(diǎn)】:增加了對(duì)條件判定情況的測(cè)試,增加了測(cè)試路徑。【缺點(diǎn)】:條件覆蓋不一定包含判定覆蓋。例如,我們剛才設(shè)計(jì)的用例就沒(méi)有覆蓋判斷M的Y分支和判斷Q的N分支。條件覆蓋只能保證每個(gè)條件可能取值至少執(zhí)行一次,而不考慮所有的判定結(jié)果。判定-條件覆蓋判定/條件覆蓋實(shí)際上是將判定覆蓋和條件覆蓋結(jié)合起來(lái)的一種方法,即:設(shè)計(jì)足夠的測(cè)試用例,使得判定中每個(gè)條件的所有可能取值至少滿足一次,同時(shí)每個(gè)判定的可能結(jié)果也至少出現(xiàn)一次?;舅枷胧牵涸O(shè)計(jì)足夠的測(cè)試用例,使得判斷條件中的所有條件可能至少執(zhí)行一次取值。同時(shí),所有判斷的可能結(jié)果至少執(zhí)行一次。1判定-條件覆蓋按照判定-條件覆蓋的要求,我們?cè)O(shè)計(jì)的測(cè)試用例要滿足如下條件:所有條件可能至少執(zhí)行一次取值;所有判斷的可能結(jié)果至少執(zhí)行一次。要滿足T1、T2、T3、T4F1、F2、F3、F4判斷M判斷Q判定-條件覆蓋測(cè)試用例覆蓋條件覆蓋判斷a=2,b=1,c=6T1,T2,T3,T4M的Y分支和Q的Y分支a=-1,b=-2,c=-3F1,F2,F3,F4M的N分支和Q的N分支要滿足T1、T2、T3、T4F1、F2、F3、F4判斷M判斷Q判定-條件覆蓋【優(yōu)點(diǎn)】:能同時(shí)滿足判定、條件兩種覆蓋標(biāo)準(zhǔn)。【分析】:從表面上看,判定-條件覆蓋測(cè)試了各個(gè)判定中的所有條件的取值,但實(shí)際上,編譯器在檢查含有多個(gè)條件的邏輯表達(dá)式時(shí),某些情況下的某些條件將會(huì)被其它條件所掩蓋。因此,判定/條件覆蓋也不一定能夠完全檢查出邏輯表達(dá)式中的錯(cuò)誤。例如:對(duì)于第一個(gè)判定((a>0)and(b>0))來(lái)說(shuō),必須a>0和b>0這兩個(gè)條件同時(shí)滿足才能確定該判定為真。如果a>0為假,則編譯器將不再檢查b>0這個(gè)條件,那么即使這個(gè)條件有錯(cuò)也無(wú)法被發(fā)現(xiàn)。對(duì)于第二個(gè)判定(a>1)or(c>1)來(lái)說(shuō),若條件a>1滿足,就認(rèn)為該判定為真,這時(shí)將不會(huì)再檢查c>1,那么同樣也無(wú)法發(fā)現(xiàn)這個(gè)條件中的錯(cuò)誤?!救秉c(diǎn)】
:判定/條件覆蓋準(zhǔn)則的缺點(diǎn)是未考慮條件的組合情況。條件組合覆蓋基本思想是:設(shè)計(jì)足夠的測(cè)試用例,使得所有可能的條件取值組合至少執(zhí)行一次1條件組合覆蓋按照條件組合覆蓋的基本思想,對(duì)于前面的例子,我們把每個(gè)判斷中的所有條件進(jìn)行組合,設(shè)計(jì)組合條件。如表所示,而我們?cè)O(shè)計(jì)的測(cè)試用例就要包括所有的組合條件。編號(hào)覆蓋條件取值判定條件取值具體條件取值1T1,T2M取Ya>0,b>02T1,F2M取Na>0,b<=03F1,T2M取Na<=0,b>04F1,F2M取Na<=0,b<=05T3,T4Q取Ya>1,c>16T3,F4Q取Ya>1,c<=17F3,T4Q取Ya<=1,c>18F3,F4Q取Na<=1,c<=1條件組合覆蓋測(cè)試用例覆蓋條件覆蓋判斷覆蓋組合a=2,b=1,c=6T1,T2,T3,T4M取Y分支,Q取Y分支1,5a=2,b=-1,c=-2T1,F2,T3,F4M取N分支,Q取Y分支2,6a=-1,b=2,c=3F1,T2,F3,T4M取N分支,Q取Y分支3,7a=-1,b=-2,c=-3F1,F2,F3,F4M取N分支,Q取N分支4,8要滿足1、2、3、4、5、6、7、8條件組合條件組合覆蓋【優(yōu)點(diǎn)】
:條件組合覆蓋準(zhǔn)則滿足判定覆蓋、條件覆蓋和判定/條件覆蓋準(zhǔn)則。【缺點(diǎn)】
:線性地增加了測(cè)試用例的數(shù)量。路徑覆蓋前面提到的5種邏輯覆蓋都未涉及到路徑的覆蓋。事實(shí)上,只有當(dāng)程序中的每一條路徑都受到了檢驗(yàn),才能使程序受到全面檢驗(yàn)。路徑覆蓋的目的就是要使設(shè)計(jì)的測(cè)試用例能覆蓋被測(cè)程序中所有可能的路徑?;舅枷胧牵涸O(shè)計(jì)所有的測(cè)試用例,來(lái)覆蓋程序中的所有可能的執(zhí)行路徑。1路徑覆蓋測(cè)試用例覆蓋組合覆蓋路徑a=2,b=1,c=61,51-2-4a=1,b=1,c=-31,81-2-5a=-1,b=2,c=33,71-3-4a=-1,b=-2,c=-34,81-3-5路徑覆蓋【優(yōu)點(diǎn)】
:這種測(cè)試方法可以對(duì)程序進(jìn)行徹底的路徑測(cè)試?!救秉c(diǎn)】
:需要設(shè)計(jì)大量、復(fù)雜的測(cè)試用例,使得工作量呈指數(shù)級(jí)增長(zhǎng),而且不見得把所有的條件組合都覆蓋。條件組合覆蓋從前面的例子我們可以看到,采用任何一種覆蓋方法都不能滿足我們的要求,所以,在實(shí)際的測(cè)試用例設(shè)計(jì)過(guò)程中,可以根據(jù)需要將不同的覆蓋方法組合起來(lái)使用,以實(shí)現(xiàn)最佳的測(cè)試用例設(shè)計(jì)。條件組合覆蓋結(jié)合路徑覆蓋測(cè)試用例覆蓋條件覆蓋路徑覆蓋組合a=2,b=1,c=6T1,T2,T3,T4P1:(1-2-4)1,5a=1,b=1,c=-3T1,T2,F3,F4P2:(1-2-5)1,8a=-1,b=2,c=3F1,T2,F3,T4P3:(1-3-4)3,7a=-1,b=-2,c=-3F1,F2,F3,F4P4:(1-3-5)4,8a=2,b=-1,c=-2T1,F2,T3,F4P3:(1-3-4)2,6邏輯覆蓋法總結(jié)根據(jù)覆蓋目標(biāo)的不同,邏輯覆蓋可分為語(yǔ)句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、組合覆蓋和路徑覆蓋。語(yǔ)句覆蓋:選擇足夠多的測(cè)試用例,使得程序中的每個(gè)可執(zhí)行語(yǔ)句至少執(zhí)行一次。判定覆蓋:通過(guò)執(zhí)行足夠的測(cè)試用例,使得程序中的每個(gè)判定可能取值(真/假)都至少滿足一次,也就是使程序中的每個(gè)取“真”分支和取“假”分支至少均經(jīng)歷一次,也稱為“分支覆蓋”。條件覆蓋:設(shè)計(jì)足夠多的測(cè)試用例,使得程序中每個(gè)判定包含的每個(gè)條件的可能取值(真/假)都至少滿足一次。邏輯覆蓋法總結(jié)判定/條件覆蓋:設(shè)計(jì)足夠多的測(cè)試用例,使得程序中每個(gè)判定包含的每個(gè)條件的所有情況(真/假)至少出現(xiàn)一次,并且每個(gè)判定本身的判定結(jié)果(真/假)也至少出現(xiàn)一次。——滿足判定/條件覆蓋的測(cè)試用例一定同時(shí)滿足判定覆蓋和條件覆蓋。組合覆蓋:通過(guò)執(zhí)行足夠的測(cè)試用例,使得程序中每個(gè)判定的所有可能的條件取值組合都至少出現(xiàn)一次。
——滿足組合覆蓋的測(cè)試用例一定滿足判定覆蓋、條件覆蓋和判定/條件覆蓋。路徑覆蓋:設(shè)計(jì)足夠多的測(cè)試用例,要求覆蓋程序中所有可能的路徑。
組合覆蓋判斷/條件覆蓋判斷覆蓋條件覆蓋語(yǔ)句覆蓋邏輯覆蓋法總結(jié)發(fā)現(xiàn)錯(cuò)誤能力標(biāo)準(zhǔn)含義
1(弱)語(yǔ)句覆蓋每條語(yǔ)句至少執(zhí)行一次
2判定覆蓋每一判定的每個(gè)分支至少執(zhí)行一次
3條件覆蓋每一判定中的每個(gè)條件,分別按“真”、“假”至少各執(zhí)行一次4判定/條件覆蓋同時(shí)滿足判定覆蓋和條件覆蓋的要求5(強(qiáng))條件組合覆蓋求出判定中所有條件的各種可能組合值,每一可能的條件組合至少執(zhí)行一次
邏輯覆蓋測(cè)試各方法比較
A^B=TA^B=F判定覆蓋A^B=T測(cè)試用例應(yīng)滿足的條件程序結(jié)構(gòu)舉例語(yǔ)句覆蓋覆蓋標(biāo)準(zhǔn)A^BTFA^BTF邏輯覆蓋測(cè)試各方法比較覆蓋標(biāo)準(zhǔn)程序結(jié)構(gòu)舉例測(cè)試用例應(yīng)滿足的條件條件覆蓋A=TA=FB=TB=F判定/條件覆蓋A^B=T,A^B=FA=TA=FB=TB=F條件組合覆蓋
A=T^B=TA=T^B=FA=F^B=TA=F^B=FA^BTFA^BTFA^BTF邏輯覆蓋測(cè)試各方法比較voidDoWork(intx,inty,intz){intk=0,j=0;if((x>3)&&(z<10)){k=x*y-1;j=sqrt(k);}//語(yǔ)句塊1if((x==4)||(y>5)){j=x*y+10;}//語(yǔ)句塊2j=j%3;//語(yǔ)句塊3}邏輯覆蓋法實(shí)例演練X>3&&z<10執(zhí)行語(yǔ)句塊1執(zhí)行語(yǔ)句塊2X==4||y>5執(zhí)行語(yǔ)句塊3FFTTabdce邏輯覆蓋法實(shí)例演練voidDoWork(intx,inty,intz){intk=0,j=0;if((x>3)&&(z<10)){k=x*z-1;j=sqrt(k);}//語(yǔ)句塊1if((x==4)||(y>5)){j=x*y+10;}//語(yǔ)句塊2j=j%3;//語(yǔ)句塊3}語(yǔ)句覆蓋要實(shí)現(xiàn)DoWork函數(shù)的語(yǔ)句覆蓋,只需設(shè)計(jì)一個(gè)測(cè)試用例就可以覆蓋程序中的所有可執(zhí)行語(yǔ)句。測(cè)試用例輸入為:{x=4、y=5、z=-5}程序執(zhí)行的路徑是:abdX>3&&z<10執(zhí)行語(yǔ)句塊1執(zhí)行語(yǔ)句塊2X==4||y>5執(zhí)行語(yǔ)句塊3FFTTabdce判定覆蓋要實(shí)現(xiàn)DoWork函數(shù)的判定覆蓋,需要設(shè)計(jì)兩個(gè)測(cè)試用例測(cè)試用例的輸入為:{x=4、y=5、z=5};{x=2、y=5、z=5}程序執(zhí)行的路徑分別是:abd;aceX>3&&z<10執(zhí)行語(yǔ)句塊1執(zhí)行語(yǔ)句塊2X==4||y>5執(zhí)行語(yǔ)句塊3FFTTabdce條件覆蓋對(duì)DoWork函數(shù)的各個(gè)判定的各種條件取值加以標(biāo)記。對(duì)于第一個(gè)判定((x>3)&&(z<10)): 條件x>3取真值記為T1,取假值記為F1
條件z<10取真值記為T2,取假值記為F2對(duì)于第二個(gè)判定((x==4)||(y>5)):條件x==4取真值記為T3,取假值記為F3
條件y>5取真值記為T4,取假值記為F4根據(jù)條件覆蓋的基本思想,要使上述4個(gè)條件可能產(chǎn)生的8種情況至少滿足一次,設(shè)計(jì)測(cè)試用例如下:測(cè)試用例執(zhí)行路徑
覆蓋條件
覆蓋分支x=4
y=6z=5abdT1、T2、T3、T4bdx=2y=5
z=15aceF1、F2、
F3、F4ce分析:上面這組測(cè)試用例不但覆蓋了4個(gè)條件的全部8種情況,而且將兩個(gè)判定的4個(gè)分支b、c、d、e也同時(shí)覆蓋了,即同時(shí)達(dá)到了條件覆蓋和判定覆蓋。條件覆蓋X>3&&z<10執(zhí)行語(yǔ)句塊1執(zhí)行語(yǔ)句塊2X==4||y>5執(zhí)行語(yǔ)句塊3FFTTabdce說(shuō)明:雖然前面的一組測(cè)試用例同時(shí)達(dá)到了條件覆蓋和判定覆蓋,但是,并不是說(shuō)滿足條件覆蓋就一定能滿足判定覆蓋。如下例,雖然滿足了條件覆蓋,但只是覆蓋了第一個(gè)判定的取假分支c和第二個(gè)判定的取真分支d,不滿足判定覆蓋的要求。
測(cè)試用例執(zhí)行路徑覆蓋條件覆蓋分支x=2y=6z=5acdF1、T2、F3、T4cdx=4y=5z=15acdT1、F2、T3、F4cdX>3&&z<10執(zhí)行語(yǔ)句塊1執(zhí)行語(yǔ)句塊2X==4||y>5執(zhí)行語(yǔ)句塊3FFTTabdce判定條件覆蓋(一)測(cè)試用例執(zhí)行路徑覆蓋條件覆蓋分支x=4y=6z=5abdT1、T2、T3、T4bdx=2y=5z=15aceF1、F2、F3、F4ceX>3&&z<10執(zhí)行語(yǔ)句塊1執(zhí)行語(yǔ)句塊2X==4||y>5執(zhí)行語(yǔ)句塊3FFTTabdce根據(jù)判定/條件覆蓋的基本思想,只需設(shè)計(jì)以下兩個(gè)測(cè)試用例便可以覆蓋4個(gè)條件的8種取值以及4個(gè)判定分支。組合覆蓋組合覆蓋的目的是要使設(shè)計(jì)的測(cè)試用例能覆蓋每一個(gè)判定的所有可能的條件取值組合。對(duì)DoWork函數(shù)中的各個(gè)判定的條件取值組合加以標(biāo)記:
1、x>3,z<10記做T1T2,第一個(gè)判定的取真分支
2、x>3,z>=10記做T1F2,第一個(gè)判定的取假分支
3、x<=3,z<10記做F1T2,第一個(gè)判定的取假分支
4、x<=3,z>=10記做F1F2,第一個(gè)判定的取假分支
5、x==4,y>5記做T3T4,第二個(gè)判定的取真分支
6、x==4,y<=5記做T3F4,第二個(gè)判定的取真分支
7、x!=4,y>5記做F3T4,第二個(gè)判定的取真分支
8、x!=4,y<=5記做F3F4,第二個(gè)判定的取假分支組合覆蓋測(cè)試用例執(zhí)行路徑覆蓋條件覆蓋組合號(hào)x=4、y=6、z=5abdT1、T2、
T3、T41、5x=4、y=5、z=15acdT1、F2、
T3、F42、6x=2、y=6、z=5acdF1、T2、
F3、T43、7x=2、y=5、z=15aceF1、F2、
F3、F44、8分析:這組測(cè)試用例覆蓋了所有8種條件取值的組合,覆蓋了所有判定的真假分支,但是卻丟失了一條路徑abe。X>3&&z<10執(zhí)行語(yǔ)句塊1執(zhí)行語(yǔ)句塊2X==4||y>5執(zhí)行語(yǔ)句塊3FFTTabdce路徑覆蓋根據(jù)路徑覆蓋的基本思想,在滿足組合覆蓋的測(cè)試用例中修改其中一個(gè)測(cè)試用例,則可以實(shí)現(xiàn)路徑覆蓋:測(cè)試用例執(zhí)行路徑覆蓋條件x=4、y=6、z=5abdT1、T2、
T3、T4x=4、y=5、z=15acdT1、F2、
T3、F4x=5、y=5、z=5abeT1、T2、
F3、F4x=2、y=5、z=15aceF1、F2、
F3、F4X>3&&z<10執(zhí)行語(yǔ)句塊1執(zhí)行語(yǔ)句塊2X==4||y>5執(zhí)行語(yǔ)句塊3FFTTabdce路徑覆蓋分析:雖然前面一組測(cè)試用例滿足了路徑覆蓋,但并沒(méi)有覆蓋程序中所有的條件組合(丟失了組合3和7),即滿足路徑覆蓋的測(cè)試用例并不一定滿足組合覆蓋。說(shuō)明:對(duì)于比較簡(jiǎn)單的小程序,實(shí)現(xiàn)路徑覆蓋是可能做到的。但如果程序中出現(xiàn)較多判斷和較多循環(huán),可能的路徑數(shù)目將會(huì)急劇增長(zhǎng),要在測(cè)試中覆蓋所有的路徑是無(wú)法實(shí)現(xiàn)的。為了解決這個(gè)難題,只有把覆蓋路徑數(shù)量壓縮到一定的限度內(nèi),如程序中的循環(huán)體只執(zhí)行一次。在實(shí)際測(cè)試中,即使對(duì)于路徑數(shù)很有限的程序已經(jīng)做到路徑覆蓋,仍然不能保證被測(cè)試程序的正確性,還需要采用其他測(cè)試方法進(jìn)行補(bǔ)充。邏輯驅(qū)動(dòng)覆蓋技術(shù)上面的6中測(cè)試方法中,沒(méi)有十全十美的測(cè)試覆蓋方法,每一種方法都有其優(yōu)點(diǎn)和缺點(diǎn)。在實(shí)際項(xiàng)目中,程序內(nèi)部的邏輯存在著不確定性和無(wú)窮性,尤其對(duì)于大規(guī)模復(fù)雜軟件。因此這里不能窮舉所有的邏輯路徑,需要讀者根據(jù)實(shí)際情況去選擇合適的覆蓋測(cè)試方法。其中語(yǔ)句覆蓋,分支覆蓋和路徑覆蓋應(yīng)用最廣。往往對(duì)測(cè)試用例有如下要求:
語(yǔ)句覆蓋率:100%
分支覆蓋率:85%
路徑覆蓋率:80%測(cè)量覆蓋準(zhǔn)則邏輯覆蓋的出發(fā)點(diǎn)是合理的、完善的。所謂“覆蓋”,就是想要做到全面而無(wú)遺漏,但邏輯覆蓋并不能真正做到無(wú)遺漏。例如:我們不小心將前面提到的程序段中的
if(x>3&&Z<10){……}錯(cuò)寫成if(x>=3&&Z<10){……}
按照我們?cè)O(shè)計(jì)的測(cè)試用例(x的值取2或4)來(lái)看,邏輯覆蓋對(duì)這樣的小問(wèn)題都無(wú)能為力。分析出現(xiàn)這一情況的原因在于:錯(cuò)誤區(qū)域僅僅在x=3這個(gè)點(diǎn)上,即僅當(dāng)x的值取3時(shí),測(cè)試才能發(fā)現(xiàn)錯(cuò)誤。面對(duì)這類情況,我們應(yīng)該從中吸取的教訓(xùn)是測(cè)試工作要有重點(diǎn),要多針對(duì)容易發(fā)生問(wèn)題的地方設(shè)計(jì)測(cè)試用例。白盒測(cè)試概述靜態(tài)白盒測(cè)試動(dòng)態(tài)白盒測(cè)試邏輯覆蓋基本路徑測(cè)試方法2022/12/2372基本路徑測(cè)試方法基本路徑測(cè)試法是在程序控制流圖的基礎(chǔ)上,通過(guò)分析控制構(gòu)造的環(huán)路復(fù)雜性,導(dǎo)出基本可執(zhí)行路徑集合,從而設(shè)計(jì)測(cè)試用例的方法。設(shè)計(jì)出的測(cè)試用例要保證在測(cè)試中程序的每個(gè)可執(zhí)行語(yǔ)句至少執(zhí)行一次?;韭窂綔y(cè)試方法在程序控制流圖的基礎(chǔ)上,通過(guò)分析控制構(gòu)造的環(huán)路復(fù)雜性,導(dǎo)出基本可執(zhí)行路徑集合,設(shè)計(jì)測(cè)試用例:1.程序的控制流圖:描述程序控制流的一種圖示方法。2.程序圈復(fù)雜度:從程序的環(huán)路復(fù)雜性可導(dǎo)出程序基本路徑集合中的獨(dú)立路徑條數(shù),這是確定程序中每個(gè)可執(zhí)行語(yǔ)句至少執(zhí)行一次所必須的測(cè)試用例數(shù)目的上界。3.導(dǎo)出測(cè)試用例:根據(jù)圈復(fù)雜度和程序結(jié)構(gòu)設(shè)計(jì)用例數(shù)據(jù)輸入和預(yù)期結(jié)果。4.準(zhǔn)備測(cè)試用例:確?;韭窂郊械拿恳粭l路徑的執(zhí)行。常見結(jié)構(gòu)的控制流圖流圖只有二種圖形符號(hào):每一個(gè)圓稱為流圖的節(jié)點(diǎn),代表一條或多條語(yǔ)句。箭頭稱為邊或連接,代表控制流。包含條件的節(jié)點(diǎn)被稱為判定節(jié)點(diǎn)(也叫謂詞節(jié)點(diǎn)),由判定節(jié)點(diǎn)發(fā)出的邊必須終止于某一個(gè)節(jié)點(diǎn)。由邊和節(jié)點(diǎn)所限定的范圍被稱為區(qū)域。基本路徑測(cè)試方法根據(jù)程序流程圖畫出控制流程圖在將程序流程圖簡(jiǎn)化成控制流圖時(shí),應(yīng)注意:在選擇或多分支結(jié)構(gòu)中,分支匯聚處應(yīng)有一個(gè)匯聚結(jié)點(diǎn)。邊和結(jié)點(diǎn)圈定的區(qū)域叫做區(qū)域,當(dāng)對(duì)區(qū)域計(jì)數(shù)時(shí),圖形外的區(qū)域也應(yīng)記為一個(gè)區(qū)域?;韭窂綔y(cè)試方法基本路徑測(cè)試方法如果判斷中的條件表達(dá)式是由一個(gè)或多個(gè)邏輯運(yùn)算符(OR,AND,NAND,NOR)連接的復(fù)合條件表達(dá)式,則需要改為一系列只有單條件的嵌套的判斷。在程序流圖中一系列的順序執(zhí)行語(yǔ)句可以合成為一個(gè)節(jié)點(diǎn),但是對(duì)于多分支的判斷則需要分解為獨(dú)立的分支,每個(gè)分支一個(gè)節(jié)點(diǎn)。
例如:ifaorbxelsey對(duì)應(yīng)的邏輯為:voidSort(intiRecordNum,intiType)1{2intx=0;3inty=0;4while(iRecordNum-->0)5{6 If(iType==0)7 x=y+2;8else9 If(iType==1)10x=y+10;11else12x=y+20;13}14}基本路徑測(cè)試方法基本路徑測(cè)試方法第一步:畫出控制流圖基本路徑測(cè)試方法第二步:計(jì)算圈復(fù)雜度圈復(fù)雜度是一種為程序
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年德州市武城縣人民醫(yī)院合同制醫(yī)師長(zhǎng)期招聘12人備考題庫(kù)及參考答案詳解1套
- 超硬材料產(chǎn)業(yè)技術(shù)研究院公開招聘第二批科研人員20人備考題庫(kù)及完整答案詳解1套
- 2026年廢固體廢物污染波污染易發(fā)區(qū)保護(hù)保險(xiǎn)合同中
- 廣西工藝美術(shù)研究院有限公司所屬企業(yè)絹麻所2025年12月招聘?jìng)淇碱}庫(kù)及1套完整答案詳解
- 2026年農(nóng)業(yè)量子外爾半金屬農(nóng)業(yè)合同
- 中共東莞市委外事工作委員會(huì)辦公室2025年公開招聘編外聘用人員備考題庫(kù)及1套完整答案詳解
- 2025年中電科海洋信息技術(shù)研究院有限公司招聘?jìng)淇碱}庫(kù)及參考答案詳解
- 2025年揚(yáng)州市江都婦幼保健院公開招聘編外合同制專業(yè)技術(shù)人員備考題庫(kù)有答案詳解
- 2024年中儲(chǔ)糧集團(tuán)江蘇分公司招聘考試真題
- 壩工課程設(shè)計(jì)心得
- 2025云南省人民檢察院招聘22人筆試考試備考題庫(kù)及答案解析
- 銀行行業(yè)公司銀行客戶經(jīng)理崗位招聘考試試卷及答案
- 2026年安全生產(chǎn)管理培訓(xùn)課件與事故預(yù)防與應(yīng)急處理方案
- 2026天津市靜海區(qū)北師大實(shí)驗(yàn)學(xué)校合同制教師招聘81人(僅限應(yīng)屆畢業(yè)生)考試筆試備考題庫(kù)及答案解析
- 2026年長(zhǎng)沙民政職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能考試題庫(kù)及答案詳解一套
- 醫(yī)學(xué)檢驗(yàn)質(zhì)控課件
- 2025陜西陜煤澄合礦業(yè)有限公司招聘570人參考筆試題庫(kù)及答案解析
- 2025年倉(cāng)儲(chǔ)服務(wù)外包合同協(xié)議
- 2025遼寧沈陽(yáng)金融商貿(mào)經(jīng)濟(jì)技術(shù)開發(fā)區(qū)管理委員會(huì)運(yùn)營(yíng)公司招聘60人考試歷年真題匯編帶答案解析
- 2025年刑法學(xué)考試試題及答案
- 廣東省汕頭市金平區(qū)2024-2025學(xué)年七年級(jí)上學(xué)期期末地理試題
評(píng)論
0/150
提交評(píng)論