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

下載本文檔

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

文檔簡介

1、三、白盒測試主要內(nèi)容白盒測試簡介常見白盒測試方法覆蓋測試實(shí)現(xiàn)覆蓋的途徑1. 白盒測試簡介稱謂結(jié)構(gòu)性測試、邏輯驅(qū)動(dòng)測試、基于程序的測試特點(diǎn)將程序的執(zhí)行表現(xiàn)與編碼意圖作比較關(guān)心軟件內(nèi)部設(shè)計(jì)和程序?qū)崿F(xiàn)主要測試依據(jù)是代碼和設(shè)計(jì)文檔支持嚴(yán)格定義、數(shù)學(xué)分析和精確度量主要使用階段單元測試階段:一般由開發(fā)人員進(jìn)行集成測試階段:一般由測試人員和開發(fā)人員共同完成規(guī)格說明(預(yù)期的)程序(觀察的)程序行為SP不驗(yàn)證需求規(guī)格,無法檢測代碼中遺漏路徑白盒測試的重點(diǎn)代碼出錯(cuò)處理模塊接口數(shù)據(jù)結(jié)構(gòu)邊界條件執(zhí)行路徑調(diào)用參數(shù)全局量定義一致性 數(shù)據(jù)定義、使用輸入邊界輸出邊界內(nèi)部邊界重要路徑關(guān)鍵路徑 非合理輸入系統(tǒng)異常主要內(nèi)容白盒測試

2、簡介常見白盒測試方法覆蓋測試實(shí)現(xiàn)覆蓋的途徑2. 常見白盒測試方法靜態(tài)測試人工代碼檢查軟件度量程序分析與推理(自動(dòng)審查)風(fēng)格檢查動(dòng)態(tài)測試覆蓋測試分析運(yùn)行時(shí)錯(cuò)誤檢測廣義測試靜態(tài)測試2.1 人工代碼檢查包括代碼審查、代碼走查等 通常由一組人員來完成Pair programming通過會(huì)議形式 (brainstorming)可發(fā)現(xiàn) 30%-70% 的錯(cuò)誤代碼審查(Code Inspection)背景-1976年Fagan-1993年Gilb and Graham-1996年最佳軟件實(shí)踐 Fagan, M. Design and Code Inspections to Reduce Errors in

3、Program Development. IBM Systems Journal 15, 3 (1976): 182-211.Michael Fagan代碼審查由 3-5 人小組進(jìn)行(1)主持人:多面手(2)作者:解釋(3)評論員:找出缺陷(4)記錄員:一個(gè)會(huì)議協(xié)調(diào)人,負(fù)責(zé)分發(fā)相關(guān)材料,記錄錯(cuò)誤等程序員一行一行解釋程序小組成員提問通常審查小組有一個(gè)潛在錯(cuò)誤的checklist以供審查代碼審查步驟(1)計(jì)劃(Plan)(2)概述(Overview Meeting)(3)準(zhǔn)備(Preparation)審查前代碼計(jì)劃概述準(zhǔn)備審查會(huì)議審查報(bào)告返工跟進(jìn)審查后代碼(4)審查會(huì)議(Inspection Me

4、eting)(5)審查報(bào)告(Report)(6)返工(Rework)(7)跟進(jìn)(Follow up)代碼審查清單數(shù)據(jù)引用錯(cuò)誤數(shù)據(jù)聲明錯(cuò)誤計(jì)算錯(cuò)誤比較錯(cuò)誤控制流程錯(cuò)誤子程序參數(shù)錯(cuò)誤輸出錯(cuò)誤其他檢查影響代碼審查質(zhì)量的關(guān)鍵因素消除開發(fā)員的心理抵觸 有明確的目標(biāo) 良好的代碼審查清單充分的事前準(zhǔn)備適當(dāng)數(shù)量的審查人員適當(dāng)?shù)膶彶槿藛T構(gòu)成:程序員+外部審查人員有效的人員間溝通確保重要的問題被記錄和處理發(fā)現(xiàn)的問題數(shù)可作為審查有效性的某種評估代碼走查(Code Walkthrough)3-5人的團(tuán)隊(duì)協(xié)調(diào)者秘書:記錄錯(cuò)誤測試員:充當(dāng)計(jì)算機(jī)的角色,在一定的測試集下推演程序的執(zhí)行有組織的代碼走查在編碼階段去除錯(cuò)誤的成本

