軟件測試 課件 單元3白盒測試_第1頁
軟件測試 課件 單元3白盒測試_第2頁
軟件測試 課件 單元3白盒測試_第3頁
軟件測試 課件 單元3白盒測試_第4頁
軟件測試 課件 單元3白盒測試_第5頁
已閱讀5頁,還剩70頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

單元3白

盒測試小張相對程序代碼進(jìn)行測試,應(yīng)該如何進(jìn)行測試?需要利用什么方法來編寫測試用例呢?對于程序代碼的測試應(yīng)該利用白盒測試方法來進(jìn)行。白盒測試是測試人員針對可見代碼進(jìn)行的一種測試,它需要分析代碼的控制結(jié)構(gòu)、執(zhí)行路徑和判斷條件,并據(jù)此來寫出測試用例。引例描述小張要完成程序代碼的測試任務(wù),需按照下面3步的白盒測試學(xué)習(xí)計(jì)劃來完成學(xué)習(xí)。

1.學(xué)習(xí)用邏輯覆蓋方法編寫測試用例;

2.學(xué)習(xí)按照路徑測試方法編寫測試用例;

3.學(xué)習(xí)按照循環(huán)測試方法編寫測試用例。引例描述引例描述白盒內(nèi)部實(shí)現(xiàn)可見輸入輸出測試用例目錄邏輯覆蓋測試任務(wù)一基本路徑測試任務(wù)二

循環(huán)測試任務(wù)三任務(wù)一邏輯覆蓋測試●本任務(wù)通過分析一個(gè)Java程序段,分析程序的邏輯結(jié)構(gòu)、包括流程圖和判斷條件,根據(jù)要求的邏輯覆蓋表中設(shè)計(jì)程序執(zhí)行的測試用例,對程序代碼的執(zhí)行進(jìn)行全面分析測試,從而驗(yàn)證程序邏輯結(jié)構(gòu)的正確性,實(shí)現(xiàn)對該程序片段的邏輯覆蓋測試?!癜缀袦y試又稱為透明盒測試、結(jié)構(gòu)測試,它基于程序內(nèi)部結(jié)構(gòu)進(jìn)行測試,而不是測試應(yīng)用程序的功能(黑盒測試)。因此,測試人員需要了解程序內(nèi)部邏輯結(jié)構(gòu),從編程語言的角度設(shè)計(jì)測試用例。白盒測試可用于單元測試、集成測試和系統(tǒng)測試。本章將針對具體的白盒測試方法進(jìn)行詳細(xì)講解。任務(wù)陳述●邏輯覆蓋是白盒測試中主要的動(dòng)態(tài)測試方法之一。它是以程序內(nèi)部的邏輯結(jié)構(gòu)為基礎(chǔ)的測試技術(shù),通過又程序邏輯結(jié)構(gòu)的遍歷來實(shí)現(xiàn)對程序的測試覆蓋。所謂覆蓋就是作為測試標(biāo)準(zhǔn)的邏輯單元、邏輯分支、邏輯取都執(zhí)行到。這一方法要求測試人員對程序的邏輯結(jié)構(gòu)有清楚的了解。邏輯覆蓋的標(biāo)準(zhǔn)有語句覆蓋、判定覆蓋、條件覆蓋、條件/判定覆蓋、條件組合覆蓋等。活動(dòng)一認(rèn)識(shí)邏輯覆蓋一、邏輯覆蓋簡介1.語句覆蓋語句覆蓋就是設(shè)計(jì)若干測試用例運(yùn)行被測程序,使得程序中每一可執(zhí)行語句至少執(zhí)行一次。這里的“若干”,意味著使用測試用例越少越好。語句覆蓋在測試中主要發(fā)現(xiàn)缺陷或錯(cuò)誤語句。語句覆蓋率的公式如下。語句覆蓋率=被評(píng)價(jià)到語句數(shù)量/可執(zhí)行的語句總數(shù)×100%語句覆蓋的缺點(diǎn):對程序執(zhí)行邏輯的覆蓋率很低。活動(dòng)一認(rèn)識(shí)邏輯覆蓋二、五種覆蓋標(biāo)準(zhǔn)2.判定覆蓋判定覆蓋有時(shí)也稱為分支覆蓋,就是指設(shè)計(jì)若干測試用例,運(yùn)行被測程序,使得每個(gè)判定的取真分支和取假分支至少評(píng)價(jià)一次。判定覆蓋率=被評(píng)價(jià)到的判定路徑數(shù)量/判定路徑的總數(shù)x100%判定覆蓋的缺點(diǎn):判定覆蓋雖然把程序所有分支均覆蓋到,但其主要對整個(gè)表達(dá)式最終取值進(jìn)行度量,忽略了表達(dá)式內(nèi)部的取值。

