軟件測試方法_第1頁
軟件測試方法_第2頁
軟件測試方法_第3頁
軟件測試方法_第4頁
軟件測試方法_第5頁
已閱讀5頁,還剩120頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Dr. 張德珍張德珍軟件測試與質(zhì)量保證軟件測試與質(zhì)量保證第第3章章 軟件測試的方法軟件測試的方法第2章回顧Zhu.K軟件缺陷是軟件質(zhì)量的對立面軟件缺陷是軟件質(zhì)量的對立面軟件缺陷軟件缺陷(Bug)是什么是什么驗證和確認驗證和確認軟件測試的分類和階段軟件測試的分類和階段- 單元、集成、系統(tǒng)(性能、適用性、兼容性)、驗收測試軟件測試的工作范疇軟件測試的工作范疇- 策略、計劃、設(shè)計、執(zhí)行、報告、評估第第3章章 軟件軟件測試的方法測試的方法Zhu.K3.1 白盒測試方法白盒測試方法3.2 黑盒測試方法黑盒測試方法3.3 靜態(tài)測試和動態(tài)測試靜態(tài)測試和動態(tài)測試3.4 主動測試和被動測試主動測試和被動測試3.

2、5 形式化測試方法形式化測試方法3.6 基于風險的測試基于風險的測試3.7 模糊測試方法模糊測試方法3.8 ALAC測試和隨機測試方法測試和隨機測試方法方法論和具體方法方法論和具體方法p 從方法論看,更多體現(xiàn)了一種哲學的思想,例如辯證統(tǒng)一的方法,在測試中有許多對立統(tǒng)一體,如靜態(tài)測試和動態(tài)測試、白盒測試和黑盒測試、自動化測試和手工測試等。p 軟件測試的方法論來源于軟件工程的方法論,例如有面向?qū)ο蟮拈_發(fā)方法,就有面向?qū)ο蟮臏y試方法;有敏捷方法,就有和敏捷方法對應(yīng)的測試方法。Zhu.K黑盒子和白盒子黑盒子和白盒子功能測試功能測試數(shù)據(jù)驅(qū)動測試數(shù)據(jù)驅(qū)動測試 結(jié)構(gòu)測試結(jié)構(gòu)測試邏輯驅(qū)動測試邏輯驅(qū)動測試 客戶

3、需求事件驅(qū)動輸入輸出Zhu.K靜態(tài)的和動態(tài)的靜態(tài)的和動態(tài)的主持人主持人作者記錄員列席人員內(nèi)審員內(nèi)審員技術(shù)專業(yè)人員用戶代表不正式正式互審 走讀 審查會議運行程序運行程序Zhu.K自動測試和手工測試自動測試和手工測試手工模擬用戶手工模擬用戶操作操作3.1白盒測試方法白盒測試方法Zhu.K白盒測試方法白盒測試方法n靜態(tài)白盒法靜態(tài)白盒法:是在不執(zhí)行的條件下有條理地仔細審查軟件設(shè)計、體系結(jié)構(gòu)和代碼,從而找出軟件缺陷的過程。n侵入式法:侵入式法:在軟件測試過程中需要對軟件系統(tǒng)的代碼進行修改的測試方法。n邏輯覆蓋邏輯覆蓋:以程序的內(nèi)部邏輯結(jié)構(gòu)為基礎(chǔ),分為語句覆蓋、判定覆蓋、判定-條件覆蓋、條件組合覆蓋等n基

4、本路徑測試基本路徑測試:在程序控制流程的基礎(chǔ)上,分析控制構(gòu)造的環(huán)路復雜性,導出基本可執(zhí)行路徑集合,從而設(shè)計測試用例。Zhu.K3.1.1靜態(tài)白盒法靜態(tài)白盒法p靜態(tài)白盒測試是在不執(zhí)行的條件下有條理地仔細審查軟件設(shè)計、體系結(jié)構(gòu)和代碼,從而找出軟件缺陷的過程。u 盡早發(fā)現(xiàn)軟件缺陷。 u 為黑盒測試員提供思路。Zhu.K靜態(tài)白盒測試法分類靜態(tài)白盒測試法分類n靜態(tài)白盒測試法一般根據(jù)審查的嚴格程度分為三種:n1、同行評審也稱為伙伴審查,這種方法大體類似于“如果你給我看你的,我也給你看我的”類型的討論。同行評審常常僅在編寫代碼或設(shè)計體系結(jié)構(gòu)的程序員,以及充當審查者的其他一兩個程序員和測試員之間進行。n2、走

