摘要:軟件測試是軟件開發(fā)過程的重要階段,而測試用例的設(shè)計(jì)是軟件測試中的重要組成部分。本文主要介紹了測試用例的白盒測試和黑盒測試技術(shù),針對(duì)兩種不同的測試方法,分別研究了測試用例的設(shè)計(jì)技術(shù),并通過實(shí)例介紹了具體的測試用例設(shè)計(jì)過程。
關(guān)鍵詞:軟件測試;白盒測試;黑盒測試;測試用例
中圖分類號(hào):TP311.53 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9599 (2012) 21-0000-02
軟件測試在軟件開發(fā)過程起著十分重要的作用,它對(duì)軟件可靠性有著重大的影響。一般情況下,軟件開發(fā)周期都比較長,人的主觀認(rèn)識(shí)不可能完全符合客觀現(xiàn)實(shí),因此在軟件生命周期的每個(gè)階段都可能或多或少的出現(xiàn)錯(cuò)誤。而為了盡可能在軟件投入運(yùn)行之后少出錯(cuò)誤,就必須在運(yùn)行之前就發(fā)現(xiàn)并改變軟件中的錯(cuò)誤,這是軟件測試的主要目的。而設(shè)計(jì)測試方案是軟件測試階段的關(guān)鍵技術(shù),而軟件測試中最大的困難就是設(shè)計(jì)測試用例,本文將重點(diǎn)討論軟件測試中測試用例的設(shè)計(jì)方法[1]。
1 軟件測試的相關(guān)概念
測試方案是指具體的測試目的,應(yīng)該輸入的測試數(shù)據(jù)和預(yù)期的輸出結(jié)果。其中測試數(shù)據(jù)和預(yù)期的輸出結(jié)果稱為測試用例,軟件測試中如何確定測試用例中輸入數(shù)據(jù)的選擇方案是最大的困難。
設(shè)計(jì)測試用例的基本目標(biāo)是要確定一組最可能發(fā)現(xiàn)某個(gè)錯(cuò)誤或某類錯(cuò)誤的測試數(shù)據(jù)。目前已經(jīng)研究出許多的測試數(shù)據(jù)的技術(shù),典型的軟件測試技術(shù)有白盒測試技術(shù)和黑盒測試技術(shù)。
白盒測試技術(shù)是把程序看成一個(gè)透明的盒子,根據(jù)程序內(nèi)部的邏輯測試結(jié)構(gòu),檢測程序中的關(guān)鍵通路能否按要求正常的工作。白盒測試也稱為邏輯驅(qū)動(dòng)測試和結(jié)構(gòu)測試。白盒測試根據(jù)在不同程序執(zhí)行點(diǎn)點(diǎn)檢查程序的狀態(tài)來確定運(yùn)行結(jié)果與預(yù)期的狀態(tài)是否一致,所設(shè)計(jì)的測試用例要盡可能測試到程序所有的邏輯路徑。
黑盒測試技術(shù)則把程序看成一個(gè)不透明的黑盒子,不考慮程序的處理過程和內(nèi)部結(jié)構(gòu),只檢查程序的功能是否能夠正常使用。黑盒測試也稱為數(shù)據(jù)驅(qū)動(dòng)測試和功能測試。
2 白盒測試技術(shù)中測試用例的設(shè)計(jì)方法研究
白盒測試方法的主要作用有:
(1)至少測試一次程序子模塊的所有獨(dú)立執(zhí)行路徑;(2)針對(duì)所有可能的邏輯判定,至少一次取“真”或“假”兩種情況;(3)在運(yùn)行界限內(nèi)和循環(huán)邊界處執(zhí)行循環(huán)體;(4)測試程序內(nèi)部的數(shù)據(jù)結(jié)構(gòu)的有效性。
在實(shí)際的數(shù)據(jù)測試中,如果程序具有多種循環(huán)嵌套的情況,不同的執(zhí)行路徑數(shù)目可能是天文數(shù)字,例如一個(gè)有5條路徑的嵌套20次循環(huán)的小程序,包含不同執(zhí)行路徑條數(shù)為520次方,如果每一條路徑測試1ms,全年無休時(shí)要測試完所有路徑需要約3170年的時(shí)間。因此,我們必須采用一些替代辦法,典型的方法是有選擇的執(zhí)行程序中某些最有代表性的通路。白盒測試的主要技術(shù)有:
2.1 根據(jù)程序內(nèi)部的邏輯結(jié)構(gòu)設(shè)計(jì)測試用例的技術(shù)—邏輯覆蓋[2]
(1)語句覆蓋,選擇足夠多的測試數(shù)據(jù)以使被測程序中每條語句都至少執(zhí)行一次。語句覆蓋不考慮對(duì)程序的邏輯覆蓋,它主要關(guān)心表達(dá)式的結(jié)果,卻對(duì)每個(gè)條件取不同值的情況不做測試。因此,語句覆蓋是比較弱的邏輯覆蓋標(biāo)準(zhǔn)。在圖論中和語句覆蓋對(duì)應(yīng)的是點(diǎn)覆蓋。(2)判定覆蓋,又叫分支覆蓋,它首先滿足語句覆蓋的條件,同時(shí)對(duì)每個(gè)判定的每種可能的結(jié)果都至少執(zhí)行一次,即對(duì)每個(gè)分支都至少執(zhí)行一次每個(gè)判定,判定覆蓋對(duì)程序的邏輯覆蓋程度也不高。在圖論中和判定覆蓋相對(duì)應(yīng)的是邊覆蓋。(3)條件覆蓋,指的是不僅每個(gè)語句至少執(zhí)行一次,而且使判定表達(dá)式中的每個(gè)條件都取到各種可能的結(jié)果,條件覆蓋中可能不包含判定覆蓋。(4)判定/條件覆蓋,指選取足夠多的測試數(shù)據(jù),使得判定表達(dá)式中的每個(gè)條件都取到各種可能的值,每個(gè)判定表達(dá)式也取到各種可能的結(jié)果。(5)條件組合覆蓋,要求選擇足夠多的測試數(shù)據(jù),使得每個(gè)判定表達(dá)式中條件的各種可能組合都至少出現(xiàn)一次。條件組合覆蓋是邏輯覆蓋標(biāo)準(zhǔn)中最強(qiáng)的。(6)路徑覆蓋,指的是選取足夠多的測試數(shù)據(jù),使程序的每條可能路徑都至少執(zhí)行一次。
測試用例設(shè)計(jì)舉例1:如下圖1所示程序段流程,實(shí)現(xiàn)語句覆蓋需要設(shè)計(jì)的測試數(shù)據(jù)有:X=0,Y=3和X=-1,Y=2;實(shí)現(xiàn)條件覆蓋至少采用的測試數(shù)據(jù)有:X=0,Y=3和X=3,Y=1;實(shí)現(xiàn)判定覆蓋至少應(yīng)用的2.2 測試程序的控制結(jié)構(gòu),主要包括條件測試,循環(huán)測試和基本路徑測試。其中基本路徑測試是由Tom McCabe提出的一種白盒測試技術(shù),這種技術(shù)在設(shè)計(jì)測試用例時(shí)需要首先計(jì)算程序的環(huán)形復(fù)雜度,并用該復(fù)雜度為指南定義執(zhí)行路徑的基本集合。在實(shí)際測試中,僅靠基本路徑測試還不能滿足要求,還需要結(jié)合條件測試技術(shù)來檢查程序模塊中包含的邏輯條件,還有循環(huán)測試來專門測試循環(huán)結(jié)構(gòu)的有效性。
3 黑盒測試技術(shù)中的測試用例設(shè)計(jì)方法研究
黑盒測試主要用來測試軟件的功能特點(diǎn),通過黑盒測試可以發(fā)現(xiàn):
(1)是否有遺漏了的功能或者不正確的功能;(2)能否有正確的接收輸入和正確的輸出結(jié)果,這主要針對(duì)接口而言;(3)是否有外部信息訪問錯(cuò)誤或數(shù)據(jù)結(jié)構(gòu)錯(cuò)誤,同時(shí),軟件運(yùn)行時(shí)能否滿足性能上的要求;(4)軟件在初始化或者退出時(shí)有無錯(cuò)誤等;
使用黑盒測試同樣不可能將所有可能的輸入條件和輸出條件用于測試,因?yàn)闇y試用例的組合是天文數(shù)字。例如一個(gè)程序有兩個(gè)輸入量和一個(gè)輸出量,在32位計(jì)算機(jī)上運(yùn)行,若X,Y取整數(shù),按窮舉測試時(shí)需要232×232=264組,如果一組數(shù)據(jù)需要1ms,全年無休,需要5億年的時(shí)間。顯然,我們必須設(shè)計(jì)合理的方案來減少測試用例的數(shù)量。目前黑盒測試的主要測試用例設(shè)計(jì)技術(shù)有:
3.1 等價(jià)類劃分
等價(jià)類劃分是把程序的輸入域劃分成若干個(gè)數(shù)據(jù)類,據(jù)此導(dǎo)出測試用例,因?yàn)閷?duì)于同一類中的數(shù)據(jù)而言其作用是相同的[3]。等價(jià)類劃分可以分為有效等價(jià)類和無效等價(jià)類。有效等價(jià)類是指符合程序功能要求的數(shù)據(jù)類,該類中包含的都是有意義的數(shù)據(jù);而無效等價(jià)類指不能滿足程序正確運(yùn)行或者預(yù)期結(jié)果的數(shù)據(jù)類的集合。我們?cè)谠O(shè)計(jì)測試用例時(shí),要同時(shí)考慮有效等價(jià)類和無效等價(jià)類的設(shè)計(jì)方案。等價(jià)類的劃分有自己的原則。
在具體使用等價(jià)類劃分設(shè)計(jì)測試用例時(shí)有兩個(gè)步驟:(1)設(shè)計(jì)一個(gè)新的測試方案以盡可能多地覆蓋尚未被覆蓋的有效等價(jià)類,重復(fù)這一步驟直到所有有效等價(jià)類都被覆蓋為止;(2)設(shè)計(jì)一個(gè)新的測試方案,使它覆蓋一個(gè)而且只覆蓋一個(gè)尚未被覆蓋的無效等價(jià)類,重復(fù)這一步驟直到所有無效等價(jià)類都被覆蓋為止。
3.2 邊界值分析
使用邊界值分析方法來設(shè)計(jì)測試用例時(shí)需要開發(fā)者具有一定的經(jīng)驗(yàn)和創(chuàng)造性,通常根據(jù)劃分的輸入等價(jià)類和輸出等價(jià)類的邊界來確定邊界值的結(jié)果,即選取剛剛等于、剛剛小于和剛剛大于邊界值的測試數(shù)據(jù),而不是選擇等價(jià)類內(nèi)部的數(shù)據(jù)作為測試用例。
3.3 錯(cuò)誤推測法
錯(cuò)誤推測法主要依靠直覺和經(jīng)驗(yàn),需要有一定開發(fā)大型軟件工程的經(jīng)驗(yàn),其基本思想是通過列舉出程序中可能有的錯(cuò)誤和容易發(fā)生錯(cuò)誤的特殊情況,并根據(jù)這些情況來選擇測試方案。
4 小結(jié)
測試用例的設(shè)計(jì)方法并不是獨(dú)立使用的,而是經(jīng)常會(huì)進(jìn)行一些不同設(shè)計(jì)方案的組合,如黑盒測試中的等價(jià)類劃分和邊界分析方法可以結(jié)合使用,進(jìn)步設(shè)計(jì)更加合理的測試用例,找出更多的軟件運(yùn)行錯(cuò)誤。
參考文獻(xiàn):
[1]趙琳.軟件測試用例設(shè)計(jì)方法[J].中國電子商務(wù),2012.3:80~80.
[2]李秀蘋.淺談軟件測試用例設(shè)計(jì)[J].商情.2012(21):90~90.
[3]張海藩編著.軟件工程導(dǎo)論[M].北京:清華大學(xué)出版社,2011.
[作者簡介]
張炯(1983.9-),男,漢,上海人,助理工程師,本科