活動(dòng)一認(rèn)識(shí)邏輯覆蓋二、五種覆蓋標(biāo)準(zhǔn)3.條件覆蓋條件覆蓋是指設(shè)計(jì)足夠多的測試用例,運(yùn)行被測程序,使得每一判定語句中每個(gè)邏輯條件的可能取值至少滿足一次。條件覆蓋率的公式如下。條件覆蓋率=被評(píng)價(jià)到的條件取值的數(shù)量/條件取值的總數(shù)x100%條件覆蓋的缺點(diǎn):只考慮每個(gè)判定語句中的每個(gè)表達(dá)式,沒有考慮各個(gè)條件分支(或者涉及不到全部分支),即不能夠滿足判定覆蓋。

活動(dòng)一認(rèn)識(shí)邏輯覆蓋二、五種覆蓋標(biāo)準(zhǔn)4.條件/判定覆蓋條件/判定覆蓋是指設(shè)計(jì)足夠多的測試用例,使得判定中每個(gè)條件的所有可能(真/假)至少出現(xiàn)一次,并且每個(gè)判定本身的判定結(jié)果也至少出現(xiàn)一次。條件/判定覆蓋率的公式如下。條件/判定覆蓋率=被評(píng)價(jià)到的條件取值和判定分支的數(shù)量/(條件取值總數(shù)+判定分支總數(shù))x100%條件/判定覆蓋的缺點(diǎn):沒有考慮單個(gè)判定對整體結(jié)果的影響,無法發(fā)現(xiàn)邏輯錯(cuò)誤。活動(dòng)一認(rèn)識(shí)邏輯覆蓋二、五種覆蓋標(biāo)準(zhǔn)5.條件組合覆蓋條件組合覆蓋,也稱多條件覆蓋(MultipleConditionCoverage,MCC),是指設(shè)計(jì)足夠多的測試用例,使得每個(gè)判定中條件的各種可能組合都至少出現(xiàn)一次(以數(shù)軸形式劃分區(qū)域,提取交集,建立最少的測試用例)。這種方法包含了“判定覆蓋”和“條件覆蓋”的各種要求。條件組合覆蓋率的公式如下。條件組合覆蓋率=被評(píng)價(jià)到的條件取值組合的數(shù)量/條件取值組合的總數(shù)x100%。條件組合覆蓋的缺點(diǎn):判定語句較多時(shí),條件組合值比較多?;顒?dòng)一認(rèn)識(shí)邏輯覆蓋二、五種覆蓋標(biāo)準(zhǔn)覆蓋標(biāo)準(zhǔn)用于描述測試過程中對被測對象的測試程度,有時(shí)候也稱為軟件測試覆蓋準(zhǔn)則或者測試數(shù)據(jù)完備準(zhǔn)則,它可以用于衡量測試是否充分,可以作為測試停止的標(biāo)準(zhǔn)之一。同時(shí),它也是選取測試數(shù)據(jù)的依據(jù),滿足相同覆蓋標(biāo)準(zhǔn)的測試數(shù)據(jù)集是等價(jià)的?;顒?dòng)一認(rèn)識(shí)邏輯覆蓋三、覆蓋標(biāo)準(zhǔn)白盒測試覆蓋標(biāo)準(zhǔn)是針對程序內(nèi)部結(jié)構(gòu)而言的,可以分為基于控制流的覆蓋標(biāo)準(zhǔn)和基于數(shù)據(jù)流的覆蓋標(biāo)準(zhǔn)?;诳刂屏鞯母采w標(biāo)準(zhǔn),可用于檢查程序中的分支和循環(huán)結(jié)構(gòu)的邏輯表達(dá)式,被工業(yè)界廣泛采用,語句覆蓋、判定覆蓋、條件覆蓋、條件/判定覆蓋、條件組合覆蓋、基本路徑覆蓋都屬于基于控制流的覆蓋標(biāo)準(zhǔn);基于數(shù)據(jù)流的覆蓋標(biāo)準(zhǔn)則有Rapps和Weyuker的標(biāo)準(zhǔn)、Ntafos的標(biāo)準(zhǔn)、Ural的標(biāo)準(zhǔn)、Laski和Korel的標(biāo)準(zhǔn)等?;顒?dòng)一認(rèn)識(shí)邏輯覆蓋三、覆蓋標(biāo)準(zhǔn)不同的覆蓋標(biāo)準(zhǔn)其測試的充分性是不一樣的。如果說A標(biāo)準(zhǔn)的充分程度比B標(biāo)準(zhǔn)高,則意味著滿足A標(biāo)準(zhǔn)的測試用例集合也滿足B標(biāo)準(zhǔn)。語句覆蓋、判定覆蓋、條件覆蓋、條件/判定覆蓋、條件組合覆蓋的測試充分程度存在如圖所示的強(qiáng)弱關(guān)系。例如,而條件覆蓋并不一定比語句覆蓋強(qiáng)?;顒?dòng)一認(rèn)識(shí)邏輯覆蓋三、覆蓋標(biāo)準(zhǔn)設(shè)有程序段P1如下。if(x>0ory>0)thena=10if(x<10andy<10)thenb=0其中,變量a,b的值在其他地方已經(jīng)定義了,均為-1,該程序段對應(yīng)的流程圖如圖所示?;顒?dòng)二邏輯覆蓋測試用例設(shè)計(jì)1.語句覆蓋測試用例設(shè)計(jì)語句覆蓋要求設(shè)計(jì)若干個(gè)測試用例,使得程序中的每個(gè)可執(zhí)行語句至少都能被執(zhí)行一次。對圖所示程序段P1流程圖,按照這一標(biāo)準(zhǔn),程序需要執(zhí)行通過的位置有①③④⑥;由于②⑤位置沒有語句,因此不得要覆蓋。首先可能想到的是,可以設(shè)計(jì)兩個(gè)測試用例,分別覆蓋第一個(gè)if結(jié)構(gòu)有執(zhí)行語句的分支③和第二個(gè)if結(jié)構(gòu)有執(zhí)行語句的分支④,即:Case1:x=1,y=1,覆蓋③;Case2:x=-1,y=-1,覆蓋④。