5、查比同行評審更正規(guī)一些的方法,在走查中,編寫代碼的程序員向其他程序員和測試員組成的小組作正式陳述。靜態(tài)白盒測試法分類靜態(tài)白盒測試法分類n3、評審評審是最正式的審查類型,具有高度組織化,要求每一個參與者都接受訓練。評審與同行評審和走查的不同之處在于陳述代碼的人陳述者或者宣讀者不是原來的程序員。召開評審會議之后,要準備一份書面報告,明確解決問題所必需重做的工作。然后程序員進行修改,由會議協(xié)調(diào)員驗證修改結(jié)果。評審經(jīng)證實是從設(shè)計文檔和代碼中發(fā)現(xiàn)軟件缺陷非常有效的方法。通用代碼審查清單通用代碼審查清單通用代碼審查清單(問題舉例問題舉例):(1)數(shù)據(jù)引用錯誤及問題羅列 string sTemp; int

6、iC; foreach (DataGridViewRow DGV in csfDataGridView1.Rows) sTemp=“”; for (int i = 0; i = DGV.Cells.Count; ) sTemp= sTemp+DGV.Cellsi.Value.ToString(); iC=iC+1; MessageBox.Show(sTemp+” ”+iC.ToString(); 通用代碼審查清單v數(shù)據(jù)引用錯誤是指使用未經(jīng)正確聲明和初始化的變量、常量、數(shù)組、字符串或記錄而導致的軟件缺陷。v是否引用了未初始化的變量?查找遺漏之處與查找錯誤同等重要v數(shù)組和字符串的下標是整數(shù)值嗎?下

7、標總是在數(shù)組和字符串長度范圍之內(nèi)嗎?v在檢索操作或者引用數(shù)組下標時是否包含“丟掉一個”這樣的潛在錯誤?v是否在應(yīng)該使用常量的地方使用了變量例如在檢查數(shù)組邊界時?v變量是否被賦予不同類型的值?例如,無意中使代碼為整形變量賦予一個浮點數(shù)值?v為引用的指針分配內(nèi)存了嗎?v一個數(shù)據(jù)結(jié)構(gòu)是否在多個函數(shù)或者子程序中引用,在每一個引用中明確定義結(jié)構(gòu)了嗎?通用代碼審查清單通用代碼審查清單(問題舉例問題舉例):(1)數(shù)據(jù)引用錯誤及問題羅列n例:程序的功能為:求n以內(nèi)的奇數(shù)之和及偶數(shù)和。#includemain() int n,i=1.0,sum,a,b; scanf(%d,&n); while(i 0)

8、 foreach (DataGridViewRow DGV in GV1.SelectedRows) /foreach (DataGridViewRow DGV2 in GV2.Rows) / / if (DGV2.Cells0.Value = DGV.Cells0.Value) / return; / /int a = GV2.Rows.Count; GV2.Rows.Add(); DataGridViewRow dgvr = GV2.RowsGV2.Rows.Count; for (int i = 0; i R) Q=Q-R; else R=R-Q; return Q; Zhu.K程序插樁

9、測試程序插樁測試(略略)根據(jù)程序繪制出其流程圖為了記錄改程序中語句的執(zhí)行次數(shù),使用插樁技術(shù)插入如下語句:C(i)=C(i)+1,i=1,2,6插樁之后的流程圖如右Zhu.K在程序入口處插入在程序入口處插入對計數(shù)器對計數(shù)器C(i)的初的初始化語句始化語句在程序出口處在程序出口處加入打印語句加入打印語句程序插樁測試程序插樁測試(略略)圖中虛線框中的內(nèi)容并不是源程序的內(nèi)容,而是為了記錄語句的執(zhí)行次數(shù)而插入的。虛線框中的程序就是為了完成計數(shù)。形式為 C(n)=C(n)+1 ; n = 1,2,3,n ; 該程序從入口開始,到出口執(zhí)行結(jié)束。凡經(jīng)歷的計數(shù)語句都能記錄下該程序點的執(zhí)行次數(shù)。 如果在程序的入口

10、處還插入了對計數(shù)器C(i)初始化的語句,在出口處插入了打印這些計數(shù)器的語句,就構(gòu)成了完整的插樁程序。它就能記錄并輸出在各程序點上語句的實際執(zhí)行次數(shù)。Zhu.K程序插樁測試程序插樁測試(略略)Zhu.K右圖為插樁之后的程序,箭頭所指為插入的語句。源程序的語句已略去。程序插樁測試程序插樁測試設(shè)計插樁程序時需要考慮的問題包括: 探測哪些信息; 在程序的什么部位設(shè)置探測點; 需要設(shè)置多少個探測點; 程序中特定部位插入某些用以判斷變量特性的語句。Zhu.K程序插樁測試程序插樁測試第1個問題具體問題具體分析。第2個問題,在實際測試通常在下面一些部位設(shè)置探測點: 程序塊的第1個可執(zhí)行語句之前 for,do

11、,do-while,do until 等循環(huán)語句處。if, else if, else及end if等條件語句各分支處。輸入/輸出語句之后。函數(shù)、過程、子程序調(diào)用語句之后。return語句之后goto語句之后Zhu.K程序插樁測試程序插樁測試第3個問題,需要考慮如何設(shè)置最少探測點方案。第4個問題,是如何在程序中特定部位插入斷言語句。在應(yīng)用程序插樁技術(shù)時,可在程序中特定部位插入某些用以判斷變量特性的語句,使得程序執(zhí)行中這些語句得以證實。Zhu.K程序插樁測試程序插樁測試插裝技術(shù)在軟件測試中主要有以下幾個應(yīng)用:v 覆蓋分析:程序插裝可以估計程序控制流圖中被覆蓋的程度,確定測試執(zhí)行的充分性,從而設(shè)計

12、更好的測試用例,提高測試覆蓋率。v 監(jiān)控在程序的特定位置設(shè)立插裝點,插入用于記錄動態(tài)特性的語句,用來監(jiān)控程序運行時的某些特性,從而排除軟件故障。v 查找數(shù)據(jù)流異常程序插裝可以記錄在程序執(zhí)行中某些變量值的變化情況和變化范圍。掌握了數(shù)據(jù)變量的取值狀況,就能準確地判斷是否發(fā)生數(shù)據(jù)流異常。雖然數(shù)據(jù)流異??梢杂渺o態(tài)分析器來發(fā)現(xiàn),但是使用插裝技術(shù)可以更經(jīng)濟更簡便,畢竟所有信息的獲取是隨著測試過程附帶得到的。Zhu.K斷言測試斷言測試v斷言測試用于檢查在程序運行過程出現(xiàn)的一些本“不應(yīng)該”發(fā)生的情況。也就是在一個應(yīng)該正確的地方,加一條判斷來驗證程序運行時,它是否真正如當初預(yù)料的那樣,具有預(yù)期的正確性。 v斷言

13、測試就是在程序中插入斷言,插入斷言的根本目的是用于幫助程序的調(diào)試與排錯,因此本質(zhì)上它是屬于測試代碼,是一種特殊的插樁語句,而不是屬于真正的應(yīng)用程序模塊的一部分。 Zhu.K斷言測試斷言測試v例:Zhu.K缺陷種植測試缺陷種植測試缺陷種植測試是一種用來估計駐留在程序中的缺陷數(shù)量的技術(shù)。工作原理是向一個軟件中“種植”缺陷,然后運行測試集,以檢查發(fā)現(xiàn)了多少個種植的缺陷,還有多少個種植的缺陷沒有被發(fā)現(xiàn),以及已經(jīng)發(fā)現(xiàn)了多少個新的非種植的缺陷。然后就可以預(yù)測殘留的缺陷數(shù)量。Zhu.K缺陷種植測試案例缺陷種植測試案例如果種植了100個種子缺陷,而在測試中只找到75個種植的缺陷,那么種子發(fā)現(xiàn)率為75%。如果已

14、經(jīng)發(fā)現(xiàn)了450個真實的缺陷,那么可以通過種子發(fā)現(xiàn)率,推出這450個真實的缺陷只代表了現(xiàn)在存在所有真實缺陷的75%。那么,真實的缺陷總數(shù)估計為600個。所以還有150個真實的缺陷需要測試出來。Zhu.K白盒測試是根據(jù)程序內(nèi)部的結(jié)構(gòu)來測試程序。程序的內(nèi)部結(jié)構(gòu)可以用流程圖來表示。從流程圖上,可以看出,程序的內(nèi)部結(jié)構(gòu)包含以下這些元素:語句,判定,條件,循環(huán),路徑等,通過對這些元素的測試就形成了以下不同的白盒測試方法:v語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、條件組合覆蓋和路徑覆蓋(統(tǒng)稱為邏輯覆蓋法)。v循環(huán)測試v基本路徑測試Zhu.K3.1.3語句覆蓋語句覆蓋p語句覆蓋法的基本思想是設(shè)計若干測試

15、用例,運行被測程序,使程序中的每個可執(zhí)行語句至少被執(zhí)行一次Zhu.K3.1.3語句覆蓋語句覆蓋Zhu.Kdbas入口入口返回返回(y1)&(z=0)(y=2)|(x1)x = x / yx = x +1ceTTFF3.1.3語句覆蓋的測試用例語句覆蓋的測試用例Zhu.K語句覆蓋并不充分:語句覆蓋并不充分: 當?shù)谝粋€判定中的當?shù)谝粋€判定中的&寫成寫成|時,對于時,對于CASE1程序仍按程序仍按sacbed執(zhí)行。執(zhí)行。dbas入口入口返回返回(y1)&(z=0)(y=2)|(x1)x = x / yx = x +1ce3.1.4判定覆蓋判定覆蓋p判定覆蓋法的基本思想是設(shè)計若

