亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

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

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

        勾英杰,江云松

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

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

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

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

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

        1 單元測試方法概述

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

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

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

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

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

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

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

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

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

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

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

        2.1.1 等價類劃分設(shè)計用例

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

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

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

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

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

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

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

        2.1.2 邊界值分析補充用例

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

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

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

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

        2.1.3 邏輯覆蓋檢查最后,使用邏輯覆蓋準則,對測試用例進行補充.邏輯覆蓋是最常用的一類白盒測試方法.各邏輯覆蓋的覆蓋強弱順序如圖2所示.

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

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

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

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

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

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

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

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

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

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

        根據(jù)圖論,基本路徑測試方法中所需的測試用例數(shù),也就是基本路徑集合中的獨立路徑條數(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é)點數(shù)

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

        值得一提的是,圈復(fù)雜度v(G)幾乎與編程語言無關(guān),因為有相同邏輯結(jié)構(gòu)的程序,不管用哪一種面向過程的語言實現(xiàn),所得到的基本判定結(jié)構(gòu)都是相同的.這是由于控制流圖中的判定節(jié)點不包含復(fù)合條件,例如C語言實現(xiàn)的程序中的復(fù)合條件在生成控制流圖時會將復(fù)合條件分解成各個子條件.

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

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

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

        2.2.3 黑盒測試方法補充用例

        最后,還要使用等價類劃分和邊界值分析方法,對上述生成的測試用例進行補充.

        2.3 兩種方法討論

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

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

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

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

        1)單元測試用例必須根據(jù)詳細設(shè)計報告進行設(shè)計,這樣設(shè)計出的用例具有更強的揭錯能力.

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

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

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

        3 結(jié)束語

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

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

        [2] Roger S P著,梅宏譯.軟件工程-實踐者的研究方法(原書第5版)[M].北京:機械工業(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ò)的白盒交換機體系綜述
        DWB-AES:基于AES 的動態(tài)白盒實現(xiàn)方法
        網(wǎng)絡(luò)“黑”“白”之爭
        通信世界(2018年29期)2018-11-21 06:34:44
        一年級上冊第五單元測試
        一年級上冊一、二單元測試
        基于EEPROM數(shù)據(jù)讀寫的智能電能表白盒測試方法
        電測與儀表(2014年3期)2014-04-04 09:08:08
        第五單元測試卷
        第六單元測試卷
        日本在线观看不卡一区二区| 国产精品亚洲综合一区在线观看| jlzzjlzz全部女高潮| 亚洲AV日韩Av无码久久| 午夜不卡久久精品无码免费| 精品一精品国产一级毛片| 少妇爽到爆视频网站免费| 国产亚洲精品一区二区在线观看| 亚洲成人av一二三四区| 最新中文字幕av无码不卡| 国产精品亚洲成在人线| 人妻少妇精品视中文字幕国语| 久久精品伊人久久精品| 人妖av手机在线观看| 日本乱偷人妻中文字幕| 国产亚洲精品久久久久久久久动漫| 欧美人与动牲交片免费播放| 毛片av在线尤物一区二区| 久久91精品国产一区二区| 中文av字幕一区二区三区| 超级乱淫片国语对白免费视频| 国产一精品一av一免费| 夜夜揉揉日日人人| 太大太粗太爽免费视频| 日韩在线一区二区三区中文字幕| av无码国产精品色午夜| 国产女主播喷水视频在线观看| 国产精品99久久免费| 特黄三级一区二区三区| 美女脱掉内裤扒开下面让人插 | 蜜桃色av一区二区三区麻豆 | 亚洲av综合色一区二区| 婷婷丁香五月激情综合| 国产 国语对白 露脸| 亚洲中文字幕有码av| 极品美女调教喷水网站| 国产精品9999久久久久仙踪林| 性饥渴艳妇性色生活片在线播放| 亚洲嫩模一区二区三区视频| 被灌醉的日本人妻中文字幕| 色先锋av影音先锋在线|