国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

兩種混合型軟件單元的測(cè)試方法

2011-04-17 07:29勾英杰江云松
關(guān)鍵詞:黑盒單元測(cè)試測(cè)試用例

勾英杰,江云松

(北京控制工程研究所,北京 100190)

軟件測(cè)試是保證軟件質(zhì)量和可靠性的重要手段之一,軟件單元測(cè)試作為軟件測(cè)試的一個(gè)環(huán)節(jié),起著極其重要的作用.

單元測(cè)試也稱模塊測(cè)試,完成對(duì)最小的軟件設(shè)計(jì)單元——模塊的驗(yàn)證工作,它是軟件開發(fā)過(guò)程中最基礎(chǔ)的測(cè)試活動(dòng),其目的主要是發(fā)現(xiàn)在編碼過(guò)程中引入的錯(cuò)誤和驗(yàn)證代碼與設(shè)計(jì)的符合性.充分的單元測(cè)試對(duì)發(fā)現(xiàn)和排除軟件中的缺陷非常有效,并且由于它處于軟件生存期的早期,所花費(fèi)的成本也小.

目前航天領(lǐng)域?qū)浖卧獪y(cè)試已經(jīng)引起了足夠的重視,并引入了一些自動(dòng)化的測(cè)試工具,但由于航天器控制軟件是非常復(fù)雜的實(shí)時(shí)嵌入式軟件,工作模式多,與硬件結(jié)合密切,單元測(cè)試工作量大、測(cè)試難度高,仍需研究和應(yīng)用有效的測(cè)試方法,設(shè)計(jì)高質(zhì)量的測(cè)試用例,才能使單元測(cè)試階段發(fā)現(xiàn)錯(cuò)誤的能力提高.

本文將結(jié)合航天器控制計(jì)算機(jī)軟件單元測(cè)試的具體實(shí)踐,重點(diǎn)介紹白盒技術(shù)與黑盒技術(shù)相結(jié)合的兩種單元測(cè)試方法.

1 單元測(cè)試方法概述

在軟件單元測(cè)試過(guò)程中,靜態(tài)測(cè)試和動(dòng)態(tài)測(cè)試是兩種非常有效的測(cè)試技術(shù).靜態(tài)測(cè)試是指不運(yùn)行被測(cè)程序,僅通過(guò)分析或檢查源程序的算法、結(jié)構(gòu)、過(guò)程接口等等來(lái)檢查程序的正確性,可以通過(guò)人工走查(walkthroughs)和代碼審查(inspections)的方式進(jìn)行,還可以借助靜態(tài)分析工具進(jìn)行;動(dòng)態(tài)測(cè)試是指通過(guò)運(yùn)行被測(cè)程序,檢查運(yùn)行結(jié)果與預(yù)期結(jié)果的差異,并分析運(yùn)行效率和健壯性.動(dòng)態(tài)測(cè)試的過(guò)程由三部分組成:設(shè)計(jì)測(cè)試用例、執(zhí)行程序和分析程序輸出結(jié)果.

目前的許多單元測(cè)試工具(如,LDRA的Testbed,IBM的Rational Test RealTime,英國(guó) IPL公司的Cantata,等等)對(duì)于動(dòng)態(tài)測(cè)試的后兩個(gè)環(huán)節(jié)提供了很大幫助,而對(duì)于測(cè)試過(guò)程中的關(guān)鍵環(huán)節(jié)——測(cè)試用例設(shè)計(jì)還得由人來(lái)完成,測(cè)試用例設(shè)計(jì)的好壞,直接影響到單元測(cè)試的效果,因此,有必要對(duì)測(cè)試用例的設(shè)計(jì)方法進(jìn)行研究.動(dòng)態(tài)測(cè)試按照測(cè)試用例的不同設(shè)計(jì)方法分為黑盒測(cè)試和白盒測(cè)試,本文著重分析這兩種測(cè)試技術(shù).

