lucasacoutinho/dds
GitHub: lucasacoutinho/dds
利用多 Agent 协作和 LLM-as-Judge 保真度验证,将遗留代码库逆向工程为带有精确源码引用的 Arc42 架构规范文档。
Stars: 0 | Forks: 0
# 开发驱动规范 (DDS):将遗留代码库逆向工程为 Arc42 规范
DDS 是 SDD 的逆过程。SDD 将规范转化为代码;DDS 将代码转化为规范。将其用于遗留代码库——老旧的 PHP、.NET Framework、Delphi、经典的 Java EE、不可触碰的 Rails 单体应用——以生成足够详细的基于 Arc42 的规范,从而足以在现代技术栈中**重建系统**。
## 为什么会有这个项目
遗留代码库在数十年间积累了大量未记录的业务知识。数据校验隐藏在控制器中。业务计算隐藏在存储过程中。工作流隐藏自 2012 年以来就无人问津的 `IF` 语句里。系统现代化往往陷入停滞,因为没人能回答“这个系统到底在做什么?”
DDS 回答了这个问题。它会生成一份基于引用的规范,其中每一个关于行为的陈述都可以追溯到遗留源代码中的 `file:line`(文件:行号)。然后,fidelity-judge(保真度评估)Agent 会对这些引用进行随机抽样,并与实际代码进行比对验证,在编造的规则混入规范之前将其剔除。
## 主要特性
- **引用优先** — 每一个关于行为的陈述都附带一个 `[file:line]`(文件:行号)引用。未注明引用的陈述将无法通过 fidelity-judge 的验证。
- **自下而上的挖掘** — 从具体组件(SQL、处理器、模块)开始,向上综合提炼出整体架构。这是对 SDD 自上而下流程的逆向操作。
- **LLM-as-Judge(大模型作为评判者)保真度验证** — 对声称的规则进行随机抽样,并在源代码中逐行验证。有效捕获逆向工程中的头号风险:大模型幻觉(hallucination)产生的虚假业务规则。
- **多 Agent 上下文隔离** — 包含 8 个专用 Agent,每个都有明确的职责(surveyor、module-excavator、data-archaeologist、business-rule-extractor、integration-mapper、dead-code-detector、spec-assembler、fidelity-judge)。没有任何一个 Agent 会将整个代码库全部装入其上下文中。
- **按模块分解 + 全局注册表** — 每个模块对应一个 `spec/modules/.md` 文件,外加全局的 `spec/business-rules.md`、`spec/sql-inventory.md`、`spec/data-dictionary.md`、`spec/integrations.md`、`spec/dead-code.md` 文件。
- **基于 Arc42 的输出** — 统一的规范遵循 arc42 的 12 节模板(引言、约束、上下文、解决方案策略、构建块、运行时、部署、概念、决策、质量、风险、术语表),这些内容均从观察到的代码模式中重构而来。
## 快速开始
本仓库是一个单插件的 Claude Code 市场。将其添加为市场源,然后安装该插件:
```
/plugin marketplace add lucasacoutinho/dds
/plugin install dds@lucasacoutinho/dds
```
启用后,请按顺序运行:
```
# 阶段 1:快速 reconnaissance — 检测 stack、modules、entry points
/dds:survey
# 阶段 2:逐 module 深度 excavation(繁重;选择一个开始)
/dds:excavate
# 或者一次性处理所有 modules:
/dds:excavate --all
# 阶段 4:组装统一的 Arc42 spec
/dds:assemble
```
输出结果将保存到 `spec/` 目录(可见,会被提交到 Git)以及 `.specs/scratchpad/` 目录(被 Git 忽略的子 Agent 工作区)中。
## 整体流程
```
Phase 1: Reconnaissance (top-down, fast)
└─ /dds:survey
surveyor agent → spec/00-survey.md
Phase 2: Excavation (bottom-up, heavy)
└─ /dds:excavate
├─ module-excavator → spec/modules/.md (line-by-line)
├─ data-archaeologist → spec/sql-inventory.md + spec/data-dictionary.md
├─ integration-mapper → spec/integrations.md
├─ business-rule-extractor → spec/business-rules.md
├─ dead-code-detector → spec/dead-code.md
└─ fidelity-judge → verifies sampled citations against source
Phase 4: Arc42 Assembly
└─ /dds:assemble
spec-assembler → spec/01-introduction-goals.md ... spec/12-glossary.md
```
## 命令
| 命令 | 用途 | 开销 |
|---|---|---|
| [`/dds:survey`](skills/survey/SKILL.md) | 阶段 1 — 检测技术栈、模块、入口点、部署拓扑结构及挖掘成本 | 快速(约 30 分钟) |
| [`/dds:excavate`](skills/excavate/SKILL.md) | 阶段 2 — 针对每个模块进行深入挖掘,采用引用优先的陈述并进行保真度验证 | 高(数小时/数天) |
| [`/dds:assemble`](skills/assemble/SKILL.md) | 阶段 4 — 将各模块的规范综合提炼为 Arc42 12 节规范 | 中等 |
## Agents
以下的 Agents 均与具体模型无关 —— Agent 的元数据中并没有绑定特定模型。每个 SKILL.md 在调度子 Agent 时都会推荐一个合适的能力级别,但最终的选择取决于宿主平台和用户。
| Agent | 建议能力 | 何时使用 |
|---|---|---|
| [`dds:surveyor`](agents/surveyor.md) | 快速,广度优先 | 阶段 1 侦察 — 技术栈、模块映射图、入口点 |
| [`dds:module-excavator`](agents/module-excavator.md) | 强阅读,结构化输出 | 每个模块对应一个 — 逐行阅读,生成模块规范 |
| [`dds:data-archaeologist`](agents/data-archaeologist.md) | 强 SQL/数据库推理 | 提取数据库 schemas、SQL 查询、存储过程、ORM 映射 |
| [`dds:business-rule-extractor`](agents/business-rule-extractor.md) | 强推理能力 | 寻找校验、计算、工作流、authz(授权)规则;标注所有来源 |
| [`dds:integration-mapper`](agents/integration-mapper.md) | 快速模式识别 | 外部边界 — HTTP、队列、文件 I/O、定时任务、FFI |
| [`dds:dead-code-detector`](agents/dead-code-detector.md) | 轻量级 | 查找带有置信度评级的疑似无用代码 |
| [`dds:spec-assembler`](agents/spec-assembler.md) | 强综合能力 | 将各模块规范综合提炼为 Arc42 各节内容 |
| [`dds:fidelity-judge`](agents/fidelity-judge.md) | 强精准推理 | 随机抽样引用并与源代码进行比对验证 |
## 输出结构
```
spec/ # DDS primary output — visible, committed
├── 00-survey.md # Phase 1: stack, module map, entry points
├── 01-introduction-goals.md # Arc42 §1
├── 02-constraints.md # Arc42 §2
├── 03-context-scope.md # Arc42 §3
├── 04-solution-strategy.md # Arc42 §4
├── 05-building-blocks.md # Arc42 §5
├── 06-runtime.md # Arc42 §6
├── 07-deployment.md # Arc42 §7
├── 08-concepts.md # Arc42 §8
├── 09-decisions.md # Arc42 §9 — reconstructed ADRs
├── 10-quality.md # Arc42 §10
├── 11-risks-debt.md # Arc42 §11
├── 12-glossary.md # Arc42 §12
├── modules/.md # Per-module deep dive
├── data-dictionary.md # Tables, columns, types, constraints
├── sql-inventory.md # Every query + stored proc with purpose
├── business-rules.md # Validations, calculations, workflows, authz
├── integrations.md # External system boundaries
├── dead-code.md # Orphaned code with verification flags
└── .dds-state.json # Per-module excavation state
```
## 模式
本插件实现了以下关键模式:
- **引用优先的陈述** — 每一个关于行为的陈述都标注了 `[file:line]`。未标注的陈述将在 fidelity-judge 检查时自动失败。有效降低大模型幻觉引发的虚假业务规则风险。
- **随机抽样的保真度验证** — LLM-as-Judge 抽取 10% 的引用(可配置),阅读被引用的代码行并进行保真度评分。能在错误规则进入规范之前,提前捕获 WRONG_LINES、WRONG_FILE 和 HALLUCINATION(幻觉)等判定结果。
- **强制逐行阅读** — Module-excavator 的提示词要求必须对每一个非平凡文件执行 Read 操作(禁止仅从文件名或注释中进行粗略推断)。
- **多 Agent 上下文隔离** — 每个模块对应一个 Agent + 每个关注点(数据、集成、规则、死代码)对应一个 Agent。没有任何一个 Agent 会将整个代码库全盘放入上下文中。
- **基于暂存区的综合** — 每个 Agent 先将原始发现转储到 `.specs/scratchpad/.md`,然后再将经过验证的陈述综合提炼到规范中。
- **基于磁盘的状态机** — `spec/.dds-state.json` 记录每个模块的状态:`unexplored → surveyed → excavated → excavated_with_warnings`。
## 与 SDD 的关系
DDS 和 SDD 在概念上是互补的,但在操作上是解耦的。DDS 负责生成规范;如果你想驱动代码重写,可以手动调用 SDD 的 `/plan-task` 和 `/implement-task`,并指向对应的 `spec/modules/.md` 文件。在 v1 版本中没有自动化的衔接桥梁。
| 维度 | SDD (正向) | DDS (逆向) |
|---|---|---|
| 方向 | 规范 → 代码 | 代码 → 规范 |
| 流程 | 自上而下的设计 | 自下而上的挖掘 |
| 业务分析师 | 发明验收标准 | 从代码中提取规则 |
| 架构阶段 | 综合设计 | 重构设计 |
| 评判者 (Judges) | 评估计划质量 | 评估规范保真度 |
## 感性逆向工程 vs 忠实逆向工程
fidelity-judge 是 DDS 区别于“让我读读代码然后写个 Markdown 总结”方法的关键所在。如果没有它,LLM 会自信地凭空捏造听起来合理但实际上根本不存在的业务规则。有了它,每一个陈述都有据可查。
为了提升速度,你可以带上 `--skip-judges` 运行,但这样得出的规范其可信度并不比单次 LLM 总结生成的结果高。
为了进一步提高保真度,你可以提高抽样率(`--sample-rate 0.25`)或阈值(`--target-fidelity 4.5`),但这会增加 Token 的开销。
## 理论基础
- **Arc42** ([arc42.org](https://arc42.org)) — 规范树所遵循的架构文档标准
- **Chain-of-Verification** ([arXiv:2309.11495](https://arxiv.org/abs/2309.11495)) — 启发了“先引用、后验证”的模式
- **LLM-as-a-Judge** ([arXiv:2306.05685](https://arxiv.org/abs/2306.05685)) — 用于保真度验证环节
- **软件检查抽样** — 随机抽样声明验证,经典的软件工程 (SE) 质量保证 (QA) 技术
- 遗留系统现代化文献中的通用逆向工程实践
## 设计
有关完整的架构设计原理,请参阅 [docs/design.md](docs/design.md) —— 涵盖了流水线阶段、引用优先的约束机制、fidelity-judge 方法论以及设计过程中探讨的各种权衡。
## 许可证
MIT — 详见 [LICENSE](LICENSE)。
标签:AI4Code, AI编程, Arc42, C2, Delphi, DevOps工具链, DLL 劫持, JavaEE, LLM作为裁判, OpenVAS, PHP, PyRIT, RubyonRails, 业务规则提取, 云安全监控, 云资产清单, 代码分析, 代码文档化, 代码理解, 凭证管理, 单体架构重构, 多智能体系统, 大语言模型, 技术债务治理, 文档自动生成, 系统架构文档, 软件架构, 软件现代化, 逆向工程, 遗留代码重构, 遗留系统现代化, 防御加固, 静态分析