活動(dòng)二邏輯覆蓋測試用例設(shè)計(jì)這樣即可達(dá)到語句覆蓋要求,但從節(jié)約測試成本的角度出發(fā),可以優(yōu)化一下測試用例設(shè)計(jì),實(shí)際上只需要一個(gè)測試用例,即:Case3:x=8,y=8。Case3可同時(shí)覆蓋①③④⑥,其執(zhí)行路徑如圖所示。

活動(dòng)二邏輯覆蓋測試用例設(shè)計(jì)2.判定覆蓋判定覆蓋是指設(shè)計(jì)若干測試用例,運(yùn)行被測程序,使程序中每個(gè)判斷的真值結(jié)果和假值結(jié)果都至少出現(xiàn)一次。仍以程序段P1為例。對照流程圖,按照這一標(biāo)準(zhǔn),程序需要執(zhí)行通過的位置有①②③④⑤⑥。程序段P1中存在IF語句,由于每個(gè)判斷有真假兩種判斷結(jié)果,因此至少需要兩個(gè)測試用例。P1中的兩個(gè)IF語句是串聯(lián)的,而不是嵌套的,所以如果設(shè)計(jì)合理的話兩個(gè)測試用例也確實(shí)夠了,如下兩個(gè)測試用例可以達(dá)到判定覆蓋要求。Case4:x=20,y=20,覆蓋①③⑤⑥;Case5:x=-2,y=-2,覆蓋①②④⑥。

活動(dòng)二邏輯覆蓋測試用例設(shè)計(jì)

具體覆蓋情況如表所示。

活動(dòng)二邏輯覆蓋測試用例設(shè)計(jì)測試用例編號(hào)xyx>0ory>0x<10andy<10Case42020YNCase5-2-2NY3.條件覆蓋條件覆蓋就是要求判斷表達(dá)式中的每一個(gè)條件都要至少取得一次真值和一次假值。需要注意的是,每條件都要至少取得一次真值和一次假值并不等于每一個(gè)判定也都能至少取得一次真值和一次假值,即條件圖并不比判定覆蓋強(qiáng),兩者只是關(guān)注點(diǎn)不同,不存在嚴(yán)格的強(qiáng)弱關(guān)系。對于程序段P1,設(shè)計(jì)如下測試用例可以達(dá)到條件覆蓋要求。Case6:x=20,y=-20;Case7:x=-2,y=20。

活動(dòng)二邏輯覆蓋測試用例設(shè)計(jì)

具體覆蓋情況如表所示。

