• 
    

    
    

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

      基于樁函數(shù)動態(tài)賦值的軟件覆蓋率測試方法

      2020-12-23 07:55:06萬東燕羅睿梅李俊山
      制導(dǎo)與引信 2020年2期
      關(guān)鍵詞:邊界值單元測試測試用例

      萬東燕, 羅睿梅, 李俊山, 陳 鋮

      (上海無線電設(shè)備研究所,上海201109)

      0 引言

      軟件測試[1]是軟件研發(fā)過程中的一個重要環(huán)節(jié),通過軟件測試可以及時(shí)發(fā)現(xiàn)軟件缺陷,保障軟件的安全性和可靠性。單元測試是軟件開發(fā)過程中最基礎(chǔ)的測試項(xiàng),是軟件的獨(dú)立單元在與程序的其他部分相隔離的情況下進(jìn)行的測試。其中代碼覆蓋率能夠體現(xiàn)代碼的執(zhí)行情況。測試人員可以通過覆蓋率指標(biāo),分析代碼執(zhí)行范圍,完善測試用例,有效提高軟件測試質(zhì)量。

      在軟件測試的過程中,執(zhí)行單次的測試用例時(shí),某些函數(shù)的輸入變量激勵會在代碼執(zhí)行過程中發(fā)生動態(tài)變化。若測試用例中的輸入變量激勵不能對應(yīng)進(jìn)行動態(tài)更新,則需激勵更新才能進(jìn)入的相關(guān)語句無法完成測試,代碼覆蓋率測試也無法完成。為了解決這一問題,測試人員需要在設(shè)計(jì)的測試用例中模擬輸入變量激勵的變化條件,來完成測試。本文結(jié)合專業(yè)的測試工具,研究了變量激勵可動態(tài)更新的樁函數(shù)賦值法,并設(shè)計(jì)靈活的測試用例,以保障測試質(zhì)量、提高測試效率。

      1 軟件的單元測試

      1.1 單元測試方法

      單元測試的主要目的是驗(yàn)證軟件單元是否滿足詳細(xì)設(shè)計(jì)規(guī)格說明,發(fā)現(xiàn)需求和設(shè)計(jì)中的錯誤。測試用例是影響單元測試效率和效果的重要因素[2]。本文采取黑盒與白盒結(jié)合的方法對軟件進(jìn)行測試。利用黑盒測試方法中的等價(jià)劃分法和邊界值分析法來設(shè)計(jì)測試用例。等價(jià)劃分法[3]基于輸入條件的等價(jià)類評估,在每個等價(jià)類中選取有代表性的測試用例,從而達(dá)到等價(jià)類覆蓋的要求。由于程序錯誤常在定義域和等價(jià)類的邊緣被發(fā)現(xiàn),所以需要對每個測試變量進(jìn)行邊界值分析。邊界值分析[4]是等價(jià)類劃分的精煉,即選擇每個類的邊界或終點(diǎn)進(jìn)行測試。

      覆蓋率是軟件開發(fā)過程中重要的度量指標(biāo),具體包括語句覆蓋、分支覆蓋、條件覆蓋等。覆蓋率測試[5]作為一種白盒測試,其主要作用包括:a)評估測試質(zhì)量,根據(jù)軟件代碼的覆蓋率報(bào)告,發(fā)現(xiàn)漏測場景,為測試人員及時(shí)補(bǔ)充新的測試用例提供指導(dǎo);b)幫助識別冗余代碼,對程序代碼進(jìn)行優(yōu)化與重構(gòu)。

      1.2 單元測試工具

      Testbed是一款專業(yè)的軟件測試工具,可用于生成和維護(hù)測試腳本,編譯并運(yùn)行測試可執(zhí)行程序,查看測試結(jié)果和覆蓋率數(shù)據(jù)。其中,Testbed/TBrun模塊可執(zhí)行軟件的單元測試[6]。該模塊可以在運(yùn)行測試用例對軟件功能進(jìn)行測試的同時(shí),分析得出軟件單元相應(yīng)代碼的測試覆蓋情況,評估測試狀態(tài),從而為設(shè)計(jì)新的測試用例提供指導(dǎo)。

      2 測試用例的設(shè)計(jì)

      2.1 測試用例生成基礎(chǔ)

      (1)單元測試環(huán)境

      為了方便對嵌入式軟件進(jìn)行單元測試,在測試前首先要去除代碼中的硬件相關(guān)部分,將其移植到Testbed相應(yīng)的測試環(huán)境中。移植的過程不會影響軟件的功能,測試環(huán)境與現(xiàn)實(shí)環(huán)境差異不大,能夠確保測試的有效性和可靠性。

      單元測試的對象是不可獨(dú)立運(yùn)行的函數(shù)單元。測試時(shí)需要建立兩種輔助測試模塊:驅(qū)動模塊(driver)和樁模塊(stub)。驅(qū)動模塊用于模擬被測函數(shù)的上層模塊,樁模塊用于模擬被測函數(shù)在執(zhí)行過程中所調(diào)用的其他函數(shù),以保證被測單元能完整閉合地運(yùn)行。在單元測試中,被測函數(shù)可能調(diào)用多個其他函數(shù),故可能存在多個樁函數(shù)。

      (2)樁函數(shù)

      樁函數(shù)是根據(jù)測試需要編寫的,用于替代被測函數(shù)調(diào)用的函數(shù)。樁函數(shù)有兩種情況:一是該樁函數(shù)在被測函數(shù)中不需要返回特定值,不需要作其他處理;二是該樁函數(shù)在被測函數(shù)中需要返回特定值,不同返回值會影響代碼運(yùn)行與輸出結(jié)果,需要根據(jù)測試需求,在Testbed/TBrun模塊中進(jìn)行相應(yīng)的返回值設(shè)置。

      在樁函數(shù)中設(shè)置返回值時(shí),通常只支持輸入變量激勵的一次性靜態(tài)賦值,在代碼的運(yùn)行過程中不能進(jìn)行修改。由于這一局限,導(dǎo)致無法直接對在單次執(zhí)行過程中需多次變更輸入變量激勵的函數(shù)進(jìn)行測試。同時(shí)這一問題會在覆蓋率測試中反映,由于對應(yīng)的分支和語句無法被執(zhí)行,所以覆蓋率測試也無法完全完成。為了解決這一問題,需要分析進(jìn)入不同分支的變量激勵的更新要求,并設(shè)計(jì)可動態(tài)更新的樁函數(shù)返回值,來模擬進(jìn)入相應(yīng)分支的條件,完成測試。

      以某數(shù)字信號處理軟件為例,測試其誤差處理函數(shù)DJDMBJC時(shí),需要調(diào)用函數(shù)Find Max-Point來獲取并返回最大值變量max_data。在測試軟件運(yùn)行過程中,函數(shù)Find Max Point中變量max_data的值會在執(zhí)行過程中動態(tài)更新,軟件通過判斷變量值所在范圍,進(jìn)入相應(yīng)程序分支,相關(guān)程序流程如圖1所示。

      圖1 誤差處理函數(shù)測試程序流程圖

      由圖1可知,該段代碼調(diào)用了兩次函數(shù)Find-MaxPoint,并讀取max_data的值,判斷該值并進(jìn)入對應(yīng)的執(zhí)行語句。對函數(shù)DJDMBJC進(jìn)行測試時(shí),若要到達(dá)第二個判斷框,則需在第一個判斷處進(jìn)入“否”分支,即滿足max_data≤12。在該前提下,若max_data的值無法更新,則只能進(jìn)入第二個判斷框的“否”分支,而無法進(jìn)入與“執(zhí)行語句2”對應(yīng)的“是”分支,無法對該段代碼完成測試覆蓋。因此,在測試中,需要研究樁函數(shù)返回值的設(shè)置方法,實(shí)現(xiàn)輸入變量激勵的動態(tài)更新。

      2.2 樁函數(shù)返回值賦值法

      為了解決2.1節(jié)中由于被測單元函數(shù)所調(diào)用樁函數(shù)的輸入變量激勵值無法更新,導(dǎo)致覆蓋率測試不能完成的問題,提出一種樁函數(shù)返回值動態(tài)賦值方法。根據(jù)Testbed/TBrun模塊中樁函數(shù)的代碼運(yùn)行方式,在樁函數(shù)的后臺代碼段中構(gòu)造并聲明一個整型變量count,用來記錄不同賦值點(diǎn)的位置。位置i對應(yīng)的返回值ai即為該時(shí)刻的變量值,當(dāng)函數(shù)運(yùn)行到count值所對應(yīng)的位置i時(shí),將返回值ai賦值給變量max_data,從而實(shí)現(xiàn)被調(diào)用的樁函數(shù)輸入變量激勵的動態(tài)更新。具體實(shí)現(xiàn)過程如圖2所示,其中n代表變量激勵動態(tài)更新的次數(shù)。

      將上述方法應(yīng)用于2.1節(jié)函數(shù)DJDMBJC的測試用例設(shè)計(jì)。執(zhí)行改進(jìn)后的測試用例,將兩次調(diào)用樁函數(shù)后的變量max_data激勵值從11更新為13,即可先進(jìn)入圖1中的第一個“否”語句,再進(jìn)入第二個“是”語句,實(shí)現(xiàn)不同分支的全部執(zhí)行。

      圖2 樁函數(shù)返回值動態(tài)賦值程序流程圖

      2.3 測試用例的設(shè)計(jì)實(shí)現(xiàn)

      本文被測軟件中,變量max_data的取值范圍為0~25。由判定條件max_data>12可知,12為判斷邊界值,即該變量的邊界值為0,12和25。對變量進(jìn)行等價(jià)類與邊界值分析,結(jié)果如表1所示。

      表1 等價(jià)類與邊界值分析

      由圖1可知,當(dāng)max_data≤12時(shí),程序會進(jìn)入第一個“否”分支,然后對已更新的變量max_data值進(jìn)行第二次判斷。因此,在進(jìn)行邊界值測試時(shí),要考慮兩次函數(shù)調(diào)用時(shí)變量的判斷邊界。結(jié)合變量max_data的判斷邊界,對測試用例進(jìn)行覆蓋有效等價(jià)類和邊界值測試與覆蓋無效等價(jià)類和邊界值測試分類,實(shí)現(xiàn)程序邊界的完整分析與覆蓋,測試用例設(shè)計(jì)如表2所示。其中max_data_1和max_data_2分別代表第一和第二個判斷框?qū)?yīng)的max_data的值。通過對兩處的max_data進(jìn)行分類賦值,即可達(dá)到函數(shù)功能以及語句與分支的全部覆蓋。

      執(zhí)行改進(jìn)的測試用例前后,函數(shù)DJDMBJC的測試覆蓋率如表3所示。在函數(shù)DJDMBJC的測試過程中,執(zhí)行改進(jìn)的測試用例,語句與分支判定的覆蓋率分別由90%、93%提高到100%,解決了函數(shù)測試分支無法到達(dá)的問題,實(shí)現(xiàn)了該函數(shù)的覆蓋率測試,提升了測試質(zhì)量。

      表2 測試用例表

      表3 函數(shù)DJDMBJC測試覆蓋率 %

      3 結(jié)論

      本文以Testbed軟件為測試工具,提出了變量激勵可動態(tài)更新的樁函數(shù)返回值設(shè)計(jì)方法,解決了單元測試中語句和分支覆蓋率測試不全的問題。結(jié)合等價(jià)類劃分與邊界值測試,設(shè)計(jì)全面且高效的測試用例,有效地精簡了測試用例個數(shù),提高了測試用例設(shè)計(jì)的準(zhǔn)確性和測試效率,對提升測試質(zhì)量具有重要的積極意義。

      猜你喜歡
      邊界值單元測試測試用例
      基于SmartUnit的安全通信系統(tǒng)單元測試用例自動生成
      如何設(shè)計(jì)好的測試用例
      巧用洛必達(dá)法則速解函數(shù)邊界值例讀
      讀寫算(2019年11期)2019-08-29 02:04:19
      基于混合遺傳算法的回歸測試用例集最小化研究
      基于依賴結(jié)構(gòu)的測試用例優(yōu)先級技術(shù)
      一年級上冊第五單元測試
      一年級上冊一、二單元測試
      一類帶有Dirichlet邊界值條件的橢圓型方程正解的存在性
      序半群中有邊界值的直覺模糊理想
      第五單元測試卷
      盘山县| 赤峰市| 平利县| 勐海县| 东乌珠穆沁旗| 于都县| 昌宁县| 屯门区| 万源市| 新宾| 滨海县| 南郑县| 卢龙县| 白山市| 海安县| 滦南县| 太谷县| 东宁县| 嘉义县| 前郭尔| 兴仁县| 陆川县| 凌源市| 九龙坡区| 湘乡市| 兰考县| 岢岚县| 马边| 临夏县| 鄂州市| 四子王旗| 河北省| 革吉县| 卢氏县| 神池县| 泾阳县| 丹东市| 上林县| 周宁县| 武威市| 公主岭市|