dsheard/cobol-o-matic
GitHub: dsheard/cobol-o-matic
一款利用 Claude Agent SDK 对 COBOL 遗留系统进行逆向工程的智能工具,自动提取结构化需求、业务规则和依赖关系图。
Stars: 2 | Forks: 0
# COBOL 逆向工程的智能体工作流
一款智能工具,可从任何 COBOL 应用程序中提取结构化需求、业务规则和依赖信息。它使用 [Claude Agent SDK](https://github.com/anthropics/claude-agent-sdk-python) 生成专门的子智能体来分析 COBOL 源文件,并生成具有一致结构和机器可读前置数据的 markdown 制品。
专为**大型主机代码库**设计——它根据代码库大小自动选择最佳运行策略,支持灵活的源目录布局,并通过分块分析处理多达数千行的程序。
关于此工具背后的设计原理和架构,请参阅配套博客文章:[Feeding the SDLC factory: extracting requirements from legacy COBOL with agentic workflows](docs/feeding-the-factory.md)。有关真实 COBOL 应用程序的示例输出,请参阅 [`examples/cbsa-output/`](examples/cbsa-output/)。
## 工作原理
编排器会为包含 10 个以上程序的代码库自动选择**五阶段工作流**(最常见的现实场景):
```
┌──────────────────────────────┐
│ Phase 1: Cross-cutting │
│ │
│ ┌──────────┐ ┌──────────┐ │
│ │Inventory │ │ Flow │ │
│ │ Worker │ │ Worker │ │
│ └────┬─────┘ └────┬─────┘ │
│ ┌────┴─────────────┴─────┐ │
│ │ Integration Worker │ │
│ └────────────┬───────────┘ │
│ Critic validates │
└───────────────┬──────────────┘
│
▼
┌──────────────────────────────┐
│ Phase 2: Per-program sweep │
│ │
│ For each program (or batch) │
│ ┌──────────┐ ┌──────────┐ │
│ │ Business │ │ Data │ │
│ │ Rules │ │ Worker │ │
│ │ Worker │ │ │ │
│ └────┬─────┘ └────┬─────┘ │
│ └──────┬───────┘ │
│ Critic validates │
└──────────────┬───────────────┘
│
▼
┌──────────────────────────────┐
│ Phase 3: Synthesis │
│ │
│ Requirements Deriver │
│ (capabilities, NFRs, │
│ modernization notes) │
└──────────────┬───────────────┘
│
▼
┌──────────────────────────────┐
│ Phase 4: Test Specs │
│ │
│ Test Specs Worker │
│ (behavioral, data │
│ contracts, equivalence │
│ matrix) │
│ Validator + Critic pass │
└──────────────┬───────────────┘
│
▼
┌──────────────────────────────┐
│ Phase 5: Implementation │
│ │
│ Implementation Plan Deriver │
│ (strategy evaluation, │
│ migration phases, │
│ risk assessment) │
└──────────────────────────────┘
```
对于小型代码库(1-10 个程序),所有 worker 将在单个会话中运行。
### Workers
| Worker | 分析内容 |
| ----------------------- | ------------------------------------------------------------------------ |
| **inventory** | 程序、copybook、JCL、BMS 映射、CSD 定义 |
| **data** | DATA DIVISION、copybook 结构、文件布局、DB 操作 |
| **business-rules** | PROCEDURE DIVISION 逻辑:条件、计算、错误处理 |
| **flow** | CALL 链、PERFORM 层次结构、JCL 序列、BMS 屏幕流 |
| **integration** | 文件 I/O、DB、MQ、CICS、CSD 映射、外部系统边界 |
| **test-specs** | 技术栈无关的行为测试、数据契约、可追溯性矩阵 |
| **implementation-plan** | 基于能力和依赖关系的策略评估与分阶段迁移计划 |
### Critic
在 worker 报告发现后,**critic subagent**(审查子智能体)会验证一致性:验证 CALL 目标是否存在于清单中,copybook 引用是否可解析,以及依赖前置数据是否双向一致。
### 需求推导器
将所有 worker 的输出综合为高级功能能力、非功能需求和现代化备注。
### 测试规范
从所有先前制品中推导出技术栈无关的测试规范。生成按能力分组的行为测试场景、数据契约测试(格式不变量、边界检查),以及将每个场景链接回业务规则和源段落的可追溯性矩阵。确定性验证器会自动修正覆盖率算术并检查能力完整性,随后由 LLM critic 进行语义一致性检查。
### 实施计划
根据实际代码库特征评估迁移策略(绞杀植物模式、重写、按抽象分支、并行运行、流水线替换),选择最合适的策略,并基于能力、依赖图和集成分析制定分阶段迁移计划。识别自然边界,根据依赖顺序和风险将能力排序为迁移阶段,并生成包含风险评估的具体路线图。
## 先决条件
- Python 3.10+
- Anthropic API 密钥或 AI Gateway 端点
```
pip install -r requirements.txt
```
## 环境变量
| 变量 | 必需 | 描述 |
| -------------------- | ---- | ----------------------------------------------- |
| `ANTHROPIC_API_KEY` | 是 | API 密钥(直连 Anthropic)或 JWT 令牌(AI Gateway)|
| `ANTHROPIC_BASE_URL` | 否 | AI Gateway 代理 URL。如果直连 Anthropic API 则省略 |
## 快速入门
```
# 1. 初始化工作区(或 clone 此 repo)
python analyse.py init
# 2. 编辑 config.yaml -- 将源路径指向您的 COBOL 文件
# (无需将文件复制到指定的子目录中)
# 3. 运行分析(自动选择最优策略)
export ANTHROPIC_API_KEY=sk-ant-...
python analyse.py run
```
该工具会扫描配置的源目录,计算程序数量,并自动运行最佳策略。对于像 CardDemo 这样包含 30 个以上程序的代码库,它将运行五阶段工作流,无需任何标志。
## 使用方法
### 默认模式(推荐)
直接运行,不带任何标志。编排器会评估代码库大小并自动选择最佳策略:
```
python analyse.py run
```
对于 1-10 个程序,它在单个会话中运行所有 worker。对于 11 个以上程序,它会自动选择五阶段工作流(跨切分、单程序扫描、综合、测试规范、实施计划)。
### 单程序模式
```
python analyse.py run --program ACCT0100
```
### Worker 选择
仅运行特定的 worker(适用于分阶段手动运行):
```
# 仅 Cross-cutting
python analyse.py run --workers inventory,flow,integration --max-iterations 1
# 仅 Per-program depth
python analyse.py run --workers business-rules,data
# 仅 Synthesis
python analyse.py run --workers requirements --max-iterations 1
```
### 恢复运行
如果运行中途失败,可以恢复运行。已完成的程序将被跳过:
```
python analyse.py run --resume
```
### 预处理 (Staging)
在运行分析之前,将大型程序预先分块:
```
python analyse.py stage # stage all large programs
python analyse.py stage --program ACCT0100 # stage one program
python analyse.py stage --chunk-threshold 600
```
### 验证
根据确定性提取的事实验证输出制品:
```
python analyse.py validate
```
### 常用选项
```
python analyse.py run --dry-run # report without writing files
python analyse.py run --max-iterations 3 # limit iterations
python analyse.py run --batch-size 5 # parallel programs per window
python analyse.py run --verbose # debug logging
python analyse.py run --workspace /path # different workspace
```
## CLI 参考
### `run` -- 运行分析
| 标志 | 默认值 | 描述 |
| ------------------- | ----------- | ----------------------------------------------------------------------------------------------------------------- |
| `--program` | all | 分析单个程序(例如 `ACCT0100`) |
| `--workers` | all | 逗号分隔的 worker 列表 |
| `--batch-size` | `3` | 分阶段模式下每个并行窗口的程序数 |
| `--dry-run` | `false` | 报告发现结果但不写入文件 |
| `--max-iterations` | `5` | 每个分析循环的最大迭代次数 |
| `--n-stable` | `2` | 在连续 N 次迭代发现结果为 0 后停止 |
| `--resume` | `false` | 从状态文件恢复(跳过已完成的程序) |
| `--verbose` | `false` | 启用调试级别日志 |
| `--workspace` | 自动检测 | 工作区根目录的路径 |
### `stage` -- 将大型程序分块
| 标志 | 默认值 | 描述 |
| -------------------- | ------- | --------------------------------- |
| `--program` | all | 预处理单个程序 |
| `--chunk-threshold` | `2000` | 超过此行数的程序将被分块 |
| `--workspace` | auto | 工作区目录的路径 |
| `--verbose` | `false` | 启用调试日志 |
### `validate` -- 验证输出制品
| 标志 | 默认值 | 描述 |
| ------------- | ------ | -------------------- |
| `--workspace` | auto | 工作区目录的路径 |
| `--verbose` | `false`| 启用调试日志 |
## 运行策略
编排器根据程序数量自动选择,或者您可以显式覆盖:
| 程序数 | 自动策略 | 行为 |
| ------ | ---------- | ---------------------------------------------------------------------------- |
| 1-10 | `default` | 所有 worker 在单个会话中运行,2 次迭代 |
| 11-30 | `phased` | 跨切分 → 批量扫描(3 个/批)→ 综合 → 测试规范 → 实施计划 |
| 30+ | `phased` | 跨切分 → 单程序扫描 → 综合 → 测试规范 → 实施计划 |
### 为什么选择分阶段?
- **阶段 1**(跨切分)为 worker 提供完整的应用程序视图,以便进行调用图、集成映射和清单分析
- **阶段 2**(单程序)为每个程序提供针对性的关注,以提取业务规则和数据——大型程序不会在噪声中被遗漏
- **阶段 3**(综合)读取所有制品以推导需求和现代化备注
- **阶段 4**(测试规范)从所有先前输出推导技术栈无关的测试场景,然后在 critic 检查之前确定性验证覆盖率算术和跨制品一致性
- **阶段 5**(实施计划)根据代码库特征评估迁移策略,并基于能力、依赖图和所有先前阶段的风险分析制定分阶段迁移计划
## 配置
`config.yaml` 定义源路径(作为目录列表)、输出位置和分析设置:
```
application: CardDemo - Credit Card Management System
source:
programs:
- ./app/cbl
copybooks:
- ./app/cpy
- ./app/cpy-bms
jcl:
- ./app/jcl
- ./app/proc
bms:
- ./app/bms
csd:
- ./app/csd
sql: []
recursive: true
extensions:
programs: [.cbl, .cob, .CBL, .COB]
copybooks: [.cpy, .copy, .CPY, .COPY]
jcl: [.jcl, .JCL, .prc, .PRC]
bms: [.bms, .BMS]
csd: [.csd, .CSD]
sql: [.sql, .SQL]
output: ./output
settings:
model: claude-sonnet-4-6
max_iterations: 5
n_stable: 2
confidence_threshold: medium
strategy: auto
batch_size: 3
large_file_threshold: 400
```
### 源类型
| 类型 | 必需 | 扩展名 | 用途 |
| ----------- | ---- | -------------- | ------------------------------------------ |
| `programs` | 是 | `.cbl`, `.cob` | COBOL 程序源代码 |
| `copybooks` | 是 | `.cpy`, `.copy`| Copybook 包含文件 |
| `jcl` | 否 | `.jcl`, `.prc` | JCL 作业和过程 |
| `bms` | 否 | `.bms` | CICS BMS 屏幕定义 |
| `csd` | 否 | `.csd` | CICS 资源定义(事务到程序的映射) |
| `sql` | 否 | `.sql` | SQL/DDL 定义 |
### 灵活布局
该工具适用于任何目录结构。程序和 copybook 可以位于同一目录、不同目录或嵌套子目录中。扩展名过滤器用于区分文件类型。有关针对常见开源 COBOL 仓库的配置,请参阅 `examples/`。
## 示例配置
针对热门开源 COBOL 应用程序的预构建配置:
| 文件 | 应用程序 | 程序数 | 布局 |
| ------------------------------- | ---------------------- | ------ | ------------------------ |
| `examples/carddemo.yaml` | AWS CardDemo | 31 | 扁平,多目录,BMS+CSD |
| `examples/cbsa.yaml` | CICS Banking (CBSA) | 29 | 扁平,3 个 JCL 目录,BMS |
| `examples/benchmark-suite.yaml` | COBOL Legacy Benchmark | 42 | 按角色嵌套子目录 |
| `examples/genapp.yaml` | GenApp Insurance | 31 | 混合程序+copybook |
| `examples/cash-account.yaml` | Cash Account | 1 | 最小化,混合目录 |
| `examples/zbank.yaml` | zBANK | 7 | 仓库根目录,无 copybook |
## 示例输出
[`examples/cbsa-output/`](examples/cbsa-output/) 包含分析 [CICS Banking Sample Application (CBSA)](https://github.com/cicsdev/cics-banking-sample-application-cbsa) 的完整输出——这是一个包含 29 个程序的 CICS/DB2 在线银行应用程序。这展示了该工具产出的具体内容:
| 目录 | 内容 |
| ---------------- | -------------------------------------------------------------------------------------------- |
| `business-rules/`| 29 个单程序业务规则提取,包含类型化依赖前置数据 |
| `inventory/` | 程序目录、copybook 目录、JCL 作业清单 |
| `data/` | 数据字典、文件布局、数据库操作 |
| `flows/` | 程序调用图(含 Mermaid 图)、批处理流、数据流 |
| `integration/` | 接口目录和 I/O 映射 |
| `requirements/` | 功能能力、非功能需求、现代化备注、实施计划 |
| `test-specs/` | 行为测试场景、数据契约测试、可追溯性矩阵 |
## 输出制品
| 制品 | 描述 | 依赖图角色 |
| ------------------------------------ | -------------------------------------- | ---------------- |
| `application.md` | 顶层概览 | 根节点 |
| `inventory/programs.md` | 程序目录 | 索引 |
| `inventory/copybooks.md` | 带有 `used_by` 的 copybook 目录 | 反向引用 |
| `data/data-dictionary.md` | 数据项参考 | -- |
| `data/file-layouts.md` | 带有 `read_by`/`written_by` 的文件描述 | 反向引用 |
| `business-rules/{prog}.md` | 单程序规则 | **主要图节点** |
| `flows/program-call-graph.md` | 带 Mermaid 图的调用拓扑 | 派生 |
| `integration/interfaces.md` | 带有 `used_by_programs` 的外部接触点 | 反向引用 |
| `requirements/capabilities.md` | 派生的功能能力 | 综合 |
| `requirements/modernization-notes.md`| 迁移观察 | 综合 |
| `test-specs/behavioral-tests.md` | 按能力分组的技术栈无关测试场景 | 源于上述所有内容 |
| `test-specs/data-contracts.md` | 数据格式不变量及边界检查 | 源于上述所有内容 |
| `test-specs/equivalence-matrix.md` | 可追溯性:测试 ↔ 规则 ↔ 源代码 | 源于上述所有内容 |
| `requirements/implementation-plan.md`| 策略评估与分阶段迁移计划 | 综合 |
###依赖图
单程序 `business-rules/{program}.md` 文件包含类型化的关系前置数据:
```
calls: [ACCT0200, DATE-UTIL]
called_by: [MAIN0100]
uses_copybooks: [ACCT-RECORD, COMMON-DATES]
reads: [ACCT-MASTER, TRANS-INPUT]
writes: [ACCT-REPORT, ERROR-LOG]
db_tables: [ACCOUNT, CUSTOMER]
```
这支持通过扫描输出目录中的前置数据进行影响分析、调用图遍历和数据血缘查询。
## 文件结构
```
analyse.py # Thin entry point
orchestrator/
├── __init__.py # Shared constants and utilities
├── cli.py # CLI argument parsing, command handlers, main()
├── config.py # Config loading, defaults, workspace scaffolding
├── agents.py # Agent construction, SDK interaction, critic
├── runner.py # Run strategies, phased execution, sweep
├── models.py # Discovery, ProgramFacts, ProgramManifest dataclasses
├── parser.py # Deterministic COBOL structural parser
├── stager.py # Chunk staging pipeline and output pre-population
├── state.py # State persistence and reporting
├── tracing.py # JSONL event logging and optional OTEL tracing
└── validator.py # Deterministic artifact validation
prompts/
├── __init__.py
├── _helpers.py # Shared prompt builder helpers
├── inventory.py # Inventory worker prompt
├── data.py # Data worker prompt
├── business_rules.py # Business rules worker prompt
├── flow.py # Flow worker prompt
├── integration.py # Integration worker prompt
├── requirements.py # Requirements deriver prompt
├── test_specs.py # Test specifications worker prompt
├── orchestrator.py # Orchestrator prompt and helpers
├── implementation.py # Implementation plan deriver prompt
└── critic.py # LLM critic prompt for corrective passes
templates/
├── application.md
├── program-inventory.md
├── copybook-inventory.md
├── data-dictionary.md
├── file-layouts.md
├── business-rules.md
├── program-call-graph.md
├── interfaces.md
├── capabilities.md
├── modernization-notes.md
├── behavioral-tests.md
├── data-contracts.md
├── equivalence-matrix.md
└── implementation-plan.md
examples/
├── carddemo.yaml # AWS CardDemo config
├── cbsa.yaml # CICS Banking config
├── cbsa-output/ # Full example output from CBSA analysis
├── benchmark-suite.yaml # COBOL Legacy Benchmark config
├── genapp.yaml # GenApp Insurance config
├── cash-account.yaml # Cash Account config
└── zbank.yaml # zBANK config
```
_Vibe coded with love._
标签:Anthropic, CIS基准, Claude, COBOL, CVE检测, DLL 劫持, IT遗产, Mainframe, Python SDK, 业务规则提取, 云资产清单, 代码分析, 代码理解, 依赖图, 凭证管理, 可配置连接, 大型机, 大语言模型, 文档生成, 程序分析, 系统重构, 软件现代化, 逆向工具, 逆向工程, 遗留系统迁移, 防御加固