SuperAPI AI 工具集

crap-score

测试与质量

查看项目

更新于 10-16 00:32

技能介绍

用途:针对指定的 .NET 方法、类或单个源文件计算 CRAP 分数,识别复杂度高且测试覆盖不足的代码,用于评估测试质量并确定优先补测的代码。

主要能力:CRAP 分数结合圈复杂度与代码覆盖率,公式为 CRAP(m)=comp(m)^2×(1-cov(m))^3+comp(m)。风险分级:<5 低、5-15 中等、15-30 高、>30 严重。可输出按分数排序的方法表格,并给出补测或降低复杂度的建议。

使用方式:先收集覆盖率数据。若尚无 Cobertura XML,需先运行 dotnet test 收集覆盖率,例如 coverlet.collector 使用 dotnet test --collect:"XPlat Code Coverage" --results-directory ./TestResults;.NET 9 使用 dotnet test -- --coverage --coverage-output-format cobertura --coverage-output ./TestResults;.NET 10+ 使用 dotnet test --coverage --coverage-output-format cobertura --coverage-output ./TestResults。随后统计目标方法的圈复杂度(基础为 1,每个 if、else if、case、for、foreach、while、do...while、catch、&&、||、??、?.、三元、模式匹配分支各加 1),从 Cobertura XML 提取每个方法的行覆盖率,再套用公式计算并排序展示。

适用场景:用户明确要求计算特定方法、类或文件的 CRAP 分数;需要判断哪些方法因低覆盖高复杂度而风险较高;需要优先安排补测;希望超越单纯覆盖率百分比评估测试质量。

限制:不适用于仅运行测试、编写新测试或只想要覆盖率百分比而无复杂度分析的场景。覆盖率数据必须重新生成,旧数据会导致结果失真;Cobertura 中异步方法、lambda 等名称可能与源码不一致,需按行范围匹配;除非明确要求,应排除自动生成文件(如 .Designer.cs、.g.cs)。当方法复杂度本身已不低于阈值时,仅靠提高覆盖率无法使 CRAP 降到阈值以下,需先重构降低复杂度。