C中的代码覆盖率

时间:2008-12-10 18:21:38

标签: c unit-testing code-coverage

我希望用C代码覆盖。我不能依赖像gcov这样的工具,因为我在不同的平台/编译器上工作。

基本上我正在寻找将代码覆盖率合并到我的(自己的实现)单元测试框架中的策略。

4 个答案:

答案 0 :(得分:1)

您是否有如此多的特定于平台的代码,您希望在每个平台上测量单元测试覆盖率?我的意思是,除非您有很多特定于平台的代码,否则您的单元测试覆盖率应该与所有目标相似,因此您可能不需要在每个目标上测量它。将特定于平台的代码移动到特定于平台的模块可能会很有趣,这样特定代码就不会降低公共代码的覆盖级别。

您是在考虑分支机构覆盖范围还是功能覆盖范围?如果是后者,您可以使用gcc来检测代码,以便每个函数将其名称或地址输出到文件中,并编写脚本以汇总来自所有平台的结果。

很抱歉只回答问题...... HTH

答案 1 :(得分:1)

如果您更新了问题以描述您正在使用的平台和编译器,那将非常有用。

我使用的策略是在仿真器上运行系统,该仿真器可以跟踪所有指令。然后可以使用该指令跟踪来计算代码覆盖率。

在UNIX上,您还可以使用ptrace()运行一个进程来单步执行应用程序,从而捕获执行的指令。

如果你只是想要函数调用跟踪,你可以对程序链接表进行一些讨厌的黑客攻击以跳转到一些专门的日志记录代码,但这可能很疯狂。

同样,需要有关执行环境和详细程度的更多详细信息才能给出有用的答案。

答案 2 :(得分:1)

A Page on code-coverage tools表示Brian Marick所谓的GCT通过源到源转换实现代码覆盖,因此您可以转换C代码,然后使用特定于平台的编译器构建它。我没有跟进细节。

答案 3 :(得分:0)

您可以考虑将一组测试用例构建为应用程序本身的一部分,或者作为备用构建目标。然后,应用程序可以自我测试,具有访问所有“内部”的额外好处,而不是尝试使用黑盒技术测试所有分支。