軟件測試?yán)碚揰第1頁
軟件測試?yán)碚揰第2頁
軟件測試?yán)碚揰第3頁
軟件測試?yán)碚揰第4頁
軟件測試?yán)碚揰第5頁
已閱讀5頁,還剩57頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

軟件測試?yán)碚?.1軟件測試的目標(biāo)和原則5.2軟件測試的方法5.3軟件測試的步驟和策略5.4停止測試5.5自動化測試工具學(xué)習(xí)內(nèi)容:第五章軟件測試第2頁,共62頁,2024年2月25日,星期天第五章軟件測試項(xiàng)目后期階段包括軟件測試、軟件維護(hù)、軟件項(xiàng)目后期管理等若干階段。通常軟件開發(fā)的2/3以上時間都處于項(xiàng)目后期階段,其中軟件測試工作量占整個項(xiàng)目開發(fā)工作量的40%左右。

軟件測試是為了發(fā)現(xiàn)錯誤而執(zhí)行程序的過程,軟件測試是保證軟件可靠性的主要手段。測試階段的主要任務(wù)是發(fā)現(xiàn)并改正軟件中的錯誤。白盒測試和黑盒測試是軟件測試的兩類基本方法。軟件測試通常至少分為單元測試、集成測試和系統(tǒng)測試三個基本階段。軟件維護(hù)的目的是要保證軟件的正常運(yùn)行,盡可能延長軟件生命周期。第3頁,共62頁,2024年2月25日,星期天軟件測試的目標(biāo):GlenMyers(梅爾斯)在他的軟件測試著作中就軟件測試的目的提出下列觀點(diǎn):

(1)測試是一個為了尋找錯誤而運(yùn)行程序的過程。(2)一個好的測試用例是指很可能找到迄今為止尚未發(fā)現(xiàn)的錯誤的用例。(3)一個成功的測試是指揭示了迄今為止尚未發(fā)現(xiàn)的錯誤的測試。軟件(程序)測試是為了發(fā)現(xiàn)錯誤而執(zhí)行程序的過程。5.1軟件測試的目標(biāo)和原則第4頁,共62頁,2024年2月25日,星期天換言之,測試的目的是想以最少的時間和人力,系統(tǒng)地找出軟件中潛在的各種錯誤和缺陷。如果我們成功地實(shí)施了測試,我們就能夠發(fā)現(xiàn)軟件中的錯誤。測試的附帶收獲是,它能夠證明軟件的功能和性能與需求說明相符合。實(shí)施測試收集到的測試結(jié)果數(shù)據(jù)為可靠性分析提供了依據(jù)。

測試不能表明軟件中不存在錯誤,它只能說明軟件中存在錯誤。

第5頁,共62頁,2024年2月25日,星期天基于不同的立場,存在著兩種

完全不同的測試目的從用戶的角度出發(fā),普遍希望通過軟件測試暴露軟件中隱藏的錯誤和缺陷,以考慮是否可接受該產(chǎn)品。從軟件開發(fā)者的角度出發(fā),則希望測試成為表明軟件產(chǎn)品中不存在錯誤的過程,驗(yàn)證該軟件已正確地實(shí)現(xiàn)了用戶的要求,確立人們對軟件質(zhì)量的信心。第6頁,共62頁,2024年2月25日,星期天軟件測試的原則1.應(yīng)當(dāng)把“盡早地和不斷地進(jìn)行軟件測試”作為軟件開發(fā)者的座右銘。2.測試用例應(yīng)由測試輸入數(shù)據(jù)和對應(yīng)的預(yù)期輸出結(jié)果這兩部分組成。3.程序員應(yīng)避免檢查自己的程序。4.在設(shè)計(jì)測試用例時,應(yīng)包括合理的輸入條件和不合理的輸入條件。第7頁,共62頁,2024年2月25日,星期天5.充分注意測試中的群集現(xiàn)象。

經(jīng)驗(yàn)表明,測試后程序中殘存的錯誤數(shù)目與該程序中已發(fā)現(xiàn)的錯誤數(shù)目成正比。6.嚴(yán)格執(zhí)行測試計(jì)劃,排除測試的隨意性。7.應(yīng)當(dāng)對每一個測試結(jié)果做全面檢查。8.妥善保存測試計(jì)劃,測試用例,出錯統(tǒng)計(jì)和最終分析報(bào)告,為維護(hù)提供方便。

第8頁,共62頁,2024年2月25日,星期天軟件測試的對象

軟件測試并不等于程序測試。軟件測試應(yīng)貫穿于軟件定義與開發(fā)的整個期間。需求分析、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)以及程序編碼等各階段所得到的文檔,包括需求規(guī)格說明、概要設(shè)計(jì)規(guī)格說明、詳細(xì)設(shè)計(jì)規(guī)格說明以及源程序,都應(yīng)成為軟件測試的對象。第9頁,共62頁,2024年2月25日,星期天5.充分注意測試中的群集現(xiàn)象。

