fix: _measure_coverage 零内容维度不再拉低 overall 覆盖率 - Closes #21
CI / test (pull_request) Successful in 8s
CI / test (pull_request) Successful in 8s
当某个维度(如图表)无内容时(total=0),rate 设为 1.0 且不参与 overall 均分。 此前 0/0 被算作 0%,将 overall 从 86.1% 拉低到 57.4%。 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -227,10 +227,14 @@ def _measure_coverage(ir_data: dict, parsed_data: dict) -> dict:
|
|||||||
if matched:
|
if matched:
|
||||||
covered_sections.add(matched)
|
covered_sections.add(matched)
|
||||||
|
|
||||||
|
def _safe_rate(covered: int, total: int) -> float:
|
||||||
|
"""Return coverage rate. total=0 means nothing to cover → 1.0."""
|
||||||
|
return round(covered / total, 3) if total > 0 else 1.0
|
||||||
|
|
||||||
section_coverage = {
|
section_coverage = {
|
||||||
"total": len(func_sections),
|
"total": len(func_sections),
|
||||||
"covered": len(covered_sections),
|
"covered": len(covered_sections),
|
||||||
"rate": round(len(covered_sections) / max(len(func_sections), 1), 3),
|
"rate": _safe_rate(len(covered_sections), len(func_sections)),
|
||||||
"uncovered": [s["name"] for s in func_sections
|
"uncovered": [s["name"] for s in func_sections
|
||||||
if s["name"] not in covered_sections],
|
if s["name"] not in covered_sections],
|
||||||
}
|
}
|
||||||
@@ -249,7 +253,7 @@ def _measure_coverage(ir_data: dict, parsed_data: dict) -> dict:
|
|||||||
table_coverage = {
|
table_coverage = {
|
||||||
"total_rows": total_rows,
|
"total_rows": total_rows,
|
||||||
"covered_rows": len(covered_rows),
|
"covered_rows": len(covered_rows),
|
||||||
"rate": round(len(covered_rows) / max(total_rows, 1), 3),
|
"rate": _safe_rate(len(covered_rows), total_rows),
|
||||||
}
|
}
|
||||||
|
|
||||||
# ── diagram coverage ──
|
# ── diagram coverage ──
|
||||||
@@ -265,16 +269,18 @@ def _measure_coverage(ir_data: dict, parsed_data: dict) -> dict:
|
|||||||
diagram_coverage = {
|
diagram_coverage = {
|
||||||
"total": len(diagram_rids),
|
"total": len(diagram_rids),
|
||||||
"covered": len(covered_rids),
|
"covered": len(covered_rids),
|
||||||
"rate": round(len(covered_rids) / max(len(diagram_rids), 1), 3),
|
"rate": _safe_rate(len(covered_rids), len(diagram_rids)),
|
||||||
"uncovered": [r for r in diagram_rids if r not in covered_rids],
|
"uncovered": [r for r in diagram_rids if r not in covered_rids],
|
||||||
}
|
}
|
||||||
|
|
||||||
# ── overall ──
|
# ── overall: only include dimensions with actual content ──
|
||||||
rates = [
|
rates: list[float] = []
|
||||||
section_coverage["rate"],
|
if section_coverage["total"] > 0:
|
||||||
table_coverage["rate"],
|
rates.append(section_coverage["rate"])
|
||||||
diagram_coverage["rate"],
|
if table_coverage["total_rows"] > 0:
|
||||||
]
|
rates.append(table_coverage["rate"])
|
||||||
|
if diagram_coverage["total"] > 0:
|
||||||
|
rates.append(diagram_coverage["rate"])
|
||||||
overall = round(sum(rates) / len(rates), 3) if rates else 0.0
|
overall = round(sum(rates) / len(rates), 3) if rates else 0.0
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
Reference in New Issue
Block a user