459e05a4c0147afeed2bbffaa2ba203cc95f7c7a
COBOL → Java/Spark 迁移验证平台 v3
自动解析 COBOL 源码,生成覆盖全分支路径的测试数据,分别运行 COBOL 和 Java/Spark 两个版本,逐字段比对输出,判定迁移正确性。
支持 非 DB(flat file I-O)和 DB(EXEC SQL → gixsql + SQLite)两条平行管道。
快速开始
# 安装依赖
pip install lark pathlib pyyaml
# 运行非 DB 回归测试
python test-data/s15_coverage_verification.py
# 运行 DB 端到端测试(需设置环境变量,见 SETUP.md)
python test-data/s30_db_e2e.py
# 单程序运行(自动路由:含 EXEC SQL → DB 管道,否则非 DB)
python -m cobol_testgen ../cobol-tna-system/src/KIN01INP.cbl
架构
CLI → orchestrator / orchestrator_db
│
┌─────┼──────┬──────────┬──────────┐
▼ ▼ ▼ ▼ ▼
cobol_testgen runners comparator agents
(数据生成) (编译运行) (比对验证) (LLM)
两条管道自动路由:
- 非 DB:
cobc编译 → flat file 二进制比对 - DB:
gixppESQL 预处理 →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 |
贡献指南 |
核心命令
# 非 DB 全量覆盖率报告
python test-data/s25_per_program_report.py
# DB 端到端测试
python test-data/s30_db_e2e.py
# 带 gcov 覆盖率的单程序运行
python -m cobol_testgen --gcov <cobol_src> runtime/
# 诊断脚本
python diagnose_db2.py # DB 全流程
python diagnose_kind8dbrun.py # DB 编译运行
项目性质
本项目是 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 路径生成)
Languages
Python
95.5%
HTML
2%
CSS
1.8%
JavaScript
0.5%
COBOL
0.2%