經(jīng)驗(yàn)表明,測試后程序中殘存的錯誤數(shù)目與該程序中已發(fā)現(xiàn)的錯誤數(shù)目成正比。6.嚴(yán)格執(zhí)行測試計(jì)劃,排除測試的隨意性。7.應(yīng)當(dāng)對每一個測試結(jié)果做全面檢查。8.妥善保存測試計(jì)劃,測試用例,出錯統(tǒng)計(jì)和最終分析報(bào)告,為維護(hù)提供方便。

第10頁,共62頁,2024年2月25日,星期天

5.2軟件測試的方法系統(tǒng)分析測試

系統(tǒng)分析測試是測試項(xiàng)目是否能體現(xiàn)整個系統(tǒng)的需求,對用戶的需求從具體到抽象的一個過程的驗(yàn)證。注意:軟件測試應(yīng)貫穿于軟件定義與開發(fā)的整個期間。

5.2.1靜態(tài)測試和動態(tài)測試1.靜態(tài)測試:指被測試程序不在機(jī)器上運(yùn)行,而是采用人工測試和計(jì)算機(jī)輔助靜態(tài)分析的手段對程序進(jìn)行測試。包括:人工測試和計(jì)算機(jī)輔助靜態(tài)分析測試.(發(fā)現(xiàn)30%~70%邏輯和編碼錯誤)2.動態(tài)測試:指通過運(yùn)行程序發(fā)現(xiàn)錯誤。大多測試采用動態(tài)測試。包括白盒測試法和黑盒測試法。第11頁,共62頁,2024年2月25日,星期天測試信息流:軟件配置:軟件需求規(guī)格說明、軟件設(shè)計(jì)規(guī)格說明、源代碼等;測試配置:測試計(jì)劃、測試用例、測試程序等;測試工具:測試數(shù)據(jù)自動生成程序、靜態(tài)分析程序、動態(tài)分析程序、測試結(jié)果分析程序、以及驅(qū)動測試的測試數(shù)據(jù)庫等等。第12頁,共62頁,2024年2月25日,星期天測試結(jié)果分析:比較實(shí)測結(jié)果與預(yù)期結(jié)果,評價錯誤是否發(fā)生。排錯(調(diào)試):對已經(jīng)發(fā)現(xiàn)的錯誤進(jìn)行錯誤定位和確定出錯性質(zhì),并改正這些錯誤,同時修改相關(guān)的文檔。修正后的文檔再測試:直到通過測試為止。第13頁,共62頁,2024年2月25日,星期天5.2.2系統(tǒng)測試用例的設(shè)計(jì)

1.測試方法(1)黑盒法

該方法把被測試對象看成一個黑盒子,測試人員完全不考慮程序的內(nèi)部結(jié)構(gòu)和處理過程,只在軟件的接口處進(jìn)行測試,依據(jù)需求規(guī)格說明書,檢查程序是否滿足功能要求。因此,黑盒測試又稱為功能測試或數(shù)據(jù)驅(qū)動測試。第14頁,共62頁,2024年2月25日,星期天通過黑盒測試主要發(fā)現(xiàn)下面錯誤:是否有不正確或遺漏了的功能;在接口上,能否正確地接受輸入數(shù)據(jù),能否產(chǎn)生正確的輸出信息;訪問外部信息是否有錯;性能上是否滿足要求等等。(2)白盒法

該方法把被測試對象看成一個白盒子,測試人員須了解程序的內(nèi)部結(jié)構(gòu)和處理過程,以檢查處理過程的細(xì)節(jié)為基礎(chǔ),對程序中盡可能多的邏輯路徑進(jìn)行測試,檢驗(yàn)內(nèi)部控制結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)是否有錯,實(shí)際的運(yùn)行狀態(tài)與預(yù)期的狀態(tài)是否一致。白盒測試又稱為結(jié)構(gòu)測試或邏輯驅(qū)動測試。下圖給出一個白盒測試實(shí)例:第15頁,共62頁,2024年2月25日,星期天某軟件研制測試報(bào)告圖第16頁,共62頁,2024年2月25日,星期天2.白盒技術(shù)測試用例的設(shè)計(jì)

測試用例設(shè)計(jì)的基本目的是確定一組最有可能發(fā)現(xiàn)某個錯誤或某類錯誤的測試數(shù)據(jù)。實(shí)際工作中,采用黑盒與白盒相結(jié)合的技術(shù)是較為合理的做法。

白盒測試屬于結(jié)構(gòu)測試,所以被測對象基本上是源程序,以程序的內(nèi)部邏輯為基礎(chǔ)來設(shè)計(jì)測試用例。一、邏輯覆蓋:是以程序內(nèi)部邏輯為基礎(chǔ)的測試技術(shù),屬白盒測試。這一測試考慮測試用例對程序內(nèi)部邏輯覆蓋的程度。目前常用的一些覆蓋技術(shù)有以下八種。第17頁,共62頁,2024年2月25日,星期天