白盒測(cè)試又稱結(jié)構(gòu)測(cè)試、邏輯驅(qū)動(dòng)測(cè)試或基于程序的測(cè)試.它針對(duì)程序的內(nèi)部結(jié)構(gòu)和內(nèi)部特性,測(cè)試者可以完全不考慮程序的功能,只利用程序內(nèi)部的邏輯結(jié)構(gòu)及有關(guān)信息設(shè)計(jì)測(cè)試用例;黑盒測(cè)試又稱功能測(cè)試、數(shù)據(jù)驅(qū)動(dòng)測(cè)試或基于規(guī)格說(shuō)明的測(cè)試.它針對(duì)程序的外部特性,在完全不考慮程序內(nèi)部結(jié)構(gòu)和內(nèi)部特性的情況下,只依據(jù)程序的規(guī)格說(shuō)明考慮確定測(cè)試用例,檢查程序的功能是否符合它的功能說(shuō)明.表1將黑盒測(cè)試和白盒測(cè)試進(jìn)行了比較.

由表1可知,白盒測(cè)試與黑盒測(cè)試在選取測(cè)試用例的側(cè)重點(diǎn)不同,白盒測(cè)試側(cè)重于程序的內(nèi)部結(jié)構(gòu),黑盒測(cè)試側(cè)重于程序的功能,因而兩種方法各有優(yōu)缺點(diǎn),不能相互代替.Beizer在總結(jié)功能測(cè)試和結(jié)構(gòu)測(cè)試時(shí)指出“從原理上講,功能測(cè)試能檢測(cè)出所有的錯(cuò)誤,但需要花費(fèi)無(wú)數(shù)的時(shí)間;結(jié)構(gòu)測(cè)試本質(zhì)上是有限的,但即使是全部執(zhí)行也不能測(cè)試出全部的錯(cuò)誤.在某種程度上講,測(cè)試的藝術(shù)就是在結(jié)構(gòu)測(cè)試與功能測(cè)試之間如何進(jìn)行選擇”.

充分性和有效性是測(cè)試用例生成時(shí)需要重點(diǎn)考慮的問(wèn)題.測(cè)試用例的充分性一般可以通過(guò)測(cè)試覆蓋準(zhǔn)則來(lái)衡量,測(cè)試覆蓋準(zhǔn)則可以指導(dǎo)測(cè)試用例的選擇,避免測(cè)試的盲目性,保證軟件測(cè)試的充分性.而有效性則是指如何以最小的代價(jià)獲得盡可能好的測(cè)試用例.

2 兩種混合型的單元測(cè)試方法

如上所述,白盒與黑盒測(cè)試用例設(shè)計(jì)方法具有各自的優(yōu)缺點(diǎn),為充分利用兩種測(cè)試技術(shù)的優(yōu)點(diǎn)和彌補(bǔ)各自的不足,在進(jìn)行軟件單元測(cè)試用例的設(shè)計(jì)時(shí),要結(jié)合這兩種測(cè)試技術(shù),重點(diǎn)考慮測(cè)試用例的充分性和有效性.

針對(duì)不同的軟件單元,采用以下兩種混合型的單元測(cè)試用例選擇方法,會(huì)在盡量滿足測(cè)試的充分性和有效性的前提下,提高單元測(cè)試的效率和效果.需要說(shuō)明的是,不管哪一種方法,其測(cè)試用例的設(shè)計(jì)依據(jù)都是軟件設(shè)計(jì)規(guī)約,即各個(gè)軟件單元的詳細(xì)設(shè)計(jì)報(bào)告,只有這樣才能使單元測(cè)試成為基于設(shè)計(jì)的測(cè)試.

2.1 先黑盒后白盒的單元測(cè)試方法

先黑盒后白盒的用例選擇方法,就是先采用黑盒測(cè)試技術(shù)生成測(cè)試用例,然后用一種或多種白盒技術(shù)對(duì)模塊單元的邏輯結(jié)構(gòu)進(jìn)行分析,對(duì)現(xiàn)有的測(cè)試用例進(jìn)行補(bǔ)充,最后得到一個(gè)合理而嚴(yán)格的測(cè)試用例集.黑盒測(cè)試技術(shù)中的等價(jià)類劃分和邊界值分析是比較簡(jiǎn)單而又有效的方法,用白盒測(cè)試技術(shù)補(bǔ)充用例時(shí),可以按照不同的覆蓋準(zhǔn)則選擇不同的覆蓋技術(shù).該測(cè)試用例選擇方法的流程如圖1所示.