5、是在軟件發(fā)布階段去除錯(cuò)誤成本的1/92代碼審查和代碼走查比較項(xiàng)目走 查審 查準(zhǔn)備通讀設(shè)計(jì)和編碼 準(zhǔn)備好需求描述文檔、程序設(shè)計(jì)文檔、程序的源代碼清單、代碼編碼標(biāo)準(zhǔn)和代碼缺陷檢查表形式非正式會(huì)議正式會(huì)議參加人員開發(fā)人員為主項(xiàng)目組成員包括測試人員主要技術(shù)方法無缺陷檢查表注意事項(xiàng)限時(shí)、不要現(xiàn)場修改代碼限時(shí)、不要現(xiàn)場修改代碼生成文檔會(huì)議記錄靜態(tài)分析錯(cuò)誤報(bào)告目標(biāo)代碼標(biāo)準(zhǔn)規(guī)范,無邏輯錯(cuò)誤代碼標(biāo)準(zhǔn)規(guī)范,無邏輯錯(cuò)誤代碼靜態(tài)分析工具Codestriker (集成CVS,Subversion,Visual Sourcesafe)提名評論員提交審查結(jié)果返工審查后代碼創(chuàng)建話題基于Web的協(xié)同代碼審查工具靜態(tài)白盒測試靜態(tài)

6、白盒測試工具代碼靜態(tài)分析工具QJ-Pro代碼審查輔助工具Codestriker1.安裝OS: Windows/Linux環(huán)境:數(shù)據(jù)庫, Web服務(wù),配置文件2.Topic靜態(tài)白盒測試靜態(tài)白盒測試工具代碼靜態(tài)分析工具QJ-Pro代碼審查輔助工具Codestriker3.ReviewShow commentsList commentsGoogle gerritGoogle gerritGoogle gerrit2.2 軟件度量依據(jù)ISO/IEC 9126標(biāo)準(zhǔn)、國標(biāo)、國軍標(biāo),采取度量統(tǒng)計(jì)的方法能夠分析程序的某些質(zhì)量因素常見度量方法McCabe度量法HalStead度量法McCabe度量法McCabe

7、提出的一種基于控制流的程序復(fù)雜性度量方法基于圖論V(G) = E-n+2p E為圖G中的邊數(shù),n為節(jié)點(diǎn)數(shù),P為強(qiáng)連通分量個(gè)數(shù) V(G)值過大,則程序不易理解與維護(hù)Thomas J. McCabeHalstead度量法以程序中出現(xiàn)的操作符和操作數(shù)為計(jì)算對象,給出源程序后,根據(jù)這些參數(shù),按公式可求得程序工作量的估值,其中用到以下程序參數(shù):n1 程序中運(yùn)算符出現(xiàn)的種類n2 程序中運(yùn)算對象出現(xiàn)的種類根據(jù)這幾個(gè)參數(shù),可以估計(jì):程序的長度: N = N1 N2程序量: V (N1 N2)log2(n1 n2 )語言抽象級別: L (2 * n2)(nl * N2)程序工作量: E = VLN1 程序中運(yùn)算

8、符的總數(shù)N2 程序中運(yùn)算對象的總數(shù)2.3 代碼自動(dòng)審查通過程序抽象、自動(dòng)機(jī)等技術(shù),在不運(yùn)行程序的情況下,發(fā)現(xiàn)其中的錯(cuò)誤。2.4 風(fēng)格檢查(Style Checking)好的風(fēng)格對于程序設(shè)計(jì)具有關(guān)鍵性作用。進(jìn)行編程風(fēng)格的檢查,可增加:可靠性、可讀性/維護(hù)性、移植性、優(yōu)秀的風(fēng)格:清楚簡單、直截了當(dāng)、自然的表達(dá)式、通行的語言使用方式 風(fēng)格檢查編碼風(fēng)格: 針對程序指令、運(yùn)算符、代碼結(jié)構(gòu)、聲明等方面制定規(guī)則并檢查如為了保證程序模塊的結(jié)構(gòu)化,規(guī)定不得使用GOTO語句命名風(fēng)格: 對程序中局部變量、全局變量、類等的命名制定規(guī)則并檢查,以利于程序的理解、維護(hù)2.5 靜態(tài)測試工具無需運(yùn)行,不需要編譯鏈接得到可執(zhí)行