1).語句覆蓋

語句覆蓋的含義是選擇足夠多的測試用例,使得被測程序中的每條語句至少執(zhí)行一次。下面是測試的一段程序的流程圖對應(yīng)的C源程序(用C語言書寫)。floatA,B,X;

if(A>1&&B==0)X=X/A;if(A==2||X>1)X=X+1;……第18頁,共62頁,2024年2月25日,星期天

為了使每條語句都執(zhí)行一次,程序應(yīng)該按sacbed路徑執(zhí)行,為實(shí)現(xiàn)此路徑而選取下面的一組輸入數(shù)據(jù)(實(shí)際上X可以是任意實(shí)數(shù)):A=2,B=0,X=2圖5.1語句覆蓋第19頁,共62頁,2024年2月25日,星期天

通過上例可以看出,這組數(shù)據(jù)只測試了條件為真的情況,若實(shí)際輸入的條件為假時有錯誤顯然測試不出來。事實(shí)上,語句覆蓋對程序的邏輯覆蓋很少,語句覆蓋只關(guān)心判定表達(dá)式的值,而沒有分別測試判定表達(dá)式中每個條件取不同值的情況。

與后面所介紹的其他覆蓋相比,語句覆蓋是最弱的邏輯覆蓋準(zhǔn)則。第20頁,共62頁,2024年2月25日,星期天

2).判定覆蓋

判定覆蓋就是設(shè)計(jì)若干個測試用例,運(yùn)行所測程序,使得程序中每個判斷的取真分支和取假分支至少經(jīng)歷一次。判定覆蓋又稱為分支覆蓋。判定覆蓋的每個語句至少經(jīng)歷一次。例如對于圖5.1來說,能夠分別覆蓋路徑sacbed和sabd的一組測試數(shù)據(jù),或者覆蓋路徑sacbd和sabed的兩組測試數(shù)據(jù)均可滿足判定覆蓋標(biāo)準(zhǔn)。例如,以兩組測試數(shù)據(jù)就可做到判定覆蓋:(1)A=4,B=0,X=1(覆蓋sacbd);(2)A=2,B=1,X=3(覆蓋sabed)。判定覆蓋的缺點(diǎn)仍然是覆蓋的不全,只覆蓋了路徑的一半,如將X>1誤寫成X<1,上組(1)數(shù)據(jù)仍覆蓋sacbd,可見判定覆蓋仍然很弱,但比語句覆蓋強(qiáng)。第21頁,共62頁,2024年2月25日,星期天

3).條件覆蓋

條件覆蓋就是設(shè)計(jì)若干個測試用例,運(yùn)行所測程序,使得程序中每個判斷的每個條件的可能取值至少執(zhí)行一次。(條件覆蓋使得每個語句至少執(zhí)行一次。)例如對于圖5.1來說,共有兩個判定表達(dá)式,每個表達(dá)式中有兩個條件。為滿足條件覆蓋,在a點(diǎn)有以下幾種情況出現(xiàn):A>1,A≤1,B=0,B≠0;在b點(diǎn)有以下幾種情況出現(xiàn):A=2,A≠2,X>1,X≤1。因而,只需要使用下面兩組測試數(shù)據(jù)就可達(dá)到上述覆蓋標(biāo)準(zhǔn)。第22頁,共62頁,2024年2月25日,星期天(1)A=2,B=0,X=3(滿足A>1,B=0,A=2和X>1的條件,執(zhí)行路徑sacbed);(2)A=0,B=1,X=0(滿足A≤1,B≠0,A≠2和X≤1的條件執(zhí)行路徑sabd)。

條件覆蓋一般比判定覆蓋強(qiáng),因?yàn)闂l件覆蓋使判定表達(dá)式中每個條件都取到了兩個不同的結(jié)果,判定覆蓋卻只關(guān)心整個判定表達(dá)式的值。上例兩組測試數(shù)據(jù)也同時滿足判定覆蓋標(biāo)準(zhǔn)。但是,也可能有相反情況:雖然每個條件都取到了兩個不同的結(jié)果,判定表達(dá)式卻始終只取一個值。例如,若使用以下兩組測試數(shù)據(jù),則只滿足條件覆蓋標(biāo)準(zhǔn)并不滿足判定覆蓋標(biāo)準(zhǔn)。第23頁,共62頁,2024年2月25日,星期天(1)A=2,B=0,X=1(滿足A>1,B=0,A=2和X≤1的條件,執(zhí)行路徑sacbed);(2)A=1,B=1,X=2(滿足A≤1,B≠0,A≠2和X>1的條件,執(zhí)行路徑sabed)。上述例子的第二個判定表達(dá)式的值總為真,不滿足判定覆蓋的要求,為解決這一矛盾,需要對條件和分支兼顧。第24頁,共62頁,2024年2月25日,星期天

