• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      兩種混合型軟件單元的測試方法

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

      勾英杰,江云松

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

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

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

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

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

      1 單元測試方法概述

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

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

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

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

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

      2 兩種混合型的單元測試方法

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

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

      2.1 先黑盒后白盒的單元測試方法

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      2.2 先白盒后黑盒的單元測試方法

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

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

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

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

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

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

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

      根據(jù)圖論,基本路徑測試方法中所需的測試用例數(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)幾乎與編程語言無關(guān),因?yàn)橛邢嗤壿嫿Y(jié)構(gòu)的程序,不管用哪一種面向過程的語言實(shí)現(xiàn),所得到的基本判定結(jié)構(gòu)都是相同的.這是由于控制流圖中的判定節(jié)點(diǎn)不包含復(fù)合條件,例如C語言實(shí)現(xiàn)的程序中的復(fù)合條件在生成控制流圖時(shí)會將復(fù)合條件分解成各個(gè)子條件.

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

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

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

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

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

      2.3 兩種方法討論

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

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

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

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

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

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

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

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

      3 結(jié)束語

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

      [1] 鄭人杰,計(jì)算機(jī)軟件測試技術(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

      猜你喜歡
      白盒黑盒單元測試
      一種基于局部平均有限差分的黑盒對抗攻擊方法
      面向未來網(wǎng)絡(luò)的白盒交換機(jī)體系綜述
      DWB-AES:基于AES 的動態(tài)白盒實(shí)現(xiàn)方法
      網(wǎng)絡(luò)“黑”“白”之爭
      通信世界(2018年29期)2018-11-21 06:34:44
      一年級上冊第五單元測試
      一年級上冊一、二單元測試
      基于EEPROM數(shù)據(jù)讀寫的智能電能表白盒測試方法
      電測與儀表(2014年3期)2014-04-04 09:08:08
      第五單元測試卷
      第六單元測試卷
      奈曼旗| 靖安县| 延长县| 崇文区| 龙州县| 资中县| 阿勒泰市| 东兰县| 武山县| 扎鲁特旗| 清丰县| 高州市| 聂拉木县| 杂多县| 鄂温| 台中市| 中宁县| 和硕县| 同心县| 拉萨市| 剑河县| 聂拉木县| 海阳市| 府谷县| 壤塘县| 青神县| 名山县| 夏邑县| 土默特左旗| 怀仁县| 沙雅县| 永德县| 丹江口市| 潜山县| 东乡| 广元市| 青阳县| 宜兰市| 辉县市| 桃园县| 内丘县|