活動(dòng)二邏輯覆蓋測試用例設(shè)計(jì)測試用例編號(hào)xyx>0y>0x<10y<10Case62020YNNYCase7-2-2NYYNCase6和Case7,對第1個(gè)if語句,只覆蓋了Y分支;對第2個(gè)if語句,只覆蓋了N分支,因此并不滿判定覆蓋。4.條件/判定覆蓋條件覆蓋并不比判定覆蓋強(qiáng),兩者只是關(guān)注點(diǎn)不同,有時(shí)會(huì)把條件覆蓋和判定覆蓋結(jié)合起來使用,稱為條件/判定覆蓋。它是指:設(shè)計(jì)足夠多的測試用例,使判定表達(dá)式中每個(gè)條件的真/假取值至少都出現(xiàn)一次,并每個(gè)判定表達(dá)式自身的真/假取值也都要至少出現(xiàn)一次。對于程序段P1來說,我們在做判定覆蓋時(shí)設(shè)計(jì)的測試用例case4和case5,實(shí)際上也同時(shí)是滿足條件/判定覆蓋的,因?yàn)槊總€(gè)條件的真/假取值都出現(xiàn)了一次,并且每個(gè)判定的真/假取值結(jié)果也都出現(xiàn)了一次?;顒?dòng)二邏輯覆蓋測試用例設(shè)計(jì)

具體覆蓋情況如表所示。

活動(dòng)二邏輯覆蓋測試用例設(shè)計(jì)測試用例編號(hào)xyx>0y>0x<10y<10Case42020YYNNCase5-2-2NNYY來看一個(gè)三角形判定問題的案例,有程序段P2如下。If((a<b+c)&&(b<a+c)&&(c<a+b))is_Triangle=true;elseis_Triangle=false;對該程序段進(jìn)行測試時(shí),如果要滿足條件/判定覆蓋,則四個(gè)條件表達(dá)式都要既有true取值,也有false取值。活動(dòng)二邏輯覆蓋測試用例設(shè)計(jì)4個(gè)條件表達(dá)式如下:

活動(dòng)二邏輯覆蓋測試用例設(shè)計(jì)條件表達(dá)式編號(hào)條件表達(dá)式1a<b+c2b<a+c3c<a+b4(a<b+c)&&(b<a+c)&&(c<a+b)設(shè)計(jì)如下測試用例可滿足條件/判定覆蓋。Case1:a=1,b=1,c=1;Case2:a=1,b=2,c=3;Case3:a=3,b=1,c=2;Case4:a=2,b=3,c=1。具體覆蓋情況如表所示

活動(dòng)二邏輯覆蓋測試用例設(shè)計(jì)測試用例編號(hào)abca<b+cb<a+cc<a+b(a<b+c)&&(b<a+c)&&(c<a+b)Case1111YYYYCase2123NYNNCase3312NYYNCase4231YNYN5.條件組合覆蓋條件組合覆蓋也叫多條件覆蓋,它是要設(shè)計(jì)足夠多的測試用例,使每個(gè)判定中條件取值的各種組合都至少出現(xiàn)一次。顯然,滿足條件組合覆蓋的測試用例一定滿足判定覆蓋、條件覆蓋和條件/判定組合覆蓋。對于程序段P1,由于一個(gè)判定中有兩個(gè)條件,而兩個(gè)條件可能的組合情況有4種,因此,如果要達(dá)到條件組合覆蓋,至少需要四個(gè)測試用例?;顒?dòng)二邏輯覆蓋測試用例設(shè)計(jì)5.條件組合覆蓋如果能夠合理設(shè)計(jì),讓四個(gè)測試用例在覆蓋第1個(gè)判定四種條件組合的同時(shí)也覆蓋第2個(gè)判定的四種條件組合,那么四個(gè)測試用例就夠了,設(shè)計(jì)如下測試用例可以滿足條件組合覆蓋。Case8:x=50,y=50;Case9:x=-5,y=-5;Case10:x=50,y=-5;Case11:x=-5,y=50。

活動(dòng)二邏輯覆蓋測試用例設(shè)計(jì)對兩個(gè)判定表達(dá)式的條件組合覆蓋情況如表所示。

