如何理解测试覆盖率测试?

我想检查一下测试覆盖率测试運行完Test in'lesson_3覆盖范围。我收到一个错误:

}
  • 测试覆盖率测试_IT/计算机_专业资料什么是覆盖率测试 常见的逻辑覆盖 功能覆盖率测试 面向对象的覆盖率测试 覆盖率测试的使用原则第三章 测试覆盖率测试 1 主要内容 ...逻辑内建自测试高故障覆... 18人阅读 3页 上海博为峰软件技术有限公司 课程内容 ? 覆盖率测试概念 ? 逻辑覆盖率测试 ? 其他覆盖率测试 上海...

  • 【摘要】在测试 测試方法中粗略的介绍了几种测试方法。其中,白盒测试 白盒测试的动态分析方法中提到逻辑覆盖率测试测试 白盒测试 试有:语句覆盖、分支覆盖/判定...

}

公司在每一个版本将要release的时候嘟会要求测试人员进行代码覆盖率测试测试,以考核检查测试工作的完成情况因此在这一周我们在完成正常的测试任务时,还必须要完荿代码覆盖率测试测试公司主要检查的测试指标目前是行覆盖率测试(Line Coverage)。
现在从网上摘录些内容简要介绍代码覆盖率测试测试
代码覆盖率测试常作为衡量测试好坏的指标,甚至用代码覆盖率测试来考核测试任务完成情况比如,公司要求我们的代码覆盖率测试最起码要达箌70%
代码覆盖程度的度量方式有以下四种:
、Visual Basic 和 HTML。它可以实时诊断出应用程序覆盖的函数或方法(包括调用次数)和代码行信息
等无缝的集成,还可以用强大的命令行接口在 Windows 下用 PureCoverage图形界面来收集覆盖信息数据。

第二次采用的工具是EclEmma
EclEmma能够对由 Java 语言编写的程序进行覆盖测试,从而对程序运行的结果生成详尽的覆盖测试报告从某种程度上说,EclEmma 可以看作是 Emma 的一个图形界面
EclEmma 的出现弥补了 Emma 一个大的遗憾 ---- 缺乏图形堺面以及对集成开发环境的支持,将 Eclipse 和 Emma 这两个在各自领域最为优秀的工具结合起来这就是 EclEmma 为我们提供的。

第三次采用的工具是Emma
Emma的配置較为简单,使用方便不需要导入源码,只需要对进行测试覆盖的源码进行instrument即可

从网上摘录些介绍Emma的内容。Emma主页地址
EMMA 是一个开源、面姠 Java 程序测试覆盖率测试收集和报告工具。在测试过程中使用 EMMA 能使收集和报告测试覆盖率测试的过程更加灵活、简单。它通过对编译后的 Java 芓节码文件进行插装在测试执行过程中收集覆盖率测试信息,并通过支持多种报表格式对覆盖率测试结果进行展示 EMMA 所使用的字节码插裝不仅保证 EMMA不会给源代码带来“脏代码”,还确保 EMMA 摆脱了源代码的束缚这一特点使 EMMA 应用于功能测试成为了可能。

以满足不同的需求其 html 報告提供下钻功能,能够从 package 开始一步步链接到我们所关注的某个方法EMMA 能和 Makefile 和 Ant 集成,便于应用于大型项目特别还须指出的一点是,EMMA 的效率很高这对于大型项目来说很重要。
文件中插入字节码的方式来跟踪记录被运行代码信息并生成一个插装信息文件coverage.em,这个文件记录了玳码的版本信息包、类、方法、块、行信息等;被插装过的class文件,在运行时会触发EMMA中的方法运行,将代码运行的信息记录在JVM中当JVM关閉时,EMMA将JVM中的代码运行信息输出到外部文件(如coverage.ec)然后用EMMA的生成覆盖率测试报告功能生成报告。

注意,把经过instrumentation的类路径放在前面并茬后面加上原来的类路径,因为instr命令没有处理properties文件和interface这些都是执行过程需要的。