4).判定/條件覆蓋

判定/條件覆蓋就是設(shè)計(jì)足夠的測試用例,使得判斷中每個條件的所有可能取值至少執(zhí)行一次,同時每個判斷的所有可能判斷結(jié)果至少執(zhí)行一次。即要求各個判斷的所有可能的條件取值組合至少執(zhí)行一次。

對于圖5.1的例子而言,下述兩組測試數(shù)據(jù)滿足判定/條件覆蓋標(biāo)準(zhǔn)。(1)A=2,B=0,X=4;(2)A=1,B=1,X=1。第25頁,共62頁,2024年2月25日,星期天

判定/條件覆蓋也有缺陷。從表面來看,它測試了所有條件的取值。但實(shí)際并不是這樣。因?yàn)橐恍l件往往掩蓋了另一些條件。對于條件表達(dá)式(A>1)AND(B=0)來說,只要(A>1)的測試為真,才需測試(B=0)的值來確定此表達(dá)式的值,但是若(A>1)的測試值為假時,不需再測(B=0)的值就可確定此表達(dá)式的值為假,因而B=0沒有被檢查。同理,對于(A=2)OR(X>1)這個表達(dá)式來說,只要(A=2)測試結(jié)果為真,不必測試(X>1)的結(jié)果就可確定表達(dá)式的值為真。所以對于判定/條件覆蓋來說,邏輯表達(dá)式中的錯誤不一定能夠查得出來。第26頁,共62頁,2024年2月25日,星期天

5).條件組合覆蓋

條件組合覆蓋就是設(shè)計(jì)足夠的測試用例,運(yùn)行所測程序,使得每個判斷的所有可能的條件取值組合至少執(zhí)行一次。對于圖5.1的例子來說,共有以下八種可能的條件組合:(1)A>1,B=0屬第一個判斷的取真分支;(2)A>1,B≠0屬第一個判斷的取假分支;A≤1,B=0屬第一個判斷的取假分支;A≤1,B≠0屬第一個判斷的取假分支;A=2,X>1屬第二個判斷的取真分支;A=2,X≤1屬第二個判斷的取真分支;A≠2,X>1屬第二個判斷的取真分支;A≠2,X≤1屬第二個判斷的取假分支。第27頁,共62頁,2024年2月25日,星期天對于每個判斷,要求所有可能的條件的取值組合都必須取到。在圖5.1中,每個判斷各有兩個條件,所以各有四個條件取值的組合。下面的四組測試數(shù)據(jù)可以使上面列出的八種組合每種至少出現(xiàn)一次:

(1)A=2,B=0,X=4(針對(1),(5)兩種組合,執(zhí)行路徑sacbed);(2)A=2,B=1,X=1(針對(2),(6)兩種組合,執(zhí)行路徑sabed);(3)A=1,B=0,X=2(針對(3),(7)兩種組合,執(zhí)行路徑sabed);(4)A=1,B=1,X=1(針對(4),(8)兩種組合,執(zhí)行路徑sabd)。第28頁,共62頁,2024年2月25日,星期天

必須明確:在此例中條件組合覆蓋并未要求第一個判定的四個組合與第二個判定的四個組合再進(jìn)行組合,若那樣,就需42=16個測試用例了。顯然,滿足條件組合覆蓋標(biāo)準(zhǔn)的測試數(shù)據(jù),也一定滿足判定覆蓋、條件覆蓋和判定/條件覆蓋標(biāo)準(zhǔn)。因此,條件組合覆蓋是前述幾種覆蓋標(biāo)準(zhǔn)中最強(qiáng)的。但是,滿足條件覆蓋標(biāo)準(zhǔn)的測試數(shù)據(jù)并不一定能使程序中的每條路徑都執(zhí)行到,如上述四組測試數(shù)據(jù)都沒有測試到路徑sacbd。

總結(jié):在實(shí)際的邏輯覆蓋測試中,一般以條件組合覆蓋為主設(shè)計(jì)測試用例,然后再補(bǔ)充部分用例,以達(dá)到路徑覆蓋測試標(biāo)準(zhǔn)。第29頁,共62頁,2024年2月25日,星期天

6).點(diǎn)覆蓋

點(diǎn)覆蓋是設(shè)計(jì)足夠的測試數(shù)據(jù),使程序執(zhí)行時至少經(jīng)過程序圖中每個節(jié)點(diǎn)一次。圖論中,點(diǎn)覆蓋的概念定義如下:如果連通圖G的子圖G"是連通的,且包含G的所有節(jié)點(diǎn),則稱G"是G的點(diǎn)覆蓋。在正常情況下,程序圖是連通的有向圖,圖中每個節(jié)點(diǎn)相當(dāng)于程序流程圖中的一框(一個或多個語句),所以點(diǎn)覆蓋相當(dāng)于語句覆蓋。第30頁,共62頁,2024年2月25日,星期天