9、文件一般是對代碼進(jìn)行語法掃描,生成控制流圖,系統(tǒng)的調(diào)用關(guān)系圖等,找出不符合編碼規(guī)范的地方,根據(jù)某種質(zhì)量模型評價(jià)代碼的質(zhì)量等常見工具Gimpel Software PC-lintIBM Rational LogiscopeIBM Rational Test RealtimeParasoft C+ TestTestbedCoverityVisual Studio PREfastQJ-Pro: Code Analyzer for Java自動(dòng)評審:Parasoft C+ Test自動(dòng)評審: DevPartner Code Review自動(dòng)評審: QJ-Pro An Eclipse Plugin/靜態(tài)

10、白盒測試靜態(tài)白盒測試工具代碼靜態(tài)分析工具QJ-ProQJ-Pro靜態(tài)白盒測試靜態(tài)白盒測試工具代碼靜態(tài)分析工具QJ-ProQJ-Pro動(dòng)態(tài)測試2.6 覆蓋測試分析衡量軟件被測試執(zhí)行的程度在盡可能多地執(zhí)行程序的路徑,進(jìn)行邏輯覆蓋的同時(shí),考察程序執(zhí)行表現(xiàn)是否異常,尤其是某些復(fù)雜的和正常情況下不易執(zhí)行的路徑。被測程序測試覆蓋源程序覆蓋情況分析測試用例執(zhí)行測試覆蓋率標(biāo)準(zhǔn)測試是否足夠NY測試結(jié)果文檔設(shè)計(jì)測試用例收集測試結(jié)果2.7 運(yùn)行時(shí)錯(cuò)誤檢測在程序中注入監(jiān)控代碼,監(jiān)控程序運(yùn)行,檢測是否有錯(cuò)誤發(fā)生工具IBM Rational PurifyCompuware DevPartnerDevPartner Bou

11、nds CheckerC/C+指針、內(nèi)存錯(cuò)誤泄露錯(cuò)誤API與OLE錯(cuò)誤驗(yàn)證ActiveX控件使用正確性主要內(nèi)容白盒測試簡介常見白盒測試方法覆蓋測試實(shí)現(xiàn)覆蓋的途徑3. 覆蓋測試3.1 邏輯覆蓋方法3.2 路徑測試3.3 數(shù)據(jù)流測試3.4 其它覆蓋方法3.1 邏輯覆蓋方法以覆蓋一定的程序邏輯結(jié)構(gòu)為測試充分性標(biāo)準(zhǔn),生成測試用例對程序進(jìn)行測試。邏輯覆蓋包括1、語句覆蓋2、判定覆蓋3、條件覆蓋4、判定/條件覆蓋5、條件組合覆蓋6、修正條件/判定覆蓋7、路徑覆蓋語句覆蓋每條語句至少被執(zhí)行一次(一個(gè)測試用例)優(yōu)點(diǎn)簡單直觀,無須知道每個(gè)判定表達(dá)式的取值問題:假分支沒有得到檢查!y := y+1x=y zwx

12、:= x-1條件測試前個(gè)變量的值:truefalse判定(分支/邊)覆蓋使程序中每個(gè)判定真假的分支至少執(zhí)行一次優(yōu)點(diǎn)相比語句覆蓋,多幾乎一倍的測試路徑,具有更強(qiáng)的測試能力簡單性,無須知道判定中每個(gè)條件的取值 問題 沒有檢查每個(gè)獨(dú)立條件,比如 xy 的情況沒有得到有效檢查y := y+1x=y zwx := x-1truefalse條件覆蓋每個(gè)條件的真假可能取值均至少被取到一次 通常比判定覆蓋強(qiáng),因?yàn)樗古卸ū磉_(dá)式中每個(gè)條件都取到了兩個(gè)不同的結(jié)果但也可能有相反的情況:雖然每個(gè)條件都取到了不同值,但判定表達(dá)式卻始終只取一個(gè)值y := y+1x=y zwx := x-1truefalse條件覆蓋不一定

