什么是代码覆盖率?

11

我有3个问题:

  • 什么是代码覆盖率?
  • 它有什么用途?
  • 用于分析代码覆盖率的工具有哪些?

1
这个回答解决了你的问题吗?什么是代码覆盖率,如何衡量它? - Inigo
9个回答

13
您可以从SO WEB SITE获取非常好的信息。 免费的代码覆盖率工具 什么是代码覆盖率,如何测量它? 代码覆盖率是指在自动化测试运行时执行了多少行/块/弧线的代码。通过使用专业工具对二进制文件进行插装添加跟踪调用,并针对插装产品运行完整的自动化测试集来收集代码覆盖率。良好的代码覆盖率工具不仅会给出执行的代码百分比,还会让您深入到数据中,并查看特定测试期间执行了哪些代码行。
代码覆盖率算法最初是为解决通过直接查看源代码评估源代码的问题而创建的。由于对程序内部部分和不针对系统输出的断言,因此代码覆盖率属于结构化测试类别。因此,代码覆盖率旨在找到不值得测试的代码部分。 http://www.stickyminds.com/sitewide.asp?Function=edetail&ObjectType=ART&ObjectId=7580 alt text http://www.codecoveragetools.com/images/stories/software_lifecycle.jpg 它适用于以下情况:
  1. 目标在于发现执行了多少个函数或过程的功能覆盖率。

  2. 语句或行覆盖率,以确定源代码中的行数是否已经执行。

  3. 条件或决策覆盖率回答了程序中有多少循环条件被执行的问题。

  4. 路径覆盖着眼于查找从给定起始点在代码中执行的所有可能路径。

  5. 入口和出口覆盖查找从开始到结束执行了多少个函数(C/C++,Java)或过程(Pascal)。

  6. 工具

    http://www.codecoveragetools.com/

    http://java-source.net/open-source/code-coverage

    http://www.codecoveragetools.com/index.php/coverage-process/code-coverage-tools-java.html

    http://open-tube.com/10-code-coverage-tools-c-c/

    http://csharp-source.net/open-source/code-coverage

    http://www.kdedevelopers.org/node/3190


4

来自维基百科文章

代码覆盖率是软件测试中使用的一个度量。它描述了程序源代码被测试的程度。这是一种直接检查代码的测试,因此属于白盒测试的一种形式1。目前,代码覆盖率的使用已扩展到数字硬件领域,这种领域的现代设计方法依赖于硬件描述语言 (HDLs)。

强烈推荐代码覆盖使用

代码覆盖工具只是跟踪您的代码哪些部分被执行,哪些部分没有被执行。

通常,结果可以精确到每行代码的水平。所以在一般情况下,您会使用配置为监控应用程序的代码覆盖工具启动您的应用程序。当您退出应用程序时,该工具将生成一个代码覆盖报告,显示哪些代码行被执行,哪些代码行没有被执行。如果您统计所有被执行的代码行并除以可能被执行的总代码行数,则得到一个百分比。如果您信任代码覆盖率,那么百分比越高,就越好。实际上,达到100%是非常罕见的。

使用代码覆盖工具通常与某种自动化测试套件相结合。没有自动化测试,代码覆盖工具仅告诉您人类用户记得使用哪些功能。当它测量您编写的代码与测试套件相比的完整程度时,这种工具要更有用。

相关文章

代码覆盖工具的未来

代码覆盖工具在软件测试中的有效性

工具

Java中的开源代码覆盖工具


3
代码覆盖率是一种指标,显示源代码经过多少测试。有几种类型的代码覆盖率:行覆盖率、函数覆盖率、分支覆盖率。
为了测量覆盖率,您需要手动或通过自动化测试运行应用程序。
工具可以分为两类: - 在修改后的环境(如调试器)中运行编译后的代码,计算所需的点数(函数、行等); - 需要特殊编译的工具 - 在这种情况下,生成的二进制文件已经包含实际进行计数的代码。
有几个测量和可视化结果的工具,它们取决于平台和源代码的语言。
请阅读维基百科上的文章。
要为您提供工具,请定义您使用的操作系统和语言。

代码覆盖率并不直接意味着您已经充分测试了代码。如果您进行非常好的测试并且测试价值高,则会获得良好的代码覆盖率。 - AutomatedTester
同意,但是要获得高覆盖率值,就必须为通常包含的许多错误情况创建测试。这将意味着“好”的测试。 - CsTamas

2
代码覆盖率是软件测试中使用的一种度量标准,它描述了程序源代码被测试的程度。

http://en.wikipedia.org/wiki/Code_coverage

维基百科的定义已经很好了,但用我的话来说,代码覆盖率告诉你有多少自动化测试已经涵盖到了你的代码。100%意味着你应用程序中的每一行代码都被单元测试覆盖了。 NCover 是一个针对 .NET 的应用程序。

1

0

最近我使用的另一个确保代码质量(包括代码覆盖率)的有用工具是Sonar。 这是链接http://www.sonarqube.org/


0

其他答案已经涵盖了代码覆盖率的含义。我想强调的是,你需要小心不要将高覆盖率视为隐含意味着你已经测试了所有情况。它并不能说明你测试代码的质量或测试的质量有多好,只是说明你在测试运行中达到了一定百分比的代码。

高代码覆盖率并不一定意味着高测试质量,但高测试质量确实意味着高代码覆盖率。

在实践中,我通常会以90-95%的代码覆盖率为目标,这通常是可以实现的。最后几个百分点往往太昂贵了,不值得去追求。


0

有很多开发应用程序的方法。其中之一是“极限编程”或“测试驱动设计(TDD)”。它指出所有代码都应该经过测试。代码覆盖率是衡量测试程度的一种手段。

我想对此做一个小小的评论:我不认为所有的代码都应该被测试,也不认为应该设置特定的代码覆盖率百分比。我也不认为代码不应该通过单元测试进行测试(代码测试代码)。我认为应该决定什么值得测试。因此,我通常不使用代码覆盖率。

一些工具提供的一件事是突出显示已经测试过的部分。这样,您可能会遇到一些未经测试但实际上应该被测试的代码,这是我使用它的唯一原因。


0

好答案。

我个人认为,并没有一种测试方法可以捕捉到所有的错误,但是测试越少也不能捕捉到更多的错误,所以任何形式的测试都是有益的。在我看来,覆盖率测试不是为了展示代码已经被执行了哪些部分,而是为了展示哪些代码还没有被执行过,因为那些未被执行的部分往往是漏洞喜欢藏匿的地方。

如果结合单步调试,这是一个非常好的检查代码和发现漏洞的方式。这里有一个例子。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接