圖1 先黑盒后白盒的單元測(cè)試用例選擇方法

2.1.1 等價(jià)類劃分設(shè)計(jì)用例

首先,使用等價(jià)類劃分設(shè)計(jì)測(cè)試用例.

等價(jià)類劃分是一種常用的黑盒測(cè)試方法,該方法將程序的輸入域劃分為若干個(gè)等價(jià)類,以便導(dǎo)出測(cè)試用例.每個(gè)等價(jià)類中的一個(gè)典型值在測(cè)試中的作用與這一類中所有其他值的作用相同,因此,可以從每個(gè)等價(jià)類中只取一組數(shù)據(jù)作為測(cè)試數(shù)據(jù).這樣選取的測(cè)試數(shù)據(jù)最有代表性,最可能發(fā)現(xiàn)程序中的錯(cuò)誤.

等價(jià)類劃分需要研究程序的功能說(shuō)明,從而確定輸入數(shù)據(jù)的有效等價(jià)類和無(wú)效等價(jià)類.典型地,輸入條件通常是一個(gè)特定的數(shù)值,一個(gè)數(shù)值域,一組相關(guān)值或一個(gè)布爾條件.可按照如下規(guī)則定義等價(jià)類:

①如果輸入條件代表一個(gè)范圍,可以定義一個(gè)有效等價(jià)類(輸入值在此范圍內(nèi))和兩個(gè)無(wú)效等價(jià)類(輸入值小于最小值或大于最大值).

②如果輸入條件需要特定個(gè)數(shù)的值,可以定義一個(gè)有效等價(jià)類(輸入值符合特定個(gè)數(shù))和兩個(gè)無(wú)效等價(jià)類(輸入值少于或多于特定個(gè)數(shù)).

③如果輸入條件代表集合的某個(gè)元素,可以定義一個(gè)有效等價(jià)類(輸入值屬于集合)和一個(gè)無(wú)效等價(jià)類(輸入值不屬于集合).

④如果輸入條件是布爾式,可以定義一個(gè)有效等價(jià)類和一個(gè)無(wú)效等價(jià)類.

2.1.2 邊界值分析補(bǔ)充用例

等價(jià)類劃分設(shè)計(jì)出測(cè)試用例后,要使用邊界值分析補(bǔ)充用例.

邊界值分析也是一種黑盒測(cè)試方法.經(jīng)驗(yàn)表明,輸入域的邊界比中間更加容易發(fā)生錯(cuò)誤,為此,邊界值分析是一種補(bǔ)充等價(jià)類劃分的測(cè)試用例設(shè)計(jì)技術(shù).邊界值分析不是選擇等價(jià)類的任意元素,而是選擇等價(jià)類邊界的測(cè)試用例,邊界值分析不僅注重于輸入條件,而且也從輸出域?qū)С鰷y(cè)試用例.

按照邊界值分析的方法,應(yīng)該選取剛好等于、稍小于和稍大于等價(jià)類邊界的數(shù)據(jù)作為測(cè)試數(shù)據(jù).

通常設(shè)計(jì)測(cè)試用例時(shí)總是聯(lián)合使用等價(jià)類劃分和邊界值分析兩種技術(shù).

2.1.3 邏輯覆蓋檢查最后,使用邏輯覆蓋準(zhǔn)則,對(duì)測(cè)試用例進(jìn)行補(bǔ)充.邏輯覆蓋是最常用的一類白盒測(cè)試方法.各邏輯覆蓋的覆蓋強(qiáng)弱順序如圖2所示.

圖2 邏輯覆蓋之間的關(guān)系

覆蓋率統(tǒng)計(jì)和分析的工作可以借助工具完成.當(dāng)通過(guò)上述黑盒測(cè)試方法設(shè)計(jì)的測(cè)試用例沒(méi)有達(dá)到規(guī)定的覆蓋率時(shí),就要為未覆蓋的分支或路徑設(shè)計(jì)補(bǔ)充測(cè)試用例.

2.2 先白盒后黑盒的單元測(cè)試方法