13、包含判定覆蓋判定覆蓋也不一定包含條件覆蓋x =y z wFTFTFFTFF判定/條件覆蓋在覆蓋條件的同時(shí),要求也覆蓋判定(分支/邊)問題未考慮條件的組合情況表面上,它測試了所有條件的取值,但事實(shí)并非如此,往往某些條件掩蓋了另一些條件,會(huì)遺漏某些條件取值錯(cuò)誤的情況。y := y+1x=y zwx := x-1TFtruefalse多條件覆蓋(條件組合覆蓋)設(shè)計(jì)足夠多的測試用例,使得每個(gè)判定中條件的各種可能組合都至少出現(xiàn)一次 A ( B C ) 8 = 23 指數(shù)級爆炸x=y zw修正條件/判定覆蓋(MC/DC)程序的每個(gè)入口和出口都必須執(zhí)行一次程序中每個(gè)條件必須至少取到其所有可能值各一次判定中,

14、每個(gè)條件應(yīng)獨(dú)立影響判定結(jié)果至少一次y := y+1x=y zwx := x-1TFFtruefalse路徑覆蓋設(shè)計(jì)足夠多的測試用例,覆蓋程序中的每條路徑.實(shí)際程序中往往有無限多路徑不可能全部覆蓋可以考慮路徑片段的覆蓋即使一條路徑也可能對應(yīng)不同行為(考慮有數(shù)組)y := y+1x=y zwx := x-1TFtruefalse路徑覆蓋如果循環(huán)執(zhí)行20次,將對應(yīng)520 條不同路徑!假使對每一條路徑進(jìn)行測試需要1毫秒,一天工作24小時(shí),一年工作365 天, 那么要想把如圖所示的小程序的所有路徑測試完,則需要3170年。覆蓋準(zhǔn)則總結(jié)無論哪種覆蓋方法,都無法絕對保證程序的正確性覆蓋準(zhǔn)則總結(jié)1語句覆蓋保證

15、程序中的每條語句都執(zhí)行一遍2判定覆蓋保證每個(gè)判斷取True和False至少一次3條件覆蓋保證每個(gè)判斷中的每個(gè)條件的取值至少滿足一次4判定條件覆蓋保證每個(gè)條件和由條件組成的判斷的取值5條件組合覆蓋保證每個(gè)條件的取值組合至少出現(xiàn)一次6修正條件/判定覆蓋保證每個(gè)條件取到其所有可能值各一次保證每個(gè)條件獨(dú)立影響判定結(jié)果至少一次7路徑覆蓋覆蓋程序中所有可能路徑各種覆蓋方法之間的關(guān)系語句覆蓋判定覆蓋條件覆蓋判定/條件覆蓋修正判定/條件覆蓋條件組合覆蓋路徑覆蓋路徑覆蓋未必條件組合覆蓋 條件組合覆蓋未必路徑覆蓋e.g., 考慮循環(huán)高覆蓋未必找到更多錯(cuò)誤,只是找到的可能性更大在實(shí)際的測試用例設(shè)計(jì)過程中,可以根據(jù)需

16、要將不同的覆蓋方法組合起來使用,以實(shí)現(xiàn)最佳的測試用例設(shè)計(jì) 。覆蓋率使用的基本原則覆蓋率不是目的,只是一種手段 測試目標(biāo)是發(fā)現(xiàn)錯(cuò)誤,應(yīng)先根據(jù)需求挖掘測試用例,再使用覆蓋 準(zhǔn)則來豐富和完善測試用例; 僅以覆蓋率來指導(dǎo)測試,會(huì)遺漏很多有用的用例,陷入追求覆蓋率 的數(shù)字游戲2. 不可能針對所有的覆蓋率去測試 會(huì)造成測試成本十分高昂,難以實(shí)現(xiàn);現(xiàn)代軟件需要對市場快速響 應(yīng),要求盡量使用精簡的,能夠讓產(chǎn)品質(zhì)量迅速穩(wěn)定下來的測試;3. 只考慮一種覆蓋標(biāo)準(zhǔn)不恰當(dāng) 每種覆蓋標(biāo)準(zhǔn)都有其針對的重點(diǎn),考慮一種會(huì)遺漏重要的測試內(nèi)容; 綜合使用能發(fā)現(xiàn)更多錯(cuò)誤4. 不要追求絕對100%的覆蓋率 達(dá)到100%覆蓋率成本巨大,

