Sci论文 - 至繁归于至简,Sci论文网。 设为首页|加入收藏
当前位置:首页 > 计算机论文 > 正文

基于JaCoCo动态覆盖率测试的分析与应用论文

发布时间:2023-01-29 10:08:18 文章来源:SCI论文网 我要评论














SCI论文(www.lunwensci.com):
 
  摘要:动态覆盖率测试是目前常用的一种测试技术,利用它能直观的从代码层面判断测试完整性和充分性,从而最大程度的发现软件问题。本文针对Java语言的动态覆盖率测试工具JaCoCo进行实践应用,给出具体的测试过程,并分析对测试充分性和完整性的影响。
 
  关键词:软件测试;动态覆盖率测试;逻辑测试
 
  Analysis and Application of JaCoCo Based Dynamic Coverage Test
 
  CHENG Zheng1,LIU Ruijie2,ZHANG Min3,LIU Shuangmei3
 
  (1.The First Military Representative Office of the Naval Equipment Department in Shanghai,Shanghai 202150;2.The 32nd Research Institute of CETC,Shanghai 201808;3.The 707th Research Institute of CSSC,Tianjin 300130)
 
  【Abstract】:Dynamic coverage testing is a commonly used testing technology,which can intuitively judge the integrity and sufficiency of testing from the code level,so as tofind software problems as much as possible.This paper focuses on the practical application of JaCoCo,a dynamic coverage testing tool of Java language,gives the specific testing process,and analyzes the impact of testing adequacy and integrity.
 
  【Key words】:software test;dynamic coverage test;logical test
 
  0概述
 
  在软件测试过程中,软件的测试覆盖率是软件测试技术有效性的一个度量手段,常常使用测试覆盖率来评估测试的充分性和完整性。软件测试的执行过程是将所有的测试项执行完成,执行过的测试项和总测试项数的一个比值,即为测试覆盖率[1]。我们可以用一个简单的公式来表示:
 
  覆盖率(C)=已验证的测试数(Ti)/测试总数(Tn)
 
  因此,通过覆盖率数据评估人员可以有效的判断出一轮测试到底是不是足够充分和完整。
 
  1软件测试覆盖率
 
  对于军用软件而言,软件的测试覆盖率主要是对软需求覆盖情况的体现,而在实际测试过程中,软件的测试覆盖率通常应该包括软件需求的覆盖率和代码的覆盖率两个方面。

