资讯动态

用 Repowise 度量代码健康:get_health 工具全解、评分机制与重构工作流

发布时间:2026/10/9 2:09:45 来源:尧图企业网站定制
【免费下载链接】repowiseCodebase intelligence for AI and humans: code health scores, auto-generated docs, git analytics, dead code detection, and architectural decisions via MCP.项目地址https://gitcode.com/gh_mirrors/re/repowise点击查看免费下载Repowise 的 code health 能力为每个文件给出 1–10 的确定性健康分完全本地分析、零 LLM 调用并以真实缺陷语料校准权重——低分意味着更可能藏有 Bug而不只是代码更大。本文以 code-health 技能文档 为主线结合 MCP 服务端、CLI 与评分引擎源码完整讲解get_health的两种调用模式、include/only筛选、结果解读顺序、CLI 等价命令以及如何把它接入重构前/后对比与覆盖率驱动的未测试热点治理工作流。一、核心前提确定性标记 缺陷语料校准Repowise 对每个文件打出 1–10 的分数依据是一组确定性标记deterministic markers覆盖 McCabe 复杂度CCN、深层嵌套、brain method、类内聚LCOM4、god class、克隆检测、未测试热点、函数级改动频率churn、所有权分散度等。整个过程零 LLM 调用、纯本地分析因此结果可复现、可审计、可批量执行。关键设计是权重校准评分权重针对真实缺陷语料库校准所以低分意味着更可能藏有 Bug而非简单的代码更大。这一点也体现在代码上——health_cmd的输出中包含_render_defect_accuracy_line见 health_cmd/command.py用于校验评分排序相对历史缺陷标签的准确度。从 biomarkers/README.md 可以看到当前注册了 26 个检测器按类别划分并设置了扣分上限cap与权重系数类别代表标记扣分上限典型触发条件结构复杂度brain_method、low_cohesion、god_class、nested_complexity、bumpy_road、complex_conditional−2.5LCOM4 ≥ 2god class ≥ 200 NLOC 且 ≥ 15 方法嵌套 ≥ 4 层复合条件 ≥ 3 个运算符大小与复杂度complex_method、large_method、primitive_obsession−1.5函数 CCN ≥ 9过长函数单一签名大量基本类型参数重复代码dry_violation−1.0Rabin–Karp 克隆对按共同变更加权测试覆盖untested_hotspot、coverage_gap、coverage_gradient−2.0热点 × 低覆盖 × 多依赖coverage_gradient随未覆盖比例连续扣分4.0 × (1 − line_coverage_pct/100)仅在有已知覆盖时生效组织维度developer_congestion、ownership_risk、churn_risk、change_entropy、prior_defect、co_change_scatter等−3.5过多活跃作者争夺同一文件长期所有权分散90 天窗口内重写自身大量代码行Hassan 历史复杂度测试质量仅测试文件large_assertion_block、duplicated_assertion_block−0.5连续 ≥ 15 条断言跨测试复制粘贴的断言块错误处理error_handling−0.5空/琐碎catch、except:、Rustunwrap()/.expect()、Go 空白标识符丢弃错误其中hidden_coupling历史共同变更但无显式导入边的文件对被列为advisory只报告不扣分prior_defect权重刻意设为 1.0中性因为与change_entropy/churn_risk高度冗余以最近被 Bug 修复 N 次的可解释发现形式交付。error_handling被设计为可维护性标记而非缺陷预测器但开发者期望健康工具能标出except: pass所以仍然随报告输出。二、两种调用模式Dashboard 与 Targetedget_health是一个 MCP 工具其分派逻辑在 tool_health/tool.py 中实现按 id 查询走details其余按目标是否为有 targets 的文件集合分别构建targeted或dashboard载荷再叠加include门控的数据块。Dashboard 模式get_health()不带 targets返回以fix_first开头的总览一份先修什么的排序队列随后是仓库级 KPI 和最低分文件列表。适合回答这个代码库健康吗或我们应该清理什么。从源码看dashboard 由build_dashboard构建tool_health/dashboard.py核心返回字段包括fix_firstlead 最多 5 个items每项带next_call与totals、kpis、gap_analysis、worst_files、high_leverage_files按weighted_deficit排序、top_findings、unresolved。Targeted 模式get_health(targets[...])传入具体文件路径如[src/x.py, src/y.py]时返回每个文件的分数及驱动该分数的具体标记发现findings。适合重构前/后对比编辑某个文件后重新读取它的分数与标记验证是否真的变健康了解释为什么这个文件被标记报告分数 头部 2–3 条标记发现并用平实的语言说明每条的含义。参数也支持module:name形式的模块级目标未命中任何文件的目标会落入unresolved字段见下文结果解读。三、include与only按需取块get_health(targets[...], include[...])支持以下数据块完整参数表见 docs/agent/MCP_TOOLS.md 的get_health章节include取值作用biomarkers始终返回 findings 列表——哪里有什么问题refactoring确定性的、按影响/成本排序的重构建议coverage已摄入覆盖数据时暴露覆盖情况trend最近健康快照 下降/预计下降信号accuracy、signals、churn_complexity、doc_drift、semantics、unverified其他可选块performance、defect、maintainability、advisory维度过滤器将行过滤进相应队列include是加块往响应里增加你点名要的区块only是减块只保留列出的顶层键identity、totals与recovery字段始终保留。响应默认是有界bounded的limit控制每个排序列表的最大行数默认 20上限 500表示不限cursor控制零基偏移量recovery块会指出下一页的调用方式。官方推荐组合示例get_health(only[fix_first]) get_health(fix_idfix1_...) get_health(targets[src/api/server.py], include[signals]) get_health(include[performance], only[performance_summary]) get_health(include[coverage], only[coverage])注意fix_id、finding_id、plan_id、opportunity_id每次调用只能四选一传两个会返回mode: conflicttool.py 中_selector_conflict检查。工具注册处还提供了大量ToolRecipe快捷配方例如health_fix_firstget_health(only[fix_first])、health_file_self_checkget_health(targets[path], include[refactoring])等。四、如何解读结果六步实战顺序技能文档给出了明确的消费顺序结合源码可进一步展开该重构什么 → 用 Dashboard 模式先看fix_first用get_health(fix_id...)打开某一项获取它的具体步骤steps与要跑哪些测试verify.tests向用户呈现行动计划而非一堆分数。Fix-first 项的完整数据模型在 fix_first/model.py每个FixItem含tiernow/next/later、kindrefactor/perf_fix/finding、improvesdefect/maintainability/performance、effortS/M/L/XL、confidencehigh/medium/low、risk、action带steps与steps_total、verify带测试路径与命令等字段。列表只渲染compact()投影完整条目靠 id 单查——所以 Agent 的推荐做法是先看列表再打开单项。按weighted_deficit排序而不是score——因为分数被下限钳制在 1.0。weighted_deficit的定义见 health/semantics.pymax(8.0 − file_score, 0.0) × max(nloc, 1)单位是健康分点 × NLOC即用文件大小放大健康缺口。这也是high_leverage_files高杠杆文件按weighted_deficit排序与重构队列排序的底层依据。针对具体文件→ 报告分数、头部 2–3 条标记发现并用平实语言解释每条含义例如这个函数 CCN12超过 9 的阈值属于 complex_method避免倾倒原始载荷。宣称这个文件干净之前先检查unresolved出现在该列表里的目标说明什么都没匹配上not_indexed表示该文件尚未被索引需要运行repowise update。编辑被标记文件之前交叉检查get_risk(targets[...])一个既低健康分、又是 churn 热点的文件值得投入最多的谨慎。get_risk工具实现位于 server/mcp_server/tool_risk/get_risk.py。未测试热点 / 覆盖问题→ 告诉用户一旦摄入覆盖率报告覆盖类标记就会点亮。摄入方式为repowise coverage add cov.lcov支持 LCOV / Cobertura / Clovercoverage.py 的.coverage文件还能构建逐测试映射表然后重跑repowise health。只有已知覆盖的文件才会触发coverage_gradient连续扣分——没有摄入≠未覆盖这是刻意的设计避免误伤从未做过覆盖统计的仓库。五、CLI 等价命令repowise health同一个健康引擎在命令行下同样可用命令实现见 health_cmd/command.py命令等价语义repowise healthKPI 最低分文件对应 Dashboard 模式repowise health --refactoring-targets按影响/成本排序的重构队列读取索引中已存队列与 MCP/Web UI 顺序一致repowise health --trend最近 10 个健康快照 下降告警repowise health --generate-code selector为某条重构建议生成重构代码与 diff可选、需 LLM 与 API keyrepowise health --file path深挖单个文件repowise health --module prefix限定目录前缀repowise health --scope production剔除测试文件测试文件天然分更高混在一起会拉低整体读数repowise health --counts code_shape只统计代码形态剔除 git 推导的那一半分数repowise health --format json/md机器可读输出便于repowise health --format json \| jq .kpis管道消费CLI 端与 MCP 端共享同一套语义--scope对应scope参数all/production--counts对应counts参数everything/code_shape--refactoring-targets默认读索引中已存储的队列如需对工作区现场重算可加--recompute大仓库较慢非索引仓库必需。表格输出时fix_first队列置顶FIX_FIRST_ROWS 3随后是平均分/热点分/最差文件三行 KPI、分布行、缺陷准确度行与最低分 20 个文件表。六、覆盖率摄入repowise coverage add覆盖率是未测试热点标记的开关其唯一入口是repowise coverage命令组coverage_cmd.pyrepowise coverage add # 自动发现 lcov.info、.coverage 等 repowise coverage add coverage/lcov.info repowise coverage add web.lcov api.lcov # 多份报告合并命中优先 repowise coverage add artifacts/**/lcov.info # 每个分片的报告引号包裹 glob repowise coverage add web/coverage/lcov.infoweb # 报告内路径以 web/ 为前缀 repowise coverage add .coverage # 逐文件覆盖 逐测试映射要点解析器可自动检测LCOV / Cobertura / Clover也可用--format强制指定--strict在部分报告文件无法映射到仓库树时报错。当报告携带 contextscoverage.py 用coverage run --contextstest生成的.coverage或逐测试 lcov时还会构建逐测试测试→代码映射——这正是哪些测试覆盖了这个变更impacted tests与repowise coverage check的基础无 contexts 的报告只摄入逐文件覆盖。摄入后无需任何额外 flagrepowise health会自动把已摄入的覆盖折进评分见 health_cmd/command.py 中对_load_persisted_coverage_map的调用。七、按仓库定制.repowise/health-rules.json健康评分支持仓库级与路径级定制配置加载逻辑在 health/config.pyHEALTH_RULES_FILENAME health-rules.json仓库级disabled_biomarkers某些检测器永不触发路径级rules一组 glob →disabled_biomarkers映射例如对历史遗留目录关闭complex_method噪音同一文件被多条规则命中时取各规则禁用标记的并集。{ disabled_biomarkers: [dry_violation], rules: [ {path: src/legacy/**, disabled_biomarkers: [complex_method]} ] }CLI 运行repowise health时会加载该配置并转成分析器配置HealthConfig.to_analyzer_configMCP/Web UI 读数与 CLI 一致。注意--scope/--counts对已存储的--refactoring-targets队列和--trend快照不生效它们是存储时的既定读数CLI 会给出提示要应用需加--recompute现场重算。八、可用性前提与错误处理技能文档给出了两条前提没有仓库get_health报告 no repository 时先执行repowise init。技能 frontmatter 也注明仅在存在.repowise/目录的已索引代码库中触发本技能。无需 LLM即使 wiki 是模板渲染的健康评分照常计算——只要仓库被索引过健康数据就可用。另外两个与新鲜度相关的约定get_health永不重算先git commit再运行repowise update才能看到新数字工具 docstring 与 MCP_TOOLS.md 均明确此点返回的_meta.health_analysis会说明是否存在已存储的分析以及它描述的是哪个 commit方便 Agent 判断读数新旧。九、实战组合一套完整的健康工作流把上面所有能力串起来一个可复制的 Agent/开发者工作流是初入仓库 →get_health()dashboard读fix_first前三项与kpis得出整体健康度 最该动哪里选一项 →get_health(fix_idfix1_...)取得具体步骤与应跑的测试动手前 → 对目标文件同时查get_risk(targets[...])与get_health(targets[...], include[refactoring])确认它是否是低健康 × 高变更的高危文件并拿到带影响/成本排序的重构方案重构后 → 重跑get_health(targets[...])做前后对比用weighted_deficit的下降而非绝对分数衡量改善需要覆盖信号 →repowise coverage add report摄入或首次repowise initrepowise update建索引让untested_hotspot/coverage_gap/coverage_gradient点亮随后repowise health出完整报告仓库级治理 → 用repowise health --format json接入 CI用.repowise/health-rules.json屏蔽噪音标记让分数反映真实的缺陷风险而非代码体积。通过 code-health 技能 定义的这套按需取块、按缺陷影响排序、零 LLM 可复现的方法论Repowise 把代码健康从主观评审变成了可校准、可对比、可自动化的工程指标。赞分享【免费下载链接】repowiseCodebase intelligence for AI and humans: code health scores, auto-generated docs, git analytics, dead code detection, and architectural decisions via MCP.项目地址https://gitcode.com/gh_mirrors/re/repowise点击查看免费下载相关推荐Repowise 代码健康分析实战指南从 get_health 到 repowise health 的完整工作流Repowise 代码健康分析实战指南从 get_health 到 repowise health 的完整工作流 Repowise 的 Code HealthRepowise 技术谱系从五十年软件工程研究到代码健康评分与重构建议Repowise 技术谱系从五十年软件工程研究到代码健康评分与重构建议 Repowise 的调用图、Git 历史信号、健康评分与重构计划每一项都建立在已公开Python装饰器完整清单awesome-python-decorator资源库详解Python装饰器完整清单awesome python decorator资源库详解 Python装饰器是Python编程中一个强大而优雅的特性它允许开发者上一篇如何快速掌握WeNet架构开源语音识别框架的核心设计与实践指南下一篇国内大模型轻量化突破Magistral-Small-2509模型实现25亿参数高效部署创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