17、實(shí)踐中即使語句覆蓋也很難達(dá)到100% 對一般軟件應(yīng)設(shè)置合理的覆蓋標(biāo)準(zhǔn);覆蓋要均勻,也要考慮重點(diǎn)覆蓋率使用的注意事項(xiàng)使用最少測試來達(dá)到覆蓋既要考慮測試質(zhì)量,也要兼顧效益/成本分析軟件規(guī)格變化則需要更新相應(yīng)的覆蓋覆蓋信息的收集配置編譯環(huán)境信息源文件插樁插樁后源文件連接交叉編譯目標(biāo)模塊可執(zhí)行模塊運(yùn)行覆蓋信息插樁通過在源代碼中加入記錄信息語句,以便進(jìn)行運(yùn)行信息的追蹤和調(diào)試,統(tǒng)計(jì)有關(guān)的運(yùn)行資源狀況。程序插樁插樁的實(shí)現(xiàn)程序 AST New AST程序插樁的主要問題1:探測什么信息?運(yùn)行時(shí)間、函數(shù)調(diào)用次數(shù)、語句執(zhí)行次數(shù)2:插樁位置?3:探測點(diǎn)數(shù)目?插樁的難點(diǎn)性能:在for、while循環(huán)語句中插入信息時(shí),很

18、可能會(huì)導(dǎo)致程序運(yùn)行時(shí)間非常長插樁return語句示例:for(j=0;j10000;j+) if(j=k) return;for(j=0;jR求整數(shù)X和Y的最大公約數(shù)程序的插樁程序插樁的其它作用(1)生成特定狀態(tài),檢驗(yàn)狀態(tài)的可達(dá)性;(2)顯示或讀取內(nèi)部數(shù)據(jù)或私有數(shù)據(jù);(3)監(jiān)測不變數(shù)據(jù)(4)監(jiān)測前提條件(5)人為觸發(fā)事件時(shí)間(6)監(jiān)測事件時(shí)間DevPartner True Coverage衡量測試工作充分性,識別未測代碼代碼行、函數(shù)級別顯示代碼執(zhí)行覆蓋情況3.2 路徑測試路徑分析:DD-路徑測試(決策到?jīng)Q策路徑測試)基本路徑測試有關(guān)循環(huán)的測試考慮控制流圖y := y+1x=y zwx := x

19、-1程序流程圖(框圖)truefalse控制流圖DD-路徑測試DD-路徑是控制流圖中的一條路徑,只要滿足下列五種情況之一:由一個(gè)節(jié)點(diǎn)組成,入度=0;由一個(gè)節(jié)點(diǎn)組成,出度=0;由一個(gè)節(jié)點(diǎn)組成,入度 2或者出度 2;由一個(gè)節(jié)點(diǎn)組成,入度=1并且出度=1;長度 1的最大鏈。鏈?zhǔn)怯邢驁D中一條起始節(jié)點(diǎn)和終止節(jié)點(diǎn)不同的路徑,并且每個(gè)節(jié)點(diǎn)的入度=1,出度=1。節(jié)點(diǎn) DD-路徑名稱 定義情況 4第一15-8A59B310C411D412E313F314H315I416J317K418L419M320N321G422O323最后2控制流圖DD-路徑圖DD-路徑測試DD-路徑圖給定采用命令式語言編寫的一段程序,其

20、DD-路徑圖是有向圖。其中,節(jié)點(diǎn)表示其程序圖的DD-路徑,邊表示連接DD-路徑之間的控制流。DD-路徑覆蓋: 覆蓋DD-路徑圖中的每條邊E.F.Miller (1991)發(fā)現(xiàn),當(dāng)通過一組測試用例滿足DD-路徑覆蓋要求時(shí),可以發(fā)現(xiàn)全部缺陷中的大約85%。DD-路徑覆蓋等價(jià)于判定覆蓋。對于if類的語句,這意味著真、假分支都要覆蓋。對于CASE語句,則每個(gè)子句都要覆蓋。3.2.2 基本路徑測試基本路徑測試法是在程序控制流圖的基礎(chǔ)上,通過分析控制構(gòu)造的環(huán)路復(fù)雜性,導(dǎo)出基本可執(zhí)行路徑集合,從而設(shè)計(jì)測試用例的方法。設(shè)計(jì)出的測試用例要保證在測試中程序的每個(gè)基本可執(zhí)行路徑至少執(zhí)行一次。 流程圖流圖基本路徑測試

