文档 / 质量与治理
与 N−1 对比度量
Yuli 如何度量质量、始终与上一版本进行比较,并要求智能体在测试前做出改进。
Yuli 持续度量代码质量,并始终将其与上一版本 N−1 进行比较。规则很简单:绝不倒退,只能向前。
一切都会自动度量:打开项目时、每次构建、测试或验证之后、每次新提交时,以及你在编辑器中输入时。
质量面板
从状态栏中的指示器(例如 A · σ 4,5 ▲)或底部面板打开。
| 标签页 | 用途 |
|---|---|
| 概览 | 总体评分、sigma、技术债、整洁代码、智能体最近一次度量、下一步改进以及与 N−1 的对比。 |
| 实践 | 14 项整洁代码实践、它们的收益以及应优先着手的地方。 |
| 度量 | 智能体的度量阶段:结论、检查项、前 → 后对比以及轮次。 |
| 决策 | 重构还是演进?标准、矩阵和经济性判断。 |
| 可维护性 | 可维护性指数、认知复杂度、重复、耦合和技术债。 |
| 预防 | 安全、性能、健壮性和无障碍方面的发现项。 |
| 架构 | 项目的架构规则。 |
| 测试健康度 | 测试套件的状态。 |
| 质量 | 圈复杂度、缺陷帕累托图、覆盖率和测试。 |
| 规模 | 行数、语言、组件和功能点。 |
| 性能 | 上一次性能分析中每个方法的开销,以及 REST 客户端的延迟。 |
| 统计 | 概率、分布和趋势。 |
| 六西格玛 | DMAIC、DPMO、西格玛水平、FPY/RTY、Cpk 和控制图。 |
| 历史 | 每项指标的序列以及相对 N−1 的变化。 |
| 指南 | 用通俗语言解释一切,并带有搜索功能。 |
每个部分都有一个 “?” 按钮,用不含术语的方式进行解释。“无数据”绝不是凭空捏造的零:它会说明还缺什么才能度量。
工具栏按钮
- 刷新:重新度量。
- 记录版本:将本次度量保存为当前版本。之前的版本成为 N−1。
- 打开报告:写入
docs/quality/reporte-calidad.md并在编辑器中打开。
什么是 N−1
Yuli 只保存两个版本:当前版本和上一版本。使用 Git 时,每次在工作区干净的状态下产生新提交,就是一个新版本。点击 记录版本 时以及智能体进行度量时,也会产生新版本。
每项指标都会显示 ▲(变好)、▼(变差)或 =(持平)。只要有一项指标变差,结论就是“已变差”。
评级
总体评级从 A 到 E,综合了 ISO/IEC 25010 的十个属性:功能性、效率、可靠性、健壮性、安全性、可维护性、易理解性、易用性、可移植性和兼容性。
| 评级 | 分数 | 含义 |
|---|---|---|
| A | ≥ 80 | 优秀 |
| B | ≥ 65 | 良好 |
| C | ≥ 50 | 可接受 |
| D | ≥ 35 | 欠佳 |
| E | < 35 | 严重 |
一个严重漏洞会将安全性上限限制为 59(D),一个高危漏洞会限制为 79(B)。严重问题绝不会显示为绿色。
14 项整洁代码实践
每项实践都是一个带目标值的数字,适用于任何语言。
| 实践 | 度量方式 | 目标 |
|---|---|---|
| 描述性 | 描述性命名,以及每 KLOC 的魔法数字 | ≥ 95 % |
| 小函数 | 不超过 60 行的方法 | ≥ 95 % |
| 避免重复 | 位于 6 行及以上重复块中的行 | ≤ 3 % |
| 可读代码 | 认知复杂度 ≤ 15 的方法 | ≥ 95 % |
| 错误处理 | 每 KLOC 的健壮性发现项 | 0 |
| 简单结构 | 圈复杂度 ≤ 10 且嵌套深度 ≤ 4 | ≥ 95 % |
| 风格一致 | 缩进、行长和命名约定 | ≥ 90 |
| 有意义的命名 | 非噪声变量(tmp、aux、data2) |
≥ 98 % |
| 参数少 | 参数不超过 5 个的方法 | 100 % |
| 组合优于继承 | 继承深度 ≤ 3 | 100 % |
| 小类 | ≤ 300 行且 ≤ 20 个方法 | 100 % |
| 无死代码 | 被注释掉、不可达或未使用的代码 | 0 |
| 编写测试 | 含逻辑且有对应测试的文件 | 100 % |
| 持续重构 | 相对 N−1 的倒退 | 0 |
整洁代码得分是所有有数据的实践的平均值。80 分及以上即达标。
六西格玛与缺陷密度
| 指标 | 含义 |
|---|---|
| 缺陷密度 | 每千行代码(KLOC)的缺陷数,附带 95 % 置信区间。 |
| DPMO | 每百万机会缺陷数(每一行代码就是一次机会)。 |
| 西格玛水平(σ) | 以经典刻度表示的 DPMO:6σ = 3.4 DPMO;4σ ≈ 6,210。4.5σ 起为绿色。 |
| Cpk | 将圈复杂度保持在 ≤ 10 的能力:≥ 1.33 即为具备能力。 |
| FPY / RTY | 一次性通过的构建、测试和验证。 |
中等及以上严重级别的发现项计为缺陷。
智能体的度量阶段
这是 8 个阶段中的第五个,位于“实现”和“测试”之间。它只度量任务改动过的代码,并与起始版本进行比较。
三个时间点
| 阶段 | 时机 | 作用 |
|---|---|---|
baseline |
修改代码之前 | 记录任务的起始版本(N−1)。 |
measure |
实现完成后 | 将改动的代码与 N−1 比较,并给出结论。 |
after |
测试通过后 | 与 N−1 比较,并重写报告。 |
何时通过
必须满足以下所有检查:
- 没有任何指标比 N−1 更差。
- **至少修复了一个缺陷(或本来就没有)。**缺陷密度保持不变是不够的。
- 整洁代码有所改善,针对的是低于验收水平的文件。
- 新代码从一开始就是整洁的。
- 逻辑有测试。
如果一个文件有 0 个缺陷且整洁代码得分在 90 分及以上,它就是已接受的。对已接受的文件,只要求不变差。
结论
| 结论 | 结果 |
|---|---|
| 通过 | 任务自动进入“测试”阶段。 |
| 需迭代 | 退回“实现”阶段,并附上需要修正的确切清单,包含文件和行号。 |
| 已达轮次上限 | 轮次已用完:继续进入“测试”,未完成的事项记录在任务中。 |
| 没有可度量的代码 | 该任务没有改动代码。 |
度量不可跳过。如果智能体试图带着未度量的代码进入“测试”“评审”或“交付”,Yuli 会拒绝。这一点对 Claude Code、Kiro、Codex 和 Antigravity 同样适用。
改进绝不会改变软件的行为:用例相同,输入和输出也相同。
在哪里查看结果
绝不在聊天中。智能体只用一行文字给出结论以及前 → 后对比。详细信息位于 度量 标签页和任务栏中,并附有 在“质量”中查看 按钮。
设置
在度量标签页或 .ai/quality.json 中:
| 设置 | 默认值 | 范围 |
|---|---|---|
| 测试前必须进行度量 | 是 | — |
| 实现 ↔ 度量的最大轮次 | 3 | 1 到 10 |
| 验收水平(整洁代码) | 90 | 50 到 100 |
如果存在质量契约,则以契约中的验收值和轮次为准。
在编辑器中
- 每个方法上方:
CC · CoG · MI · líneas · cobertura · costo。 - 第一行:文件的评级、整洁代码得分及其相对 N−1 的变化。
- 提示:无意义的命名、魔法数字或死代码,精确到具体的行。
报告
一份唯一的文档 docs/quality/reporte-calidad.md,在每次记录版本时重写。其中包含“智能体度量”部分。工作数据保存在 .ai/state/quality/ 中,绝不会上传到仓库。
坦诚说明局限
- 复杂度和预防性规则基于文本模式计算,可能存在误报。Java 和 JSP 还会额外使用语法树。
- 估算(上市时间、成本)采用公认的模型,假设条件可编辑。它们用于辅助决策,而非作为合同预算。