7).邊覆蓋

邊覆蓋是設(shè)計(jì)足夠的測試數(shù)據(jù),使得程序執(zhí)行路徑至少經(jīng)過程序圖中每一個邊一次,相應(yīng)的圖論中的定義是:如果連通圖G和子圖G“是連通的,而且G”包含G的所有邊,則稱G“是G的邊覆蓋。(圖5-3(b)程序圖是退化了的程序流程圖(圖5-3(a)),它是放映控制流程的有向圖)。為了使程序執(zhí)行路徑經(jīng)過程序圖的邊覆蓋(1,2,3,4,5,6,7),至少需要兩組測試數(shù)據(jù)(分別執(zhí)行路徑1-2-3和1-4-5-6-7,或分別執(zhí)行路徑1-4-5-3和1-2-6-7)。第31頁,共62頁,2024年2月25日,星期天

一般情況下,邊覆蓋和判定覆蓋是一致的。例如,上述中滿足判定覆蓋標(biāo)準(zhǔn)的測試數(shù)據(jù)同時滿足邊覆蓋的標(biāo)準(zhǔn)。(1)A=4,B=0,X=1(執(zhí)行路徑1-4-5-3,即覆蓋sacbd);(2)A=2,B=1,X=3(執(zhí)行路徑1-2-6-7,即覆蓋sacbd)。圖5-2:程序圖第32頁,共62頁,2024年2月25日,星期天

8).路徑覆蓋

路徑覆蓋是選取足夠多測試數(shù)據(jù),使程序的每條可能路徑都至少執(zhí)行一次(若程序圖中存在環(huán),則要求每個環(huán)至少經(jīng)過一次)。對于圖5-3(b)而言,共有四條可執(zhí)行的路徑:1-11;1-2-3-4-5-10-1-11;1-2-3-6-8-9-10-1-11和1-2-3-6-7-9-10-1-11。對應(yīng)于這四條路徑,第33頁,共62頁,2024年2月25日,星期天

路徑覆蓋相對來說是相當(dāng)強(qiáng)的邏輯覆蓋標(biāo)準(zhǔn)。測試數(shù)據(jù)暴露程序錯誤的能力比較強(qiáng),有一定的代表性,它能夠保證程序中每條可能的路徑都至少執(zhí)行一次。但是路徑覆蓋并沒有檢驗(yàn)表達(dá)式中條件的各種組合情況,而只考慮每個判定表達(dá)式的取值。若把路徑覆蓋和條件覆蓋組合起來,可以設(shè)計(jì)出檢錯能力更強(qiáng)的測試數(shù)據(jù)。第34頁,共62頁,2024年2月25日,星期天二、循環(huán)覆蓋

在邏輯覆蓋的測試技術(shù)中,以上只討論了程序內(nèi)部有判定存在的邏輯結(jié)構(gòu)的測試用例設(shè)計(jì)技術(shù)。而循環(huán)也是程序的主要結(jié)構(gòu),要覆蓋含有循環(huán)結(jié)構(gòu)的所有路徑是不可能的,但可通過限制次數(shù)來測試,下面給出設(shè)計(jì)原則供參考:(1)單循環(huán):其中n為可允許執(zhí)行循環(huán)的最大次數(shù)。設(shè)計(jì)以下情況的測試用例:①跳過循環(huán)。②只執(zhí)行循環(huán)一次。③執(zhí)行循環(huán)m次,其中m<n.④執(zhí)行循環(huán)n-1次,n次,n+1次。第35頁,共62頁,2024年2月25日,星期天(2)嵌套循環(huán)①置外循環(huán)處于最小循環(huán)計(jì)數(shù)值,對于內(nèi)層進(jìn)行單循環(huán)測試。②由里向外,進(jìn)行下一層的循環(huán)測試。三、基本路徑測試基本路徑測試是在程序控制流程圖的基礎(chǔ)上,通過分析控制構(gòu)造的環(huán)路復(fù)雜性,導(dǎo)出基本路徑集合。第36頁,共62頁,2024年2月25日,星期天基本路徑測試的步驟為:(1)以詳細(xì)設(shè)計(jì)或源程序?yàn)榛A(chǔ),導(dǎo)出控制流程圖的拓?fù)浣Y(jié)構(gòu)-----程序圖。

