【发布时间】:2014-01-16 00:56:40
【问题描述】:
我正在尝试找到一个 python 代码覆盖工具,它可以测量语句中是否覆盖了子表达式:
例如,我想看看下面的例子中是否涵盖了condition1/condition2/condtion3?
if condition1 or condition2 or condition3: x = true_value
【问题讨论】:
-
他想知道一个条件是否被评估为真,是否被评估为假,和/或改变其状态是否会影响整个决策(可以说它被视为控制决定结果)。 (有关详细信息,请参阅 MC/DC 报道)。
-
我认为实现这一点可能并非易事。 coverage 有 Ned Batchelder 的 coverage - 但是它只涵盖分支覆盖范围,而不是表达式 AFAIK 的一部分。
-
正如这个问题/答案 stackoverflow.com/questions/677219/condition-coverage-in-python 所指出的那样——coverage.py 库/工具实现了“分支覆盖”——但我不确定它是否像你一样对条件进行全面覆盖问。
-
谢谢,詹姆斯。 AFAIK,coverage.py 在这里不支持我的用例,这就是我问这个问题的原因。
-
分支覆盖 MC/DC覆盖。是的,这样做并非易事。必须检测代码以收集条件执行时的状态;理想情况下,这样做的成本很低,因此性能不会受到严重影响(收集了大量数据,通常在内部循环中!)。还需要对这些条件状态进行执行后分析,以确定它们是否是因果关系。最后,您需要某种方式来显示答案,因为它是根据部分行来表示的。 (我使用强大的工具为 Rockwell Relay Ladder 逻辑引擎构建了这个)。
标签: python code-coverage python-coverage