16、干用例,運行被測程序,使得程序中每個判斷的取真分支和取假分支至少經(jīng)歷一次,即判斷真假值均曾被滿足。p一個判定往往代表著程序的一個分支, 所以判定覆蓋也被稱為分支覆蓋。Zhu.K3.1.4判定覆蓋判定覆蓋Zhu.K判定判定覆蓋包含語句覆蓋,覆蓋包含語句覆蓋,判定覆蓋也不充分:判定覆蓋也不充分: 當?shù)诋數(shù)?個判定中的個判定中的x1寫成寫成x1)&(z=0)(y=2)|(x1)x = x / yx = x +1ce3.1.5條件覆蓋條件覆蓋p條件覆蓋的基本思想是設(shè)計若干測試用例,執(zhí)行被測程序以后,要使每個判斷中每個條件的可能取值至少滿足一次。Zhu.K3.1.5條件覆蓋條件覆蓋目標目標: 保

17、證測試到每個邏輯條件取值為保證測試到每個邏輯條件取值為 true 和和 false簡單條件簡單條件:(a rel-op b) where rel-op= (和NOT連用), 即 ab; NOT(ab)組合條件組合條件: 由 AND, OR連接的多個簡單條件,即(ab) AND (c(a+b+c)測試發(fā)現(xiàn)的錯誤測試發(fā)現(xiàn)的錯誤:布爾操作符 關(guān)系操作符布爾變量 算術(shù)表達式布爾括弧Zhu.KZhu.Kv對判定1:(y1)&(z=0) 條件 y1 取真、假分別記為 T1 ,-T1 條件 z=0 取真、假分別記為 T2 ,-T2v判定2:(y=2)|(x1) 條件 y=2取真、假分別記為 T3 ,

18、-T3 條件 x1 取真、假分別記為 T4 ,-T4條件覆蓋并不能包含條件覆蓋并不能包含判判定定覆蓋覆蓋,對于下述測試用對于下述測試用例,分支例,分支bd并未出現(xiàn)。并未出現(xiàn)。3.1.6判定判定/條件覆蓋條件覆蓋p判定-條件覆蓋是判定和條件覆蓋設(shè)計方法的交集,即設(shè)計足夠的測試用例,使得判斷條件中的所有條件可能取值至少執(zhí)行一次,同時,所有判斷的可能結(jié)果至少執(zhí)行一次Zhu.KZhu.K判定判定/條件覆蓋的測試用例條件覆蓋的測試用例v對判定對判定1:(y1)&(z=0) 條件條件 y1 取真、假分別記為取真、假分別記為 T1 ,-T1 條件條件 z=0 取真、假分別記為取真、假分別記為 T2

19、,-T2v判定判定2:(y=2)|(x1) 條件條件 y=2取真、假分別記為取真、假分別記為 T3 ,-T3 條件條件 x1 取真、假分別記為取真、假分別記為 T4 ,-T4判定判定/條件條件覆蓋同時包含覆蓋同時包含判定判定覆蓋覆蓋,和條件覆蓋。和條件覆蓋。3.1.7條件組合測試條件組合測試p條件組合覆蓋的基本思想是設(shè)計足夠的測試用例,使得判斷中每個條件的所有可能至少出現(xiàn)一次,并且每個判斷本身的判定結(jié)果也至少出現(xiàn)一次。p它與條件覆蓋的差別是它不是簡單地要求每個條件都出現(xiàn)“真”與“假”兩種結(jié)果,而是要求讓這些結(jié)果的所有可能組合都至少出現(xiàn)一次所有可能組合都至少出現(xiàn)一次Zhu.K條件組合覆蓋的測試用

20、例條件組合覆蓋的測試用例條件組合覆蓋條件組合覆蓋包含包含前述前述4種覆蓋。種覆蓋。邏輯覆蓋法各覆蓋標準的包含關(guān)系邏輯覆蓋法各覆蓋標準的包含關(guān)系Zhu.K組合覆蓋判斷/條件覆蓋判斷覆蓋條件覆蓋語句覆蓋3.1.8路徑覆蓋路徑覆蓋p顧名思義,路徑覆蓋就是設(shè)計所有的測試用例,來覆蓋程序中的所有可能的執(zhí)行路徑。Zhu.KZhu.K路徑覆蓋的測試用例路徑覆蓋的測試用例路徑覆蓋實際上考慮了程序中各種判定結(jié)果的所有可能路徑覆蓋實際上考慮了程序中各種判定結(jié)果的所有可能組合,但它并未考慮判定中的條件組合。因此,雖然說組合,但它并未考慮判定中的條件組合。因此,雖然說路徑覆蓋是一種非常強的覆蓋度量標準,但并不能代替路

21、徑覆蓋是一種非常強的覆蓋度量標準,但并不能代替條件組合覆蓋。條件組合覆蓋。課堂練習課堂練習1void DoWork (int x,int y,int z) int k=0,j=0; if ( (x3)&(z5) ) j=x*y+10; /語句塊語句塊2 j=j%3; /語句塊語句塊3對上述程序試用邏輯覆蓋法設(shè)計測試用例。對上述程序試用邏輯覆蓋法設(shè)計測試用例。畫出流程圖畫出流程圖X3 & z5執(zhí)行語句塊執(zhí)行語句塊3FFTTabdce(1)語句覆蓋測試用例語句覆蓋測試用例n測試用例輸入為: x=4、y=5、z=5 n程序執(zhí)行的路徑是:abdX3 & z5執(zhí)行語句塊執(zhí)行語句塊

22、3FFTTabdce(2)判定覆蓋測試用例判定覆蓋測試用例n要實現(xiàn)DoWork函數(shù)的判定覆蓋,需要設(shè)計兩個測試用例:測試用例的輸入為: x=4、y=5、z=5; x=2、y=5、z=5程序執(zhí)行的路徑分別是:abd;aceX3 & z5執(zhí)行語句塊執(zhí)行語句塊3FFTTabdce(3)條件覆蓋測試用例條件覆蓋測試用例1對DoWork函數(shù)的各個判定的各種條件取值加以標記。對于第一個判定( (x3)&(z3 取真值記為T1,取假值記為-T1 條件z5) ): 條件x=4 取真值記為T3,取假值記為-T3 條件y5 取真值記為T4,取假值記為-T4(3)條件覆蓋測試用例條件覆蓋測試用例2對

23、DoWork函數(shù)的各個判定的各種條件取值加以標記。對于第一個判定( (x3)&(z3 取真值記為T1,取假值記為-T1 條件z5) ): 條件x=4 取真值記為T3,取假值記為-T3 條件y5 取真值記為T4,取假值記為-T4(4)判定判定/條件覆蓋測試用例條件覆蓋測試用例X3 & z5執(zhí)行語句塊執(zhí)行語句塊3FFTTabdce(5)條件組合覆蓋測試用例條件組合覆蓋測試用例組合覆蓋的目的是要使設(shè)計的測試用例能覆蓋每一個判定的所有可能的條件取值組合。對DoWork函數(shù)中的各個判定的條件取值組合加以標記: 1、x3, z3, z=10 記做T1 -T2,第一個判定的取假分支 3、x=

24、3, z10 記做-T1 T2,第一個判定的取假分支 4、x=10 記做-T1 -T2,第一個判定的取假分支 5、x=4, y5 記做T3 T4,第二個判定的取真分支 6、x=4, y5 記做-T3 T4,第二個判定的取真分支 8、x!=4, y3 & z5執(zhí)行語句塊執(zhí)行語句塊3FFTTabdce課堂練習課堂練習 2(1)語句覆蓋測試用例語句覆蓋測試用例(2)判定覆蓋測試用例判定覆蓋測試用例(3)條件覆蓋測試用例條件覆蓋測試用例(4)判定判定/條件覆蓋測試用例條件覆蓋測試用例(5)條件組合覆蓋測試用例條件組合覆蓋測試用例(6)路徑覆蓋測試用例路徑覆蓋測試用例3.1.9 基本路徑測試基本

25、路徑測試Zhu.Kv完成路徑測試的理想情況是做到路徑覆蓋,但對于復雜性大的程序要做到所有路徑覆蓋(測試所有可執(zhí)行路徑)是不可能的。v在不能做到所有路徑覆蓋的前提下,如果某一程序的每一個獨立路徑都被測試過,那么可以認為程序中的每個語句都已經(jīng)檢驗過了,即達到了語句覆蓋。這種測試方法就是通常所說的基本路徑測試方法。 基本路徑測試并不是測試所有路徑的組合,僅僅保證每條基本路徑被執(zhí)行一次3.1.9 基本路徑測試基本路徑測試依據(jù)代碼繪制流程圖確定流程圖的圈復雜度(cyclomatic complexity )確定線性獨立路徑的基本集合( basis set )設(shè)計測試用例覆蓋每條基本路徑Zhu.K(1)控

26、制流圖控制流圖v控制流圖(可簡稱流圖)是對程序流程圖進行簡化后得到的,它可以更加突出的表示程序控制流的結(jié)構(gòu)。v控制流圖中包括兩種圖形符號:節(jié)點和控制流線。節(jié)點由帶標號的圓圈表示,可代表一個或多個語句、一個處理框序列和一個條件判定框。控制流線由帶箭頭的弧或線表示,可稱為邊。它代表程序中的控制流。常見結(jié)構(gòu)的流程圖與控制流圖常見結(jié)構(gòu)的流程圖與控制流圖控制流圖實例控制流圖實例其中,包含條件的節(jié)點被稱為判定節(jié)點判定節(jié)點(也叫謂詞節(jié)點),由判定節(jié)點發(fā)出的邊必須終止于某一個節(jié)點,由邊和節(jié)點所限定的范圍被稱為區(qū)域區(qū)域5節(jié)點邊區(qū)域2如何根據(jù)流程圖得到控制流圖?如何根據(jù)流程圖得到控制流圖

27、? 136258(a)程序流程圖)程序流程圖(b)控制流圖)控制流圖25836如何根據(jù)流程圖得到控制流圖?(續(xù))如何根據(jù)流程圖得到控制流圖?(續(xù)) (a) (b)關(guān)于復合條件的處理關(guān)于復合條件的處理n如何畫復合條件的控制流圖 ?如何由源程序直接得到控制流圖?如何由源程序直接得到控制流圖?1main ()23 int num1=0, num2=0, score=100;4 int i;5 char str;6 scanf (“%d, %cn”, &i, &str);7 while (i 0 )n5 n6 If ( iType=0 )n7x=y+2;break;n8 elsen9

