使用 Contest 分析测试用例的代码覆盖率-程序员宅基地

技术标签: java  应用服务器  web  j2se  eclipse  

解决什么问题

问题的提出时这样的:对于测试人员来说,首先面临的问题就是无法度量测试用例的质量,如果测试工程师花费大量时间写的测试用例不能有效地覆盖重要的实现代码,那么可以表明这样的测试用例不是优良的。同时可以根据测试覆盖了的报表来分析为什么没有覆盖到重要的代码,接着需要进行改进测试用例的代码覆盖率达到满意的结果。代码覆盖率高低根据产品的不同而不同:70%,80% 甚至 100% 都是可能的。对于测试工程师来讲,可以遵循这样的流程 : 获取覆盖率 – > 发现未覆盖的代码 – > 添加新测试用例来改良测试用例,保证产品质量。

代码覆盖率基本介绍

在 CMMI4 体系的测试过程中定义了四个度量指标:代码覆盖率、测试执行率、测试执行通过率、测试缺陷解决率。其中代码覆盖率就是描述了程序的源代码在功能测试中的覆盖率,即反映测试用例对被测软件的实现代码覆盖程度的重要指标,它也是对测试工作进行量化的重要指标之一。测试工作往往不如开发那样可以用图表数据表示结果,一个重要原因之一就是测试难于量化,而代码覆盖率恰恰是解决这一问题的重要指标。同时一个角度来讲,软件的风险很可能就存在于代码覆盖率没有涉及的地方,代码覆盖率可以发现其中未覆盖的场景(Test Hole), 测试工程师根据这个 Test Hole 来分析测试用例,以此来优化测试用例,这个过程能显著提高测试的生产效率,并提高软件产品质量。代码覆盖率是个白盒测试的概念,毕竟最后要跟踪到源代码。一般来说,代码覆盖率的测试应该是在产品的中后期引入,不过对于使用敏捷技术开发的产品,可以在开始开发的迭代周期就引入。笔者所在的团队就在项目的中后期使用,主要用于测试回归测试的代码覆盖率。

代码覆盖率基本的指标

语句覆盖 Statement coverage (line coverage): 用于评测产品代码独立代码行在测试活动中执行的行覆盖率,优点是简单,缺点是无法包含代码的逻辑分支。

基本语句块覆盖 Basic block coverage: 把非分支的代码区域做为一个计量单位,用于一个 if/else 中的某个分支行数远大于另一个分支,所以可能会出现这项指标比较高的情况。

条件覆盖 Decision coverage (branch coverage): 用于评价代码分支地代码覆盖率。
功能覆盖 Function coverage (Method Function): 评测产品代码在测试活动中执行方法的覆盖率。

代码覆盖率的实现方式

对于 Java 作为开发语言的产品,分析代码覆盖率时候使用 Instrumentation 技术,本质就是在产品代码的关键位置插入统计代码,即在代码的每个方法的开始加入统计计数器和序列号,当方法被执行之后,根据序列号以计算改方法被测试用例测试到。一般来说,Instrumentation 技术可以分为两种方式:Class Instrumentation 和 Source Instrumentation。前者把统计代码插入编译好的 .class 文件,而后者则把统计代码插入源代码 (.java 文件 ) 并编译成新的 .class 文件。大多数代码覆盖率工具采用这两种 Instrumentation 技术。其中用 Class Instrumentation 使用最广,因为在产品开发的每个阶段,采用持续集成的方式来开发产品,测试工程师面对的不是产品的源代码,而是交付给测试的产品版本,所以考虑到避免修改源代码,而直接注入统计代码到生成的 class, 对于本文中也用第一种 Class Instrumentation 技术。

Contest 介绍

Contest 是功能强大的易用的工具,在测试的前期用以发现并行系统的 bug, 而不用建立复杂的测试多处理器和多应用的测试环境。Contest 对开发人员可测试工程师都很非常有帮助,它可以作为独立运行的工具或者一个 Eclipse 插件,开发人员去运行可以得到单元测试的代码覆盖率。Contest 可以用最小的成本来度量代码覆盖率,在调试期间,可以发现死锁信息,Contest 还有很多其他功能,代码覆盖率是我们在本文中用到的一个功能。有兴趣的读者可以在

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/iteye_13590/article/details/82307685

智能推荐

Android学习笔记——归纳整理_android学习笔记汇总-程序员宅基地

文章浏览阅读8k次,点赞26次,收藏155次。Android入门笔记——归纳总结_android学习笔记汇总

中南大学2019计算机研究生分数线,2019中南大学研究生分数线(含2016-2019历年复试)...-程序员宅基地