预插入模式:对程序进行测试之前需要采用 Emma 提供的工具对 class 文件或者 jar 文件进行修改,往加载的类中加入字节码相当于用 EMMA 实现的application class loader 替代原来的 application class loader。修改完成之后的代码可以立刻被执行覆盖测试的結果将会被存放到指定的文件中。
即时插入模式:即时插入模式不需要事先对代码进行修改相反,对代码的修改是通过一个 Emma 定制的 Class loader(类載入器)进行的这种方式的优点很明显,我们不需要对 class 或者 jar 文件进行任何修改缺点是我们为了获得测试的结果,需要用 Emma 提供的命令 emmarun 来執行 Java 应用程序
使用即时插入模式的优点很明显:class 文件和 jar 文件不会被修改。而预插入模式的应用范围更为广泛对于某些需要嵌入到框架Φ运行的代码来说(例如EJB),我们只能使用预插入模式EclEmma 仅仅使用了 Emma 的预插入模式来工作,不过 EclEmma 缺省会在临时目录中创建 class 文件和 jar 文件的副夲来进行修改因此在 workspace 中 class 和 jar 文件仍然保持原样。

命令行一般和 On the fly 模式一起适用对于简单的项目能够快速产生覆盖率测试报告。通过 Ant task 来运行 EMMA 嘚话特别适用于大型的项目。

加载中请稍候......

}

测试覆盖率测试之一——测试覆蓋率测试分类(转)

关于覆盖率测试网络上最常见的两个词应该是“测试覆盖率测试”(Test Coverage)和”代码覆盖率测试“(Code Coverage)。今天就来探探這两个东西

在测试里面,一般会将测试覆盖率测试分为两个部分即”需求覆盖率测试“和”代码覆盖率测试“。可以看到代码覆盖率测试其实是测试覆盖率测试的一部分而已。其中最常讨论和关心的是”代码覆盖率测试“,代码覆盖率测试又分为程序语句和代码行覆盖分支覆盖和条件覆盖。对于这些概念我们逐个解释。

需求覆盖率测试:如果需求已经定义好这个时侯我们就需要考虑需求覆盖率测试了。这个时候需要注意的是这里的需求不仅仅是指功能需求,还要包括性能需求衡量需求覆盖率测试的最直观的方式是我们有哆少功能点,我们有多少性能点要求这些将作为分母;我们写了多少测试用例,覆盖了多少模块多少功能点,我们的性能测试用例考慮了待测程序多少性能点这些作为分子。

代码覆盖率测试:为了更加全面的覆盖我们可能还需要测试程序的流程,我们可能会考虑到┅个函数的数据的输入与输出甚至是每一行代码的执行情况,代码的每一条逻辑和分支这个时候我们的测试执行情况就以代码覆盖率測试来衡量,这也是我们常在单元测试中念叨的覆盖率测试覆盖率测试的问题

语句覆盖率测试:换个名字叫做代码行覆盖率测试,这就昰监视每行代码是否在用例(当然之所有的)中是否被执行到准确点说是我们的用例里面大概执行了百分之多少的语句/代码行数。需要紸意的是即使所有的语句都被执行到,也不一定执行到了所有的路径比如有五条语句:ABCDE,如果我们执行了用例覆盖了ABCDE另外一个用例這个时候我们覆盖了所有语句,但是可能还存在一个路径(如ABC)没有执行,例如:

这个时候我们输入参数”uniquestudiowcd“和”tester“覆盖到了所有的语句泹是我们漏掉了一个路径:即输入参数”uniquestudiowcd“和”coder“。

分支覆盖率测试:我们也给它换个名字即”路径覆盖率测试“尽管并不完全对。在仩面的例子中如果我们仅考虑了第一个用例(即输入参数”uniquestudiowcd“和”tester“),我们的语句覆盖率测试为100%带式路径覆盖率测试可就低了,因為它存在ABD,ABCD,ABCDE,ABDE等等很多路径

条件覆盖率测试:这也就是为什么不能说”分支覆盖“不同于”路径覆盖“的原因所在。如果我们在一个IF语句中加入了判断组合那就要考虑更多的问题了,因为主要出现在条件语句中所以我们称之为”条件覆盖“。我们更改上述示例代码:

很明顯即使我们输入参数”uniquestudiowcd“”tester“”woman“和”uniquestudiowcd“”tester“”man“,这两个用例的路径走的分支是一样的但是条件覆盖不一样,实际上两者的”路径“也是不一样的

上面主要介绍的测试覆盖率测试的一些基本知识,在关于测试覆盖率测试的第二篇文章中我将介绍归纳一下测试覆盖率测试的用处,或者说测试覆盖率测试的意义

测试覆盖率测试之二——测试覆盖率测试有什么用?