先白盒后黑盒的用例選擇方法,是在設(shè)計(jì)測(cè)試用例時(shí),首先關(guān)注模塊內(nèi)部的邏輯分支和路徑的執(zhí)行情況,即首先采用白盒測(cè)試中的邏輯覆蓋技術(shù),選擇出即將執(zhí)行的分支或路徑,再結(jié)合黑盒測(cè)試方法,確保每一個(gè)分支或每一條基本路徑域中的測(cè)試用例都能驗(yàn)證單元模塊的功能,當(dāng)滿足規(guī)定的覆蓋準(zhǔn)則后,再次利用黑盒測(cè)試對(duì)用例進(jìn)行補(bǔ)充.這樣,在滿足測(cè)試用例的充分性的前提下,又能盡量保證其有效性.

在白盒測(cè)試中,根據(jù)不同的測(cè)試覆蓋準(zhǔn)則,可以選擇圖3中介紹的各種覆蓋技術(shù),由圖3可知,路徑覆蓋是一種最強(qiáng)的邏輯覆蓋,基本路徑覆蓋測(cè)試方法是一種常用的、有效的路徑覆蓋技術(shù),它將程序中的循環(huán)體只執(zhí)行零次和一次.它是在程序控制流圖的基礎(chǔ)上,通過(guò)分析控制流程的圈復(fù)雜度,導(dǎo)出基本路徑集合,從該基本路徑集合導(dǎo)出測(cè)試用例,保證對(duì)程序中的每一條語(yǔ)句和分支都至少執(zhí)行一次.目前的許多軟件靜態(tài)測(cè)試工具都能給出程序的控制流圖,這為設(shè)計(jì)測(cè)試用例提供了方便.

圖3 先白盒后黑盒的單元測(cè)試用例選擇方法

對(duì)于由基本路徑測(cè)試方法中導(dǎo)出的每一條基本路徑上的測(cè)試用例的選取,可以使用等價(jià)類劃分和邊界值分析,彌補(bǔ)單純采用白盒測(cè)試的某些不足(如,沒(méi)有提供在一個(gè)路徑域中選擇測(cè)試數(shù)據(jù)的原則[3]),使每一個(gè)測(cè)試用例都更加有效.

該方法的流程如圖3所示,圖中的白盒測(cè)試選用基本路徑測(cè)試方法,黑盒測(cè)試選用等價(jià)類劃分和邊界值分析的方法.

2.2.1 基本路徑法導(dǎo)出基本路徑集合

基本路徑測(cè)試,又被稱為結(jié)構(gòu)化測(cè)試方法(the structured testing approach),是一種白盒測(cè)試技術(shù),基本路徑測(cè)試方法允許測(cè)試用例設(shè)計(jì)者導(dǎo)出一個(gè)過(guò)程設(shè)計(jì)的邏輯復(fù)雜性度量,并使用該度量作為指南來(lái)定義執(zhí)行路徑的基本集.從該基本集導(dǎo)出的測(cè)試用例不僅能夠保證對(duì)程序中的每一條語(yǔ)句至少執(zhí)行一次,還使得每一個(gè)判定的結(jié)果(取真和取假)都被獨(dú)立的測(cè)試過(guò).

根據(jù)圖論,基本路徑測(cè)試方法中所需的測(cè)試用例數(shù),也就是基本路徑集合中的獨(dú)立路徑條數(shù),等于程序的圈復(fù)雜度(cyclomatic complexity)v(G).圈復(fù)雜度v(G)可以用以下3種方法求得:

1)v(G)=程序的控制流圖中的區(qū)域數(shù)

2)v(G)=E-N+2,其中,E為控制流圖的邊數(shù),N為圖的節(jié)點(diǎn)數(shù)

3)v(G)=P+1,P為控制流圖中的判定節(jié)點(diǎn)數(shù)

