【发布时间】:2016-01-14 10:19:01
【问题描述】:
我正在使用 SonarQube 4.5.4,我想知道单元测试的测试字段中的度量公式 - 请考虑下图。我得到你在下面找到的值。看完SonarQube's documentation on metrics我还是一头雾水。
我只找到以 % 为单位的单元测试成功密度。设 ρ 为密度,mu 为单元测试数,me 为单元测试错误数,mf 为单元数测试失败。然后我们有
这是正确的吗?其他值的公式是什么?
【问题讨论】:
我正在使用 SonarQube 4.5.4,我想知道单元测试的测试字段中的度量公式 - 请考虑下图。我得到你在下面找到的值。看完SonarQube's documentation on metrics我还是一头雾水。
我只找到以 % 为单位的单元测试成功密度。设 ρ 为密度,mu 为单元测试数,me 为单元测试错误数,mf 为单元数测试失败。然后我们有
这是正确的吗?其他值的公式是什么?
【问题讨论】:
UT Coverage(或覆盖率)计算如下(注意所有变量都是Double):
Double utCoverage = ((((totalConditions - totalUncoveredConditions) + totalLines) - totalUncoveredLines) / (totalConditions + totalLines)) * 100;
使用conditions_to_cover、uncovered_conditions、lines_to_cover 和uncovered_lines 指标作为值。
IT 覆盖率和总体覆盖率使用相同的公式计算,但使用的指标不同。
对于 IT 覆盖率,您必须使用 it_conditions_to_cover、it_uncovered_conditions、it_lines_to_cover 和 it_uncovered_lines 指标。
对于整体覆盖率,您必须使用 overall_conditions_to_cover、overall_uncovered_conditions、overall_lines_to_cover 和 overall_uncovered_lines 指标。
如果您正在寻找条件覆盖公式,这里是:
Double conditionCoverage = ((totalConditions - totalUncoveredConditions) / totalConditions) * 100;
以下是线路覆盖:
Double lineCoverage = ((totalLines - totalUncoveredLines) / totalLines) * 100;
同样,您必须使用正确的指标来提供公式(见上文。)
希望对你有帮助。
注意:这是从我的综合 pdf 报告生成工具中获取的。它已在代表超过 2 mio NCLOC 的项目上成功测试,并用于生成每周报告(换句话说,我非常有信心它可以工作。)
【讨论】:
到目前为止,我唯一能回答的是你的公式不正确,因为你误读了括号。
正确的公式是,用你的符号:
您的屏幕截图中的其他值在文档中定义(其中“Coverage”是您的“Unit Test Coverage”):
条件覆盖率 = (CT + CF) / (2*B)
线路覆盖 = LC / EL
覆盖率 = (CT + CF + LC)/(2*B + EL)在哪里
CT = 至少一次被评估为“真”的条件
CF = 至少一次被评估为“假”的条件
LC = 覆盖线 = lines_to_cover - 未覆盖线B = 条件总数
EL = 可执行行总数 (lines_to_cover)
这些数字介于 0 和 1 之间,乘以 100 得到百分比。
【讨论】:
coverage 表示 UT 覆盖范围。 IT 覆盖率和总体覆盖率的公式相同,但使用的指标不同(请参阅我的答案)