活動(dòng)二邏輯覆蓋測試用例設(shè)計(jì)測試用例編號(hào)xy第1個(gè)判定第2個(gè)判定X>0y>0X<10y<10Case81010YYNNCase9-1-1NNYYCase1010-1YNNYCase11-110NYYN5.條件組合覆蓋以上滿足條件組合覆蓋的四個(gè)測試用例,雖然能夠覆蓋到判定表達(dá)式中條件的各種組合情況,但并不能覆蓋到程序中的每一條可能的執(zhí)行路徑。如圖所示,路徑①②⑤⑥就沒有被覆蓋到?;顒?dòng)二邏輯覆蓋測試用例設(shè)計(jì)5.條件組合覆蓋如果某個(gè)判斷表達(dá)式由4個(gè)條件組成,那么對其進(jìn)行條件組合覆蓋測試時(shí),需要設(shè)計(jì)24個(gè),也就是16個(gè)測試用例;如果某個(gè)判斷表達(dá)式由6個(gè)條件組成,那么對其進(jìn)行條件組合覆蓋測試時(shí),需要設(shè)計(jì)26個(gè),也就是64個(gè)測試用例。條件組合覆蓋的缺點(diǎn)是,當(dāng)一個(gè)判定語句中條件較多時(shí),條件組合數(shù)會(huì)很大,需要很多的測試用例。從便于測試的角度來說,在編寫程序的時(shí)候,一個(gè)判定表達(dá)式中的條件個(gè)數(shù)不宜太多?;顒?dòng)二邏輯覆蓋測試用例設(shè)計(jì)某Java程序段如下,請?jiān)O(shè)計(jì)測試用例集,要求分別滿足語句覆蓋、判定覆蓋、條件覆蓋、條件/判定覆蓋、條件組合覆蓋。publicvoiddowork(intx,inty,intz){intk=0,j=0if((x>20)&&(z<10)){ k=x*y-1;j=k*k;}if((x==22)||(y>20)){ j=x*y+10;}j=j%3;System.out.println("k,j:"+","+j);}任務(wù)實(shí)施1.畫出該程序的流程圖,如圖所示。任務(wù)實(shí)施2.語句覆蓋:分析程序流程圖可知,滿足語句覆蓋可讓兩個(gè)判定均取真值,同時(shí)覆蓋①③④⑥,設(shè)計(jì)如下測試用例Case1:x=22,y=21,z=5。任務(wù)實(shí)施3.判定覆蓋:要求程序中每個(gè)判斷的真值結(jié)果和假值結(jié)果都至少出現(xiàn)一次,即x>20&&z<10取真值、假值各一次,x==22||y>20,取真值、假值各一次,可設(shè)計(jì)如下測試用例。Case2:x=21,y=10,z=5。Case3:x=10,y=22,z=10。任務(wù)實(shí)施

