




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第5章白盒測試
5.1概述5.2邏輯覆蓋法5.3基本路徑測試5.4思考與習(xí)題
5.1白盒測試
白盒測試是對軟件的過程性細(xì)節(jié)做細(xì)致的檢查,把測試對象看做一個打開的盒子,允許測試人員利用程序內(nèi)部的邏輯結(jié)構(gòu)及有關(guān)信息,設(shè)計或選擇測試用例,對程序所有邏輯路徑進(jìn)行測試。通過在不同點檢查程序狀態(tài),確定實際狀態(tài)是否與預(yù)期的狀態(tài)一致。
白盒測試只測試軟件產(chǎn)品的內(nèi)部結(jié)構(gòu)和處理過程,而不測試軟件產(chǎn)品的功能,用于糾正軟件系統(tǒng)在描述、表示和規(guī)格上的錯誤,是進(jìn)一步測試的前提。白盒測試分靜態(tài)和動態(tài)兩種:靜態(tài)白盒測試是在不執(zhí)行的條件下有條理地仔細(xì)審查軟件設(shè)計、體系結(jié)構(gòu)和代碼,從而找出軟件缺陷的過程,有時也稱為結(jié)構(gòu)分析。動態(tài)白盒測試也稱結(jié)構(gòu)化測試,通過查看并使用代碼的內(nèi)部結(jié)構(gòu),設(shè)計和執(zhí)行測試。
5.2邏?輯?覆?蓋?法
【例5-1】C++?實現(xiàn)簡單的數(shù)學(xué)運算。
【例5-1】流程圖如圖5.1所示。其中Ⅰ、Ⅱ、Ⅲ、Ⅳ、Ⅴ是控制流上若干程序點。圖5.1【例5-1】程序流程圖5.2.1語句覆蓋
語句覆蓋又稱為線覆蓋面或段覆蓋面。其含義是指,選擇足夠數(shù)目的測試數(shù)據(jù),使被測程序中每條語句至少執(zhí)行一次。
如果例5-1測試用例選擇a=2,b=2,c=4,程序按照路徑Ⅰ->Ⅱ->Ⅲ->Ⅳ->Ⅴ執(zhí)行,程序段中的5個語句均執(zhí)行,符合語句覆蓋。但是,如果測試用例選擇a=2,b=-2,c=4,程序按照路徑Ⅰ->Ⅲ->Ⅳ->Ⅴ執(zhí)行,則未能達(dá)到語句覆蓋。
語句覆蓋測試方法僅僅針對程序邏輯中的顯式語句,對隱藏條件無法測試。如例5-1中第一個邏輯運算符“and”誤寫成“or”,則測試用例a=2,b=2,c=4仍能達(dá)到語句覆蓋的要求,但是無法發(fā)現(xiàn)程序中的誤寫錯誤。5.2.2判定覆蓋
判定覆蓋又稱為分支覆蓋或所有邊覆蓋,用于測試控制結(jié)構(gòu)中布爾表達(dá)式為真或假(例如if語句和while語句)。布爾型表達(dá)式被認(rèn)為是一個整體,取值為true或false,而不考慮內(nèi)部是否包含“邏輯與”或者“邏輯或”等操作符。
判定覆蓋的基本思想是所設(shè)計的測試用例使得程序中每個判定分別取“真”分支和“假”分支并至少經(jīng)歷一次,即判斷真假值均被滿足。
例5-1判定覆蓋測試用例如表5.1所示。判定覆蓋比語句覆蓋具有更強的測試能力,多出了幾乎一倍的測試路徑。判定語句往往由多個邏輯條件組合而成(如判定語句中包含and、or、case),若僅僅判斷其最終結(jié)果而忽略每個條件的取值情況,必然會遺漏部分測試路徑。
由于短路操作符,判定覆蓋忽略布爾表達(dá)式的內(nèi)部分支。分析下面一段代碼。
If(condition1&&condition2
Statement1;
Else
Statement2;當(dāng)condition1和condition2取值為真時,執(zhí)行Statement1表達(dá)式;當(dāng)condition1取值為假時,則condition2取值不進(jìn)行判定,執(zhí)行Statement2表達(dá)式??梢钥吹剑@段代碼控制結(jié)構(gòu)的執(zhí)行,短路操作符“&&”。表達(dá)式中第一個關(guān)系為假,則第二個就不進(jìn)行判定。因此,判定語句由多個邏輯條件組合而成,僅僅判斷最終結(jié)果,忽略每個條件的取值情況,必然會遺漏部分測試路徑。5.2.3條件覆蓋
條件覆蓋設(shè)計測試用例時,應(yīng)使每個判斷中每個條件的可能取值至少滿足一次。
仍以例5-1為例,針對a>0andb>0判定條件表達(dá)式,a>0取值為“真”,記為T1;a>0取值為“假”,記為F1;b>0取值“真”,記為T2;b>0取值為“假”,記為F2;條件表達(dá)式a>1orc>1,a>1取值為“真”,記為T3;a>1取值為“假”,記為F3;c>1取值為“真”,記為T4;c>1取值為“假”,記為F4。則條件覆蓋測試用例如表5.2所示。條件覆蓋比判定覆蓋增加了對符合判定情況的測試,增加了測試路徑。但是條件覆蓋只能保證每個條件至少有一次為真,而不考慮所有的判定結(jié)果。表5.2中的測試用例a=2,b=-1和測試用例a=-1,b=2滿足了條件覆蓋的測試用例,保證了a>0andb>0兩個條件的可能值(True和False)至少滿足一次,但是,由于測試用例的所有判定結(jié)果都是False,并沒有滿足判定覆蓋,因此條件覆蓋不一定包含判定覆蓋。5.2.4條件判定覆蓋
既然判定條件不一定包含條件覆蓋,條件覆蓋也不一定包含判定覆蓋,就自然會提出一種能同時滿足兩種覆蓋標(biāo)準(zhǔn)的邏輯覆蓋,這就是條件判定覆蓋。
條件判定覆蓋的含義是通過設(shè)計足夠的測試用例,使得判斷條件中的所有條件至少執(zhí)行一次取值,同時,所有判斷的可能結(jié)果至少執(zhí)行一次。因此,條件判定覆蓋的測試用例滿足如下條件:
(1)所有條件至少執(zhí)行一次取值;
(2)所有判斷的可能結(jié)果至少執(zhí)行一次。
例5-1的條件判定覆蓋測試用例如表5.3所示。表5.3例5-1的條件判定覆蓋測試用例條件判定覆蓋能同時滿足判定、條件兩種覆蓋標(biāo)準(zhǔn),是判定和條件覆蓋設(shè)計方法的交集,具有兩者的簡單性卻沒有兩者的缺點。表面上看,條件判定覆蓋測試了所有條件的取值,但事實并非如此,往往某些條件掩蓋了另一些條件,并沒有覆蓋所有的“True和False”取值的條件組合情況,會遺漏某些條件取值錯誤的情況。為徹底地檢查所有條件的取值,需要將判定語句中給出的復(fù)合條件表達(dá)式進(jìn)行分解,形成由多個基本判定嵌套的流程圖,這樣就可以有效地檢查所有的條件是否正確了。5.2.5修正條件判定覆蓋
修正條件判定覆蓋是判定中每個條件的所有可能結(jié)果至少出現(xiàn)一次,每個判定本身的所有可能結(jié)果也至少出現(xiàn)一次,每個入口點和出口點至少要喚醒一次,并且每個條件都顯示能單獨影響判定結(jié)果。
MC/DC定義的第一部分是標(biāo)準(zhǔn)的語句覆蓋,第一和第二部分是條件判定覆蓋準(zhǔn)則,第四部分是MC/DC特有的判定條件。定義中最關(guān)鍵的字是“獨立影響”,也就說明每一次每一個判定條件發(fā)生改變,必然會導(dǎo)致一次判定結(jié)果的改變,消除判定中的某些條件會被其它的條件所掩蓋的問題,從而使得測試更加完備。
MC/DC的目的就是消除測試過程中的各個單獨條件之間的相互影響并且保證每個單獨條件能夠分別影響判定結(jié)果的正確性。
例如,AorB的全部測試用例組合如表5.4所示。測試用例對(2,4)說明條件A獨立地影響測試結(jié)果,測試用例對(3,4)說明條件B獨立地影響測試結(jié)果,所以采用測試用例對(2,3,4)進(jìn)行測試滿足MC/DC覆蓋準(zhǔn)則。
MC/DC繼承了語句覆蓋準(zhǔn)則、條件判定覆蓋準(zhǔn)則、多重條件覆蓋等判定條件,同時加入了新的判定條件。在條件判定覆蓋準(zhǔn)則中,不能夠保證在模型中所有的條件都被覆蓋,因為一個判定中的某些條件會被其它的一些條件所掩蓋。如:任何一個條件與“1”進(jìn)行“或”運算時,這個條件都不會起到任何的作用;同樣,任何一個條件與“0”進(jìn)行“與”運算時,這個條件都不會起到任何的作用。
MC/DC具有如下優(yōu)點:
(1)繼承了多重條件覆蓋的優(yōu)點;
(2)線性地增加了測試用例的數(shù)量;
(3)對操作數(shù)及非等式條件變化反應(yīng)敏感;
(4)具有更高的目標(biāo)碼覆蓋率。
在許多軟件系統(tǒng)中,尤其是以嵌入式和實時性為特征的航空機載軟件中,MC/DC得到了廣泛的應(yīng)用。如:MC/DC已經(jīng)被應(yīng)用于RTCA/DO-178B標(biāo)準(zhǔn)當(dāng)中,這個標(biāo)準(zhǔn)主要用于美國測試飛行軟件的安全性審查。5.2.6條件組合覆蓋
條件組合覆蓋的基本思想:設(shè)計測試用例使得判斷中每個條件的所有可能至少出現(xiàn)一次,并且每個判斷本身的判定結(jié)果也至少出現(xiàn)一次,與條件覆蓋的差別是條件組合覆蓋不是簡單地要求每個條件都出現(xiàn)“真”與“假”兩種結(jié)果,而是要求這些結(jié)果的所有可能組合都至少出現(xiàn)一次。
條件組合覆蓋是一種相當(dāng)強的覆蓋準(zhǔn)則,可以有效地檢查各種可能的條件取值的組合是否正確。它不但可覆蓋所有條件的可能取值的組合,還可覆蓋所有判斷的可取分支,但仍可能會遺漏掉某些路徑,測試還不完全。
例5-1的條件組合覆蓋測試用例如表5.5所示。條件組合覆蓋準(zhǔn)則滿足判定覆蓋、條件覆蓋和條件判定覆蓋準(zhǔn)則,但線性地增加了測試用例的數(shù)量,并且條件覆蓋組合不能保證所有的路徑被執(zhí)行測試。5.2.7路徑覆蓋
要想程序得到正確的運行結(jié)果,必須保證沿著特定的路徑執(zhí)行。路徑覆蓋的基本思想:選擇足夠的測試用例,使得程序中所有的可能路徑都至少被執(zhí)行一次。一條路徑是從函數(shù)的入口到出口分支的一個唯一序列。
例5-1的路徑覆蓋測試用例如表5.7所示。路徑覆蓋比前面幾種邏輯覆蓋方法覆蓋率都大,但也有如下缺點:隨著程序代碼復(fù)雜度的增加,測試工作量將呈指數(shù)級增長。例如:一個函數(shù)包含10個if語句,就有210?=?1024條路徑要測試,如果增加一個if語句,就有211?=?2048條路徑。二是許多路徑由于數(shù)據(jù)相關(guān)不可能被執(zhí)行。分析如下的代碼段:
If(condition)
Statement1;
Statement2;
If(condition)
Statement3;
Statement4;路徑覆蓋認(rèn)為這個程序段包含4條路徑,因為第一個if有兩個分支,第二個if也有兩個分支,組合為4。但是,由于兩個if的判定表達(dá)式完全相同,當(dāng)condition為真,從代碼入口到出口只有一條路徑,所以實際上僅有2條路徑而不是4條。5.2.8邏輯覆蓋法總結(jié)
如圖5.2所示,邏輯覆蓋法中語句覆蓋、判定覆蓋、條件覆蓋、條件判定覆蓋、條件組合覆蓋和路徑覆蓋具有相互包含的關(guān)系,其中語句覆蓋最弱,從下至上依次增強,路徑覆蓋的效果最好。
表5.8總結(jié)了邏輯覆蓋各種方法的優(yōu)缺點。根據(jù)測試用例設(shè)計的需要,邏輯覆蓋法將不同的設(shè)計方法有效地結(jié)合起來,設(shè)計出覆蓋率最大、最有效的測試用例。圖5.2邏輯覆蓋法總結(jié)
5.3基本路徑測試
5.3.1控制流
基本路徑測試使用程序流程圖來描述程序的結(jié)構(gòu)性。程序流程圖是一個有向圖,又稱為框圖,采用不同圖形符號標(biāo)明條件或者處理等。由于這些符號在路徑分析時不重要,為了突出控制流結(jié)構(gòu),將程序流程圖進(jìn)行簡化,便產(chǎn)生控制流圖。
控制流圖是用于描述程序控制流的一種圖示方法。控制流圖只有節(jié)點和控制流線(或弧)兩種圖形符號,如圖5.3所示。圖5.3控制流圖的基本符號示意圖
(1)節(jié)點:以標(biāo)有編號的圓圈表示,用于表示程序流程圖中矩形框、菱形框的功能,是一個或多個無分支的語句或源程序語句。
(2)控制流線或?。阂约^表示,與程序流程圖中的流線功能一致,表示控制的順序。
程序流程圖簡化成控制流圖時,需注意以下情況:
(1)在選擇或多分支結(jié)構(gòu)中,分支的匯聚處應(yīng)有一個匯聚結(jié)點。
(2)邊和結(jié)點圈定的范圍稱為區(qū)域。需要注意,圖形外的區(qū)域也應(yīng)記為一個區(qū)域。
如圖5.4所示,圖(a)為程序流程圖,圖(b)表示圖(a)轉(zhuǎn)化的控制流圖。圖5.4程序流程圖轉(zhuǎn)化為控制流圖示意圖控制流圖表示成矩陣的形式,稱為控制流圖矩陣。一個圖形矩陣是一個方陣,其行列數(shù)目為控制流圖中的結(jié)點數(shù),行列依次對應(yīng)到一個被標(biāo)識的結(jié)點,矩陣元素對應(yīng)到結(jié)點間的連接。控制流圖的結(jié)點用數(shù)字標(biāo)識,邊用字母標(biāo)識,第i結(jié)點到第j結(jié)點有x邊相連接,則對應(yīng)的圖形矩陣中第i行與第j列有一個非空的元素x。為了評估程序的控制結(jié)構(gòu),控制流圖矩陣項加入連接權(quán)值,連接權(quán)值為控制流提供了如下附加信息:
(1)執(zhí)行連接(邊)的概率;
(2)穿越連接的處理時間;
(3)穿越連接時所需的內(nèi)存;
(4)穿越連接時所需的資源。
最簡單情況是連接權(quán)值為1(存在連接)或0(不存在連接)。如圖5.5所示,將圖5.4(c)的控制流圖矩陣轉(zhuǎn)化為連接矩陣。字母替換為1,表示存在邊(為表述清晰,0沒有畫在圖中)。圖5.5控制流圖矩陣轉(zhuǎn)化為連接矩陣5.3.2基本路徑測試方法
基本路徑是指所有程序路徑作為一個集合,在這些路徑當(dāng)中必然存在一個最小路徑的集合。基本路徑測試通過確定測試用例是否完全覆蓋基本路徑而進(jìn)行測試。
基本路徑測試法是在程序控制流圖的基礎(chǔ)上,通過分析控制構(gòu)造環(huán)路復(fù)雜性,導(dǎo)出基本可執(zhí)行路徑集合,設(shè)計測試用例。
基本路徑測試法主要步驟如下所示。
步驟一:以詳細(xì)設(shè)計或源代碼作為基礎(chǔ),導(dǎo)出程序的控制流圖。
步驟二:計算控制流圖G的圈復(fù)雜度V(G)。圈復(fù)雜度為程序邏輯復(fù)雜性提供定量的測度,該度量用于計算程序的基本獨立路徑數(shù)目,確保所有語句至少執(zhí)行一次的測試數(shù)量的上界。
步驟三:確定獨立路徑的集合,即確定線性無關(guān)的路徑的基本集。
獨立路徑是指至少引入程序的一個新處理語句集合或一個新條件的路徑,即獨立路徑必須包含一條在定義之前不曾使用的邊。
步驟四:測試用例生成,確?;韭窂郊忻織l路徑的執(zhí)行。下面介紹三種計算控制流圖的圈復(fù)雜度的方法。
方法一:控制流圖G的圈復(fù)雜度V(G)的定義為V(G)=
E-N+2,E是圖中邊的數(shù)量,N是圖中結(jié)點的數(shù)量。
如圖5.6所示,使用公式V(G)=E-N+2,其中E為10,N為7,則V(G)=10-7+2=5,則圈復(fù)雜度為5。圖5.6控制流圖G方法二:將圈復(fù)雜度定義為控制流圖中的區(qū)域數(shù)。
圖5.6中的區(qū)域數(shù)為5,故V(G)?=?5。
方法三:V(G)=P+1,P是控制流圖G中判定(謂詞)結(jié)點的數(shù)量。
圖5.6中的判定結(jié)點為A、B、C
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 清廉課題申報書怎么寫
- 科研課題申報書抄襲
- 別墅擴建土建合同范本
- 衛(wèi)浴勞動合同范本
- 音樂 課題申報書
- 國家立項課題申報書
- 合同附合同范本
- 單項委托預(yù)定酒店合同范本
- 養(yǎng)殖土雞合同范本
- 中環(huán)租房合同范本
- 感染性腹瀉及其防控措施
- 豐田車系卡羅拉(雙擎)轎車用戶使用手冊【含書簽】
- 商品價格表(全)
- 管理系統(tǒng)中計算機應(yīng)用詳細(xì)課件
- 《多維度兒童智力診斷量表》MIDSC的編制
- 慢阻肺從急性加重期到穩(wěn)定期的全程管理
- 2023年上海市普陀區(qū)高考?xì)v史二模試卷及答案解析
- 瑞達(dá)峰環(huán)境友好型高附加值關(guān)鍵醫(yī)藥中間體、特色原料藥及 GMP 成品藥(仿制藥與創(chuàng)新藥)規(guī)?;a(chǎn)項目(一期)環(huán)評報告書
- 嚴(yán)重創(chuàng)傷的急救處理
- GB/T 1228-2006鋼結(jié)構(gòu)用高強度大六角頭螺栓
- 國際商法 吳建斌課件 思考題答案
評論
0/150
提交評論