• 
    

    
    

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

      金融科技軟件自動(dòng)化測(cè)試用例的冗余評(píng)價(jià)和削減方法

      2022-07-28 09:24:16徐立華趙瑞祥
      關(guān)鍵詞:容忍度測(cè)試用例套件

      龔 鑫, 徐立華, 竇 亮, 趙瑞祥

      (1. 華東師范大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院, 上海 200062; 2. 上海紐約大學(xué) 工程與計(jì)算機(jī)科學(xué)部, 上海200122; 3. 中匯信息技術(shù)(上海)有限公司, 上海 201203)

      0 引 言

      金融科技指服務(wù)于金融領(lǐng)域的計(jì)算機(jī)技術(shù), 是技術(shù)驅(qū)動(dòng)的金融創(chuàng)新, 在金融機(jī)構(gòu)中發(fā)揮了重要的作用, 受到來自金融、軟件領(lǐng)域?qū)W者的廣泛關(guān)注. 據(jù)相關(guān)統(tǒng)計(jì), 2019 年全球在金融科技領(lǐng)域的投資金額達(dá)到了1 054 億美元[1]. 金融科技的軟件系統(tǒng)通常涉及關(guān)鍵的金融業(yè)務(wù), 任何程序缺陷或者錯(cuò)誤操作都可能導(dǎo)致巨大的經(jīng)濟(jì)損失. 由于金融科技軟件往往包含復(fù)雜的金融業(yè)務(wù)邏輯, 測(cè)試用例的字段之間具有復(fù)雜的約束關(guān)系, 因此金融科技軟件的測(cè)試任務(wù)往往需要耗費(fèi)較高的時(shí)間成本和人力成本.

      為了確保金融科技軟件的質(zhì)量, 同時(shí)降低軟件測(cè)試的成本, 學(xué)者們[2-3]提出了一系列自動(dòng)化測(cè)試用例生成方法 (Test Case Generation, TCG), 這些方法能夠在一定的條件下, 快速、自動(dòng)地生成測(cè)試套件. 然而, 自動(dòng)化測(cè)試用例生成方法往往以達(dá)到更高的代碼覆蓋率或者更大的變異分?jǐn)?shù)為目標(biāo), 傾向于生成數(shù)量更多的測(cè)試用例, 未考慮到可能引入的冗余因素, 因此極易造成測(cè)試冗余問題. 如果從測(cè)試套件中剔除一部分測(cè)試用例, 整體的測(cè)試質(zhì)量并不受到影響, 就表明存在測(cè)試冗余問題[4]. 測(cè)試套件中的冗余因素將提高測(cè)試執(zhí)行環(huán)節(jié)的成本, 并導(dǎo)致測(cè)試用例的管理變得更加困難[5].

      本文對(duì)實(shí)際的金融科技軟件 (由中匯信息技術(shù) (上海) 有限公司提供的外匯交易系統(tǒng)下的軟件構(gòu)件) 進(jìn)行了研究, 發(fā)現(xiàn)確實(shí)存在測(cè)試用例過多的問題, 并且難以使用人工方法高效地判斷其冗余程度.這個(gè)交易系統(tǒng)為銀行間外匯市場(chǎng)、貨幣市場(chǎng)等提供發(fā)行服務(wù)、交易服務(wù)、交易后處理服務(wù)、信息咨詢服務(wù)以及技術(shù)服務(wù), 具有龐大的體量. 系統(tǒng)在測(cè)試過程中使用了針對(duì)金融科技的兩種測(cè)試用例生成方法: FACTS (Automated BlaCk-box Testing for FinTech Systems)[2]和FinExpert[3], 這兩種方法雖然能夠生成覆蓋率足夠高的測(cè)試套件, 但是所生成的測(cè)試套件十分龐大, 會(huì)引入一定的冗余因素. 在實(shí)際的測(cè)試環(huán)節(jié)中, 測(cè)試人員更關(guān)注業(yè)務(wù)功能的覆蓋情況, 即業(yè)務(wù)代碼能否被測(cè)試用例覆蓋的情況, 因此, 如果能夠通過代碼覆蓋率對(duì)測(cè)試冗余進(jìn)行評(píng)估, 這樣的評(píng)估方法對(duì)于金融科技軟件來說就具有較理想的實(shí)際應(yīng)用價(jià)值.

      針對(duì)金融科技領(lǐng)域的軟件測(cè)試環(huán)節(jié), 本文提出了最佳覆蓋項(xiàng)冗余指標(biāo)MVI (Most Valuable Item),這是一種基于覆蓋率的測(cè)試冗余評(píng)價(jià)指標(biāo), 能夠?qū)y(cè)試套件的冗余因素進(jìn)行量化. MVI 指標(biāo)關(guān)注程序代碼的覆蓋項(xiàng), 并通過覆蓋項(xiàng)對(duì)測(cè)試套件的整體冗余情況進(jìn)行評(píng)估. 為了驗(yàn)證MVI 指標(biāo)的有效性, 本文進(jìn)一步提出了一種基于MVI 指標(biāo)的測(cè)試用例削減算法MVIR (Most Valuable Item Reduction). 實(shí)驗(yàn)結(jié)果顯示, MVIR 能夠在保證測(cè)試性能損失小于9.20%的前提下, 實(shí)現(xiàn)大于89.88%的測(cè)試用例削減比例, 同時(shí)證明了MVI 指標(biāo)能夠有效反映測(cè)試套件中的冗余程度. 最后, 使用MVI 指標(biāo)對(duì)FACTS 和FinExpert 這兩種測(cè)試用例生成方法的冗余程度進(jìn)行了評(píng)估, 結(jié)果顯示, 這兩種方法在生成測(cè)試用例的同時(shí)會(huì)引入較多的冗余因素. 同時(shí), 實(shí)驗(yàn)結(jié)果發(fā)現(xiàn), MVIR 能夠?qū)ACTS 和FinExpert 這兩種方法所引入的冗余因素進(jìn)行有效消解, 將自動(dòng)化測(cè)試用例生成方法與測(cè)試用例削減算法相結(jié)合, 能夠生成質(zhì)量較高、冗余程度較低的測(cè)試套件.

      1 相關(guān)工作

      1.1 測(cè)試冗余問題

      測(cè)試冗余不是一種確切的測(cè)試缺陷, 而是一種能夠揭示程序潛在缺陷的代碼特征. 測(cè)試冗余會(huì)影響測(cè)試套件的可讀性與可維護(hù)性, 降低測(cè)試質(zhì)量[6]. 產(chǎn)生測(cè)試冗余的根本原因, 往往是開發(fā)階段和測(cè)試階段的重復(fù)編碼, 或者軟件代碼的變更[4,7-8].

      測(cè)試冗余問題一直以來受到學(xué)者們[7,9-13]的廣泛關(guān)注, 各類針對(duì)測(cè)試用例削減技術(shù)的研究都對(duì)該問題進(jìn)行了討論. 測(cè)試用例削減技術(shù)以減少測(cè)試套件中的冗余因素為目標(biāo), 主要關(guān)注測(cè)試用例層面的冗余值, 通常將測(cè)試用例區(qū)分為“冗余”和“不冗余”兩類, 在削減的過程中剔除“冗余”測(cè)試用例, 只保留“不冗余”測(cè)試用例. 部分文獻(xiàn)[4-5]將測(cè)試用例的冗余值進(jìn)行了粒度更細(xì)的區(qū)分, 并且在削減的過程中,優(yōu)先刪除冗余值較高的測(cè)試用例. Koochakzadeh 等[4]基于“語句覆蓋”“分支覆蓋”“條件覆蓋”和“循環(huán)覆蓋”這4 類代碼覆蓋率, 提出測(cè)試套件冗余指標(biāo), 該指標(biāo)對(duì)測(cè)試用例之間的相交覆蓋項(xiàng)進(jìn)行分析,并以相交覆蓋項(xiàng)數(shù)量的百分比作為測(cè)試用例的冗余值, 將冗余值為0 的測(cè)試用例視為不冗余的, 冗余值大于0 的測(cè)試用例視為冗余的. 實(shí)驗(yàn)結(jié)果顯示, 僅僅使用上述4 種覆蓋率指標(biāo), 對(duì)測(cè)試用例的冗余判斷精確度較低. Koochakzadeh 等[4]建議應(yīng)該使用更多樣化的覆蓋率準(zhǔn)則進(jìn)行更細(xì)致的冗余指標(biāo)計(jì)算. Marijan 等[5]提出了一種方法, 即在高度可配置軟件的持續(xù)集成測(cè)試環(huán)節(jié)中, 使用配置選項(xiàng)覆蓋率指標(biāo)和歷史的缺陷信息作為冗余指標(biāo), 將所有測(cè)試用例分為“完全冗余”“部分冗余”和“不冗余”這3 類, 刪除“完全冗余”的測(cè)試用例, 保留“不冗余”的測(cè)試用例, 并根據(jù)是否發(fā)現(xiàn)新的缺陷, 對(duì)“部分冗余”的測(cè)試用例進(jìn)行選擇性的保留. 實(shí)驗(yàn)結(jié)果顯示, 該方法能夠在不明顯降低測(cè)試套件的缺陷檢測(cè)能力的情況下, 有效地縮短回歸測(cè)試環(huán)節(jié)的測(cè)試執(zhí)行時(shí)間.

      Koochakzadeh 等[4]與Marijan 等[5]提到的方法能夠在一定程度上對(duì)套件的冗余程度進(jìn)行度量, 但仍具有提升空間. Koochakzadeh 等[4]的方法雖然所使用的覆蓋項(xiàng)信息具有較細(xì)的粒度, 但是對(duì)測(cè)試用例進(jìn)行冗余判斷時(shí)的粒度較粗; Marijan 等[5]的方法將所有測(cè)試用例分為3 種類型, 但是對(duì)于同一種類型的測(cè)試用例, 缺乏更細(xì)粒度的區(qū)分, Marijan 等[5]的方法使用到了歷史缺陷信息, 這是一種較為難以獲取的數(shù)據(jù), 限制了該方法的適用性.

      1.2 測(cè)試用例生成方法: FACTS 和FinExpert

      本文研究的金融科技軟件在測(cè)試過程中使用了FACTS[2]和FinExpert[3]這兩種測(cè)試用例生成方法.

      FACTS 是一種黑盒的測(cè)試用例生成方法, 其通過對(duì)已有測(cè)試套件進(jìn)行變異操作, 隨機(jī)刪除、修改測(cè)試用例的部分字段值, 從而快速生成大量的測(cè)試用例. 其優(yōu)點(diǎn)在于: ①能夠在已有測(cè)試用例數(shù)量較少的情況下, 生成大量新的測(cè)試用例; ②所生成的測(cè)試套件能夠達(dá)到較高的代碼覆蓋率. 其缺點(diǎn)在于:①由于涉及隨機(jī)變異操作, 所生成的測(cè)試用例可能不滿足被測(cè)程序的約束條件, 進(jìn)而可能在測(cè)試執(zhí)行時(shí)觸發(fā)異常, 生成無意義的測(cè)試用例, 無法保證可用性; ②經(jīng)過實(shí)踐檢驗(yàn), FACTS 測(cè)試用例生成方法會(huì)生成大量無意義的測(cè)試用例.

      FinExpert 基于領(lǐng)域特定知識(shí), 使用領(lǐng)域特定語言 (Domain Specific Language, DSL), 根據(jù)預(yù)先定義的字段類型、字段取值范圍、字段約束條件等信息, 生成大量符合領(lǐng)域特定知識(shí)的測(cè)試用例. 其優(yōu)點(diǎn)在于: 由于使用到了領(lǐng)域特定知識(shí), 因此所生成的測(cè)試用例能夠有效地滿足被測(cè)程序的約束條件,不容易觸發(fā)異常, 避免生成無意義的測(cè)試用例. 其缺點(diǎn)在于: ①人工成本較高, 只有懂得業(yè)務(wù)邏輯與程序邏輯的領(lǐng)域?qū)<? 才有能力編寫領(lǐng)域特定知識(shí)信息; ②所生成的測(cè)試套件的質(zhì)量高低, 取決于領(lǐng)域特定知識(shí)信息的準(zhǔn)確與否. 在使用FinExpert 時(shí), 為了生成高質(zhì)量的測(cè)試套件, 準(zhǔn)確而有效的領(lǐng)域特定知識(shí)信息是必要的.

      2 方 法

      2.1 樣 例

      軟件程序的代碼覆蓋率, 是軟件測(cè)試中的一種常用度量指標(biāo), 用于描述測(cè)試用例被執(zhí)行的代碼數(shù)量占源代碼總量的比例. 覆蓋項(xiàng)是覆蓋率準(zhǔn)則的單位. 不同的覆蓋率準(zhǔn)則, 具有不同的覆蓋項(xiàng)類型, 例如行覆蓋率指標(biāo)使用代碼行作為覆蓋項(xiàng), 分支覆蓋率指標(biāo)使用代碼分支作為覆蓋項(xiàng). 代碼覆蓋率信息,能夠作為測(cè)試用例冗余程度量化的依據(jù).

      為了直觀地展示代碼覆蓋項(xiàng)對(duì)于測(cè)試冗余的影響, 本節(jié)給出一個(gè)樣例, 該樣例取自金融科技軟件Bcbip 的代碼片段. 圖1 給出了樣例程序的簡(jiǎn)化代碼, 其中只保留主要的代碼邏輯結(jié)構(gòu), 已對(duì)類名、方法名與變量名進(jìn)行混淆, 并標(biāo)注出了6 個(gè)覆蓋項(xiàng). 圖2 給出了樣例程序的流程圖. 該程序只包含3 條可行的執(zhí)行路徑, 每一條執(zhí)行路徑都具有獨(dú)特的覆蓋項(xiàng), 而這些獨(dú)特的覆蓋項(xiàng)(覆蓋項(xiàng)2、覆蓋項(xiàng)4 和覆蓋項(xiàng)5)僅被一條路徑覆蓋, 部分覆蓋項(xiàng)(覆蓋項(xiàng)1、覆蓋項(xiàng)3 和覆蓋項(xiàng)6)至少被2 條執(zhí)行路徑覆蓋,部分覆蓋項(xiàng)(覆蓋項(xiàng)1 和覆蓋項(xiàng)6)被所有的路徑覆蓋. 獨(dú)特覆蓋項(xiàng)具有特殊價(jià)值, 如果獨(dú)特覆蓋項(xiàng)被覆蓋, 所對(duì)應(yīng)的路徑必定被執(zhí)行.

      圖1 樣例程序的簡(jiǎn)化代碼Fig. 1 Simplified source code of the working example

      圖2 樣例程序的流程圖Fig. 2 Flow chart of the working example

      表1 給出了第一個(gè)測(cè)試套件, 包含測(cè)試用例與覆蓋項(xiàng)的覆蓋信息. 該測(cè)試套件包含3 條不冗余的測(cè)試用例, 每條用例分別執(zhí)行了不同的路徑. 根據(jù)覆蓋到覆蓋項(xiàng)的測(cè)試用例數(shù)量, 能夠判斷該覆蓋項(xiàng)的冗余程度. 對(duì)于所有覆蓋項(xiàng)來說: ① 獨(dú)特覆蓋項(xiàng) (不冗余覆蓋項(xiàng)), 指僅被1 條測(cè)試用例覆蓋到的覆蓋項(xiàng), 使用“0”來表示; ② 冗余覆蓋項(xiàng), 指至少被兩條測(cè)試用例覆蓋到的覆蓋項(xiàng), 使用“1”來表示; ③ 未被覆蓋到的覆蓋項(xiàng), 指未被任何測(cè)試用例覆蓋到的覆蓋項(xiàng), 使用“#”來表示.

      表1 第一個(gè)測(cè)試套件的信息Tab. 1 Information about test suite No.1

      對(duì)于測(cè)試用例來說, 當(dāng)一條測(cè)試用例覆蓋了獨(dú)特覆蓋項(xiàng), 那么這條測(cè)試用例是不冗余的; 當(dāng)一條測(cè)試用例僅覆蓋了冗余覆蓋項(xiàng), 沒有覆蓋任何獨(dú)特覆蓋項(xiàng), 那么這條測(cè)試用例是冗余的.

      分析表1 中數(shù)據(jù)可知, 3 條測(cè)試用例都覆蓋到獨(dú)特覆蓋項(xiàng), 因此所有測(cè)試用例都是不冗余的.

      表2 給出了第二個(gè)測(cè)試套件. 該套件在表1 的基礎(chǔ)上, 增加了測(cè)試用例4. 測(cè)試用例4 與測(cè)試用例3 是完全相同的, 從直觀上來說, 這兩條測(cè)試用例應(yīng)該是冗余的. 重新統(tǒng)計(jì)所有覆蓋項(xiàng)的冗余情況, 可以發(fā)現(xiàn): 覆蓋項(xiàng)5 從獨(dú)特覆蓋項(xiàng)變?yōu)槿哂喔采w項(xiàng), 進(jìn)而導(dǎo)致測(cè)試用例3 與測(cè)試用例4 都沒有覆蓋任何獨(dú)特覆蓋項(xiàng), 變?yōu)槿哂鄿y(cè)試用例.

      表2 第二個(gè)測(cè)試套件的信息Tab. 2 Information about test suite No.2

      分析表1—2 可知, 覆蓋項(xiàng)的冗余信息能夠反映測(cè)試用例的冗余情況. 受此啟發(fā), 本文使用覆蓋率指標(biāo)信息對(duì)測(cè)試冗余進(jìn)行分析, 從而提出測(cè)試冗余的有效量化方法.

      2.2 最佳覆蓋項(xiàng)測(cè)試冗余指標(biāo)

      本節(jié)提出最佳覆蓋項(xiàng)測(cè)試冗余指標(biāo)MVI, 該指標(biāo)使用覆蓋率信息來衡量測(cè)試套件冗余程度. 如圖3 所示, MVI 指標(biāo)分為3 個(gè)部分: 覆蓋項(xiàng)冗余、測(cè)試用例冗余和測(cè)試套件冗余. 本節(jié)詳細(xì)介紹每個(gè)部分的計(jì)算公式.

      圖3 MVI 冗余指標(biāo)的框架圖Fig. 3 Frame diagram of the MVI redundancy metric

      2.2.1 覆蓋項(xiàng)冗余

      MVI 指標(biāo)基于代碼覆蓋率進(jìn)行計(jì)算. 根據(jù)覆蓋項(xiàng)被整個(gè)測(cè)試套件覆蓋的情況, 將覆蓋項(xiàng)分為多種類型.① 未覆蓋覆蓋項(xiàng): 不被任何測(cè)試用例覆蓋, 不冗余, 不提升覆蓋率; ② 獨(dú)特覆蓋項(xiàng): 僅被一條測(cè)試用例覆蓋, 不冗余, 提升覆蓋率; ③ 冗余覆蓋項(xiàng): 至少被兩條測(cè)試用例覆蓋, 存在冗余, 提升覆蓋率.

      在計(jì)算覆蓋項(xiàng)冗余時(shí), MVI 指標(biāo)只考慮被測(cè)試用例覆蓋到的覆蓋項(xiàng), 即只考慮“獨(dú)特覆蓋項(xiàng)”與“冗余覆蓋項(xiàng)”, 而忽略“未覆蓋覆蓋項(xiàng)”.

      定義1 覆蓋項(xiàng)冗余值:

      覆蓋項(xiàng)冗余值反映覆蓋項(xiàng)的冗余情況, 其計(jì)算方式如式(1)所示. 式(1)中:I表示一個(gè)覆蓋項(xiàng),NI表示測(cè)試套件中覆蓋了I的測(cè)試用例的數(shù)量. 當(dāng)一個(gè)覆蓋項(xiàng)的冗余值等于0 時(shí), 表示該覆蓋項(xiàng)僅被1 條測(cè)試用例覆蓋到, 是不冗余的; 當(dāng)一個(gè)覆蓋項(xiàng)的冗余值大于0 時(shí), 表示該覆蓋項(xiàng)至少被兩條測(cè)試用例覆蓋到, 是冗余的. 覆蓋項(xiàng)冗余值雖然不能直觀地反映測(cè)試冗余情況, 但是該指標(biāo)能夠用于計(jì)算測(cè)試用例的冗余指標(biāo)以及測(cè)試套件的冗余指標(biāo).

      2.2.2 測(cè)試用例冗余

      根據(jù)測(cè)試用例對(duì)覆蓋項(xiàng)的覆蓋情況, 將測(cè)試用例分為多種類型.

      獨(dú)特測(cè)試用例: 當(dāng)一條測(cè)試用例覆蓋到獨(dú)特覆蓋項(xiàng)時(shí), 它是獨(dú)特的、不冗余的, 這條測(cè)試用例對(duì)于覆蓋率具有不可替代的貢獻(xiàn); 如果一條獨(dú)特測(cè)試用例被刪除, 測(cè)試套件的整體覆蓋率將下降.

      非獨(dú)特測(cè)試用例: 當(dāng)一條測(cè)試用例無法覆蓋到獨(dú)特覆蓋項(xiàng)時(shí), 它是冗余的, 這條測(cè)試用例能夠被替代; 如果一條非獨(dú)特測(cè)試用例被刪除, 并不影響測(cè)試套件的整體覆蓋率.

      獨(dú)特測(cè)試用例是不冗余的, 而非獨(dú)特測(cè)試用例是冗余的. 對(duì)于一條非獨(dú)特測(cè)試用例, 如果它所覆蓋到的覆蓋項(xiàng)的冗余程度越小, 那么它的不可替代性越強(qiáng), 更有可能在其他測(cè)試用例被削減時(shí)變?yōu)楠?dú)特測(cè)試用例. 因此, MVI 指標(biāo)認(rèn)為冗余值更小的覆蓋項(xiàng)具有更高的價(jià)值.

      定義2 測(cè)試用例冗余值:

      式(2)中:C表示一條測(cè)試用例,I表示C所覆蓋到的覆蓋項(xiàng),RI表示覆蓋項(xiàng)I的冗余值. MVI 指標(biāo)優(yōu)先統(tǒng)計(jì)一條測(cè)試用例所覆蓋到的所有覆蓋項(xiàng), 并取覆蓋項(xiàng)冗余值的最小值作為測(cè)試用例冗余值. 測(cè)試用例冗余值直接反映了每一條測(cè)試用例的冗余情況, 能夠指導(dǎo)測(cè)試人員對(duì)測(cè)試用例進(jìn)行篩選、排序,也能夠用于指導(dǎo)科研人員對(duì)測(cè)試用例削減算法進(jìn)行研究.

      2.2.3 測(cè)試套件冗余

      定義3 測(cè)試套件冗余值:

      式(3)中:S表示測(cè)試套件,C表示S所包含的測(cè)試用例,RC表示測(cè)試用例C的冗余值. 測(cè)試套件冗余值取測(cè)試用例冗余值的均值, 該指標(biāo)能夠直觀地顯示出整個(gè)測(cè)試套件的冗余程度. 對(duì)于測(cè)試人員來說, 如果一個(gè)測(cè)試套件的冗余值過大, 則需要考慮對(duì)測(cè)試套件進(jìn)行削減.

      2.3 有效性分析方法

      針對(duì)測(cè)試冗余指標(biāo)的有效性, 目前學(xué)術(shù)界沒有較為直觀而有效的驗(yàn)證方法. 在以往的研究[4-5]中往往將冗余指標(biāo)作為一個(gè)中間量, 只對(duì)測(cè)試用例削減算法的有效性進(jìn)行驗(yàn)證, 而不對(duì)冗余指標(biāo)的有效性進(jìn)行驗(yàn)證. 對(duì)于測(cè)試用例削減算法來說, 測(cè)試冗余指標(biāo)的有效性是必要的, 因此本文提出推論: 如果測(cè)試用例削減算法是有效的, 則該削減算法所使用的測(cè)試冗余指標(biāo)必然是有效的.

      根據(jù)以上推論, 本節(jié)在MVI 指標(biāo)的基礎(chǔ)上, 提出了MVIR 測(cè)試用例削減算法. 通過驗(yàn)證MVIR 的有效性, 能夠從側(cè)面驗(yàn)證MVI 指標(biāo)的有效性.

      2.3.1 MVIR 測(cè)試用例削減算法

      為了評(píng)價(jià)MVI 指標(biāo)的有效性, 本文提出一種基于貪心策略的測(cè)試用例削減算法MVIR. MVIR 流程見算法1.

      算法1 MVIR So輸入: 未削減的測(cè)試套件 ; 冗余容忍度T輸出: 削減后的測(cè)試套件Sr 1: S ←So 2: Do:S 3: 計(jì)算 中每條測(cè)試用例的冗余值4: Rmax ← S 中測(cè)試用例冗余值的最大值5: S ←將 S 中冗余值最大的測(cè)試用例剔除Rmax 6: While > T 7: Sr ←S 8: ReturnSr

      MVIR 具有一個(gè)額外的輸入?yún)?shù), 稱為冗余容忍度, 記為T. 冗余容忍度的取值必須是非負(fù)整數(shù).MVIR 允許削減后的測(cè)試套件中保留一定程度的冗余, 并且通過調(diào)整冗余容忍度來控制所保留的冗余因素多少, 從而獲得更好的測(cè)試質(zhì)量. 當(dāng)選取冗余容忍度為0 時(shí), MVIR 能夠保證削減后不存在冗余的測(cè)試用例. 隨著冗余容忍度的增大, 所保留的冗余因素將增多.

      MVIR 的流程: ①根據(jù)測(cè)試用例冗余值, 將所有測(cè)試用例進(jìn)行排序. ②刪除冗余值最大的測(cè)試用例. ③對(duì)于剩余的測(cè)試用例, 判斷是否所有的測(cè)試用例冗余值都不大于冗余容忍度. 若不是, 則重復(fù)算法1 中的第1 至第3 步; 若是, 則MVIR 執(zhí)行結(jié)束, 使用剩余的測(cè)試用例組成新的測(cè)試套件.

      2.3.2 測(cè)試冗余指標(biāo)有效性驗(yàn)證

      根據(jù)測(cè)試冗余的定義[5], 如果能夠從測(cè)試套件中刪除一部分測(cè)試用例, 并且不對(duì)測(cè)試套件的質(zhì)量造成影響, 那么測(cè)試套件中必然存在一定的冗余因素. 因此, 在保證測(cè)試質(zhì)量不變或者測(cè)試質(zhì)量損耗較低的前提下, 如果能夠從測(cè)試套件中刪除越多的測(cè)試用例, 則說明測(cè)試用例削減算法的效果越好,并且能夠從側(cè)面證實(shí)該測(cè)試用例削減算法所使用的測(cè)試用例冗余指標(biāo)同樣具有較好的效果.

      本文使用變異測(cè)試方法對(duì)測(cè)試套件的質(zhì)量進(jìn)行評(píng)估, 該方法被廣泛用于衡量測(cè)試套件質(zhì)量[13]. 變異測(cè)試方法通過特定的方式對(duì)被測(cè)程序的源代碼進(jìn)行修改, 從而注入缺陷, 分析測(cè)試套件是否能夠有效地檢測(cè)出所注入的缺陷, 進(jìn)而對(duì)測(cè)試套件的質(zhì)量進(jìn)行評(píng)估. 每一個(gè)被注入缺陷的源代碼版本被稱為變異體, 每個(gè)變異體中僅存在一個(gè)特定的缺陷. 在對(duì)變異體的測(cè)試過程中, 如果測(cè)試用例的斷言失敗,則說明測(cè)試套件能夠“殺死”該變異體. “變異分?jǐn)?shù)”指測(cè)試套件能夠殺死的變異體數(shù)量與所有變異體數(shù)量的比值, 變異分?jǐn)?shù)越大, 則說明測(cè)試套件的測(cè)試質(zhì)量越高.

      對(duì)于MVI 指標(biāo)有效性的具體證明過程如下: ①針對(duì)同一個(gè)測(cè)試套件, 選取不同的冗余容忍度, 使用MVIR 進(jìn)行不同程度的削減操作, 得到多個(gè)削減測(cè)試套件; ②對(duì)于被MVIR 削減前后的測(cè)試套件,使用變異測(cè)試方法計(jì)算變異分?jǐn)?shù), 評(píng)估“測(cè)試質(zhì)量”; ③對(duì)于被MVIR 削減前后的測(cè)試套件, 統(tǒng)計(jì)測(cè)試用例數(shù)量變化情況, 評(píng)估“削減程度”; ④如果“測(cè)試質(zhì)量”與“削減程度”越高, 則證明MVIR 與MVI 指標(biāo)越有效.

      3 實(shí) 驗(yàn)

      3.1 實(shí)驗(yàn)設(shè)置

      3.1.1 被測(cè)對(duì)象

      在實(shí)驗(yàn)階段使用金融科技軟件下的Bcbip 構(gòu)件進(jìn)行, Bcbip 的主要功能是根據(jù)發(fā)行信息、訂單信息以及配售約束信息等輸入信息, 計(jì)算并輸出配售結(jié)果. Bcbip 具有3 個(gè)測(cè)試接口, 每個(gè)測(cè)試接口都有一個(gè)所對(duì)應(yīng)的測(cè)試套件, 對(duì)于每個(gè)測(cè)試套件, 由人工方法生成的測(cè)試用例數(shù)以及分支覆蓋率信息如表3 所示.

      表3 Bcbip 基本信息Tab. 3 Basic information about Bcbip

      3.1.2 測(cè)試套件

      本文使用FinExpert 和FACTS 進(jìn)行實(shí)驗(yàn). 表4 展示了由人工方法、FinExpert 與FACTS 生成的測(cè)試套件中的測(cè)試用例數(shù), 圖4 展示了三者的分支覆蓋率信息.

      圖4 由人工方法、FinExpert 和FACTS 得到的分支覆蓋率信息Fig. 4 Branch coverage generated by the manual, FinExpert, and FACTS methods

      表4 由人工方法、FinExpert 和FACTS 生成的測(cè)試用例數(shù)Tab. 4 Number of test cases generated by the manual, FinExpert, and FACTS methods

      觀察測(cè)試用例數(shù). 由人工方法生成的測(cè)試用例數(shù)量最少, 遠(yuǎn)少于兩種自動(dòng)化生成方法. 由FinExpert 生成的測(cè)試用例數(shù)是人為給定的, 為了取得較高的測(cè)試質(zhì)量, 對(duì)每個(gè)測(cè)試接口都生成1 000條測(cè)試用例. 由FACTS 生成的測(cè)試用例數(shù)與測(cè)試用例的復(fù)雜程度有關(guān), 對(duì)越復(fù)雜的測(cè)試接口,FACTS 所生成的測(cè)試用例數(shù)越多. FinExpert 和FACTS 所能生成的測(cè)試用例數(shù)具有相同的數(shù)量級(jí).

      分析覆蓋率信息. 在3 種方法中, FACTS 對(duì)于所有接口均能得到最高的分支覆蓋率; 對(duì)于接口api1 和api3, FinExpert 能得到優(yōu)于人工方法的分支覆蓋率; 對(duì)于接口api2, 在3 種方法中, FinExpert所得到的分支覆蓋率最低.

      FinExpert 對(duì)于接口api2 的測(cè)試效果不佳, 其根本原因在于: 接口api2 具有較為復(fù)雜的約束條件,而當(dāng)使用FinExpert 對(duì)接口api2 編寫的領(lǐng)域特定知識(shí)信息時(shí), 無法滿足一部分約束條件, 進(jìn)而導(dǎo)致部分的測(cè)試用例在執(zhí)行時(shí)觸發(fā)異常信息, 生成了較多無意義的測(cè)試用例. 由于FinExpert 針對(duì)接口api2 生成的測(cè)試套件存在可用性問題, 因此在實(shí)驗(yàn)結(jié)果的分析階段, 不考慮與其相關(guān)的數(shù)據(jù).

      3.2 冗余指標(biāo)有效性驗(yàn)證實(shí)驗(yàn)

      冗余指標(biāo)有效性驗(yàn)證實(shí)驗(yàn)分為兩個(gè)部分: 第一部分, 對(duì)削減前后生成的測(cè)試套件的質(zhì)量進(jìn)行分析;第二部分, 對(duì)削減前后生成的測(cè)試用例的數(shù)量進(jìn)行分析.

      對(duì)于實(shí)驗(yàn)的第一部分, 本文使用PIT[14]變異測(cè)試工具對(duì)測(cè)試套件的質(zhì)量進(jìn)行分析.

      本節(jié)的實(shí)驗(yàn)對(duì)MVIR 的冗余容忍度選取了5 個(gè)值: 10、5、2、1 和0. 因此, 對(duì)于每個(gè)給定的接口和測(cè)試用例生成方法, 將產(chǎn)生5 個(gè)不同的削減測(cè)試套件, 以比較不同削減程度下的質(zhì)量差異.

      3.2.1 測(cè)試質(zhì)量評(píng)估

      圖5 列出了削減后測(cè)試套件的變異分?jǐn)?shù). 圖例中的“原始”代表未經(jīng)過MVIR 削減的測(cè)試套件,T10、T5、T2、T1和T0分別代表取冗余容忍度為10、5、2、1、0 時(shí)的MVIR 削減后所得到的測(cè)試套件.

      圖5 削減后測(cè)試套件的變異分?jǐn)?shù)Fig. 5 Mutation score of the reduced suite

      為了更直觀地展示測(cè)試質(zhì)量在削減前后的差異, 使用式 (4) 對(duì)變異分?jǐn)?shù)的相對(duì)損失進(jìn)行計(jì)算.

      圖6 列出了削減后測(cè)試套件的變異分?jǐn)?shù)損失, 即性能損失. 從圖6 中能夠看出, 只有FinExpert(對(duì)于接口api2)所得到的性能損失較高, 其余測(cè)試套件的性能損失均小于9.20%, 由人工方法生成的測(cè)試用例經(jīng)過削減之后, 性能損失都小于5.26%. MVIR 整體上不對(duì)測(cè)試套件的性能產(chǎn)生較大的影響.

      圖6 削減后測(cè)試套件的變異分?jǐn)?shù)損失Fig. 6 Mutation score loss of the reduced suite

      3.2.2 測(cè)試用例數(shù)量評(píng)估

      表5 列出了所有測(cè)試套件經(jīng)過MVIR 削減前后的測(cè)試用例數(shù)量, 其中“原始”代表未經(jīng)過MVIR 削減的測(cè)試套件,T10、T5、T2、T1和T0分別代表取冗余容忍度為10、5、2、1、0 時(shí)MVIR 削減后所得到的測(cè)試套件.

      表5 所有測(cè)試套件經(jīng)過MVIR 削減前后的測(cè)試用例數(shù)Tab. 5 Number of test cases for the MVIR reduced and original test suites

      圖7 展示了削減后的測(cè)試套件的測(cè)試用例數(shù)量. 分析表5 與圖7 的數(shù)據(jù)可知, 未經(jīng)削減的FinExpert 測(cè)試套件和FACTS 測(cè)試套件的測(cè)試用例數(shù)量范圍為 [820,1804] , 而由人工方法生成的測(cè)試用例的數(shù)量范圍為 [10,22] , 數(shù)量相差較大; 但是經(jīng)過削減的FinExpert 的T10、T5、T2、T1和T0的測(cè)試用例數(shù)量范圍都為 [2,19] , FACTS 的T2、T1和T0的測(cè)試用例數(shù)量范圍都為 [11,23] , 這些削減后的測(cè)試套件具有與人工方法生成的測(cè)試套件相似的測(cè)試用例數(shù)量, 可以認(rèn)為這些削減后的結(jié)果達(dá)到了與人工方法生成的測(cè)試用例相同的數(shù)量級(jí).

      圖7 削減后測(cè)試套件的測(cè)試用例數(shù)Fig. 7 Number of test cases for the reduced suite

      為了更直觀地展示測(cè)試用例數(shù)量在削減前后的差異, 使用式 (5) 對(duì)測(cè)試用例數(shù)量的削減比例進(jìn)行計(jì)算.

      式 (5) 中:Sr表示削減后的測(cè)試套件,So表示未削減的測(cè)試套件,NSo(NSr) 表示測(cè)試套件So(Sr) 的測(cè)試用例數(shù)量.

      圖8 列出了所有測(cè)試套件經(jīng)過MVIR 削減后的測(cè)試用例削減比例信息. 分析數(shù)據(jù)可知, 對(duì)于FinExpert 和FACTS, 所有測(cè)試套件的測(cè)試用例削減比例都在89.88%以上; 對(duì)于FinExpert 和FACTS 的T0測(cè)試套件, 即經(jīng)過MVIR 削減后不包含冗余因素的測(cè)試套件, 測(cè)試用例削減比例都在98.66%以上. 結(jié)果顯示MVIR 能剔除大部分的冗余測(cè)試用例, 同時(shí)有效消解了測(cè)試套件中的冗余因素.

      圖8 測(cè)試套件經(jīng)過MVIR 削減后的測(cè)試用例削減比例Fig. 8 Test case reduction ratios for the MVIR reduced suite

      3.2.3 小 結(jié)

      使用MVIR 進(jìn)行測(cè)試用例削減, 能夠在測(cè)試性能損失較低 (小于9.20%) 的前提下, 達(dá)到較高的測(cè)試用例削減比例 (大于89.88%). 該實(shí)驗(yàn)結(jié)果證明MVIR 能夠有效地消解冗余因素, 同時(shí)從側(cè)面證明MVI 指標(biāo)能夠有效地反映測(cè)試冗余的程度.

      3.3 測(cè)試用例生成方法的冗余分析

      本節(jié)使用MVI 指標(biāo)探究測(cè)試用例生成方法的冗余情況. 表6 展示了由人工方法、FinExpert 和FACTS 這3 種方法所生成的原始測(cè)試套件的冗余值. 由人工方法、FinExpert 和FACTS 所生成的測(cè)試套件的平均冗余值分別為5.32、636.94 和336.15, FinExpert 和FACTS 所產(chǎn)生的冗余程度均遠(yuǎn)高于由人工方法所產(chǎn)生的冗余程度. 實(shí)驗(yàn)數(shù)據(jù)表明, FinExpert 和FACTS 這兩種方法在自動(dòng)化生成測(cè)試用例的同時(shí), 引入了較多的冗余因素. 在使用此類自動(dòng)化測(cè)試用例生成方法時(shí), 應(yīng)該對(duì)測(cè)試冗余問題予以重視.

      表6 人工方法、FinExpert 和FACTS 的原始測(cè)試套件的測(cè)試套件冗余Tab. 6 Suite redundancy for the original test suites of manual, FinExpert and FACTS

      表7 展示了所有測(cè)試套件經(jīng)過MVIR 削減前后的冗余值. 分析數(shù)據(jù)可知, 當(dāng)冗余容忍度小于等于10 時(shí), FinExpert 和FACTS 所生成的測(cè)試套件經(jīng)過MVIR 削減后都能夠獲得與未經(jīng)過削減的由人工方法生成的測(cè)試套件相當(dāng)?shù)娜哂嘀? 由此可見, 將測(cè)試用例生成方法和測(cè)試用例削減算法相結(jié)合, 能夠自動(dòng)化地生成高質(zhì)量、低冗余的測(cè)試套件.

      表7 所有測(cè)試套件經(jīng)過MVIR 削減前后的測(cè)試套件冗余Tab. 7 Suite redundancy for the original and reduced test suites

      3.4 冗余容忍度的選取

      在實(shí)際應(yīng)用中, 冗余容忍度的選擇直接影響MVIR 的實(shí)際效果: 減小冗余容忍度, 能夠提高測(cè)試套件的削減比例, 但是將會(huì)降低測(cè)試質(zhì)量; 合適的冗余容忍度能夠?qū)ο鳒p比例與測(cè)試質(zhì)量進(jìn)行有效的權(quán)衡.

      在選取冗余容忍度時(shí), 本文建議遵守以下原則.

      (1) 如果測(cè)試環(huán)境允許進(jìn)行變異測(cè)試, 并且能夠接受變異測(cè)試的時(shí)間成本, 則建議使用變異測(cè)試方法來指導(dǎo)冗余容忍度的取值. 在保證測(cè)試質(zhì)量的前提下, 應(yīng)選取盡可能小的冗余容忍度. 使用測(cè)試套件中測(cè)試用例的數(shù)量作為冗余容忍度的初始值, 并且不斷減小冗余容忍度, 使用MVIR 對(duì)測(cè)試套件進(jìn)行削減, 同時(shí)使用變異測(cè)試方法計(jì)算削減后測(cè)試套件的變異分?jǐn)?shù). 在理想情況下, 當(dāng)冗余容忍度從初始值不斷減小時(shí), 冗余程度較高的測(cè)試用例被優(yōu)先剔除, 不會(huì)降低測(cè)試質(zhì)量, 因此變異分?jǐn)?shù)不發(fā)生改變; 當(dāng)冗余容忍度減小到一定程度時(shí), 所保留的測(cè)試用例已經(jīng)具備足夠的測(cè)試質(zhì)量, 如果繼續(xù)減小冗余容忍度將會(huì)導(dǎo)致測(cè)試質(zhì)量下降, 這種情況下的冗余容忍度是最佳的.

      (2) 如果原則 (1) 并不適用, 被測(cè)程序本身具有由人工方法生成的測(cè)試套件, 并且該測(cè)試套件具備一定的參考價(jià)值, 則建議使用該測(cè)試套件來指導(dǎo)冗余容忍度的取值, 保證削減后的測(cè)試套件與人工測(cè)試套件具有較為接近的冗余程度. 首先使用MVI 指標(biāo)計(jì)算人工測(cè)試套件的冗余值, 將該冗余值作為冗余容忍度的初始值, 并且不斷增大冗余容忍度, 同時(shí)使用MVIR 對(duì)測(cè)試套件進(jìn)行削減. 當(dāng)削減后的測(cè)試套件的冗余值與人工測(cè)試套件冗余值大致相等時(shí), 則所對(duì)應(yīng)的冗余容忍度的取值是較為合適的.

      (3) 如果原則(1) 與 (2) 均不適用, 則建議使用經(jīng)驗(yàn)值來確定冗余容忍度. 在實(shí)際的軟件項(xiàng)目中,往往難以使用變異測(cè)試方法, 并且不能保證被測(cè)程序已具有合適的人工測(cè)試套件. 在這種情況下, 只能依據(jù)其他軟件項(xiàng)目的經(jīng)驗(yàn)來指導(dǎo)冗余容忍度的取值. 針對(duì)相關(guān)項(xiàng)目或者開源項(xiàng)目, 使用原則 (1) 或者原則(2) 計(jì)算冗余容忍度, 計(jì)算所得到的冗余容忍度也是具有參考意義的. 本文根據(jù)實(shí)驗(yàn)部分的數(shù)據(jù), 給出冗余容忍度的經(jīng)驗(yàn)值: FinExpert 的冗余容忍度建議設(shè)置為10, FACTS 的冗余容忍度建議設(shè)置為5.

      4 有效性威脅

      外部有效性. 實(shí)驗(yàn)部分所使用到的被測(cè)程序只有1 個(gè), 數(shù)量較少, 可能缺乏代表性. 本文的工作主要關(guān)注金融科技領(lǐng)域的軟件測(cè)試, 希望通過選取實(shí)際的工業(yè)軟件進(jìn)行實(shí)驗(yàn), 從而提高外部有效性. 然而, 由于金融科技領(lǐng)域的軟件對(duì)于軟件開發(fā)流程的安全性具有較高要求, 導(dǎo)致實(shí)驗(yàn)中能夠獲取到的樣本程序數(shù)量非常有限. 期望在后期的工作中能夠從合作機(jī)構(gòu)獲取更多的工業(yè)軟件, 進(jìn)一步檢驗(yàn)本文所提出方法的實(shí)際效果, 獲取更加豐富的實(shí)驗(yàn)數(shù)據(jù).

      內(nèi)部有效性. 第一, 測(cè)試冗余的概念較為抽象, 本文對(duì)抽象的測(cè)試冗余指標(biāo)進(jìn)行量化, 可能與業(yè)界的已有認(rèn)知之間存在一定的偏差. 第二, 本文推斷MVIR 的有效性能夠充分說明MVI 指標(biāo)的有效性,但是無法保證不存在例外情況.

      5 結(jié) 論

      本文針對(duì)金融科技領(lǐng)域的軟件測(cè)試, 提出了一種基于最佳覆蓋項(xiàng)的冗余評(píng)價(jià)指標(biāo)MVI, 用于對(duì)測(cè)試套件的冗余因素進(jìn)行量化分析. 為了驗(yàn)證MVI 指標(biāo)的有效性, 本文在MVI 指標(biāo)的基礎(chǔ)上提出了MVIR 測(cè)試用例削減方法. 實(shí)驗(yàn)部分使用了金融科技領(lǐng)域的軟件進(jìn)行探究, 結(jié)果顯示MVIR 能夠在測(cè)試性能損失較低的前提下, 達(dá)到較好的削減效果. 實(shí)驗(yàn)結(jié)果從側(cè)面證明了MVI 指標(biāo)能夠有效反映測(cè)試套件中的冗余因素. 最后, 使用MVI 指標(biāo)分析金融科技領(lǐng)域的自動(dòng)化測(cè)試用例生成方法:FinExpert 和FACTS, 發(fā)現(xiàn)這兩種方法均會(huì)引入較多的冗余因素, 但是如果使用MVI 指標(biāo)來優(yōu)化這兩種方法, 能夠有效地緩解冗余情況, 生成高質(zhì)量的測(cè)試套件.

      猜你喜歡
      容忍度測(cè)試用例套件
      基于維修費(fèi)用的關(guān)鍵部套件分析
      基于SmartUnit的安全通信系統(tǒng)單元測(cè)試用例自動(dòng)生成
      “龍吟套件”創(chuàng)作感悟
      山東陶瓷(2020年5期)2020-03-19 01:35:36
      基于混合遺傳算法的回歸測(cè)試用例集最小化研究
      工業(yè)照明超頻三天棚燈套件改造工程
      模糊容忍度與專門用途英語閱讀水平相關(guān)性研究
      新課程(下)(2016年5期)2016-03-02 03:40:33
      基于依賴結(jié)構(gòu)的測(cè)試用例優(yōu)先級(jí)技術(shù)
      口語產(chǎn)出質(zhì)量與模糊容忍度的相關(guān)研究
      新疆少數(shù)民族大學(xué)生模糊容忍度調(diào)查研究
      CSRmesh開發(fā)套件加速物聯(lián)網(wǎng)產(chǎn)品開發(fā)
      南部县| 长兴县| 华阴市| 龙里县| 青河县| 开封县| 百色市| 东莞市| 磴口县| 新平| 长乐市| 丁青县| 衡水市| 新余市| 鹿泉市| 开远市| 西乌| 巴彦淖尔市| 黑水县| 信宜市| 上饶市| 奉贤区| 黄陵县| 吉木萨尔县| 锡林郭勒盟| 蕉岭县| 宁陕县| 龙南县| 曲周县| 沂水县| 崇义县| 天台县| 开鲁县| 永川市| 普陀区| 平江县| 平塘县| 常宁市| 邯郸县| 巴青县| 裕民县|