\
 
 
  1.1需求覆盖率
 
  软件需求的覆盖率,通常通过建立需求和测试项的对应关系,并以此来计算和评估测试覆盖率。根据测试覆盖率,我们可以用下面公式表示需求覆盖率:
 
  需求覆盖率(Cq)=(被验证到的需求数量Qi)/(总的需求总数Qn)
 
  记作:Cq=Qi/Qn
 
  1.2代码覆盖率
 
  代码覆盖率是指至少执行了一次的条目数(常常包括语句和MC/DC两个方面)占整个条目数的百分比[2]。语句覆盖率是最常用,并且要求最低的一种覆盖率指标,是指已执行的语句占全部可执行语句(不包含代码注释,空行等)的百分比。MC/DC即修正判定/条件覆盖率,需要同时满足判定覆盖和条件覆盖。判定覆盖率,是指每一个判断的分支是否都被覆盖,即代码中的每个判断的取真分支和取假分支是否均覆盖到了最少一次。条件覆盖率是指每一个条件的取值是否都被覆盖,即代码中每个判断条件的取值最少一次覆盖True和False[3]。
 
  测试覆盖率对于黑盒测试,是软件测试执行动态测试过程中通过对软件需求的覆盖率情况和代码覆盖率情况进行统计。本文讨论的动态覆盖率是基于黑盒测试过程进行的一种代码覆盖率统计。
 
  2常用工具
 
  软件产品的规模不断增大,结构复杂,通过人工插桩进行代码覆盖情况统计显得尤为困难,自动化测试工具的出现日益广泛应用于代码覆盖率统计。代码的覆盖率测试工具较多,本文针对Java语言的覆盖率测试工具进行分析和探讨。常用的Java覆盖率测试工具有Emma、Cobertura、JaCoCo、Clover,这些工具均可以通过测试过程程序运行情况自动统计代码的覆盖情况,从而获得代码的覆盖率。
 
  2.1 JaCoCo工具
 
  JaCoCo是一个开源的覆盖率工具,JaCoCo使用方法灵活,可以嵌入到Ant Maven中,也可作为Eclipse插件,可以使用JavaAgent技术监控Java程序等。
 
  2.2 JaCoCo工作原理
 
  JaCoCo有On-The-Fly和Offine两种方式进行插桩。通过执行测试用例,将收集到的程序执行信息Dump到内存,数据处理器进行程序执行信息和代码信息的分析,最终生成代码覆盖率报告。代码覆盖率报告可通过图形化展示也可生成数据格式,如HTML、XML等文件格式。
 
  On-The-Fly和Offine两种方式无论那种方式进行插桩,其本质就是在保证被测程序原有逻辑完整性的基础上在程序中插入一些探针(或者叫监控),一轮测试后就会被探针记录下来程序运行的特征数据,然后将收集的这些数据进行分析,获得程序的控制流和数据流信息,进而得到逻辑覆盖等动态信息,最终将结果展示出来。On-The-Fly模式是JVM通过JavaAgent参数指定JAR文件启动代理程序,代理程序在ClassLoader装载一个Class前判断是否修改Class文件,并将探针插入Class文件,探针不改变原有方法的行为,只是记录是否已经执行。Offine模式就是在测试之前先对文件进行插桩,生成插过桩的Class或JAR包,测试插过桩的Class和JAR包,生成覆盖率信息到文件,最后统一处理,生成报告。
 
  JaCoCo的工作过程是测试人员执行一轮测试后,JaCoCo自动收集程序执行信息,并通过Dump将操作记录从服务端传输到本地,数据处理器结合程序执行信息和程序结构信息分析生成代码覆盖率报告。JaCoCo工作原理如图1所示。

\
 
  3 JaCoCo实例应用
 
  本节以一个解析功能为例,使用JaCoCo+Ant来获取、分析和应用。
 
  3.1被测件概述
 
  某项目中的其中一个界面功能,实现从已知的卫星中获取对某一时间段内某一区域可使用的卫星,界面设计功能包括区域(系统支持三角形、四边形、圆形)选择、时间段(开始时间<结束时间,时间段在一天内)设置、“获取卫星”按钮,后台调用解析算法进行解析和计算。通过设计测试用例,在动态测试时执行用例,通过JaCoCo+Ant工具获取代码覆盖率。这里我们以example.Class后台的解析功能为例,即界面获取区域点坐标,时间段(开始时间和结束时间),解析计算指令传递到后台进行解析计算,并将结果上传到页面。
 
  根据要求描述对需求进行拆分为测试的需求项:包括(1)带解析计算的区域;(2)待设置的时间段;(3)解析计算获得卫星数据。
 
  3.2覆盖率获取与分析
 
  按照以下步骤获取覆盖率数据。
 
  Step1:被测服务开启jacocoagent监听。下载解压后的JAR包放到服务器上,分别是jacocoagent.jar和jacocoant.jar,在项目使用的tomcat/bin目录下的catalina中对JVM参数添加配置,添加-javaagent:/jacoco-0.8.7/lib/jacocoagent.jar=includes=*,output=t cpserver,port=6300,address=127.0.0.1(这里可根据实际进行配置),后启动tomcat。
 
  Setp2:配置和部署本地Ant。配置前准备:测试服务的Class文件、源文件、JaCoCo文件,将准备的文件存放路径参数配置在本地的build.xml中。
 
  Step3:执行功能测试后,使用ant dump命令:获取覆盖率exec文件,并通过ant report命令:生成覆盖率报告。