程序圖是退化了的程序流程圖,它是反映控制流程的有向圖。其中小圓圈成為結(jié)點(diǎn),代表了流程圖中每個處理符號(矩形、菱形框),有箭頭的連線表示控制流向,稱為程序圖中的邊后路徑。圖5.3(a)是一個程序流程圖,可以將它轉(zhuǎn)換成圖5.3(b)程序圖(假設(shè)菱形框表示的判斷內(nèi)設(shè)有覆合的條件)。第37頁,共62頁,2024年2月25日,星期天圖5.3(a)程序流程圖5.3(b)程序圖第38頁,共62頁,2024年2月25日,星期天在轉(zhuǎn)換時注意以下幾點(diǎn):①一條邊必須終止于一個結(jié)點(diǎn),在選擇結(jié)構(gòu)中的分支匯聚處即使無語句也應(yīng)有匯聚結(jié)點(diǎn)②若判斷中的邏輯表達(dá)式是復(fù)合條件,應(yīng)分解為一系列只有單個條件的嵌套判斷,如對于圖5.4(a)的符合條件的判定應(yīng)畫成圖5.4(b)所示的程序圖

5.5.第39頁,共62頁,2024年2月25日,星期天(2)計(jì)算程序圖G的環(huán)路復(fù)雜性V(G).McCabe定義程序圖的環(huán)路復(fù)雜性為此平面圖中區(qū)域的個數(shù)。區(qū)域個數(shù)為邊和結(jié)點(diǎn)圈定的封閉區(qū)域數(shù)加上圖形的區(qū)域數(shù)1。例如圖5.3(b)的V(G)=4也可按另一種方法計(jì)算,即V(G)=判定結(jié)點(diǎn)數(shù)+1(3)確定只包含獨(dú)立路徑的基本路徑集

環(huán)路復(fù)雜性可導(dǎo)出程序基本路徑基合中的獨(dú)立路徑條數(shù),這是確保程序中每個執(zhí)行語句至少執(zhí)行一次所必需的測試用例書目的上界。獨(dú)立路徑是指包括一組以前沒有處理的語句或條件的一條路徑。從程序圖來看,一條獨(dú)立路徑是至少包含有一條在其他獨(dú)立路徑中未有過的邊的路徑,例如,在圖5.3(b)所示的圖中,一組獨(dú)立的路徑是:第40頁,共62頁,2024年2月25日,星期天path1:1-11path2:1-2-3-4-5-10-1-11path3:1-2-3-6-8-10-1-11path4:1-2-3-6-7-9-1-11從例中可知,一條新的路徑必須保含有一條新的邊。這四條路徑組成了圖5.3(b)所示的程序圖的一個基本路徑集,4是構(gòu)成這個基本路徑集的獨(dú)立路徑數(shù)的上界,這也是設(shè)計(jì)測試用例的數(shù)目。只要測試用例確保這些基本路徑的執(zhí)行,就可以使程序中每個可執(zhí)行語句至少執(zhí)行一次,每個條件的取“真”和取“假”分支也能得到測試?;韭窂郊皇俏ㄒ坏?,對于給定的程序圖,可以得到不同的基本路徑集。(4)設(shè)計(jì)測試用例,確?;韭窂郊现忻織l路徑的執(zhí)行。第41頁,共62頁,2024年2月25日,星期天3.黑盒技術(shù)測試用例的設(shè)計(jì)

黑盒測試是功能測試,因此設(shè)計(jì)測試用例時,需要研究需求規(guī)格說明和概要設(shè)計(jì)說明中有關(guān)程序功能或輸入、輸出之間的關(guān)系等信息,從而與測試后的結(jié)果進(jìn)行分析比較。

用黑盒技術(shù)設(shè)計(jì)測試用例的方法一般有以下介紹的四種,在實(shí)際測試中應(yīng)該把各種方法結(jié)合起來使用。一、等價類劃分用等價類劃分的方法設(shè)計(jì)測試用例的步驟為:(1)

劃分等價類

從程序的功能說明(如需求規(guī)格說明書)找出一個個輸入條件(通常是一句話或一個短語),然后把每一個輸入條件劃分成兩個或多個等價類,將其列表,其格式為表5.1所示第42頁,共62頁,2024年2月25日,星期天表5.1第43頁,共62頁,2024年2月25日,星期天表中合理等價類是指各種正確的輸入數(shù)據(jù),不合理的等價類是其他錯誤的輸入數(shù)據(jù)。劃分等價類是一個比較復(fù)雜的問題,以下提供了幾條經(jīng)驗(yàn)以供參考。A如果某個輸入條件規(guī)定了取值范圍或值的個數(shù)。則可確定一個合理的等價類(輸入值或數(shù)在此范圍內(nèi))和兩個不合理等價類(輸入值或個數(shù)小于這個范圍的最小值或大于這個范圍)。例如,輸入值是兒童的編號位數(shù),取值范圍為0<編號位數(shù)<=8,確定一個合理的等價類為“0<編號位數(shù)<=8”,兩個不合理的等價類為“編號位數(shù)<0”和“編號位數(shù)>8”。B如果規(guī)定了輸入數(shù)據(jù)的一組值,而且程序?qū)Σ煌妮斎胫底霾煌奶幚?,則每個允許輸入值是一個合理等價類,此外還有一個不合理等價類(任何一個不允許的輸入值)。第44頁,共62頁,2024年2月25日,星期天例如,輸入條件上說明教師的職稱可為助教、講師、副教授、教授四種職稱之一,則分別取這4個值作為4個合理等價類,另外把4個職稱之外的任何職稱作為不合理等價類。C如果規(guī)定了輸入數(shù)據(jù)必須遵循的規(guī)則,可確定一個合理等價類(符合規(guī)則)和若干個不合理等價類(從各種不同角度違反規(guī)則)。D如果已劃分的等價類中各元素在程序中的處理方式不同,則應(yīng)將此等價類進(jìn)一步劃分為更小的等價類。