值得一提的是,圈復(fù)雜度v(G)幾乎與編程語(yǔ)言無(wú)關(guān),因?yàn)橛邢嗤壿嫿Y(jié)構(gòu)的程序,不管用哪一種面向過(guò)程的語(yǔ)言實(shí)現(xiàn),所得到的基本判定結(jié)構(gòu)都是相同的.這是由于控制流圖中的判定節(jié)點(diǎn)不包含復(fù)合條件,例如C語(yǔ)言實(shí)現(xiàn)的程序中的復(fù)合條件在生成控制流圖時(shí)會(huì)將復(fù)合條件分解成各個(gè)子條件.

大量研究表明,圈復(fù)雜度度量與軟件模塊中的錯(cuò)誤數(shù)相關(guān)聯(lián),在其他因素相同情況下,復(fù)雜的模塊代碼比簡(jiǎn)單的代碼中出現(xiàn)錯(cuò)誤的可能性要大[4].并且,與高級(jí)語(yǔ)言相比,低級(jí)語(yǔ)言中的這種可能性更大一些.

2.2.2 為每一條基本路徑選擇用例

準(zhǔn)備測(cè)試用例,強(qiáng)制執(zhí)行基本路徑集中每條路徑.這時(shí)要結(jié)合等價(jià)類劃分和邊界值分析方法,選擇數(shù)據(jù)以便在測(cè)試每條路徑時(shí)適當(dāng)設(shè)置判定節(jié)點(diǎn)的條件.

2.2.3 黑盒測(cè)試方法補(bǔ)充用例

最后,還要使用等價(jià)類劃分和邊界值分析方法,對(duì)上述生成的測(cè)試用例進(jìn)行補(bǔ)充.

2.3 兩種方法討論

兩種單元測(cè)試方法將黑盒測(cè)試與白盒測(cè)試相結(jié)合,既免去了單純用白盒測(cè)試方法生成用例時(shí)只關(guān)注程序內(nèi)部結(jié)構(gòu)而忽略模塊功能,又彌補(bǔ)了單純用黑盒測(cè)試時(shí)難以達(dá)到較高的覆蓋率的不足,并且,兩種方法都有利于實(shí)現(xiàn)并行開發(fā),在軟件設(shè)計(jì)階段即可組織人員進(jìn)行單元測(cè)試用例的設(shè)計(jì),可以達(dá)到先測(cè)試設(shè)計(jì)后編碼的目的,能夠發(fā)現(xiàn)軟件設(shè)計(jì)階段的錯(cuò)誤.

先黑盒后白盒方法生成測(cè)試用例的好處主要是:首先使用黑盒方法,直接關(guān)注模塊的功能,能夠提高測(cè)試用例的有效性;白盒測(cè)試方法放在黑盒測(cè)試之后,進(jìn)一步提高了測(cè)試效率,當(dāng)單純用黑盒方法設(shè)計(jì)測(cè)試用例進(jìn)行到一定階段時(shí),再設(shè)計(jì)新的測(cè)試用例會(huì)比較費(fèi)力,而此時(shí)如果借助靜態(tài)覆蓋分析工具,白盒測(cè)試用例的設(shè)計(jì)就比較容易了.這種測(cè)試用例選擇方法,適合實(shí)現(xiàn)功能非常明確、內(nèi)部實(shí)現(xiàn)邏輯相對(duì)復(fù)雜的模塊單元.

先白盒后黑盒的用例選擇方法在不了解程序模塊功能的情況下便開始用例的設(shè)計(jì),從分析程序內(nèi)部結(jié)構(gòu)和程序執(zhí)行路徑的基礎(chǔ)上結(jié)合黑盒測(cè)試方法,彌補(bǔ)了單純用白盒測(cè)試時(shí)難以保證用例有效性的不足.這種用例選擇方法,適合模塊實(shí)現(xiàn)功能不很清晰或測(cè)試人員對(duì)模塊的功能不能很好理解的情況下,也適用于內(nèi)部邏輯相對(duì)簡(jiǎn)單、算法相對(duì)復(fù)雜的單元模塊.

這兩種方法已被應(yīng)用于某航天型號(hào)計(jì)算機(jī)應(yīng)用軟件的單元測(cè)試中,取得了很好的效果.我們通過(guò)對(duì)單元測(cè)試方法的研究和具體實(shí)踐,得出以下結(jié)論:

1)單元測(cè)試用例必須根據(jù)詳細(xì)設(shè)計(jì)報(bào)告進(jìn)行設(shè)計(jì),這樣設(shè)計(jì)出的用例具有更強(qiáng)的揭錯(cuò)能力.

2)不能片面追求單純的100%覆蓋率,為測(cè)試而測(cè)試,要兼顧模塊的功能、性能要求設(shè)計(jì)用例,并針對(duì)出錯(cuò)概率高的代碼設(shè)計(jì)專門的測(cè)試用例.

3)在進(jìn)行模塊的詳細(xì)設(shè)計(jì)時(shí),就要考慮測(cè)試用例的設(shè)計(jì).通過(guò)模塊的合理設(shè)計(jì)降低模塊的復(fù)雜度,將會(huì)大大降低測(cè)試的工作量,并提高整個(gè)軟件的質(zhì)量.

4)黑白盒相結(jié)合的測(cè)試用例設(shè)計(jì)方法在單元測(cè)試中是非常有效的.應(yīng)用這些方法認(rèn)真的進(jìn)行測(cè)試用例的設(shè)計(jì),才能從根本上提高單元測(cè)試的效率和效果.

3 結(jié)束語(yǔ)

作為保證軟件質(zhì)量和可靠性的重要手段之一,軟件測(cè)試已逐漸成為現(xiàn)代軟件工程學(xué)研究和應(yīng)用的熱點(diǎn).單元測(cè)試與其它階段測(cè)試相比,其投入較小,回報(bào)卻很高,它為后續(xù)測(cè)試工作提供了重要保障.因此,在實(shí)際工作中深入研究和應(yīng)用有效的軟件單元測(cè)試方法,這對(duì)于保證和提高航天軟件的質(zhì)量具有重要的現(xiàn)實(shí)意義.本文主要針對(duì)航天器控制軟件的單元測(cè)試方法進(jìn)行了一些探索,在實(shí)踐中總結(jié)出的兩種混合型的單元測(cè)試用例設(shè)計(jì)方法,對(duì)于提高單元測(cè)試的效果具有現(xiàn)實(shí)指導(dǎo)作用,但方法的使用還主要依靠人來(lái)完成,這將對(duì)人員的素質(zhì)要求較高.因而,探討測(cè)試用例的自動(dòng)生成技術(shù),提高單元測(cè)試的自動(dòng)化程度,將是下一步將要解決的問(wèn)題.

[1] 鄭人杰,計(jì)算機(jī)軟件測(cè)試技術(shù)[M].北京:清華大學(xué)出版社,1992

[2] Roger S P著,梅宏譯.軟件工程-實(shí)踐者的研究方法(原書第5版)[M].北京:機(jī)械工業(yè)出版社,2002

[3] Simeon C N.A comparison of some structural testing strategies[J].IEEE Transactions on Software Engineering,1988,14(6):868-874

[4] Arthur H W,Thomas J M.Structured testing:a testing methodology using the cyclomatic complexity metric[M].NIST Special Publication,1996

猜你喜歡
黑盒單元測(cè)試測(cè)試用例
一種基于局部平均有限差分的黑盒對(duì)抗攻擊方法
測(cè)試用例自動(dòng)生成技術(shù)綜述
回歸測(cè)試中測(cè)試用例優(yōu)化技術(shù)研究與探索
基于SmartUnit的安全通信系統(tǒng)單元測(cè)試用例自動(dòng)生成
一年級(jí)上冊(cè)第五單元測(cè)試
一年級(jí)上冊(cè)一、二單元測(cè)試
第五單元測(cè)試卷
第六單元測(cè)試卷
卢氏县| 佳木斯市| 武宣县| 大英县| 瑞金市| 新晃| 马龙县| 合肥市| 八宿县| 青州市| 阜平县| 郓城县| 县级市| 江源县| 越西县| 香港| 蒙山县| 济阳县| 安仁县| 来安县| 莱西市| 庆云县| 平远县| 富顺县| 凭祥市| 南部县| 鹤山市| 全州县| 左权县| 镇沅| 西和县| 永登县| 尤溪县| 肃北| 柘荣县| 娄烦县| 吴堡县| 凉城县| 宝清县| 扬中市| 潍坊市|