乐于分享
好东西不私藏

AI 帮你发现架构漂移与认知过载:扎根于十二本经典工程著作的 代码审查

AI 帮你发现架构漂移与认知过载:扎根于十二本经典工程著作的 代码审查

一个 CL 命令,28/100 健康分,十二本经典工程著作的诊断依据


很多工程师都有过这样的经历:一段代码看起来“能用”,但团队维护它越来越吃力。改一处,炸一片;加新功能,改老逻辑;半年后没人敢动,一年后重写。

传统的 Linter(ESLint、Pylint)只检查语法和风格错误,它们抓不住架构漂移领域模型失真知识孤岛等问题——而这些问题往往在无人察觉的几个月里持续拖慢团队。

brooks-lint 正是为此而生。

它不是一个简单的代码检查工具,而是一个植根于十二本经典软件工程著作的 AI 代码审查系统。你只需一条命令,就能得到一份带有健康分(0–100)书目出处症状 → 根源 → 后果 → 对策结构化诊断的报告。


一、它解决的问题:六类衰退风险

brooks-lint 从六个维度诊断你的代码,每一个维度都来自经典著作的沉淀:

衰退风险
诊断问题
出处
🧠 认知过载
理解这段代码要花多少脑力?
《代码大全》《重构》《领域驱动设计》……
🔗 变更扩散
改一处会牵连多少不相干的东西?
《重构》《架构整洁之道》《程序员修炼之道》……
📋 知识重复
同一个决策是否在多处被表达?
《程序员修炼之道》《重构》《领域驱动设计》
🌀 偶发复杂度
代码是否比问题本身更复杂?
《重构》《代码大全》《人月神话》……
🏗️ 依赖失序
依赖是否朝一致的方向流动?
《架构整洁之道》《人月神话》《程序员修炼之道》……
🗺️ 领域模型失真
代码是否忠实地表达了业务领域?
《领域驱动设计》《重构》

这些维度不是凭空发明的,而是从十二本经典著作中提炼出来的——从 Brooks 的《人月神话》(1975)到 Winters 等人的《Google 软件工程》(2020)。


二、实际效果:一段代码,28/100 分

来看一个例子。这是 AI 代码生成时代常见的一段 Python:

classUserService:
defupdate_profile(self, user_id, name, email, avatar_url):
        user = self.db.query(f"SELECT * FROM users WHERE id = {user_id}")
        user['email'] = email
        ...
if user['email'] != email:   # 永远为 False
            self.smtp.send(...)
        points = user['login_count'] * 10 + 500
        self.db.execute(f"UPDATE loyalty SET points={points} WHERE user_id={user_id}")

/brooks-review 命令的输出:


健康分:28/100

这个方法把四个不相干的业务职责塞进同一个函数,含有一个会静默吞掉“邮箱变更通知”的逻辑 bug,并且对 SQL 注入门户大开。

🔴 变更扩散

症状:update_profile 在同一个方法体里完成资料字段更新、邮箱变更通知、积分重算和缓存失效。

根源: Fowler — 《重构》— 发散式变更;Hunt & Thomas — 《程序员修炼之道》— 正交性

后果: 任何对积分公式的改动都可能破坏邮件通知,反之亦然。每次修改都同时背负着四个不相干领域的回归风险。

对策: 抽出 NotificationServiceLoyaltyService 和 UserCacheInvalidatorUserService.update_profile 应只做编排。

🔴 领域模型失真

症状:user['email'] = email 在 if user['email'] != email 之前就覆盖了旧值——条件恒为 False,通知是死代码。

根源: McConnell — 《代码大全》— 第 17 章:非常规控制结构

后果: 用户改邮箱时永远收不到通知。这是静默的数据完整性失效。

对策: 在任何修改之前先捕获 old_email = user['email'],拿它(而非 user['email'])做比较。

(另有 6 条诊断,含 SQL 注入、依赖失序、魔法数字)


三、架构审查:带依赖图的可视化诊断

在架构审查模式(/brooks-audit)下,brooks-lint 会生成一张 Mermaid 依赖图,模块按严重度着色:红=Critical,黄=Warning,绿=Clean

这张图在 GitHub、Notion 等 Markdown 环境中原生渲染,无需额外工具。一眼就能看出循环依赖依赖倒置的位置。


