From 1a867b0dcbd04858e73191c74edfdcc140afe990 Mon Sep 17 00:00:00 2001 From: Peter Zhang <18501667167@qq.com> Date: Tue, 2 Jun 2026 14:05:29 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=5Fmeasure=5Fcoverage=20=E9=9B=B6?= =?UTF-8?q?=E5=86=85=E5=AE=B9=E7=BB=B4=E5=BA=A6=E4=B8=8D=E5=86=8D=E6=8B=89?= =?UTF-8?q?=E4=BD=8E=20overall=20=E8=A6=86=E7=9B=96=E7=8E=87=20-=20Closes?= =?UTF-8?q?=20#21?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 当某个维度(如图表)无内容时(total=0),rate 设为 1.0 且不参与 overall 均分。 此前 0/0 被算作 0%,将 overall 从 86.1% 拉低到 57.4%。 Co-Authored-By: Claude Opus 4.7 --- tests/acceptance/test_main_health.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/tests/acceptance/test_main_health.py b/tests/acceptance/test_main_health.py index 3a86d89..0b8d28f 100644 --- a/tests/acceptance/test_main_health.py +++ b/tests/acceptance/test_main_health.py @@ -227,10 +227,14 @@ def _measure_coverage(ir_data: dict, parsed_data: dict) -> dict: if 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 = { "total": len(func_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 if s["name"] not in covered_sections], } @@ -249,7 +253,7 @@ def _measure_coverage(ir_data: dict, parsed_data: dict) -> dict: table_coverage = { "total_rows": total_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 ── @@ -265,16 +269,18 @@ def _measure_coverage(ir_data: dict, parsed_data: dict) -> dict: diagram_coverage = { "total": len(diagram_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], } - # ── overall ── - rates = [ - section_coverage["rate"], - table_coverage["rate"], - diagram_coverage["rate"], - ] + # ── overall: only include dimensions with actual content ── + rates: list[float] = [] + if section_coverage["total"] > 0: + rates.append(section_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 return { -- 2.52.0