以上這些劃分輸入數(shù)據(jù)等價類的經(jīng)驗(yàn)也同樣適用于輸出數(shù)據(jù),這些數(shù)據(jù)也只是測試時可能遇到的情況的很小的部分。為了能正確的劃分等價類,一定要正確分析被測程序的功能。第45頁,共62頁,2024年2月25日,星期天(2)

確定測試用例根據(jù)已劃分的等價類,按以下步驟設(shè)計(jì)測試用例:①

為每一個等價類編號。②

設(shè)計(jì)一個測試用例,使其盡可能多地覆蓋尚未被覆蓋過的合理等價類。重復(fù)這步,直到所有合理等價類被測試用例覆蓋。③

設(shè)計(jì)一個測試用例,使其只覆蓋一個不合理等價類。重復(fù)這一步,直到所有不合理等價類被覆蓋。之所以這樣做,是因?yàn)槟承┏绦蛑袑δ骋惠斎脲e誤的檢查往往會屏蔽對其他輸入錯誤的檢查。因此必須針對每一個不合理等價類,分別設(shè)計(jì)測試用例。例5.1:某報(bào)表處理系統(tǒng),要求用戶輸入處理報(bào)表的日期。假設(shè)日期限制在2000年1月至2008年12月,即系統(tǒng)只能對該段日期由年月的六位數(shù)字字符組成,前四位代表年,后兩位代表月。第46頁,共62頁,2024年2月25日,星期天現(xiàn)用等價劃分法設(shè)計(jì)測試用例,來測試程序的“日期檢查功能”。劃分等價類并編號。劃分成三個有效等價類,七個無效等價類,如表5.2所示。表5.2“報(bào)表日期”輸入條件的等價類表輸入數(shù)據(jù)合理等價類不合理等價類

報(bào)表日期

1六位數(shù)字字符2有非數(shù)字字符3少于六位數(shù)字字符4多于六位數(shù)字字符年份范圍

5在2000-2008之間6小于20007大于2008月份范圍

8在1-12之間9等于010大于12第47頁,共62頁,2024年2月25日,星期天A為合理定價類設(shè)計(jì)測試用例,對于表中編號為1、5、8對應(yīng)的三個合理等價類,用一個測試用例覆蓋。測試數(shù)據(jù)期望結(jié)果覆蓋范圍200605輸入有效1、5、8B為每一個不合理等價類至少設(shè)計(jì)一個測試用例。測試數(shù)據(jù)期望結(jié)果覆蓋范圍99MAY輸入無效220005輸入無效32005

005輸入無效4198912輸入無效6200901輸入無效7200700輸入無效9200613輸入無效10第48頁,共62頁,2024年2月25日,星期天注意在七個不合理的測試用例中,不能出現(xiàn)相同的測試用例,否則相當(dāng)于一個測試用例覆蓋了一個以上不合理等價類,使程序測試不完全。等價類劃分方法比隨機(jī)選擇測試用例要好得多,但這個方法的缺點(diǎn)是沒有選擇某些高效的、能夠發(fā)現(xiàn)更多錯誤的測試用例。

二、邊界值分析實(shí)踐經(jīng)驗(yàn)表明,程序往往在處理邊界情況時發(fā)生錯誤。邊界情況指輸入等價類和輸出等價類邊界上的情況。因此檢查邊界情況的測試用例比較高效的,可以查出更多錯誤。例如,在做三角形設(shè)計(jì)時,要輸入三角形的三個邊長:A、B和C。這三個數(shù)值應(yīng)當(dāng)滿足A>0,B>0,C>0,A+B>C,A+C>B,B+C>A,才能構(gòu)成三角形。但如果把六個不等式中的任何一個“〉”錯寫成“≥”,那樣不能構(gòu)成三角形的問題恰出現(xiàn)在容易被疏忽的邊界附近。第49頁,共62頁,2024年2月25日,星期天