文章浏览阅读354次。2019中南大学研究生分数线(含2016-2019历年复试)考研就是人生的第二次高考,是再一次改变自己命运的机会,所谓7分靠努力,3分靠填报,中南大学历年研究生复试分数线是2019-2020届考研学子十分关心的问题,以下是大学生必备网为大家整理的2016-2019历年中南大学研究生复试分数线,供大家参考,真切希望大家都能考上自己满意的学校。1、2019年中南大学研究生分数线一、学术学位学科门类(专..._中南大学计算机技术复试线历年

【学习笔记09】:JavaScript单引号、双引号和反引号的区别_js中document.write用反引号和引号的区别-程序员宅基地

文章浏览阅读915次,点赞3次,收藏6次。单引号、双引号和反引号的区别_js中document.write用反引号和引号的区别

微信小程序登录流程,双登录,手机号登录和账户密码登录_小程序账号密码登录-程序员宅基地

文章浏览阅读1.1w次,点赞7次,收藏80次。一、第一步:在app.js文件中调用wx.login方法发送res.code和appid给后台,后台返回openid和session_key,把openid和session_key存入storage中。因为之后获取解码的手机号码需要用到session_key。app.js文件中// 登录 wx.login({ success: res => { // 发送 res.code 到后台换取 openId, sessionKey, unionId .._小程序账号密码登录

在windows系统调试ydlidar详细记录(物联网机器人方向)_物联网windows系统调试-程序员宅基地

文章浏览阅读2.3k次,点赞2次,收藏8次。这篇博文详细记录在windows系统调试ydlidar的全过程ydlidar采用全无线连接方式,测距雷达放在迷你机器人(型号tianbotmini,中文名天宝迷你)上如下图所示,需要usb无线设备接受雷达信息:装配雷达的机器人和接收器由于使用机器人操作系统(ROS1和ROS2),需要安装机器人操作系统的请参考如下: 在Windows系统安装ROS机器人操作系统(更新日期2020年10月,附官网链接) 下面开始操作,使用SDK版本为1.4.7,发布日期为2020年3月31日。Linux_物联网windows系统调试

iOS内购-防越狱破解刷单_software-version-external-identifier-程序员宅基地

文章浏览阅读3.8k次。---------------------------2018.10.16更新---------------------------最近我们公司丢单率上涨,尤其是10月份比9月份来说丢单率翻了3倍,和一些同行交流了一下,发现他们也是丢单量增加,初步推断可能是苹果iOS12的原因,某些情况下会有用户内购成功后,却返回的是订单失败,错误类型为SKErrorUnknown。目前客户端好像没办法去解决。如果有小伙伴和我一样也遇到过相同的问题话,请私信我下,我们都多互相交流一下。--------------._software-version-external-identifier

随便推点

完美测试解决App一键唤醒_Deeplink,直达指定页面_应用直达链接测试-程序员宅基地

文章浏览阅读2k次。从运营角度来看,引导已下载用户打开App,能提高用户粘性和活跃度,而用户在App内的产品体验自然也比H5页面要好;引导未下载用户下载App并进入指定页面,显然能给用户更好的产品初体验。引导已下载用户从H5页面或者主流社交平台唤醒App并且直达指定产品。引导为下载用户从H5页面直接下载App,首次打开App时直达指定场景一键唤醒(Deeplink)的具体使用示例:用户通过打开链接,WebView判断是否安装,未安装情况下引导用户快速下载,下载完成后直达指定的场景页面。常见的问题部分主流平._应用直达链接测试

springboot 新增模块之后,需要设置java文件夹为Sources Root_springcloud 生产者有sourcesroot-程序员宅基地

文章浏览阅读1.2w次,点赞3次,收藏3次。 springboot 同项目下,新增模块之后,所有资源文件格式显示会有问题,需要设置java文件夹为Sources Root之后才能进行编码。模块src下java包右键 -> Mark Directory as -> Sources Root..._springcloud 生产者有sourcesroot

树遍历(BFS+DFS(递归+非递归))-python代码整理_bfs算法递归遍历树 python-程序员宅基地

文章浏览阅读1.1k次,点赞5次,收藏13次。数据结构算法-树最近再刷leetcode的树,整理了常用遍历代码包含树的层次遍历(广度优先遍历)与前中后序遍历(深度优先遍历):#########################################层次遍历(广度优先遍历)★★★★★#BFS通用模板,层次遍历通用:#使用队列实现def levelOrder(root): if not root: return [] queue=[root] ans=[] while queue: a=[] #方便保存每一层的_bfs算法递归遍历树 python

有关java.sql.SQLException: Io 异常: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=186646784)的解决方法-程序员宅基地

文章浏览阅读1.6k次。问题描述:在用Java访问数据库时,出现以下提示:java.sql.SQLException: Io 异常: Connection refused(DESCRIPTION=(TMP=)(VSNNUM=186646784)(ERR=12505)(ERROR_STACK=(ERROR=(CODE=12505)(EMFI=4))))原因:在连接数据库时,所连接的url的地址格式输入有误解决方法..._connection refused(description=(tmp=)(vsnnum=186646784)(err=12505)(error_sta

Servlet--Request生命周期_tomcat中request的生命周期-程序员宅基地

文章浏览阅读5k次,点赞4次,收藏13次。Servlet--Request生命周期一、Request、Response对象的生命周期1、浏览器像servlet发送请求2、tomcat收到请求后,创建Request和Response两个对象的生命周期,并且将浏览器请求的参数传递给Servlet3、Servlet接收到请求后,调用doget或者dopost方法。处理浏览器的请求信息,然后通过Response返回_tomcat中request的生命周期

解决GitHub不能访问的几个办法_github打不开-程序员宅基地

文章浏览阅读7.9w次,点赞16次,收藏80次。GitHub页面时而能访问,时而不能。不是慢,而是不能访问。当然,下载它的比如仓库Release下的压缩包比较慢则是另一回事。蛋疼的影响不限于打不开页面,更多的在于不能git pull和git push等操作。范围方面,凡国内不管是家宽、移动网络还是云上的,都受到一致的影响。_github打不开