【问题标题】:MC/DC coverage tools for C/C++ [closed]用于 C/C++ 的 MC/DC 覆盖工具 [关闭]
【发布时间】:2012-08-01 04:19:30
【问题描述】:

我最近参加了CS258免费在线课程,里面提到了一个叫做MC/DC覆盖的代码覆盖,它用于嵌入式软件,比如汽车、飞机上的计算机等......

但我找不到免费工具来显示我的计划的 MC/DC 覆盖范围,有什么建议吗?

【问题讨论】:

  • @AndersK 我用谷歌搜索过,这些链接要么损坏,要么是商业软件,我正在寻找免费软件。我知道sqllite的core有100%的MC/DC Coverage,但是说是gcov做的,在我的记忆中,gcov只能提供statment coverage和branch coverage数据。
  • MC/DC 覆盖标准用于关键嵌入式软件。大多数嵌入式软件无法证明其应用的合理性。这就是您很难找到免费工具来测量它的部分原因。另一部分是测量 MC/DC 覆盖需要比简单的覆盖标准更重的仪器。
  • @PascalCuoq 嗯...这是个问题,但是 sqllite 是如何做到 100% MC/DC 覆盖的呢?与gcov?顺便说一句,大多数嵌入式软件不能证明其应用程序的实际含义是什么?这是否意味着大多数嵌入式软件不进行单元测试,不进行代码覆盖测试,或者它们不进行测试?我正在开发一个嵌入式软件,我们没有单元测试,因为在真实环境中这样做有点棘手
  • - sqlite 是如何...?我不知道,问他们。
  • 我认为关于“大多数嵌入式软件都不能证明它是合理的 (MC/DC)”的说法是不恰当的。确实,很难获得好的测试和覆盖率,而且比简单的分支覆盖更难获得 MC/DC 的完全覆盖。这并不意味着我不应该期望我的供应商进行最好的测试并检查经济是否合理。产品不重要这一事实经常被用作糟糕测试的理由。我们的社会为此变得更糟。

标签: c++ c unit-testing code-coverage


【解决方案1】:

我相信 Project Coverage(现在称为 Project Couverture)可能是非侵入性和开源覆盖分析问题的第一个好的答案。他们最新发布的代码是currently heremile-high 类型的项目演示可以be seen here

关于 SQLite 如何仅使用 gcov 声明 MC/DC 覆盖率,他们基于这样一个事实:在 C 中,逻辑 AND 和 OR 遵循短路评估;这意味着在任何布尔表达式比较中......

if (((A == B) || (C != D)) && (E != F)) ...

...根据定义,C 将在第一个“决定”整体的表达式处停止计算;因此,如果 A 等于 B,则决策已经完成 - 如果不是,则继续下一个表达式,依此类推。这意味着 MC/DC 要求...

Each condition in a decision must be shown to *independently*
          affect the outcome of the decision

...有点“默认覆盖”。

不过,有一个例外 - 请在此处阅读他们的 explanation

【讨论】:

    猜你喜欢
    • 2011-03-02
    • 1970-01-01
    • 2011-02-28
    • 2016-12-16
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 2011-03-17
    相关资源
    最近更新 更多