\
 
  动态测试过程通过执行测试用例,获取代码覆盖率,因此可通过量化测试用例与代码覆盖率关系。假设代码覆盖率为100%时需要执行的最少测试用例数用Un来表示,某一时刻执行的有效测试用例记为Ui,此
 
  时代码覆盖率可以用Cc=Ui/Un来表示。
 
  于是,覆盖率(C)=Ti/Tn=Cq×Cc
 
  3.3 JaCoCo工具应用
 
  (1)正常用例,覆盖基本需求,需求覆盖率为100%。
 
  执行动态测试用例,覆盖测试需求,于是设计最少测试用例如表1所示。
\
 
  执行完成后,使用命令获取覆盖率exec文件,并通过ant report命令:生成覆盖率报告。此时得到的代码覆盖率如图2所示。

\
 
  (2)在执行正常用例的基础上,进行异常用例测试。根据测试的充分性,继续执行动态测试用例,覆盖异常(界面中未手动设置区域时默认为当前位置坐标,时间设置默认为当前时间后1h,时间只能设置当前时间以后的时间。异常不考虑区域为空、时间为空的情况。)的测试用例,于是设计增加最少测试用例如表2所示。

\
 
  执行完成后,按照(1)的方式生成覆盖率报告(结果覆盖上次执行结果),此时得到的代码覆盖率如图3所示。

\
 
  (3)通常情况下,执行完正常测试用例和异常测试用例,需求覆盖率实现100%时,测试已经完成,但此时代码覆盖率仍然未达到100%。于是,根据隐含需求的测试情况,补充隐含的测试用例设计。于是设计增加最少测试用例如表3所示。
\
 
  执行完成后,按照(1)的方式生成覆盖率报告(结果覆盖上次执行结果),此时得到的代码覆盖率如图4所示。
 
  \
 
  在项目实践过程中,执行U10、U11测试用例时,软件异常退出。上面是经过问题归零后的软件执行结果。从上面的实践:设计测试用例的充分性(用例包括正常、异常以及隐含功能用例)是对提高代码覆盖率的一个非常关键的因素,测试尽量的保证覆盖全面,从而在动态测试过程中发现软件设计的潜在缺陷。
 
  4结语
 
  通过JaCoCo的实践应用,测试人员一次部署,多次获取,即使研发人员修改代码的情况下,也不影响覆盖率的结果。测试人员更加专注于测试用例的实现与执行,大大提高了测试效率。在代码覆盖率不断提高的过程,使得软件的测试充分性和完整性得到了提高,同时发现了软件的潜在问题,提高了软件的质量。
 
  通常我们希望代码覆盖率越高越好。代码覆盖率越高,越能说明测试用例设计是充分且完备的。然而在众多项目实现过程中,受需求变更、代码复用、测试周期以及测试成本等因素的影响很难达到100%的代码覆盖率。但是通过统计并跟踪代码覆盖率,测试人员有利于找出潜在的(隐含的)遗漏测试用例,然后进行有针对性的补充,同时还可以发现代码中一些由于项目复用或者需求变更等原因造成的无效废弃代码,软件质量从而提高,同时也提高了软件的安全性。
 
  参考文献
 
  [1]张宇曼.嵌入式覆盖测试工具GammaCP的设计与实现[D].成都:成都电子科技大学,2004.
 
  [2]朱少民.软件测试方法和技术[M].北京:清华大学出版社,2014.[3]李雨江.代码覆盖率工具BullseyeCoverage的应用研究[J].
 
关注SCI论文创作发表,寻求SCI论文修改润色、SCI论文代发表等服务支撑,请锁定SCI论文网!
 

文章出自SCI论文网转载请注明出处:https://www.lunwensci.com/jisuanjilunwen/50391.html

发表评论

Sci论文网 - Sci论文发表 - Sci论文修改润色 - Sci论文期刊 - Sci论文代发
Copyright © Sci论文网 版权所有 | SCI论文网手机版 | 鄂ICP备2022005580号-2 | 网站地图xml | 百度地图xml