21、用例基路徑測試向量空間的啟發(fā)向量空間的基是相互獨(dú)立的一組向量,基“覆蓋”整個(gè)向量空間,使得該空間中的任何其他向量都可以用基向量來表示。因此,一組基向量在一定程度上可表示整個(gè)向量空間的本質(zhì):空間中的一切都可以用基表示.基路徑測試向量空間的啟發(fā)基對測試的潛在意義:如果可以把程序看做是一種向量空間,則這種空間的基就是要測試的非常有意義的元素集合。如果基沒有問題,則可以期望能夠用基表達(dá)的一切都是沒有問題的。ex1=p2+p3-p1ex2=2p2 - p1McCabe的基路徑方法核心思想以程序控制流圖中的線性獨(dú)立環(huán)路為基線性獨(dú)立環(huán)路一條路徑,初始節(jié)點(diǎn)是終止節(jié)點(diǎn)線性獨(dú)立:至少擁有一條以上其它線性獨(dú)立路徑中

22、沒有的邊 線性獨(dú)立環(huán)路數(shù)的數(shù)量即程序控制流圖的圈數(shù)量控制流圖McCabe的導(dǎo)出強(qiáng)連接圖五個(gè)線性獨(dú)立路徑P1:A,B,C,GP2:A,B,C,B,C,GP3:A,B,E,F(xiàn),GP4:A,D,E,F(xiàn),GP5:A,D,F(xiàn),G基圈數(shù)計(jì)算令e是G中的邊數(shù)。n是G中的節(jié)點(diǎn)數(shù)。p是G中的連通分量個(gè)數(shù)。不增加從匯節(jié)點(diǎn)到源節(jié)點(diǎn)的邊V(G)=e-n2p 增加邊后V(G)=e-np McCabe的基路徑方法通過定義加法和標(biāo)量乘法的概念,強(qiáng)制使其看起來像向量空間:路徑加法就是一條路徑后接另一條路徑乘法對應(yīng)于路徑的重復(fù)。ex1=p2+p3-p1ex2=2p2 - p1McCabe的基路徑方法McCabe開發(fā)了一種算法,

23、用于確定基路徑集合這種方法首先選擇一個(gè)基線路徑,應(yīng)該對應(yīng)某個(gè)“正常案例”程序的執(zhí)行。接下來重復(fù)回溯基線路徑,依次“翻轉(zhuǎn)”每個(gè)判斷點(diǎn),即當(dāng)節(jié)點(diǎn)的外度2時(shí),必須取不同的邊。基路徑測試不可行不可行考慮下列約束:經(jīng)過C則必經(jīng)過H,經(jīng)過D則必經(jīng)過G原始P1:A-B-C-E-F-H-J-K-M-N-O-最終在B處翻轉(zhuǎn)P1P2:A-B-D-E-F-H-J-K-M-N-O-最終在F處翻轉(zhuǎn)P1P3:A-B-C-E-F-G-O-最終在H處翻轉(zhuǎn)P1P4:A-B-C-E-F-H-I-N-O-最終在J處翻轉(zhuǎn)P1P5:A-B-C-E-F-H-J-L-M-N-O-最終在B、F處翻轉(zhuǎn) P6:A-B-D-E-F-G-O-最終基

