Files
cobol-java-v3/README.md
T

178 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# COBOL → Java/Spark 迁移验证平台 v3
自动解析 COBOL 源码,生成覆盖全分支路径的测试数据,分别运行 COBOL 和 Java/Spark 两个版本,逐字段比对输出,判定迁移正确性。
支持 **非 DB**flat file I-O)和 **DB**EXEC SQL → gixsql + SQLite)两条平行管道。
## 快速开始
```bash
# 安装依赖
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**`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` | 贡献指南 |
## 核心命令
```bash
# 非 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 |
| 测试数据生成 | 基于分支覆盖的测试数据自动生成 |
| 双管道验证 | 支持非 DBflat file)和 DBSQLite)两种验证模式 |
| 覆盖率分析 | 静态分支覆盖 + 动态 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%+ |
### 技术亮点
1. **Lark 语法解析**: 使用 Earley parser 解析 COBOL 语法
2. **MC/DC 条件覆盖**: 支持复合条件的最小条件覆盖
3. **双管道架构**: 非 DB 和 DB 管道并行运行
4. **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 路径生成)