Skip to content
返回维护与 LTS

技术债跟踪与度量

用趋势线客观度量债,使偿还可见且策略数据驱动。

为什么

主观债评估("代码库感觉乱")不可行动且丧气 — 你不能趋势化感觉。客观指标 — 圈复杂度、重复 %、测试覆盖、过时依赖数、TODO 数 — 把债变成可画、可趋势、可设目标的数。度量也改行为:复杂度在仪表盘上时工程师重构以移数。无指标则还债对领导不可见故被砍;有指标则降势是可见胜利维持投资。目标不是单数而是一小组正交指标共描代码库健康。

何时使用

CI 中设一次指标,然后每 sprint 趋势。任一指标退化超阈值则告警。

如何做

1. 选 4-6 正交指标:复杂度、重复 %、覆盖、过时依赖数、TODO(debt) 数、构建时间
2. 埋点:eslint(复杂度/重复)、c8/istanbul(覆盖)、npm outdated(依赖)、grep(TODO)
3. 发到仪表盘:Code Climate、SonarQube 或简单 JSON + Grafana
4. 设阈值:复杂度 >15/函数、覆盖 <70%、过时依赖 >10 则 CI 失败
5. 每 sprint 趋势:存快照、画线、sprint review 审
6. 回归告警:PR 升复杂度 >5 或降覆盖 >2% 则阻塞
7. 仪表盘对全队公开 — 可见是重点

示例

# CI 债指标作业(GitHub Actions)
- name: 复杂度与重复
  run: npx eslint --rule '{"complexity":["warn",15]}' --format json src/ > complexity.json
- name: 覆盖
  run: npx c8 --reporter=json npm test
- name: 过时依赖
  run: npm outdated --json > outdated.json
- name: TODO 数
  run: grep -rc "TODO(debt)" src/ | wc -l > todo-count.txt

# 阈值门控(PR 失败)
node scripts/check-debt-thresholds.js
# 若 复杂度 > 15 均值 || 覆盖 < 70 || 过时 > 10 -> exit 1

# 趋势快照(每 sprint 存)
# debt-snapshots/sprint-42.json
{ "complexity": 8.2, "duplication": 3.1, "coverage": 78,
  "outdated": 6, "todos": 14, "buildMs": 42000 }
# Grafana 画线;sprint review 审趋势线。

常见问题

  • ⚠只跟一指标(覆盖)且刷它 — 100% 覆盖但无断言测试比 60% 真断言更糟。
  • ⚠指标在 CI 但不在仪表盘 — 工程师看不到趋势,数不驱动行为。
  • ⚠无回归门控 — 升复杂度 10 的 PR 因 CI 只查"能构建"不查"腐烂"而发。

最佳实践

  • ✓跟 4-6 正交指标而非一 — 单指标可刷;面板诚实。
  • ✓CI 中放回归门控阻塞退化超阈值的 PR — 防腐烂而非只量。
  • ✓趋势仪表盘对全队公开且每 sprint review 审 — 可见驱动偿还。