陳小雁 李雨江
摘要:為提高軟件測試效率,分析了代碼覆蓋率種類,探討了Java代碼覆蓋率工具ElcEmma的工作原理,并將其應(yīng)用到Ja-va游戲?qū)嵗?。?yīng)用情況表明,ElcEmma能有效地從不同層面定位代碼的覆蓋及未覆蓋情況,幫助開發(fā)人員設(shè)計(jì)出高質(zhì)量的測試用例,有助于保障軟件測試工作的充分性。
關(guān)鍵詞:軟件質(zhì)量;軟件測試;代碼覆蓋率;白盒測試;測試用例
中圖分類號(hào):TP393文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2020)05-0065-02
開放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
隨著現(xiàn)代信息技術(shù)的飛速發(fā)展,軟件普遍深入到人類日常生活的各個(gè)領(lǐng)域,發(fā)揮著重要的作用。與此同時(shí),人們對(duì)軟件質(zhì)量也越來越重視。軟件質(zhì)量是軟件產(chǎn)品的生命線[1]。然而隨著軟件規(guī)模的不斷增長,程序復(fù)雜度不斷提高,由于不合理的設(shè)計(jì)和軟件開發(fā)人員的疏忽而致使軟件中隱藏的缺陷也越來越多,由此引發(fā)的軟件故障給國家、給企業(yè)帶來了不可估量的損失[2]。
在軟件開發(fā)領(lǐng)域中,軟件測試作為保證軟件質(zhì)量的重要手段[3],貫穿于整個(gè)軟件的生命周期,發(fā)揮著越來越重要的作用。統(tǒng)計(jì)表明,在典型的軟件開發(fā)項(xiàng)目中,軟件測試的工作量往往占據(jù)軟件開發(fā)總工作量的40%以上,而在軟件開發(fā)總成本中,用在測試上的開銷高達(dá)30%_40%[4]。為了保證軟件質(zhì)量,通常使用手工測試或自動(dòng)化測試來運(yùn)行并驗(yàn)證某個(gè)應(yīng)用系統(tǒng)的過程是否滿足規(guī)定的需求,并了解預(yù)期結(jié)果和實(shí)際結(jié)果之間的差異。
由于軟件測試工作在軟件生產(chǎn)過程中的重要地位,軟件測試得到了軟件工程研究人員和從業(yè)人員的廣泛關(guān)注,很多軟件自動(dòng)化測試工具應(yīng)運(yùn)而生。根據(jù)測試應(yīng)用的角度的不同,一般可分為白盒測試工具(動(dòng)態(tài)測試,靜態(tài)測試)、黑盒測試工具(功能測試,性能測試)、測試管理(測試流程管理、缺陷跟蹤管理、測試用例管理)等幾大類[5]。這些軟件自動(dòng)化測試工具能提高軟件測試的速度和效率,節(jié)省軟件測試成本,縮短產(chǎn)品發(fā)布周期,同時(shí)可以減少人工干預(yù),避免人為原因給測試工作帶來的誤差,因而在軟件開發(fā)領(lǐng)域得到了廣泛應(yīng)用[6-7]。本文探討了基于白盒測試技術(shù)的軟件自動(dòng)化測試工具ElcEmma的原理和實(shí)際應(yīng)用。
1 代碼覆蓋率分析
在軟件測試工作中,代碼覆蓋測試是測試的底線,能明顯提高軟件的可靠性,從而保證軟件的質(zhì)量[8]。代碼覆蓋測試是軟件白盒測試的主要方法,利用它可在代碼層面定位測試過程中所找出的缺陷,發(fā)現(xiàn)被測程序的邏輯結(jié)構(gòu)異常等缺陷信息,檢驗(yàn)軟件測試充分性,是保證測試質(zhì)量的有效方法之一[9]。該覆蓋測試技術(shù)采用代碼覆蓋率代表被測代碼的覆蓋程度,用于檢驗(yàn)測試的完整性和充分性。代碼覆蓋率由測試過程中已被執(zhí)行過的源代碼的數(shù)目來衡量,其值等于至少被執(zhí)行一次的項(xiàng)目數(shù)/軟件中的項(xiàng)目總數(shù)。
代碼覆蓋程度的度量方式有很多種,如語句覆蓋、判定覆蓋、條件覆蓋和路徑覆蓋等。其中,語句覆蓋用于判斷軟件中的每條可執(zhí)行代碼是否都被執(zhí)行,不考慮分支和條件表達(dá)式的各種組合。判定覆蓋用于判斷軟件中的每一條判定分支是否被執(zhí)行,它把所測試的判定分支作為一個(gè)整體,僅判斷該整體的真假值是否被測試到。條件覆蓋則用于判斷每一條判定分支中的每個(gè)子表達(dá)式(如果存在)的真假值是否被執(zhí)行,但不考慮每個(gè)子表達(dá)式的真假值所構(gòu)成的排列和組合。路徑覆蓋用于判斷函數(shù)的每一個(gè)分支是否都被執(zhí)行,當(dāng)函數(shù)有多個(gè)分支嵌套時(shí),需要對(duì)多個(gè)分支進(jìn)行排列組合。顯然,路徑覆蓋能將所有可能的分支都執(zhí)行一遍,是這四種覆蓋中粒度最細(xì)的覆蓋。
2 ElcEmma工作原理
目前,主流程序開發(fā)語言C、C++、Ja-va、PHP等都有相應(yīng)的代碼覆蓋率工具。其中,ElcEmma是一款基于Emma的Java代碼覆蓋率搜集及報(bào)告生成工具。它以Eclipse插件的形式在工作平臺(tái)中啟動(dòng),提供了很多與Eclipse緊密結(jié)合的功能。它既支持各種不同級(jí)別的代碼覆蓋,也支持與其他技術(shù)集成,因此廣泛應(yīng)用于大型企業(yè)級(jí)別的項(xiàng)目中。
Emma提供了兩種方式來對(duì)被執(zhí)行的代碼進(jìn)行修改,即預(yù)插入模式和即時(shí)插入模式。EcIEmma僅使用了Emma的預(yù)插入模式來工作,即通過Emma定制的Class-loader類載入器對(duì)代碼進(jìn)行修改,而不必提前修改軟件代碼和執(zhí)行任何安裝。El-cEmma能夠直接分析代碼的覆蓋情況并在Java源代碼編輯器中高亮顯示,且能生成詳盡的覆蓋測試報(bào)告,使得開發(fā)人員能夠直觀、簡潔地掌握具體測試結(jié)果。
EcIEmma的具體工作過程為:首先把統(tǒng)計(jì)代碼插入已經(jīng)編譯好的“.class”文件,生成“coverage.em”文件,自動(dòng)搜集軟件中已測試代碼和未測試代碼的具體情況,從而計(jì)算出代碼覆蓋率的各項(xiàng)相關(guān)數(shù)據(jù)。接著在這些代碼覆蓋率數(shù)據(jù)的基礎(chǔ)上生成“coverage. ec”文件。最后根據(jù)coverage. em”文件和“coverage. ec”文件,生成HTML、XML、Text和Emma Session這些不同格式的代碼覆蓋率報(bào)告,以滿足測試人員的多種需要。
3 實(shí)例應(yīng)用
本文應(yīng)用EcIEmma工具對(duì)一個(gè)由JAVA語言開發(fā)的“貪吃蛇”游戲來進(jìn)行代碼覆蓋測試。該游戲包含類和相關(guān)函數(shù)共計(jì)395行。首先設(shè)置測試用例1:一直使用右方向鍵,使蛇往右移動(dòng)直到撞墻導(dǎo)致游戲結(jié)束。對(duì)應(yīng)的EcIEmma代碼覆蓋率報(bào)告如圖1所示。
由圖1可以清楚、準(zhǔn)確地看出整個(gè)類和各個(gè)函數(shù)的代碼覆蓋率、已覆蓋代碼行數(shù)和未覆蓋代碼行數(shù)等信息。其中,整個(gè)SnakxxGame類的覆蓋率為79.2%,而keyPressed函數(shù)的覆蓋率僅為41.5%,該函數(shù)尚有24行代碼未被覆蓋。雙擊圖1中的keyPressed函數(shù),可以深入查看該函數(shù)的具體覆蓋情況,結(jié)果如圖2所示。
EcIEmma軟件將不同的覆蓋情況分別用不同的顏色高亮顯示。圖2中的綠色高亮顯示的代碼已經(jīng)被完全被執(zhí)行,黃色高亮顯示的代碼僅是部分被執(zhí)行,紅色高亮顯示的代碼尚未被執(zhí)行。從圖2可以直觀看出keyPressed函數(shù)未被測試用例1完全覆蓋到的相關(guān)代碼。
針對(duì)該情況,設(shè)置測試用例2:反復(fù)循環(huán)使用上下左右四個(gè)方向鍵,直到蛇撞墻導(dǎo)致游戲結(jié)束。用例2對(duì)應(yīng)的EcIEmma代碼覆蓋率報(bào)告如圖3所示。
由圖3可知,keyPressed函數(shù)達(dá)到1000-/0的覆蓋率,而此時(shí)整個(gè)SnakeGame類的覆蓋率明顯增高,達(dá)到了95.4%。
4 結(jié)束語
本文研究了針對(duì)Java語言的代碼覆蓋率工具ElcEmma的工作原理,并以普及化的“貪吃蛇”游戲?yàn)槔?,根?jù)EclEmma提供的代碼覆蓋率報(bào)告和代碼運(yùn)行結(jié)果,有針對(duì)性地設(shè)置測試用例,顯著提高了游戲的代碼覆蓋率。實(shí)例應(yīng)用結(jié)果表明,El-cEmma工具能有效地從不同層面定位代碼的覆蓋及未覆蓋情況,幫助開發(fā)人員準(zhǔn)確地定位到那些特殊的、只有在特定情況下才被觸發(fā)的代碼,有助于開發(fā)人員設(shè)計(jì)出高質(zhì)量的測試用例,切實(shí)提高軟件代碼覆蓋率,從而為軟件測試的完整性和充分性提供保障。
參考文獻(xiàn):
[1]李舟軍,張俊賢,廖湘科,等.軟件安全漏洞檢測技術(shù)[J].計(jì)算機(jī)學(xué)報(bào),2015,38(4):717-732.
[2]李麗媛,江國華.一種面向軟件缺陷預(yù)測的特征聚類選擇方法[J].計(jì)算技術(shù)與自動(dòng)化,2018,37(2):126-131.
[3]史嬌嬌,姜淑娟,韓寒,等.自適應(yīng)粒子群優(yōu)化算法及其在測試 數(shù)據(jù)生成中的應(yīng)用研究[J].電子學(xué)報(bào),2013,8(8):1555-1559.
[4]劉琪,趙東東.高負(fù)荷條件下MBMS-GW功能測試的研究[J].電子測量技術(shù),2014,37(7):27-31.
[5]鄧青華.軟件自動(dòng)化測試工具研究[Jl.同濟(jì)大學(xué)軟件院,2011,10(1):57-59.
[6]朱少民,軟件測試方法和技術(shù)[M].北京:清華大學(xué)出版社,2014:1-90.
[7]牛璐.手機(jī)軟件自動(dòng)化測試方法研究與應(yīng)用[D].鄭州:信息工程大學(xué),2012.
[8]浦云明,張杰敏,林穎賢.代碼覆蓋測試技術(shù)在MODE-S應(yīng)答機(jī)中的應(yīng)用[J].計(jì)算機(jī)應(yīng)用與軟件,2008,25(7):131-133,148.
[9]馬云云,張弛,王金波,等.嵌入式航天軟件匯編代碼覆蓋測試方案[Jl.航天控制,2017,5(35):68-73.
【通聯(lián)編輯:梁書】
作者簡介:陳小雁(1996-),女,廣東汕頭人,嶺南師范學(xué)院數(shù)學(xué)與統(tǒng)計(jì)學(xué)院本科生,主要研究方向?yàn)檐浖こ?李雨江,通訊作者。