- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
目前我有一堆针对我的 C++ 项目的单元测试,但我(还)没有测试代码覆盖率。我正在使用 -O3
优化标志编译测试以暴露潜在的细微错误,但似乎如果我想使用 gcov
之类的工具收集覆盖率信息,任何优化标志都必须是禁用。我应该构建测试两次(一次使用 -O3
,另一次不使用)吗?通常如何处理这个问题?
最佳答案
通常要执行多种测试来确保软件的质量,以及编译器选项的不同标准。
通常,构建系统会提供两种或多种构建选择,例如:
调试:-O0(无优化)带断言
发布:没有断言的“更高优化”(-O2、-Os 或 -O3 取决于什么对您的项目“最好”)。这通常是您向客户交付代码的模式。
有时会有“Release+Asserts”,这样您仍然可以在运行时检查代码的正确性,并具有一定的性能。
以下是我认为测试可以分为的一些类别:
功能正确性(又名“正面测试”)。这是您检查“代码在正常情况下正常工作”的地方。运行调试和发布。
阴性测试。检查错误条件是否正常工作 - 传递应该给出错误的垃圾值(“不存在的文件”应该给出 E_NO_SUCH_FILE)。通常同时进行调试和发布。
压力测试 - 运行苛刻的测试,检查软件在长时间运行时是否正常运行,有很多线程等。通常是 Debug模式 - 可能两者兼而有之。
报道。运行一组测试以确保您“覆盖所有路径”(通常带有一定程度的“未覆盖”,例如您应该覆盖 95% 的功能和 85% 的分支——因为某些条件可能极难实现无需手动检测代码 - 仅当磁盘已满或操作系统无法创建新进程时才会出现错误)。通常编译为 Debug。
容错测试。 “负面测试”的一种形式,您可以在其中为内存分配和类似功能插入“模拟”功能,模拟顺序或随机的故障,以发现未检测到错误且代码失败的后续结果的情况较早的错误,而不是在正确的位置产生正确的错误。同样,通常使用 Debug 运行 - 但也可能值得在 Release 中运行。
性能测试。衡量程序性能的地方 - 每秒生成的帧数、编译器中的每秒行数或文件下载系统中的每小时千兆字节数等。这应该按照发行版进行编译,因为“未优化”代码中的运行性能是几乎总是毫无意义。
对于复杂的软件产品,您常常不得不在“运行一切”和“所花费的时间”之间进行折衷——例如,在调试和 Release模式下运行所有 4000 个功能测试可能需要 12 小时,仅运行 Debug模式需要花费7小时,太可取了。这种妥协是通常的“工程决策”——“在理想世界中,你会这样做,但在现实世界中,我们必须妥协,这就是为什么我认为这种测试配置是正确的”。
例如,许多测试系统对源代码的每次更改都运行轻度测试 [在工程师他/她自己说“我认为这可行”之后],每晚进行更重的测试,并在周末进行更多测试。这允许在运行所有测试所需的时间和一名工程师进行小更改所需的时间之间做出折衷。
关于c++ - 带优化的代码覆盖率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36930207/
在旧版 Web 应用程序中,我们没有对 javascript 部分进行任何单元测试。 我们希望提高代码质量并删除死代码。 有什么方法可以在人工测试期间在浏览器中进行逐行 Javascript 代码覆盖
我已经为我的 python 代码编写了测试,并且想检查测试覆盖了多少百分比,所以我决定使用 python 覆盖。但是我启动它时遇到问题。我用这个 bash 命令启动我的测试: export PYTHO
我正在使用 python 覆盖工具来运行我的单元测试。从结果中可以看出,它包括所有“站点包”。我怎样才能将它们排除在报告之外?我只想显示项目源代码的报告。 (ctrp) ubuntu@ubuntu-x
我正在尝试使用 Opencover 来运行 NUnit 测试用例的代码覆盖率。我得到了预期的结果,但问题是在执行 opencover 时它再次运行测试。我们不希望发生这种情况,因为我们单独运行测试。下
我正在尝试使用 Opencover 来运行 NUnit 测试用例的代码覆盖率。我得到了预期的结果,但问题是在执行 opencover 时它再次运行测试。我们不希望发生这种情况,因为我们单独运行测试。下
我有一个 python 项目,我使用: pipenv 毒性 pytest 还有更多。 基本上,我想将 tox 添加到我的 gitlab 管道中。几乎一切似乎都有效,从 tox 调用 mypy、flak
我使用Coverity来分析代码C。 配置命令: cov-configure --compiler /opt/toolchains/stbgcc-4.5.4-2.9/bin/mipsel-linux-
是否可以在运行时测量 python 代码覆盖率并在生成结果时查看结果?我尝试使用 coverage但找不到有帮助的选项。我最初的实验表明,.coverage 文件直到程序执行结束才被保存,这意味着我们
我有一个文件,test_basic.py: class TestCalculator(): def test_calculator(self): from basic impo
我有一个小型 PHP 项目,它使用 PHPUnit 进行单元测试和覆盖。我想生成 cobertura XML 格式的覆盖率报告。 我可以使用任何工具或插件来实现这一目标吗? 感谢任何帮助.. 最佳答案
我正在研究一个小 gem 并包含 simplecov到 spec_helper.rb 两行: require 'simplecov' SimpleCov.start 当我运行 rspec 测试时,si
go -cover 或 -coverprofile 在运行 go 测试时非常有用,并且可以在 html 或纯文本中很好地显示。但是是否有 api 以编程方式访问它或处理文件? 最佳答案 你可以试试ax
当我遇到代码覆盖问题时,我目前开始在 PHPUnit 中使用 strict 模式: 如果我使用setUp-方法创建我的类的新实例,__constructor-方法在我运行测试。 这是我的测试设置: p
我正在运行 EclEmma,它是 Eclipse 的 Emma 插件,覆盖率报告仅显示我定义的 Enum 的部分覆盖率,即使它显示 Enum 中唯一的值被覆盖。我假设支持 Enum 的隐含方法存在覆盖
我正在将 ANT 构建转换为 Maven。我不使用声纳。 在 Maven 中,Jacoco 似乎没有报告有关单元测试本身的覆盖率,而 ANT 则报告了。我也一直在尝试为我的 Maven 构建获取这个,
我正在努力为我正在处理的库实现 100% 的代码覆盖率,但我似乎对 switch 语句和覆盖率有一些问题,我根本不明白。 我目前使用的是 Jacoco 0.7.2,因为每个新版本似乎都与 Robole
有没有在intelliJ中不用浏览器运行代码覆盖率的方法? http://www.jetbrains.com/webstorm/webhelp/monitoring-code-coverage-for
我想确保我的 Django 测试套件涵盖我的 URL 配置中列出的所有 URL。有没有办法将 URL 配置中的列表与测试套件中命中的 URL 列表进行比较? 最佳答案 我能够通过定义自定义测试套件运行
哇,好乱啊。这是场景。 主干驱动的 JS 应用。 用于 AMD 功能的 RequireJS,初始化如下: 然后在 main.js 中添加以下配置代码: require.config( { p
我的问题很简单,但答案仍然难以捉摸。假设我有一个包裹 package mypackage func DoTheThing() int { return 5 } 现在假设我在 mypackage_t
我是一名优秀的程序员,十分优秀!