使用邊界值分析方法設(shè)計(jì)測試用例時一般與等價類劃分結(jié)合起來。但它不是從一個等價類中任選一個例子作為代表,而是將測試邊界情況作為重點(diǎn)目標(biāo),選取正好=、剛剛>或剛剛<邊界值的測試數(shù)據(jù)。下面提供的一些設(shè)計(jì)原則供參考:(1)如果輸入條件規(guī)定了值的范圍,可以選擇正好等于邊界值的數(shù)據(jù)作為合理的測試用例,同時還要選擇剛好越過邊界值的數(shù)據(jù)作為不合理的測試用例。如輸入值位數(shù)的范圍是(0,8),可取1,6,8等位數(shù)的值作為測試數(shù)據(jù)。(2)對每個輸入條件指出了輸入數(shù)據(jù)的個數(shù),則按最大個數(shù)、最小個數(shù)、比最小個數(shù)少1、比最大個數(shù)多1等情況分別設(shè)計(jì)測試用例。如。一個輸入文件可包括1-255個記錄,則分別設(shè)計(jì)有1個記錄、255個記錄,以及0個記錄和256個記錄的輸入文件的測試用例。第50頁,共62頁,2024年2月25日,星期天(3)對每個輸出文件分別按照以上原則(1)或(2)確定輸出值的邊界情況。假如某社區(qū)衛(wèi)生綜合管理系統(tǒng)規(guī)定,只能查詢?nèi)雸@日期為1995-2004年的孩子信息,可以設(shè)計(jì)測試用例,使得查詢范圍內(nèi)的某一年后9年孩子的信息,還需設(shè)計(jì)查詢1994年、2005年孩子信息的測試用例(不合理輸出等價類)

由于輸出值的邊界不與輸入值的邊界相對應(yīng),所以要檢查輸出值的邊界不一定可能,要產(chǎn)生超出輸出值之外的結(jié)果也不一定能做到,但必要時還需試一試。(4)如果程序的規(guī)格說明給出輸入或輸出域是個有序集合(如順序文件、線性表、鏈表等),則應(yīng)選取集合的第一個元素和最后一個元素作為測試用例。例5.2:題意同例5.1,用邊界值分析設(shè)計(jì)測試用例。程序中判斷輸入日期(年月)是否有效,假設(shè)使用如下語句:第51頁,共62頁,2024年2月25日,星期天IF(ReportDate<=MaxDate)AND(ReportDate>=MinDate)THEN產(chǎn)生指定日期報(bào)表ELSE顯示錯誤信息ENDIF如果將程序中的“<=”誤寫為“<”,則例5.1中所有測試用例都不能發(fā)現(xiàn)這一錯誤,采用邊界值分析法的測試用例如表5.3所示。第52頁,共62頁,2024年2月25日,星期天表5.3“報(bào)表日期”邊界值分析法測試用例輸入等價類測試用例說明測試數(shù)據(jù)期望結(jié)果選取理由報(bào)表日期2個數(shù)字字符5個數(shù)字字符6個數(shù)字字符有1個非數(shù)字字符全部是非數(shù)字字符7個數(shù)字字符05200482004082004,8Day---2004018顯示出錯顯示出錯輸出有效顯示出錯顯示出錯顯示出錯僅有兩個合法字符比有效長度少1類型及長度均有效有一個非法字符6個非法字符比有效長度多1日期范圍在有效范圍邊界上選取數(shù)據(jù)199501200501199500200502輸入有效輸入有效顯示出錯顯示出錯最小日期最大日期剛好小于最小日期剛好大于最大日期月份范圍月份為1月月份為12月月份<1月份為>12199501199512199500199513輸入有效輸入有效顯示出錯顯示出錯最小月份最大月份剛好小于最小月份剛好大于最大月份第53頁,共62頁,2024年2月25日,星期天三、錯誤推測

在測試程序時,人們可能根據(jù)經(jīng)驗(yàn)或直覺推測程序中可能存在的各種錯誤,從而有針對性的編寫檢查這些錯誤的測試用例,這就是錯誤推測法。

錯誤推測法沒有確定的步驟,憑經(jīng)驗(yàn)進(jìn)行。它的基本思想是列出程序中可能發(fā)生錯誤的情況,根據(jù)這些情況選擇測試用例。如輸入、輸出數(shù)據(jù)為零時容易發(fā)生錯誤的情況,又如,輸入表格為空或輸入表格只有一行是容易出錯的情況等等。第54頁,共62頁,2024年2月25日,星期天例如:對于一個排序程序,列出以下幾項(xiàng)需特別測試的情況:(1)

輸入表為空。(2)

輸入表只含一個元素(3)

輸入表中所有元素均相同(4)

輸入表中已排好序又如,測試一個采用二分法的檢索程序,考慮一下情況:(1)

表中只有一個元素(2)

表長是2的冪(3)

表長是2的冪減1或2的冪加1。等等,要根據(jù)具體情況具體分析。第55頁,共62頁,2024年2月25日,星期天四、因果圖等價類劃分和邊界值分析方法都只是孤立地考慮各個輸入數(shù)據(jù)的測試功能,而沒有考慮多個輸入數(shù)據(jù)的組合引起的錯誤。而在前面“報(bào)表日期”的測試用例設(shè)計(jì)中,若年份、月份均有效或

溫馨提示

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

評論

0/150

提交評論