28、If ( iType=1 )n10 x=y+10;n11 elsen12 y=x+20;n13 n14 printf(“x=%d,y=%d”,x,y);基本路徑測試案例基本路徑測試案例1(續(xù))(續(xù))v畫出控制流圖: 467910121314void Sort ( int iRecordNum, int iType )1 2 int x=0;3 int y=0;4 while ( iRecordNum- 0 )5 6 If ( iType=0 )7x=y+2;break;8 else9 If ( iType=1 )10 x=y+10;11 else12 y=x+20;13 14 printf(“

29、x=%d,y=%d”,x,y);基本路徑測試案例基本路徑測試案例1(續(xù))(續(xù))計算環(huán)形復雜度: 10(條邊)- 8(個節(jié)點)+ 2 = 4導出獨立路徑(用語句編號表示) 路徑1:414 路徑2:46714 路徑3:46910134 路徑4:46912134注:“”表示后面剩下的路徑是可以選擇的。原因在于存在循環(huán)結(jié)構(gòu)。467910121314基本路徑測試案例基本路徑測試案例1 (續(xù))(續(xù))設(shè)計測試用例:設(shè)計測試用例:案例案例2下例程序流程圖描述了最多輸入50個值(以1作為輸入結(jié)束標志),計算其中有效的學生分數(shù)的個數(shù)、總分數(shù)和平均值。開始 i =1,n1=n2=0,sum=0Score i -1

