COBOL → Java/Spark 迁移验证平台 v3
自动解析 COBOL 源码,生成覆盖全分支路径的测试数据,分别运行 COBOL 和 Java/Spark 两个版本,逐字段比对输出,判定迁移正确性。
支持 非 DB(flat file I-O)和 DB(EXEC SQL → gixsql + SQLite)两条平行管道。
快速开始
架构
两条管道自动路由:
- 非 DB:
cobc 编译 → flat file 二进制比对
- DB:
gixpp ESQL 预处理 → cobc -l gixsql 编译 → SQLite 表比对
文档索引
| 文档 |
说明 |
SETUP.md |
环境搭建、运行指南、检查清单(含 DB 管道) |
docs/v3-理解文档.md |
系统架构、组件说明、数据流(中文,457 行) |
docs/changelog-v1-to-v3.md |
V1→V3 演进记录 |
docs/module-interfaces.md |
模块接口定义 |
docs/detailed-design/00-overview.md |
V3系统总体设计 |
docs/detailed-design/01-cobol-testgen-core.md |
核心引擎详细设计 |
docs/detailed-design/02-orchestrator-db.md |
DB管道编排详细设计 |
docs/detailed-design/03-runners.md |
编译运行引擎详细设计 |
docs/detailed-design/04-hina-classification.md |
HINA分类系统详细设计 |
docs/detailed-design/05-agents-llm.md |
LLM代理详细设计 |
docs/detailed-design/06-comparator.md |
比对模块详细设计 |
docs/detailed-design/07-config-system.md |
配置系统详细设计 |
docs/detailed-design/08-data-flow.md |
数据流设计 |
_AI_USAGE_LOG.md |
AI使用日志 |
docs/development-paradigm.md |
开发范式流程图 |
DESIGN.md |
Web UI 设计规范 |
CONTRIBUTING.md |
贡献指南 |
核心命令
项目性质
本项目是 AI 辅助的 COBOL 程序迁移验证工具,用于验证 COBOL 程序向 Java/Spark 迁移的正确性。
核心功能
| 功能 |
说明 |
| COBOL 源码解析 |
自动解析 DATA DIVISION 和 PROCEDURE DIVISION |
| 测试数据生成 |
基于分支覆盖的测试数据自动生成 |
| 双管道验证 |
支持非 DB(flat file)和 DB(SQLite)两种验证模式 |
| 覆盖率分析 |
静态分支覆盖 + 动态 gcov 覆盖 |
| AI 辅助 |
LLM 驱动的程序分类和测试策略生成 |
技术特点
- 非阻塞路径枚举: O(N) 算法替代 O(2^N) 爆炸
- MC/DC 条件覆盖: 支持 AND/OR/NOT 复合条件
- DB 种子键一致性: WHERE 宿主变量 MOVE 链解析
- 中文 HTML 报告: 全中文覆盖率报告
成果摘要
开发成果
| 指标 |
数量 |
| 核心代码 |
22 个模块,~8000 行 |
| 测试文件 |
80+ 个测试用例 |
| 基准程序 |
43 个 COBOL 程序 |
| 修复数量 |
19 个关键 bug 修复 |
| 设计文档 |
9 个 V3 详细设计文档 |
覆盖率
| 类型 |
覆盖率 |
| 分支覆盖率 |
75% |
| 条件覆盖率 |
75% |
| 测试通过率 |
95%+ |
技术亮点
- Lark 语法解析: 使用 Earley parser 解析 COBOL 语法
- MC/DC 条件覆盖: 支持复合条件的最小条件覆盖
- 双管道架构: 非 DB 和 DB 管道并行运行
- AI 辅助: DeepSeek LLM 驱动的程序分类和测试策略
团队分工
AI 辅助 (DeepSeek)
| 任务 |
负责内容 |
| 代码开发 |
核心引擎、测试用例、文档编写 |
| 测试执行 |
运行测试套件、收集覆盖率数据 |
| 文档生成 |
详细设计文档、测试报告、README |
| 代码审查 |
自动触发 code-review skill |
人工审查
| 任务 |
负责内容 |
| 需求确认 |
验证功能符合竞赛要求 |
| 代码审查 |
审查 AI 生成的代码质量 |
| 验收测试 |
执行端到端验证 |
| 最终提交 |
推送到主分支、提交成果物 |
技术难度
难点分析
| 难点 |
说明 |
解决方案 |
| COBOL 语法复杂性 |
支持 33+ 种语句类型 |
Lark Earley parser + 状态机 |
| 路径爆炸 |
复合条件导致路径指数增长 |
O(N) MC/DC 算法 |
| DB 管道一致性 |
种子键与运行时查询键不一致 |
MOVE 链解析 + 列名归一化 |
| 覆盖率标记 |
复合条件分支标记错误 |
条件树 + evaluate_tree |
已知限制
| 限制 |
影响 |
状态 |
| 条件覆盖率 75% |
_FUNC_MOD 合成函数不可匹配 |
待优化 |
| 无 Java 比对管道 |
仅验证 COBOL 输出 |
规划中 |
| DB 管道需 gixsql |
依赖外部工具 |
已 vendored |
依赖
- Python 3.12+ +
lark, pyyaml
- GnuCOBOL 3.2.0 (GC32-BDB-SP1,含 DB2/SQLite 支持)
- gixsql (已 vendored 在
gixsql/ 目录)
- DeepSeek API (可选,用于 LLM 路径生成)