四、基准测试:94% vs 16%

在 3 个真实场景(PR 审查、架构审查、技术债评估)上测试:

评估项
brooks-lint
仅用 Claude
结构化诊断(症状→根源→后果→对策)
✅ 100%
❌ 0%
每条诊断带书目出处
✅ 100%
❌ 0%
严重度标签(🔴/🟡/🟢)
✅ 100%
❌ 0%
健康分(0–100)
✅ 100%
❌ 0%
识别“变更扩散”
✅ 100%
✅ 100%
整体通过率94%16%

差距不在于 AI 能不能发现问题——而在于它能否每一次都稳定地发现,并附上可溯源的证据和可落地的对策。

这就是 brooks-lint 的核心价值:把零散、偶发的 AI 代码审查,变成稳定、可复现、有依据的工程实践。


五、横向对比:和传统工具有什么区别?

brooks-lint
ESLint / Pylint
GitHub Copilot Review
原生 Claude
检测语法与风格问题
~
结构化诊断链
将诊断溯源到经典著作
一致的严重度标签
~
架构层面的洞察
~
~
领域模型分析
~
零配置、无需安装插件
适用于任何语言

brooks-lint 不是要取代你的 Linter。 它捕捉的是 Linter 抓不到的东西——架构漂移、知识孤岛、领域模型失真。


六、安装与使用:一条命令搞定

Claude Code(推荐)

/plugin marketplace add hyhmrright/brooks-lint
/plugin install brooks-lint@brooks-lint-marketplace

安装后,短命令自动生效:

命令
作用
/brooks-review
PR 级代码审查
/brooks-audit
完整架构审查(含依赖图)
/brooks-debt
技术债评估
/brooks-test
测试套件健康审查
/brooks-health
健康仪表盘——全部四个维度
/brooks-sweep
全面扫描 + 自动修复

其他平台

brooks-lint 以标准 Agent Skills 形式分发,支持:

  • Gemini CLI · Codex CLI · OpenCode · Cursor · Windsurf · Antigravity · pi · GitHub Copilot · Kiro · Factory Droid

一条命令安装:

curl -fsSL https://raw.githubusercontent.com/hyhmrright/brooks-lint/main/scripts/install.sh | bash -s -- <平台>

项目级配置

在项目根目录放一个 .brooks-lint.yaml

version:1

disable:
-T5# 跳过覆盖率指标检查

severity:
R1:suggestion# 下调“认知过载”的严重度

ignore:
-"**/*.generated.*"
-"**/vendor/**"

七、为什么是这些书,为什么是现在?

在 AI 辅助编程的时代,我们写代码比以往任何时候都更快、更多。但六十年软件工程沉淀下来的洞见并没有改变:

“软件的复杂性是本质属性,而非偶然属性。”—— Frederick Brooks

AI 能帮你更快地写代码,却无法告诉你正在建造的是大教堂还是焦油坑。brooks-lint 弥合了这道鸿沟——它把十二本经典工程著作中来之不易的智慧,带进你现代的开发工作流。

这些作者识别出的衰退风险,如今比以往更切题:

  • 接入 AI 助手并不能修复认知过载或领域模型失真;
  • 生成更多代码会加剧变更扩散和知识重复;
  • 跑得更快让偶发复杂度和依赖失序更加危险。

八、结语

brooks-lint 不是要告诉你怎么写代码——它让你用六十年软件工程的集体智慧来审视自己的代码。

“一个孩子要十月怀胎,无论派多少人去都一样。”—— Frederick Brooks,《人月神话》(1975)

五十年过去,Brooks 依然正确。McConnell、Fowler、Martin、Hunt & Thomas、Evans、Ousterhout、Winters、Meszaros、Osherove、Feathers 以及 Google 测试团队同样如此。

如果你想让团队在 AI 时代写出更可维护的代码,不妨试试 brooks-lint。


⭐ 如果这个工具让你以不同的眼光看待自己的代码库,欢迎前往 GitHub 点个 Star!

GitHub:hyhmrright/brooks-lint  |   官网:https://hyhmrright.github.io/brooks-lint/


本文内容基于 brooks-lint v1.3.0