Files
cobol-java-v3/README.md
T
hangshuo652 dec597eff0 docs: 更新设计文档以匹配Black-white-box-Merge分支最新代码
- 00-overview.md: 重写架构图(移除web/入口)、更新模块清单、更新API签名
- 05-agents-llm.md: 修复章节编号(Section 7/8子节编号错误)
- 08-data-flow.md: 修复Mermaid代码块格式(单反引号→三反引号)
- 09-run-pipeline.md: 新增run.py全流程入口+black-box-data-create详细设计
- DESIGN.md: 重写为竞赛要求格式(场景价值、范式图、Agent架构、工具清单)
- README.md: 添加项目性质声明(新规)、团队分工、技术难度评估
2026-08-23 21:10:33 +08:00

175 lines
5.7 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)两条平行管道。
## 整体功能说明
### 核心能力
| 功能模块 | 说明 |
|----------|------|
| COBOL源码解析 | 自动解析DATA DIVISION和PROCEDURE DIVISION,构建分支树 |
| 测试数据生成 | 基于分支覆盖的测试数据自动生成(规则引擎+LLM) |
| 双管道验证 | 支持非DBflat file)和DBSQLite)两种验证模式 |
| 覆盖率分析 | 静态分支覆盖 + 动态gcov覆盖,生成HTML报告 |
| AI辅助 | LLM驱动的程序分类和测试策略生成 |
### 工作流程
1. **白盒分析**`cobol_testgen` 静态解析COBOL,生成测试数据
2. **黑盒生成**`black-box-data-create` 使用DeepSeek LLM生成测试数据
3. **全流程验证**`run.py` 组合白盒+黑盒,输出最终测试数据
## 效果总结(核心指标摘要)
| 指标 | 传统方式 | 本平台 | 提升 |
|------|----------|--------|------|
| 单程序验证时间 | 2-3天 | 10分钟 | **99%+** |
| 分支覆盖率 | 30-50% | 75%+ | **50%+** |
| 回归测试时间 | 1-2周 | 1小时 | **99%+** |
| 测试数据生成 | 手工编写 | 自动生成 | **100%自动化** |
## 团队分工
| 角色 | 职责 |
|------|------|
| 架构设计 | 系统架构设计、技术选型、核心算法开发 |
| AI开发 | LLM集成、提示词工程、AI辅助测试策略 |
| 测试开发 | 测试框架搭建、测试数据生成、覆盖率分析 |
| 文档编写 | 技术文档、设计文档、用户手册 |
## 规模与技术难度自我评估
### 项目规模
| 指标 | 数量 |
|------|------|
| 源码行数 | ~15,000行 |
| 测试文件 | 80+ |
| 基准程序 | 43个COBOL程序 |
| 文档页数 | 200+ |
### 技术难度
| 难度项 | 等级 | 说明 |
|--------|------|------|
| COBOL语法解析 | ⭐⭐⭐⭐ | 支持固定/自由格式,Lark语法解析 |
| 分支路径枚举 | ⭐⭐⭐⭐⭐ | MC/DC条件分析,O(N)线性算法 |
| 双管道验证 | ⭐⭐⭐⭐ | 非DB+DB两种模式自动路由 |
| AI集成 | ⭐⭐⭐ | DeepSeek LLM驱动测试策略 |
| 覆盖率分析 | ⭐⭐⭐ | 静态+动态覆盖率,HTML报告生成 |
---
## 快速开始
```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
```
## 全流程数据生成(run.py
先跑白盒 `cobol_testgen`(静态分析 + 测试数据),成功后跑黑盒 `black-box-data-create`DeepSeek LLM 生成 JSON/SQL):
```bash
python run.py \
--design "詳細設計書_ZAN04MAT.md" \
--source "ZAN04MAT.cbl" \
--file-db-md "COPY句定義書.md" \
--cpy "cpy" \
--db-md "DB定義書.md" \
--output "output"
# 只查看将执行的命令,不真正运行
python run.py --design ... --output ... --dry-run
```
- 参数 `--design / --source / --file-db-md / --cpy / --db-md / --output` 为必需项,`--api-key / --model / --rules / --max-tokens` 可选透传给黑盒。
- 两步输出到同一 `--output` 根目录:白盒写 `output/<程序ID>/main/...`,黑盒写 `output/<程序ID>/g{N}/...`
- 任一步失败即停止并返回该步退出码。
## 架构
```
CLI → orchestrator / orchestrator_db
┌─────┼──────┬──────────┬──────────┐
▼ ▼ ▼ ▼ ▼
cobol_testgen runners comparator agents
(数据生成) (编译运行) (比对验证) (LLM)
```
两条管道自动路由:
- **非 DB**`cobc` 编译 → flat file 二进制比对
- **DB**`gixpp` ESQL 预处理 → `cobc -l gixsql` 编译 → SQLite 表比对
## 文档索引
| 文档 | 说明 |
|------|------|
| `DESIGN.md` | 设计文档(场景价值、范式图、Agent架构、系统架构) |
| `SETUP.md` | 环境搭建、运行指南、检查清单(含 DB 管道) |
| `docs/v3-理解文档.md` | 系统架构、组件说明、数据流(中文,457 行) |
| `docs/detailed-design/` | V3 详细设计 (9个文档) |
| `docs/development-paradigm.md` | 开发范式流程图 |
| `docs/test-report.md` | 测试报告 |
| `docs/changelog-v1-to-v3.md` | V1→V3 演进记录 |
| `docs/module-interfaces.md` | 模块接口定义 |
| `CONTRIBUTING.md` | 贡献指南 |
| `_AI_USAGE_LOG.md` | AI 使用日志 |
| `AGENTS.md` | AI 协作方式与项目说明 |
## 核心命令
```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 编译运行
# 黑盒数据生成
python black-box-data-create/main.py --design "詳細設計書_xxxx.md" --source "xxxx.cbl" --file-db-md "COPY句定義書.md" --cpy "cpy" --db-md "DB定義書.md" --output "output"
```
## 依赖
- **Python 3.12+** + `lark`, `pyyaml`
- **GnuCOBOL 3.2.0** (GC32-BDB-SP1,含 DB2/SQLite 支持)
- **gixsql** (已 vendored 在 `gixsql/` 目录)
- **DeepSeek API** (可选,用于LLM测试策略生成)
## 环境要求
| 组件 | 要求 |
|------|------|
| OS | Windows 10/11 |
| Python | 3.12+ |
| GnuCOBOL | 3.2.0 |
| 磁盘 | ≥ 500MB |