24、本路徑測試舉例void ReadPara(CString temp)if ( temp = =) m_oper.SetCurSel(0); else if (temp = ) m_oper.SetCurSel(1);else if ( temp = =) m_oper.SetCurSel(2); else if( temp = =) m_oper.SetCurSel(3); else if ( temp = =m_oper.SetCurSel(0)Path 2m_oper.SetCurSel(1)Path 3=m_oper.SetCurSel(2)Path 4m_oper.SetCurSel(

25、3)Path 5=m_oper.SetCurSel(4)Path 6+m_oper.SetCurSel(5)McCabe的基路徑方法弱點(diǎn):一、假設(shè)測試基路徑集合是充分的 (實(shí)際未必)二、向量運(yùn)算用于程序路徑的表達(dá)上, 沒有意義。3.2.3 有關(guān)循環(huán)測試目標(biāo):檢查循環(huán)結(jié)構(gòu)的有效性循環(huán)分類:簡單循環(huán)嵌套循環(huán)循環(huán)測試策略簡單循環(huán):(循環(huán)最大次數(shù)n)跳過整個(gè)循環(huán)只循環(huán)一次循環(huán)兩次循環(huán)m次,mn分別循環(huán)n-1,n,n+1嵌套循環(huán):從內(nèi)層開始,所有外層的循環(huán)次數(shù)為最小,內(nèi)層循環(huán)按簡單循環(huán)策略.或由內(nèi)向外,外層仍取最小,內(nèi)層取典型值Z路徑覆蓋循環(huán)結(jié)構(gòu)使路徑數(shù)增加,無法實(shí)際測試,簡化循環(huán)策略,稱為Z路徑覆蓋.

26、循環(huán)簡化:限制循環(huán)次數(shù),執(zhí)行一次和零次.3.3 數(shù)據(jù)流測試關(guān)于程序的不同角度理解程序的核心是語句間的控制轉(zhuǎn)移I1I2Ikv1 v2Invmvpvqresult程序的核心是變量間的值傳遞中間計(jì)算輸入3.3 數(shù)據(jù)流測試前面的測試針對程序的控制流路徑,檢查程序在各種條件值、各種決策下是否有錯(cuò)。數(shù)據(jù)流測試主要測試程序中的數(shù)值流(覆蓋值傳遞路徑),檢測變量定義與使用的情況。它比較容易發(fā)現(xiàn)下列類型的錯(cuò)誤變量被定義,但是從來沒有使用。所使用的變量沒有被定義。變量在使用之前被定義兩次。其它定義不當(dāng)或使用不當(dāng)?shù)那闆r數(shù)據(jù)流測試基本概念節(jié)點(diǎn)集 def(x): 定義變量 x 的節(jié)點(diǎn)的集合def(x) = 1def(y

27、) = 2, 3, 7, 8p-use(x): 使用變量 x 的謂詞(判定)的集合p-use(x) = 5, 6p-use(y) = 4c-use(x): 非謂詞中使用變量 x 的節(jié)點(diǎn)的集合c-use(x) = 7, 8y:=y+1x6y := x-1truefalsey := 0 x := 123x5y1014y := x+15678數(shù)據(jù)流測試基本概念為每個(gè) sdef(x), 定義如下節(jié)點(diǎn)集dpu(s,x): 其中的節(jié)點(diǎn)s滿足sp-use(x) ,且從s到s有一條路徑,其上變量x沒有被重新定值 。dpu(1,x)=5, 6dpu(2,y)= dpu(3,y)=4dcu(s,x): 其中的節(jié)點(diǎn)

28、s滿足 sc-use(x),且從s到s有一條路徑,其上變量x沒有被重新定值 。dcu(1,x)=7, 8dcu(2,y)=3dcu(3,y)= y:=y+1x6y := x-1truefalsey := 0 x := 123x5y1014y := x+15678數(shù)據(jù)流測試覆蓋準(zhǔn)則全定義(all-defs)對任一變量 x,和它的任一定義點(diǎn) sdef(x) ,至少包含到 dpu(s, x) 或 dcu(s, x)中節(jié)點(diǎn)的一條路徑 所有定義至少使用一次全謂詞使用(all-p-uses)對任一變量 x,和它的任一定義點(diǎn) sdef(x) ,至少包含到 dpu(s, x) 中每個(gè)節(jié)點(diǎn)的一條路徑 每個(gè)定義的每次謂詞使用都應(yīng)該被測試一次y:=y+1x6y := x-1truefalsey := 0 x := 123x5y1014y := x+15678數(shù)據(jù)流測試覆蓋準(zhǔn)則全謂詞使用/部分計(jì)算使用(all-p-uses/some-c-uses)對任一變量 x,和它的任一定義點(diǎn) s def(x) ,至少包含到 dpu(s, x) 中每個(gè)節(jié)點(diǎn)的一條路徑; 如果 dcu(s,x) 非空,至少包含一條到dcu(s, x)中節(jié)點(diǎn)的路徑。全計(jì)算使用

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論