跳转到内容

质量信号

sentrux 计算一个连续分数,称为质量信号。它是 5 个根因指标的几何平均值,每个指标归一化到 [0, 1],然后缩放到 0–10,000。

quality_signal = (modularity × acyclicity × depth × equality × redundancy) ^ (1/5) × 10000

纳什社会福利定理(1950)证明几何平均值是满足以下条件的唯一聚合方式:

  1. 帕累托最优——如果所有分数提升,信号就提升
  2. 对称性——所有根因权重相等
  3. 独立性——无关维度不影响结果

实际意义:你无法在拉高一个指标的同时拉低另一个指标来刷分。提升几何平均值的唯一方法是改善所有因子。这迫使真正的架构改善发生。

字母评级制造了人为的边界。79 分 = B,81 分 = A。AI 代理会去刷边界而不是真正改善。使用连续分数,每 +1 分的意义相同。代理在改善边际趋近零时自然收敛——就像梯度下降一样。

代理指标(耦合率、死代码率、函数长度)度量的是症状,而非根因。AI 代理可以刷单个代理指标——添加假的导入来提升内聚度,表面上拆分函数。指标提升了,但代码并没有变好。

根因指标度量的是基本的结构属性,只能通过真正的架构改变来提升。

一个代码库是一个有向图 G = (V, E),其中 V = 文件,E = 依赖关系。这个图恰好有 5 个独立的结构属性:

指标理论度量内容边还是节点?
模块性Newman 2004边是否聚集成模块?边
无环性Martin 2003是否存在环形边?边
深度Lakos 1996边链有多深?边
均衡性Gini 1912节点属性是否集中?节点
冗余度Kolmogorov是否存在多余的节点?节点

3 个边属性 + 2 个节点属性 = 总共 5 个。再增加更多将是冗余的。

modularity = (Q + 0.5) / 1.5 # 有界 [-0.5, 1] → [0, 1]
acyclicity = 1 / (1 + cycles) # 无界 → sigmoid
depth = 1 / (1 + max_depth / 8) # 无界 → sigmoid,中点为 8
equality = 1 - gini # 有界 [0, 1] → 取反
redundancy = 1 - ratio # 有界 [0, 1] → 取反

5 个指标中有 3 个没有任意参数。只有 2 个需要 sigmoid 中点。

Iteration 1: signal = 5800 → equality is lowest (3500)
→ refactor god function → equality improves → signal = 6300
Iteration 2: signal = 6300 → modularity is lowest (5500)
→ extract module → modularity improves → signal = 6900
Iteration 3: signal = 6900 → redundancy is lowest (7200)
→ remove dead functions → redundancy improves → signal = 7400
...diminishing returns → natural convergence

没有人为的停止点。AI 在每次变更的边际改善趋近零时自然收敛——与梯度下降完全一致。

理论年份提供的内容
控制论(Wiener)1948反馈回路架构
系统工程(钱学森)1954分解为独立子系统
Kolmogorov 复杂度1963理论基准真值
图模块性(Newman)2004模块性 Q 指标
纳什议价1950几何平均值作为最优聚合
Gini 系数1912不均衡度量
Tarjan 算法1972环检测
Lakos 层次化1996依赖深度