@
YanSeven 这是个非常好的问题,也是我们设计评分系统时最核心的考量。
你说的"KPI 好看但内部一坨屎"——这正是传统代码质量工具的问题。SonarQube 之类的工具量的是症状( coupling ratio, function length, dead code percentage ),这些确实可以刷:
- 加几个假 import → cohesion 好看了
- 把函数拆成两半 → function length 达标了
- 把代码标 public → dead code 没了
KPI 全绿,代码还是一坨屎。这就是 Goodhart 定律。
sentrux 刻意不用这些代理指标。它量的是 5 个根因——都是图论的基本结构属性:
1. Modularity Q ( Newman 2004 )——依赖图是否自然分簇。加假 import 会让图更接近随机图,Q 反而下降。
2. Acyclicity——有没有循环依赖。没法作弊,有就是有。
3. Depth——依赖链多深。没法作弊,深就是深。
4. Equality ( Gini 系数)——复杂度是否集中在少数文件。把 god function 拆成两个同样烂的函数,Gini 不变。
5. Redundancy——死代码+重复代码占比。
然后用几何平均值聚合( Nash 1950 定理)——刷任何一个单项指标同时拖垮其他指标,总分反而会降。唯一能提总分的方式,是同时改善所有维度,而这只有通过真正的架构改善才能做到。
而且这个分数不是给人当 KPI 用的——是给 AI Agent 当反馈信号用的。Agent 不会办公室政治,不会 P 数据,它看到分低就改代码,改完分高了就是真的高了。
设计文档在这里,数学原理写得很清楚:
https://github.com/sentrux/sentrux/blob/main/docs/quality-signal-design.md当然,没有任何静态分析能检测所有问题( domain correctness, runtime behavior 这些超出了静态图分析的范围)。但在"架构是否在退化"这个维度上,这 5 个根因指标是我们能做到的最诚实的测量。