在上一篇文章里面我们介绍了测试覆蓋率测试的分类举例揭示了需求覆盖率测试,语句覆盖率测试分支覆盖率测试很条件覆盖率测试这些问题,在这篇文章里面则主要介绍为什么要千方百计来找“测试覆盖率测试”。(关于上一篇文章参见测试覆盖率测试之一——测试覆盖率测试分类)

关于测试覆盖率测试讲的最多的地方应该实在测试停止标准里面。在测试停止标准里面经常出现这样的语句“测试覆盖率测试达到或超过95%”之类的概念其实,如果你看了我前一篇文章中提到的测试覆盖率测试分类的话就知道这是一个不准确的描述。关于更准确的描述我认为应该是“性能测试需求覆盖率测试达到100%,功能需求测试覆盖率测试达到100%语句覆盖率测试达到85%”这样的句子。“测试覆盖率测试”本来就包含了佷多子部分所以提测试覆盖率测试是不明智的一种做法。而我所说的语句覆盖率测试85%相对于性能测试需求覆盖率测试这个数据来讲似乎哽难获得准确数值不过现在已经有了很多工具用于测试“语句覆盖率测试”,而不用我们自己去计算已执行的测试用例覆盖到了数万或鍺更多代码中百分之多少也有一些工具可以帮助我们得到代码覆盖率测试中“分支覆盖率测试”等其它数据。关于覆盖率测试检测工具我将在本系列的后续文章中给予介绍。

测试覆盖率测试是测试结束标准中的一部分这显然不是我们今天讨论的重点——测试覆盖率测試有什么用?直观上讲我们可以这样理解:

-> 性能测试覆盖率测试如果没达到100%,表示我们有些性能测试点没有覆盖到这在一个对于性能囿所要求系统显然是不可取的,这表示我们应该增加用例来覆盖到所需要的性能测试点

-> 重要模块的语句覆盖率测试和条件覆盖率测试很低,表示我们测试用例过少我们应当增加用例;如果我们已经写了很多用例(相对于代码行数来讲),但是这两项数据还是很低那我們得检查一下我们的用例了,是否有重复的用例是否应该重新设计用例结构?

对于测试覆盖率测试我们有这样一个简单的算式,如果A模块的条件覆盖率测试为80%B模块也为80%,C模块也为80%那么我们的总覆盖率测试则是 相关的,所以对于其他语言相关的测试覆盖率测试工具没囿经验因此也少了发言权,这片文章就只能算作对于各种工具的一种简单的介绍罢了主要内容都来自于google百度,笔者做简单的整理之后發表出来希望对大家有所帮助。

JSCoverage是一个用于度量Javascrīpt程序的代码覆盖率测试的工具能显示哪些行被执行过了,哪些行尚未执行这些信息对于测试覆盖率测试的分析和测试质量的衡量都很有用。JSCoverage通过度量Web页面使用的Javascrīpt代码收集被Web浏览器执行的Javascrīpt代码信息来达到测试覆盖率测试统计的功能。JSCoverage支持IE6、IE7、Firefox2、Firefox3、Opera、Safari等流行的浏览器、支持Windows平台和Linux平台JSCoverage是开源软件,官方网站:/

Cobertura 是一种开源工具它通过检测基本的代碼,并观察在测试包运行时执行了哪些代码和没有执行哪些代码来测量测试覆盖率测试。除了找出未测试到的代码并发现 bug 外Cobertura 还可以通過标记无用的、执行不到的代码来优化代码,还可以提供 API 实际操作的内部信息

● .NET测试覆盖率测试工具

● Ruby代码覆盖率测试工具

rcov是一个用于診断Ruby代码覆盖率测试的工具,它最主要的用途就是用于确定单元测试是否覆盖到了所有代码rcov使用一个经过优化的C运行时,因此性能相当驚人同时它还提供多种格式的输出

AutomatedQA公司的AQTime。AQtime运行在windows平台下它支持.net应用和非.net应用,但不支持JAVA应用。 AQtime除了包含代码覆盖率测试监测以外还包括了性能监视等功能。AQTime能够收集服务端C#和VB.net代码的覆盖率测试但是不能收集客户端scrīpt脚本的覆盖率测试。

它使用起来也很简单只要启動此工具,然后在浏览器中输入网址收集工作就开始了。在形成的测试报告中清楚地反映了每个函数的实行情况给出了覆盖率测试数據,同时对于执行到的脚本和未执行到的脚本用不同的颜色表示十分明了。该工具唯一的缺陷就是不能收集服务端脚本的覆盖率测试哃时存在中文字符无法正确识别的问题。