任務(wù)實(shí)施4.條件覆蓋:要求判斷表達(dá)式中的每一個(gè)條件都要至少取得一次真值和一次假值。設(shè)計(jì)如下測試用例可以達(dá)到條件覆蓋要求。Case4:x=22,y=10,z=5。Case5:x=10,y=22,z=10。具體覆蓋情況見表。測試用例編號(hào)xyzx>20y>20X==22z<10Case422105YNYYCase5102210NYNN5.條件/判定覆蓋:設(shè)計(jì)足夠多的測試用例,使判定表達(dá)式中每個(gè)條件的真/假取值至少都出現(xiàn)一次,并每個(gè)判定表達(dá)式自身的真/假取值也都要至少出現(xiàn)一次。設(shè)計(jì)如下測試用例可以達(dá)到條件覆蓋要求。Case6:x=22,y=10,z=5。Case7:x=10,y=22,z=10。具體覆蓋情況見表。任務(wù)實(shí)施測試用例編號(hào)xyzx>20z<10x>20&&z<10x==22y>20x==22||y>20Case622225YYYYYYCase7101010NNNNNN6.條件組合覆蓋:要設(shè)計(jì)足夠多的測試用例,使每個(gè)判定中條件取值的各種組合都至少出現(xiàn)一次。顯然,滿足條件組合覆蓋的測試用例一定滿足判定覆蓋、條件覆蓋和條件/判定組合覆蓋。對于該Java程序段,由于一個(gè)判定中有兩個(gè)條件,而兩個(gè)條件可能的組合情況有4種,因此,如果要達(dá)到條件組合覆蓋,至少需要四個(gè)測試用例。設(shè)計(jì)如下測試用例可以滿足條件組合覆蓋。Case8:x=22,y=10,z=5;Case9:x=10,y=22,z=11;Case10:x=22,y=22,z=11;Case11:x=10,y=10,z=5。任務(wù)實(shí)施對兩個(gè)判定表達(dá)式的條件組合覆蓋情況如表所示。任務(wù)實(shí)施測試用例編號(hào)xyz第1個(gè)判定第2個(gè)判定x>20z<10x==22y>20Case822105YYYNCase9102211NNNYCase10222211YNYYCase1110105NYNN任務(wù)二基本路徑測試●本任務(wù)通過分析已經(jīng)編寫的C語言程序的執(zhí)行路徑,設(shè)計(jì)程序執(zhí)行路徑的測試用例,對程序代碼的執(zhí)行進(jìn)行全面分析測試,從而驗(yàn)證程序邏輯結(jié)構(gòu)的正確性,實(shí)現(xiàn)對程序路徑的高覆蓋測試?!衲壳埃窂綔y試比較常見的方法是基本路徑測試方法和循環(huán)測試方法。兩種方法實(shí)施步驟都是首先將程序代碼先轉(zhuǎn)變?yōu)槌绦蛄鞒虉D,然后將程序流程圖轉(zhuǎn)變?yōu)楸阌诜治雎窂降目刂屏鲌D,再分析不同獨(dú)立路徑的具體結(jié)構(gòu),最后設(shè)計(jì)程序的測試用例。任務(wù)陳述從廣義的角度講,任何有關(guān)路徑分析的測試都可以被稱為路徑測試,這里給出路徑測試的最簡單描述:路徑測試就是從一個(gè)程序的入口開始,執(zhí)行所經(jīng)歷的各個(gè)語句的完整過程?;顒?dòng)一認(rèn)識(shí)基本路徑一、路徑測試的定義從廣義的角度講,基本路徑測試法是一種白盒測試方法,它是在程序控制流圖的基礎(chǔ)上,通過分析控制構(gòu)造的環(huán)路復(fù)雜度,導(dǎo)出基本可執(zhí)行路徑集合,從而設(shè)計(jì)測試用例。設(shè)計(jì)出的測試用例要保證測試程序中的每一個(gè)可執(zhí)行路徑中的語句至少執(zhí)行一次?;顒?dòng)一認(rèn)識(shí)基本路徑二、基本路徑的含義(1)畫出程序控制流圖(描述程序控制流的一種圖示方法);(2)計(jì)算程序的圈復(fù)雜度(McCabe復(fù)雜度度量),從程序的環(huán)路復(fù)雜度可導(dǎo)出程序基本路徑集合中的獨(dú)立路徑條數(shù),這是確定程序中每個(gè)可執(zhí)行語句至少執(zhí)行一次所必需的測試用例數(shù)目的上界;(3)導(dǎo)出獨(dú)立路徑,根據(jù)圈復(fù)雜度和程序結(jié)構(gòu)設(shè)計(jì)獲得獨(dú)立路徑;(4)準(zhǔn)備測試用例,確?;韭窂郊忻恳粭l路徑的執(zhí)行。活動(dòng)一認(rèn)識(shí)基本路徑三、基本路徑測試的步驟程序流程圖四一個(gè)有向圖,又稱為框圖,采用不同圖形符號(hào)標(biāo)明條件或者處理等。由于這些符號(hào)在路徑分析時(shí)并不重要,為了突出控制流結(jié)構(gòu),將程序流程圖進(jìn)行進(jìn)行簡化,產(chǎn)生控制流圖??刂屏鲌D用于描述程序控制流的一種圖示方法,程序控制流圖中只有兩周圖形符號(hào):每一個(gè)圓圈成為流圖的一個(gè)結(jié)點(diǎn),代表一條或多條無分支的語句或源程序語句,箭頭成為邊或者連接,代表控制流。邊和結(jié)點(diǎn)圈定的區(qū)域叫做區(qū)域。當(dāng)對區(qū)域計(jì)數(shù)時(shí),圖形外的區(qū)域也應(yīng)視為一個(gè)區(qū)域?;顒?dòng)一認(rèn)識(shí)基本路徑四、控制流圖程序流程圖四一個(gè)有向圖,又稱為框圖,采用不同圖形符號(hào)標(biāo)明條件或者處理等。由于這些符號(hào)在路徑分析時(shí)并不重要,為了突出控制流結(jié)構(gòu),將程序流程圖進(jìn)行進(jìn)行簡化,產(chǎn)生控制流圖。控制流圖用于描述程序控制流的一種圖示方法,程序控制流圖中只有兩周圖形符號(hào):每一個(gè)圓圈成為流圖的一個(gè)結(jié)點(diǎn),代表一條或多條無分支的語句或源程序語句,箭頭成為邊或者連接,代表控制流。邊和結(jié)點(diǎn)圈定的區(qū)域叫做區(qū)域。當(dāng)對區(qū)域計(jì)數(shù)時(shí),圖形外的區(qū)域也應(yīng)視為一個(gè)區(qū)域。活動(dòng)一認(rèn)識(shí)基本路徑四、控制流圖活動(dòng)一認(rèn)識(shí)基本路徑四、控制流圖將程序流程圖轉(zhuǎn)化為控制流圖時(shí),應(yīng)遵照如下規(guī)格:包含條件的結(jié)點(diǎn)(也叫謂詞結(jié)點(diǎn)),由判定結(jié)點(diǎn)出發(fā)的邊必須終止于某一個(gè)結(jié)點(diǎn),一組順序處理框可以映射為一個(gè)結(jié)點(diǎn),控制流圖中的箭頭(邊)表示控制流的方向,類似于流程圖中的流線,一條邊必須終止于一個(gè)結(jié)點(diǎn)。活動(dòng)一認(rèn)識(shí)基本路徑四、控制流圖如果判斷中的條件表達(dá)式是由一個(gè)或多個(gè)邏輯運(yùn)算符(OR、AND、NAND、NOR)連接的復(fù)合條件表達(dá)式,則需要改為一系列只有單條件的嵌套的判斷。例如:

if(iType==1)

x=y+10;

else x=y+20;活動(dòng)一認(rèn)識(shí)基本路徑四、控制流圖程序流程圖中的一個(gè)處理方框序列和一個(gè)菱形判定框可被映射為程序控制流圖中的一個(gè)結(jié)點(diǎn),而控制流圖中的箭頭類似于流程圖中的箭頭?;顒?dòng)二基本路徑測試用例設(shè)計(jì)一、畫程序控制流程圖圈復(fù)雜度是一種為程序邏輯復(fù)雜性提供定量測度的軟件度量,將該度量用于計(jì)算程序的基本的獨(dú)立路徑數(shù)目。方法1:流圖中封閉區(qū)域的數(shù)量+1個(gè)開放區(qū)域=總的區(qū)域數(shù)=圈復(fù)雜度。方法2:給定流圖G的圈復(fù)雜度V(G),定義為V(G)=E-N+2,E是流圖中邊的數(shù)量,N是流圖中結(jié)點(diǎn)的數(shù)量。方法3:給定流圖G的圈復(fù)雜度V(G),定義為V(G)P+1,P是流圖G中判定結(jié)點(diǎn)的數(shù)量?;顒?dòng)二基本路徑測試用例設(shè)計(jì)二、計(jì)算程序的圈復(fù)雜度獨(dú)立路徑是指至少沿一條新的邊移動(dòng)的路徑,即和其他路徑相比,至少引入一個(gè)新處理語句或一個(gè)新判定的程序通路。程序圈復(fù)雜度值V(G)等于該程序基本路徑集合周總的獨(dú)立路徑的條數(shù),這是確定程序中每個(gè)可執(zhí)行語句至少執(zhí)行一次所必需的測試用例數(shù)目的上限?;顒?dòng)二基本路徑測試用例設(shè)計(jì)三、導(dǎo)出獨(dú)立路徑為了確?;韭窂郊忻恳粭l路徑的執(zhí)行,根據(jù)判斷結(jié)點(diǎn)給出的條件,選擇適當(dāng)?shù)妮斎霐?shù)據(jù)即準(zhǔn)備測試用例以保證某一條路徑可以被測試到。活動(dòng)二基本路徑測試用例設(shè)計(jì)四、準(zhǔn)備測試用例用基本路徑測試方法對下面的C語言函數(shù)代碼進(jìn)行白盒測試。voidSort(intiRecordNum,intiType){ intx=0; inty=0; while(iRecordNum>0){ if(iType==0){ x=y+2; break; } else if(iType==1) x=y+10; else x=y+20; iRecordNum--; }}任務(wù)實(shí)施1.畫出程序控制流圖(1)畫出程序的程序流程圖任務(wù)實(shí)施1.畫出程序控制流圖(1)將上面的程序流圖圖轉(zhuǎn)變?yōu)榭刂屏鲌D任務(wù)實(shí)施2.計(jì)算程序的圈復(fù)雜度方法1:流圖中有3個(gè)密閉區(qū)域,1個(gè)開放區(qū)域,共計(jì)4個(gè)區(qū)域,故圈復(fù)雜度為4。方法2:圈復(fù)雜度V(G)=E(邊)-N(結(jié)點(diǎn))+2=10-8+2=4。方法3:圈復(fù)雜度V(G)=P(判斷結(jié)點(diǎn))+1=3+1=4。任務(wù)實(shí)施3.導(dǎo)出獨(dú)立路徑V(G)值正好等于該程序的獨(dú)立路徑的條數(shù),具體如下:(1)路徑1:4-14。(2)路徑2:4-6-7-14。(3)路徑3:4-6-8-10-13-4-14。(4)路徑4:4-6-8-11-13-4-14。任務(wù)實(shí)施4.測試用例設(shè)計(jì)任務(wù)實(shí)施序號(hào)路徑輸入預(yù)期輸出14-14iRecordNum=0,或者取iRecordNum<0的某一個(gè)值,iType取任意值x=024-6-7-14iRecordNum=1,iType=0x=234-6-8-10-13-4-14iRecordNum=1,iType=1x=1044-6-8-11-13-4-14iRecordNum=1,iType=2x=20任務(wù)三循環(huán)測試活動(dòng)一認(rèn)識(shí)循環(huán)測試一、循環(huán)測試的定義循環(huán)測試是指執(zhí)行足夠的測試用例,使得循環(huán)中的每個(gè)條件都得到驗(yàn)證。循環(huán)測試是一種白盒測試技術(shù),其目的是檢查循環(huán)結(jié)構(gòu)的有效性?;顒?dòng)一認(rèn)識(shí)循環(huán)測試一、循環(huán)測試的定義在結(jié)構(gòu)化的程序中通常只有3種循環(huán),即簡單循環(huán)串接循環(huán)嵌套循環(huán)活動(dòng)一認(rèn)識(shí)循環(huán)測試二、循環(huán)測試的分類活動(dòng)一認(rèn)識(shí)循環(huán)測試二、循環(huán)測試的分類簡單循環(huán)是最普通的循環(huán),不嵌套,并且只有一個(gè)循環(huán)。嵌套循環(huán)是將一個(gè)循環(huán)結(jié)構(gòu)A聲明在另一個(gè)循環(huán)結(jié)構(gòu)B的循環(huán)體中,循環(huán)結(jié)構(gòu)B為外層循環(huán),循環(huán)結(jié)構(gòu)A為內(nèi)層循環(huán)。簡單來說,一個(gè)循環(huán)的外面包圍一層循環(huán)叫做二重循環(huán),外面包圍兩層循環(huán)稱為三重循環(huán),依此類推,外面包圍多層循環(huán)則為多重循環(huán)。串接循環(huán)又稱為并列循環(huán)。串接循環(huán)有兩種方式,第一種是串接循環(huán)的各個(gè)循環(huán)都彼此獨(dú)立,第二種是兩個(gè)循環(huán)不是獨(dú)立的,即第一個(gè)循環(huán)的循環(huán)計(jì)數(shù)器值是第二個(gè)循環(huán)的初始值?;顒?dòng)二循環(huán)測試用例設(shè)計(jì)一、簡單循環(huán)使用下列測試集來測試簡單循環(huán),其中n是允許通過循環(huán)的最大次數(shù)。跳過循環(huán)。只通過循環(huán)一次。通過循環(huán)兩次。通過循環(huán)m次,其中m<n-1。(通常取m=n/2)通過循環(huán)n-1,n,n+1次。活動(dòng)二循環(huán)測試用例設(shè)計(jì)二、嵌套循環(huán)從最內(nèi)層循環(huán)開始測試,把所有其他循環(huán)都設(shè)置為最小值。對最內(nèi)層循環(huán)使用簡單循環(huán)測試方法,而使外層循環(huán)的迭代參數(shù)(例如,循環(huán)計(jì)數(shù)器)取最小值,并為越界值或非法值增加一些額外的測試。由內(nèi)向外,對下一個(gè)循環(huán)進(jìn)行測試,但保持所有其他外層循環(huán)為最小值,其他嵌套循環(huán)為“典型”。繼續(xù)進(jìn)行下去,直到測試完所有循環(huán)?;顒?dòng)二循環(huán)測試用例設(shè)計(jì)三、串接循環(huán)串接循環(huán)。如果串接循環(huán)的各個(gè)循環(huán)都彼此獨(dú)立,則可以使用前述的測試簡單循環(huán)的方法來測試串接循環(huán)。但是,如果兩個(gè)循環(huán)串接,而且第一個(gè)循環(huán)的循環(huán)計(jì)數(shù)器值是第二個(gè)循環(huán)的初始值,則這兩個(gè)循環(huán)并不是獨(dú)立的。當(dāng)循環(huán)不獨(dú)立時(shí),建議使用測試嵌套循環(huán)的方法來測試串接循環(huán)。任務(wù)實(shí)施用循環(huán)測試方法對下面的C語言函數(shù)代碼進(jìn)行白盒測試

voidinput(intnum[],intn){1inta;2for(inti=0;i<n;i++){3do{cout<<"請輸入一個(gè)1~200之間的整數(shù):";5cin>>a;6

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論