30、AND n20 AND scorei0average=sum/n1average= 1 返回FFFTTT12和345和6789101112123456789111012R1R2R3R4R5R6開始 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 返回FFFTTT12和345和6789101112步驟1:導出程序的流圖。步驟2:確定環(huán)形復雜性度量V(G):1)V(G)= 6 (個區(qū)域)2)V(G)=EN+2=1612+2=6其中E為流圖中的邊數(shù),N為結(jié)點數(shù);3)V(G)=P+1=5+1=6 其中P為

31、謂詞結(jié)點的個數(shù)。在流圖中,結(jié)點2、3、5、6、9是謂詞結(jié)點。123456789111012R1R2R3R4R5R6步驟3:確定基本路徑集合(即獨立路徑集合)。于是可確定6條獨立的路徑:路徑1:1-2-9-10-12路徑2:1-2-9-11-12路徑3:1-2-3-9-10-12路徑4:1-2-3-4-5-8-2路徑5:1-2-3-4-5-6-8-2路徑6:1-2-3-4-5-6-7-8-2注: “”表示后面剩下的路徑是可以選擇的。原因在于存在循環(huán)結(jié)構(gòu)。123456789111012R1R2R3R4R5R6步驟4:為每一條獨立路徑各設(shè)計一組測試用例,以便強迫程序沿著該路徑至少執(zhí)行一次。1)路徑1