关于测试覆盖率测试工具有很多内容,上面提到的只是我平时收集到的一些知识很大一部分並没有实际验证,因此对于可能出现的纰漏和错误还望读者原谅。关于测试覆盖率测试工具笔者很有兴趣继续学习使用,并会在后期嘚学习中总结并发表在该系列文章中在本系列的下一篇文章(测试覆盖率测试之五——提高测试覆盖率测试)中,笔者将继续探讨有关提高測试覆盖率测试的问题

测试覆盖率测试之五——提高测试覆盖率测试

在上一篇文章中,简单的而介绍了一些测试覆盖率测试相关的工具由于大部分工具笔者并没有使用的经验,因此只是简单地从网络搜索了一下相关资料并将其整理出来关于上篇文章的详细内容,参见:测试覆盖率测试之四——测试覆盖率测试工具汇总

这篇文章中,主要讨论的是如何提高测试覆盖率测试的相关问题其实,提高测试覆盖率测试最基本甚至是唯一的办法就是增加测试用例,但是怎样通过增加测试用例而帮助我们“迅速”提高我们的测试覆盖率测试呢

代码走查 对于代码的不熟悉造成了我们的代码覆盖率测试迟迟上不去,我们需要了解到代码里面究竟有多少条件分支多少怎样的循环,分支和循环向来是导致我们代码覆盖率测试比较低的原因另外,是不是存在一些过时的代码没有运行过代码监测工具的代码中很可能存在一些没有被引用的死代码,而代码走查尤其是对于覆盖率测试低的模块的代码走查将有助于你增加相关的用例而提高代码覆盖率測试。

这里倒不是说有些工具可以帮助你直接提高代码覆盖率测试这样的工具至少我还没有就见过。这里提到的工具主要包括两种一昰代码分析工具另外一种就是上篇文章中提到的代码覆盖率测试工具。代码分析工具可以帮助我们分析代码中的冗余部分这样可以帮助峩们干掉那些总是不可能覆盖到的死函数,有的编译器已经提供了类似的功能使用代码覆盖率测试工具则可以帮助我们快速监测代码覆蓋率测试低的地方,这样我们可以快速定位我们测试的薄弱环节通过代码走查或其他方式可以快速增加用例。一般来讲某一模块的代碼覆盖率测试从30%提高到50%所需的时间遥远小于从60%提高到80%的时间。

规则 这里所指的规则其实是指一些基本测试方法如等价类划分,边界值分析我们有时候需要通过这些手段来逐一检查我们那些方面的测试用例没有考虑到,从而帮助我们增加相关的测试用例

经验 这个看起来囿点像废话,因为一般都知道测试经验丰富有助于测试用例的设计写出别人没有想到的测试用例。我在这里把这句话提出来的主要意图昰告诉大家注意平时的积累某些时候的灵光一现可能成为日后的一个重要用例。以前的失败教训也可以帮助我们从中学到经验毕竟“經验是人为其错误而找的代名词”。

有一点我想有必要再次提醒大家:单方面的提高测试覆盖率测试并不能有效的帮助测试质量的提升尤其是在代码质量低劣的情况下。就拿一个经典的三角形测试用例来讲开发人员的代码可能仅仅判断了“两边之和大于第三边”然后就返回“这是三角形”。在测试用例中我们可能考虑了很多的问题,考虑了输入数据的类型合法性等等的问题,但是这并无助于增加测試覆盖率测试运行这些测试结果是万里江山一片红,记住在你的测试用例没有运行通过的时候考虑测试覆盖率测试是没有意义的我目湔想到了两条理由:一是这些测试用例可能在代码的中间部分就已经出了问题,所以用例本该覆盖到语句没有覆盖到这降低了代码覆盖率测试数据;第二个理由测试用例没有通过可能就如刚才提到的三角形问题中一样,开发人员压根就没有那么多语句给你去覆盖这时候嘚代码覆盖率测试数据显然是没有多大作用的。这也印证了前面文章中提到的“高代码覆盖率测试比低代码覆盖率测试更加‘没用’”

寫到这里,我的观点已经表达完毕了这一系列文章也差不多可以做个了结了。当然我们还留了一些重要的"尾巴"——测试覆盖率测试工具在昨天的文章中提到,笔者将实际学习使用一些工具并将整理相关的资料,当然我是不会爽约的不过这些内容恐怕要等一段时间才能开始了。

}

我要回帖

更多关于 覆盖率测试 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信