軟件測試技術(shù)04-動態(tài)測試-白盒測試
單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級,第三級,第四級,第五級,2016/3/9,#,/,易禹,2024/11/26,軟件測試技術(shù),第,四,講,:動態(tài)測試,-,白盒測試,最基本的白盒測試 插樁法,2,printf,log,System.out.println,在被測程序中插入操作(探測器),實現(xiàn)探查和監(jiān)控的功能。,功能:檢查程序的走向、計數(shù)、中間變量、,基本概念,3,通過運(yùn)行被測試程序,檢查運(yùn)行結(jié)果,分析其性能。,組成部分;,構(gòu)造測試用例;,運(yùn)行程序;,分析結(jié)果。,動態(tài)測試分類,4,單元測試:對軟件的各個模塊進(jìn)行測試;,集成測試:檢查各單元之間的接口是否正確,非漸增和漸增式測試;,組裝測試:單元測試的擴(kuò)展,若干個單元間數(shù)據(jù)傳輸測試;,確認(rèn)測試:對組裝測試結(jié)果的檢驗,用戶參與或主導(dǎo)的測試過程;,系統(tǒng)測試:測試系統(tǒng)在真實條件下的運(yùn)行情況(負(fù)載、安全、疲勞等等)。,驗收測試:購買者對軟件的測試。,驗收測試,系統(tǒng)測試,確認(rèn)測試,單元,/,集成測試,手動測試,“,白盒,”,測試,5,與“黑盒”測試對應(yīng),在熟悉程序內(nèi)部邏輯和結(jié)構(gòu)設(shè)計的基礎(chǔ)上進(jìn)行的測試。,測試內(nèi)容:,對程序所有獨(dú)立執(zhí)行路徑進(jìn)行一次測試;,對所有邏輯判定的兩種情形至少測試一次;,在循環(huán)的邊界和運(yùn)行的邊界限內(nèi)執(zhí)行循環(huán)體;,測試內(nèi)部數(shù)據(jù)結(jié)構(gòu)的有效性。,“,白盒,”,測試的目標(biāo),6,如果要測試下面的函數(shù),需要構(gòu)造哪些測試用例?,范例程序:,行,1,public int func(int a,int b,int x),行,2,if(a1)&(b=0),行3,x=x/a;,行,4,if(a=2)|(x1),行,5,x=x+1;,行,6,return x;,行,7,范例程序的流程圖,7,邏輯覆蓋的原則,8,是指在熟悉程序內(nèi)部的邏輯結(jié)構(gòu)基礎(chǔ)上的測試方法,又可以細(xì)分為:,語句覆蓋,保證每一條語句都至少執(zhí)行一次;,路徑為,ACE,的測試用例(例如:,a,=2,b,=0,x,=3,);,邏輯覆蓋的原則,9,缺點(diǎn):覆蓋不完整,,忽略了,IF,語句為假的情況;,沒有測試,IF,語句的每一個邏輯表達(dá)式。,“白盒”測試之判斷覆蓋,保證每一個分支至少執(zhí)行一次;,如兩個測試用例(,ACD,和,ABE,),判斷覆蓋的缺點(diǎn):覆蓋程度不高。,“,白盒,”,測試之條件覆蓋,10,每個條件組合獲得各種可能的結(jié)果;,“,白盒,”,測試之條件覆蓋,11,如果選用兩個測試用例來覆蓋:,a,=2,b,=0,x,=4,路徑:,ACE,;,a,=1,b,=1,x,=1,路徑:,ABD,;,判斷覆蓋,vs,.條件覆蓋,12,判斷覆蓋關(guān)心判定表達(dá)式的結(jié)果,而條件覆蓋關(guān)心每個表達(dá)式的取值,不關(guān)心整個判定表達(dá)式的最終值;,判斷覆蓋不能涵蓋條件覆蓋,反之亦然。,例如,下面的用例僅滿足條件覆蓋,不滿足判斷覆蓋:,a,=2,b,=0,x,=1,路徑:,ACE,;,a,=1,b,=1,x,=2,路徑:,ABE,;,“,白盒,”,測試之其他覆蓋,13,判斷,/,條件覆蓋:,判斷中每個條件的所有取值至少執(zhí)行一次,同時每個判斷的所有結(jié)果至少執(zhí)行一次。例如:路徑:,ACE,和,ABD,就滿足判斷,/,條件覆蓋。,條件組合覆蓋:,各種條件組合至少出現(xiàn)一次,如判斷,(,a,1)&(,b,=0),共有,4,種組合。,路徑覆蓋:,所有可能的路徑至少執(zhí)行一次,范例程序共,4,條路徑。,“,白盒,”,測試練習(xí),14,請說出下面的程序最少需要幾個測試用例以滿足判斷覆蓋和條件組合覆蓋?,行,1,public int func(int a,int b,int c),行,2,if(ab)&(ac),行,3,a=b+c;,行,4,if(bc),行,5,b=a-c;,行,6,return c;,行,7,參考答案,15,判斷覆蓋,2,條件組合覆蓋,6,動態(tài)測試之路徑測試,16,是根據(jù)程序邏輯所產(chǎn)生的路徑設(shè)計測試用例的方法,常用的有:,DD,(,Decision-To-Decision,)路徑測試:基于路徑覆蓋的思想,考慮各分支的覆蓋情況,壓縮串行部分;,DD,路徑測試壓縮圖:用來反映程序的分支情況,方便進(jìn)行測試用例設(shè)計;,DD,路徑據(jù)稱可以發(fā)現(xiàn)約,85%,的缺陷!,DD,路徑測試壓縮圖實例,17,其中:數(shù)字表示行號,字母表示壓縮合并的節(jié)點(diǎn)。,基本路徑測試,18,現(xiàn)實程序中可能的路徑一般是天文數(shù)字!,解決辦法:壓縮覆蓋的路徑數(shù)到一定限度內(nèi),如語句覆蓋。,McCabe,提出了基本路徑測試,保證每條語句至少執(zhí)行一次,而且判斷能取真、假兩種值。,McCabe,圈復(fù)雜度,V,(,G,),V,(,G,)=,m,n,+2,其中,m,:弧數(shù),n,:節(jié)點(diǎn)數(shù),McCabe,圈復(fù)雜度示例,19,右圖的圈復(fù)雜度是多少?,V,(,G,)=17,13+2=6,,,表示有,6,條獨(dú)立的路徑。,獨(dú)立路徑與判定節(jié)點(diǎn),20,獨(dú)立路徑:一條完整的路徑,至少包含一條前面路徑未包含的邊;,圈復(fù)雜度決定了獨(dú)立路徑的條數(shù);,決定獨(dú)立路徑的關(guān)鍵:判定節(jié)點(diǎn)。,獨(dú)立路徑示例,21,測試用例設(shè)計,22,為每一條獨(dú)立路徑設(shè)計可強(qiáng)制執(zhí)行的測試用例;,這些測試用例可以保證:,語句覆蓋:每一條語句都被執(zhí)行了一次;,每個判斷條件都分別去過真和假兩個值。,23,請畫出下面程序的流程圖,計算圈復(fù)雜度和獨(dú)立路徑,并設(shè)計測試范例。,public int func(int a,int b),行,1,int m=1;,行,2,if(ab)/,交換,a,,,b,的值,保證,b=a,行,3,m=a;,行,4,a=b;,行,5,b=m;,行,6,while(m!=0),行,7,m=a%b;,行,8,a=b;,行,9,b=m;,行,10,return a,;,“,白盒,”,測試練習(xí)參考答案,24,圈復(fù)雜度,3,,獨(dú)立路徑和測試用例為:,1,2,6,10,無,;,1 2 3 4 5 6 7 8 9 10,a=8,b=24;,1 2 6 7 8 9 10,a=3,b=2;,白盒測試應(yīng)用策略,25,一般策略:,先靜態(tài)后動態(tài):,覆蓋率測試一般使用基本路徑測試,重點(diǎn)模塊可應(yīng)用多種覆蓋率標(biāo)準(zhǔn);,單元測試以代碼檢查、邏輯覆蓋為主;,集成測試再增加靜態(tài)結(jié)構(gòu)分析;,系統(tǒng)測試中黑盒和白盒測試相結(jié)合。,覆蓋測試工具,EclEmma,26,Eclipse community awards 2008,;,免費(fèi)、開源的,Eclipse,插件;,EclEmma,工作模式:通過顏色標(biāo)記代碼在運(yùn)行代碼中的語句的覆蓋情況,,綠色,表示該行代碼被完整的執(zhí)行;,紅色,表示該行代碼根本沒有被執(zhí)行;,黃色,表示該行代碼部分被執(zhí)行。,運(yùn)行,Sudoku,查看代碼覆蓋情況。,EclEmma,演示,