32、(1-2-9-10-12)的測試用例:不滿足條件2,滿足條件9 score1=60; score2=-1; 期望結(jié)果:根據(jù)輸入的有效分數(shù)算出正確的分數(shù)個數(shù) n 1 = 1 、 n 2 = 1 、 總 分s u m = 6 0 和 平 均 分average=60。n1:有效分數(shù);n2:所有分數(shù)。開始 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 返回FFFTTT12和345和67891011122)路徑2(1-2-9-11-12)的測試用例:不滿足條件2,不滿足條件9 score 1 = 1 ;

33、期望的結(jié)果:average = 1 ,其他量保持初值。開始 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 返回FFFTTT12和345和67891011123)路徑3(1-2-3-9-10-12)的測試用例:滿足條件2,不滿足條件3,滿足條件9輸入多于50個有效分數(shù),即試圖處理51個分數(shù)期望結(jié)果:n1=50、且算出正確的總分和平均分。開始 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 返回FFFT

34、TT12和345和67891011124)路徑4(1-2-3-4-5-8-2)的測試用例:滿足條件2,滿足條件3,不滿足條件5 s c o r e 1 = - 0 . 5 ;s c o r e 2 = 6 0 , score3=-1 ;期望結(jié)果:根據(jù)輸入的有效分數(shù)算出正確的分數(shù)個數(shù)n1=1、總分 s u m = 6 0 和 平 均 分average=60。開始 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 返回FFFTTT12和345和67891011125)路徑5(1-2-3-4-5-6-8-2)的測試用例:滿足條件2,滿足條件3,滿足條件5,不滿足條件6 score1=101 score2=60, score3=-1 ; 期望結(jié)果:根據(jù)輸入的有效分數(shù)算出正確的分數(shù)個數(shù)n1=1、總分sum=60和平均分average=60。開始 i =1,n1=n2=0,sum=0Score i -1 AND n20 AND scorei0average=sum/n1average= 1 返回FFFTTT12和345和67891011126)路

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論