CodeCoverage
我有一个将提交到构建系统的补丁,该补丁支持报告测试套件的测试代码覆盖率指标。事实上,它可以显示针对 PostgreSQL 运行的任何应用程序的覆盖率。下载 文件:Coverage.tar.gz 查看示例报告。将文件解压以后,点击 coverage/index.html。我必须删除大部分文件以减少上传文件的大小,因此只有访问链接可用。
gcov 报告行、分支和函数覆盖率,而 lcov 只报告行覆盖率。我已将指向 gcov 输出的链接添加到 html 中,该链接显示了每一行的行、分支和函数调用的摘要统计信息。
报告清晰直观地展示了系统的哪些部分可能需要进行更大范围的测试。这显然有助于规划未来的测试,但也可与调试结合使用,以查看哪些行和函数已由现有测试执行或遗漏了。它甚至可以帮助提供静态视图,显示错误测试用例触发的行,代替使用调试器。此外,在编写用于新功能的单元测试时,最好检查测试实际触发的行。
它使用 gcov 结合 gcc 来生成统计信息,并使用 lcov 套件来创建 html 报告。显然后两者都必须安装才能获得覆盖率报告,但这将是构建的一个可选功能。它只与 gcc 兼容。
若要生成覆盖率统计信息,请使用 --enable-coverage 运行配置,并在构建和运行测试后执行 make coverage。该进程将在与源和对象文件相同的目录中生成数据文件,并在顶部级别生成一个包含 html 文件的 coverage 目录。我还设置了系统,以便生成包含 html 的 tar 文件。我已附加该文件。
可以在 https://coverage.postgresql.org/ 查看主分支的当前覆盖率。我们关闭了分支覆盖率,因为 gcov 的版本似乎无法完全理解我们的代码;请参见 https://postgresql.ac.cn/message-id/flat/[email protected] 了解背景信息。我们大概会在拥有 gcc-8 后再次启用该功能。
有关 PostgreSQL 测试覆盖率的更多信息,请参阅 https://postgresql.ac.cn/docs/current/regress-coverage.html。
http://gcc.gnu.org/onlinedocs/gcc/Gcov.html 提供 gcov 的详细信息,而 http://ltp.sourceforge.net/documentation/how-to/ltp.php (coverage/lcov 选项卡)提供 lcov 的详细信息。