docs: 更新V3总体设计文档,添加黑盒模块设计、PGMパターン、多KEY测试

This commit is contained in:
hangshuo652
2026-08-24 21:57:59 +08:00
parent aabc41ad02
commit bd5926aeed
2 changed files with 193 additions and 36 deletions
+6
View File
@@ -4,6 +4,12 @@
---
### 2026-08-24 03:00:00 - 文档
- **范式步骤:** V3总体设计文档更新
- **修改摘要:** 更新00-overview.md,添加黑盒模块设计(2B章节)、PGMパターン、多KEY测试、黑盒数据流、双管道架构图
- **涉及文件:** `docs/detailed-design/00-overview.md`
- **使用模型:** deepseek
### 2026-08-24 02:00:00 - 文档
- **范式步骤:** README项目描述更新
- **修改摘要:** 更新项目描述和项目概述,添加业务场景、价值量化表格,明确白盒+黑盒双管道定位
+187 -36
View File
@@ -1,6 +1,6 @@
# V3系统总体设计
> 版本: v1.0 | 日期: 2026-08-22
> 版本: v1.1 | 日期: 2026-08-24
> 本文档描述COBOL迁移验证平台V3的总体架构和模块设计。
---
@@ -9,17 +9,17 @@
### 1.1 系统定位
COBOL迁移验证平台V3是一个AI辅助的自动化测试工具,用于验证COBOL程序向Java/Spark迁移的正确性。
COBOL迁移验证平台V3是一个AI辅助的自动化测试工具,用于验证COBOL程序向Java/Spark迁移的正确性。通过**白盒+黑盒双管道**自动生成测试数据,实现全分支路径覆盖验证。
### 1.2 核心能力
| 能力 | 说明 |
|------|------|
| COBOL源码解析 | 自动解析DATA DIVISION和PROCEDURE DIVISION |
| 测试数据生成 | 基于分支覆盖的测试数据自动生成 |
| 双管道验证 | 支持非DBflat file)和DBSQLite)两种验证模式 |
| 白盒分析 | 静态解析COBOL源码,自动识别分支路径,生成覆盖全路径的测试数据 |
| 黑盒生成 | 解析設計書自动识别程序模式(16种PGMパターン),LLM生成テストデータ |
| 双管道验证 | 白盒+黑盒并行运行,分别验证COBOL和Java/Spark输出 |
| 覆盖率分析 | 静态分支覆盖 + 动态gcov覆盖 |
| AI辅助 | LLM驱动的程序分类和测试策略生成 |
| 多KEY测试 | 自动验证复合KEY的比较正确性 |
### 1.3 技术栈
@@ -43,33 +43,31 @@ COBOL迁移验证平台V3是一个AI辅助的自动化测试工具,用于验
│ V3系统架构 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ │ CLI入口 │ Web界面 API接口
│ │ main.py │ │ web/ │ │ __init__
│ └─────────────┘ └─────────────┘ └──────┬───────┘
│ │ │ │ │
│ └────────────────────┼────────────────────┘ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ 统一入口 (run.py) │ │
│ │ 白盒 cobol_testgen → 黑盒 black-box-data-create │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │ │
┌─────────────────────────────────────────────────────────┐
编排层 (Orchestrator)
│ orchestrator.py (非DB) orchestrator_db.py (DB) │
└─────────────────────────────────────────────────────────┘
┌────────────────────┼────────────────────┐
│ │ │
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ 核心引擎 │ │ 运行引擎 │ │ AI代理
│ │ cobol_testgen│ runners/ agents/ │ │
└──────────────┘ └──────────────┘ └──────────────┘
│ │ │
│ │ │ │
│ ▼ ▼ │
│ ┌──────────────┐ ┌──────────────┐ ──────────────┐
│ │ 比对模块 │ 报告模块 │ │ 配置模块
│ │ comparator/ │ │ report/ │ config/
│ └──────────────┘ └──────────────┘ ──────────────┘
┌────────────────────┴────────────────────┐
│ │
┌──────────────────────────┐ ┌──────────────────────────┐
│ 白盒管道 │ │ 黑盒管道 │
│ cobol_testgen black-box-data-create
(静态分析+测试数据) │ │ (設計書解析+LLM生成)
└──────────────────────────┘ └──────────────────────────┘
┌──────────────────────────┐ ┌──────────────────────────┐
│ │ 编排层 │ │ 规则层 │
│ orchestrator_db.py │ │ rules/pgm_pattern/ │
└──────────────────────────┘ └──────────────────────────┘
│ │ │ │
│ ▼ ▼ │
│ ┌──────────────────────────┐ ┌──────────────────────────┐ │
│ │ 运行引擎 LLM引擎 │ │
│ │ runners/gixsql_runner │ │ DeepSeek API │ │
│ └──────────────────────────┘ └──────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
```
@@ -80,9 +78,78 @@ COBOL迁移验证平台V3是一个AI辅助的自动化测试工具,用于验
|------|------|------|
| **L1 数据层** | data/ | 共享数据模型 |
| **L2 核心层** | cobol_testgen/, config/ | COBOL解析、配置管理 |
| **L3 业务层** | hina/, agents/, comparator/ | 分类、AI代理、比对 |
| **L3 业务层** | hina/, agents/, comparator/, black-box-data-create/ | 分类、AI代理、比对、黑盒生成 |
| **L4 编排层** | orchestrator*, runners/ | 流程编排、执行 |
| **L5 接口层** | main.py, web/, __init__.py | 用户接口 |
| **L5 接口层** | main.py, run.py, web/, __init__.py | 用户接口 |
---
## 二-B、黑盒模块设计
### 2B.1 模块概述
black-box-data-create 是基于詳細設計書的LLM数据生成模块,通过解析設計書/COPY句定義書/DB定義書,自动生成テストデータ。
### 2B.2 处理流程
```
詳細設計書 + COPY句定義書 + DB定義書 + COBOL源码
InputParser: 解析設計書中的入出力定義、処理内容
RuleLoader: 按PGMパターン匹配规则文件
PromptBuilder: 组装DeepSeek API提示词
APIClient: 调用DeepSeek API生成テストデータ
OutputWriter: 输出JSON/SQL文件
```
### 2B.3 PGMパターン
| パターン | 说明 | 对应程序 |
|----------|------|----------|
| マッチング(1:1) | 1对1匹配 | KIN01INP, KIN02UPD |
| マッチング(1:N) | 1对多匹配 | KIN03EXP |
| マッチング(N:1) | 多对1匹配 | KIN04CHK |
| DB更新 | 数据库更新 | KIN08DBU |
| 振り分け(IF) | IF条件分支 | KIN05MAT |
| 振り分け(EVALUATE) | EVALUATE分支 | KIN07DAI |
| 項目チェック | 字段校验 | ZAN01CHK, ZAN02CHK |
| キーブレイク(集計) | KEY-break汇总 | SHA01SIF |
| キーブレイク(集約) | KEY-break聚合 | SHA02MNC |
| SELECT処理 | SELECT查询 | KYU04CAL |
| MERGE | 合并处理 | KIN06CLD |
| CSV→FB変換 | CSV转flat file | KIN09CSV |
### 2B.4 多KEY测试
对于复合KEY程序(如 A001+A002+A003),自动生成各KEY变形的追加データ:
| 变形类型 | 说明 |
|----------|------|
| KEY1変更 | 仅改变KEY1,验证KEY1比较正确性 |
| KEY2変更 | 仅改变KEY2,验证KEY2比较正确性 |
| KEY3変更 | 仅改变KEY3,验证KEY3比较正确性 |
### 2B.5 模块文件
| 文件 | 职责 |
|------|------|
| agent/__init__.py | generate() 入口 |
| agent/models.py | 数据クラス定義 |
| agent/input_parser.py | 設計書 + COPYBOOK + DB定義解析 |
| agent/rule_loader.py | PGMパターン→ルール匹配 |
| agent/prompt_builder.py | API提示词组装 |
| agent/api_client.py | DeepSeek API调用(3回重试) |
| agent/output_writer.py | JSON/SQL文件输出 |
| main.py | CLI入口 |
---
@@ -92,7 +159,8 @@ COBOL迁移验证平台V3是一个AI辅助的自动化测试工具,用于验
| 模块 | 文件数 | 行数 | 职责 |
|------|--------|------|------|
| cobol_testgen/ | 22 | ~8000 | COBOL解析、测试数据生成 |
| cobol_testgen/ | 22 | ~8000 | COBOL解析、白盒测试数据生成 |
| black-box-data-create/ | 8 | ~5000 | 設計書解析、黑盒LLM数据生成 |
| orchestrator_db.py | 1 | 1334 | DB管道6步编排 |
| runners/ | 8 | ~600 | 编译运行引擎 |
| hina/ | 11 | ~2000 | HINA程序分类 |
@@ -100,6 +168,7 @@ COBOL迁移验证平台V3是一个AI辅助的自动化测试工具,用于验
| comparator/ | 6 | ~400 | 字段比对 |
| config/ | 5 | ~300 | 配置管理 |
| report/ | 1 | ~200 | 报告生成 |
| run.py | 1 | 86 | 全流程统一入口 |
### 3.2 模块依赖关系
@@ -117,6 +186,18 @@ models.py (零依赖)
├── flatfile.py (read, file_io)
└── __init__.py (所有上层模块)
black-box-data-create/
├── models.py (零依赖)
├── markdown_utils.py (stdlib)
├── input_parser.py (models, markdown_utils)
├── rule_loader.py (models)
├── prompt_builder.py (models)
├── api_client.py (requests)
├── output_writer.py (models)
└── __init__.py (所有上层模块)
```
---
@@ -178,6 +259,47 @@ orchestrator_db.py: step5_run_java() (可选)
orchestrator_db.py: step6_verify()
```
### 4.3 黑盒管道数据流
```
詳細設計書.md
input_parser.py: 解析設計書 + COPY句定義書 + DB定義書
rule_loader.py: PGMパターン匹配 → 选择规则文件
prompt_builder.py: 组装API提示词
api_client.py: DeepSeek API调用(3回重试)
output_writer.py: 输出JSON/SQL文件
output/{プログラムID}/g{N}/{プログラムID}_g{N}.json
output/{プログラムID}/g{N}/{プログラムID}_g{N}.sql
```
### 4.4 全流程数据流(run.py
```
run.py
├── 步骤1: cobol_testgen(白盒)
│ ├── 静态分析 + 测试数据生成
│ ├── 编译运行 COBOL 程序
│ └── gcov 覆盖率收集
└── 步骤2: black-box-data-create(黑盒)
├── 解析設計書 + COPY + DB定義
├── LLM 生成 JSON/SQL
└── 输出到 output/{程序ID}/g{N}/
```
---
## 五、接口设计
@@ -207,6 +329,24 @@ def main():
pass
```
```python
# black-box-data-create/agent/__init__.py
def generate(
design_md: str,
source_cbl: str,
file_db_md: str,
cpy_dir: str,
db_md: str,
output_dir: str = "output",
api_key: str = None,
model: str = None,
rules_dir: str = None,
) -> dict:
"""黑盒数据生成入口"""
pass
```
### 5.2 配置接口
```python
@@ -235,6 +375,8 @@ class Config:
| 编译错误 | cobc编译失败 | 记录日志,跳过该程序 |
| 运行错误 | 程序执行异常 | 捕获异常,标记失败 |
| 超时错误 | 执行超时 | 强制终止,记录超时 |
| API错误 | DeepSeek API调用失败 | 3回重试,失败后跳过 |
| 設計書解析错误 | 設計書格式不正确 | 记录警告,使用默认值 |
### 6.2 容错机制
@@ -242,6 +384,8 @@ class Config:
- **LLM失败**:回退到规则引擎
- **gcov失败**:跳过覆盖率收集
- **DB连接失败**:重试或跳过
- **API重试**DeepSeek API 3回重试机制
- **JSON解析容错**:支持非标准JSON格式
---
@@ -255,6 +399,7 @@ class Config:
| 测试数据生成 | < 30秒 |
| 编译运行 | < 60秒 |
| 覆盖率报告 | < 10秒 |
| 黑盒数据生成 | < 120秒(含API调用) |
### 7.2 优化策略
@@ -262,6 +407,7 @@ class Config:
- **并行执行**:多场景gcov并行收集
- **缓存机制**LLM结果缓存
- **增量补充**:质量门循环最多4次
- **API重试**:3回重试机制,避免单次失败
---
@@ -272,12 +418,14 @@ class Config:
- COBOL源码:长度限制、编码检查
- 配置文件:YAML schema验证
- 文件路径:路径遍历防护
- 設計書:格式验证、大小写检查
### 8.2 资源限制
- LLM调用:最大成本限制
- 执行时间:超时强制终止
- 内存使用:大文件分块处理
- API限流:避免超过API配额
---
@@ -296,6 +444,8 @@ class Config:
- 43个COBOL基准程序
- 33+2种程序类型
- 58个电信测试程序
- 16种PGMパターン
- 24个黑盒测试程序
---
@@ -314,11 +464,12 @@ class Config:
```bash
# 1. 安装Python依赖
pip install lark pathlib pyyaml
pip install lark pathlib pyyaml requests
# 2. 安装GnuCOBOL
# 下载GC32-BDB-SP1,添加到PATH
# 3. 验证安装
python -c "from cobol_testgen import extract_structure; print('OK')"
python -c "from blackbox.agent import generate; print('OK')"
```