469 lines
20 KiB
Markdown
469 lines
20 KiB
Markdown
# COBOL→Java/Spark 迁移验证平台 V3 — 系统认知分析报告
|
||
|
||
> 生成日期: 2026-07-11
|
||
> 范围: `cobol-java-v3/` 全仓库
|
||
|
||
---
|
||
|
||
## 一、核心架构
|
||
|
||
**项目职责**:解析 COBOL 程序语义结构 → 自动生成覆盖全部路径的测试数据 → 分别在 COBOL 和 Java/Spark 上执行 → 对比两者输出以验证迁移正确性。
|
||
|
||
两条独立管线:
|
||
|
||
| 管线 | 入口 | 目标程序类型 |
|
||
|------|------|-------------|
|
||
| **Native 管线** | `orchestrator.py:run_pipeline()` | 非 DB 批处理 COBOL |
|
||
| **DB 管线** | `orchestrator_db.py:GixsqlOrchestrator.run_all()` | 含 EXEC SQL 的 DB COBOL |
|
||
|
||
---
|
||
|
||
## 二、Native 管线 (`orchestrator.py:run_pipeline`)
|
||
|
||
### 职责概述
|
||
接收 copybook/COBOL 源码/Java 源码/字段映射,走完整对比流程:LLM 解析结构 → cobol_testgen 生成数据 → COBOL 编译运行 → Java 编译运行 → 二进制输出对齐 → 字段级对比 → 生成 HTML/JSON 报告。
|
||
|
||
### 内部结构
|
||
```
|
||
run_pipeline()
|
||
├── Agent1Parser(llm).parse(copybook) → FieldTree(COPYBOOK结构)
|
||
├── extract_structure(cobol_src) → 控制流树
|
||
├── generate_data() → 基础测试数据 (list[dict])
|
||
├── classify_program(cobol_src, llm) → HINA 类型判定
|
||
├── strategy_supplement() → 策略 Agent 追加测试
|
||
├── gate_check() + incremental_supplement() → 质量门禁循环(最多4次)
|
||
├── Agent2Data(llm).design(tree) → 数据设计
|
||
├── DataWriter → CobolRunner → NativeJavaRunner / SparkJavaRunner
|
||
├── CobolBinaryReader → align_records → compare_field
|
||
├── Agent3Diagnostic(llm) → 差异诊断
|
||
└── ReportGenerator → JSON + HTML + machine JSON
|
||
```
|
||
|
||
### 数据流
|
||
```
|
||
输入: copybook.cpy + program.cbl + java/ + mapping.yaml
|
||
↓ Agent1Parser (LLM)
|
||
FieldTree
|
||
↓ cobol_testgen.extract_structure + generate_data
|
||
测试记录 list[dict]
|
||
↓ HINA 类型判定 + 策略补充 + 质量门禁循环
|
||
增强测试数据
|
||
↓ DataWriter → CobolRunner (cobc) → COBOL二进制输出
|
||
↓ DataWriter → NativeJavaRunner (java -jar) / SparkJavaRunner → Java输出
|
||
↓ CobolBinaryReader + align_records + compare_field
|
||
字段级对比结果 FieldResult[]
|
||
↓ ReportGenerator
|
||
输出: reports/{program}/{timestamp}/result.json + report.html + machine.json
|
||
```
|
||
|
||
### 依赖关系
|
||
- `agents/`: LLMClient, Agent1Parser, Agent2Data, Agent3Diagnostic
|
||
- `cobol_testgen/`: extract_structure, generate_data, incremental_supplement, check_coverage
|
||
- `runners/`: CobolRunner, NativeJavaRunner, SparkJavaRunner, DataWriter
|
||
- `comparator/`: align_records, compare_field, CobolBinaryReader
|
||
- `data/`: FieldTree, TestSuite, TestCase, VerificationRun, FieldResult
|
||
- `config/`: Config, MappingConfig
|
||
- `storage/`: TestDataBundle
|
||
- `report/`: ReportGenerator
|
||
- `hina/`: classify_program, gate_check, supplement
|
||
- 外部:httpx (LLM), cobc (COBOL编译), Java/Maven, Spark (可选)
|
||
|
||
### 关键注意事项
|
||
- `LLM 成本上限`: max_llm_cost=0.50,超限直接返回 BLOCKED (exit_code=3)
|
||
- `质量门禁`: quality_gate_mode=warn 时只记录警告,不阻塞管线
|
||
- `DRY-RUN 模式`: 只检查输入文件存在性,不执行实际管线(sys.exit(0/2))
|
||
- `Agent1Parser 返回空字段时直接 BLOCKED`
|
||
- `complete_tests 替换`: `orchestrator.py:112` 用 cobol_testgen 生成的 complete_tests 整体替换 suite.test_cases,覆盖了 Agent2Data 的设计结果
|
||
|
||
---
|
||
|
||
## 三、DB 管线 (`orchestrator_db.py:GixsqlOrchestrator`)
|
||
|
||
### 职责概述
|
||
6 步执行含 SQL 的 DB COBOL 程序:gixpp 预处理 + cobc 编译 → 测试数据生成(含 DB 初始化 + 扁平文件)→ COBOL 执行 → SQLite 中介数据提取 → Java 执行 → 验证。
|
||
|
||
### 内部结构
|
||
```
|
||
GixsqlOrchestrator
|
||
├── step1_setup_environment()
|
||
│ ├── _copy_sources_to_workdir() → 源码拷贝到ASCII-only路径
|
||
│ ├── runner.preprocess() → gixpp
|
||
│ └── runner.compile() → cobc
|
||
├── step2_generate_inputs()
|
||
│ ├── extract_structure() + generate_data()
|
||
│ ├── _init_database() + _create_tables()
|
||
│ ├── _populate_database() → SQL meta + branch paths → DB初始行
|
||
│ ├── write_all_files() → 扁平文件
|
||
│ └── write_sysin_file() → SYSIN卡片
|
||
├── step3_run_cobol()
|
||
├── step4_extract_intermediate() → SQLite → JSON中介数据
|
||
├── step5_run_java() → java -jar
|
||
├── step6_verify() → VerificationRun
|
||
├── generate_coverage_report() → gcov + 静态分支 → HTML
|
||
└── run_all(skip_steps) → Step 1→4 (skip_jvm) / 1→6
|
||
```
|
||
|
||
### 数据流
|
||
```
|
||
输入: cobol-tna-system/src/{program}.cbl + .cpy copybooks
|
||
↓ Step 1: _copy_sources_to_workdir → gixpp → cobc
|
||
可执行文件 + 预处理后源码
|
||
↓ Step 2: cobol_testgen → pipeline_bridge → to_sql
|
||
扁平文件 + DB 初始行 (SQLite)
|
||
↓ Step 3: COBOL 运行
|
||
更新后 DB + 扁平文件输出
|
||
↓ Step 4: DB → JSON 中介数据
|
||
W01 JSON
|
||
↓ Step 5: Java 运行
|
||
Java 输出文件
|
||
↓ Step 6: 验证
|
||
VerificationRun
|
||
```
|
||
|
||
### 依赖关系
|
||
- `config/program_schema.py`: 每个程序的 DB 表定义 YAML(config/programs/{pid}.yaml)
|
||
- `cobol_testgen/`: extract_structure, generate_data, flatfile, file_io, read, gcov, coverage, design_mcdc, to_sql, core, pipeline_bridge
|
||
- `runners/gixsql_runner.py`: GixsqlCobolRunner
|
||
- `data/diff_result.py`: VerificationRun, FieldResult
|
||
- 外部:gixsql/bin/gixpp.exe(预处理),cobc(编译),Java, SQLite3
|
||
- cobol-tna-system/bin/: SUB 程序 DLL
|
||
|
||
### 关键注意事项
|
||
- `gixpp 无法处理中文路径`:所有源码拷贝到 ASCII-only %TEMP%/gixsql_build/{pid}/
|
||
- `DB 路径约定`: C:/Temp/gix/{program_id}.db,需要跟 COBOL CONNECT TO 语句的路径一致
|
||
- `R02 关联 POST-PROCESS`: Step2 中 R02APPL-ID 被强制同步为 R01APPL-ID
|
||
- `Step 5/6 默认跳过`: skip_jvm=True,只有显式设置才会执行 Java 对比
|
||
- `gcov 文件清理`: coverage 报告后删除 CWD 中的 .gcno/.gcda,但可能因 PermissionError 失败
|
||
- `性能隐患`: _populate_database 中重复解析了 DATA DIVISION 和 PROCEDURE DIVISION
|
||
|
||
---
|
||
|
||
## 四、核心引擎 (`cobol_testgen/`)
|
||
|
||
### 职责概述
|
||
COBOL 程序的全静态分析 + 测试数据生成 + 覆盖率报告。4 层架构(INPUT → CORE → CONDITION → DESIGN)+ OUTPUT + COVERAGE。
|
||
|
||
### 内部结构
|
||
```
|
||
cobol_testgen/
|
||
├── __init__.py 对外API (extract_structure/generate_data/incremental_supplement) + CLI入口 main()
|
||
├── read.py INPUT层: 预处理/COPYBOOK展开/EXEC SQL剥离/DATA DIVISION解析(Lark语法 grammar.lark)
|
||
├── core.py CORE层: PROCEDURE DIVISION解析 → 分支树 + 数据流追踪
|
||
├── cond.py CONDITION层: 条件表达式解析 → MC/DC枚举 → 约束合并 → satisfying_value
|
||
├── design.py DESIGN层: enum_paths + generate_records + 约束应用
|
||
├── design_mcdc.py MC/DC路径枚举(独立路径集)
|
||
├── models.py 共享数据模型(BrSeq/BrIf/BrEval/BrPerform/Assign/CondLeaf等)
|
||
├── output.py OUTPUT层: JSON输出 + 输入文件输出
|
||
├── coverage.py COVERAGE层: 决策点收集 + mark_coverage + HTML中文覆盖率报告
|
||
├── flatfile.py 扁平文件写入(FD布局分析)
|
||
├── file_io.py 输出文件读取
|
||
├── to_sql.py SQL元数据收集 + DB输入构建
|
||
├── gcov.py gcov 解析
|
||
├── pipeline_bridge.py build_branch_tree_fallback(Lark解析失败时的回退)
|
||
├── grammar.lark DATA DIVISION Lark语法
|
||
├── procedure_grammar.lark PROCEDURE DIVISION Lark语法
|
||
├── procedure_parser.py Lark解析器
|
||
├── runner.py 编译+运行+对比(--run模式)
|
||
└── __main__.py CLI入口 python -m cobol_testgen
|
||
```
|
||
|
||
### 数据流
|
||
```
|
||
COBOL源码
|
||
↓ read.preprocess → resolve_copybooks → strip_exec_sql
|
||
预处理后文本
|
||
↓ read.parse_data_division(Lark grammar)
|
||
FieldDef[]
|
||
↓ expand_occurs
|
||
展开下标后的字段字典
|
||
↓ core.build_branch_tree / pipeline_bridge.build_branch_tree_fallback
|
||
分支树 (BrSeq + BrIf + BrEval + BrPerform + ...) + assignments
|
||
↓ design.enum_paths / design_mcdc.enum_paths
|
||
路径约束 (path_cons, path_assign)[]
|
||
↓ cond.parse_compound_condition + mcdc_sets + satisfying_value
|
||
MC/DC 约束集
|
||
↓ design.generate_records
|
||
测试记录 list[dict]
|
||
↓ coverage.run_coverage + mark_coverage
|
||
HTML 覆盖率报告
|
||
```
|
||
|
||
### 依赖关系
|
||
- `lark>=1.1.0`: DATA DIVISION + PROCEDURE DIVISION 解析(Earley parser)
|
||
- `japanese_data.py`: 日文测试数据生成函数
|
||
- 内部无额外外部依赖
|
||
|
||
### 关键注意事项
|
||
- `MC/DC compound IF 已知 BUG`: cond.py:mcdc_sets 合并同字段约束时会改变操作符/值,导致 coverage.py:_match_leaf 匹配失败
|
||
- `_MAX_PATHS=10000`: 路径截断导致 F-branch 约束丢失,靠 implied_branch 标记补偿
|
||
- `Lark grammar 限制`: grammar.lark 要求命名终端(不能内联字符串),且 Earley+dynamic lexer
|
||
- `88-level 假设`: AGENTS.md 明确要求目标程序不含 88-level VALUE 子句,88-level 解析仅为测试程序保留
|
||
- `COPYBOOK 搜索路径`: 默认 filepath.parent/../cpy,不灵活
|
||
- `OCCURS DEPENDING ON`: 被捕获但未用于实际记录生成
|
||
|
||
---
|
||
|
||
## 五、各子模块速览
|
||
|
||
### `config/` — 配置层
|
||
|
||
| 文件 | 职责 |
|
||
|------|------|
|
||
| `__init__.py` | Config dataclass,支持 aurak.toml 加载 |
|
||
| `mapping.py` | MappingConfig, FieldMapping(字段映射) |
|
||
| `program_schema.py` | ProgramSchema, TableDef, ColumnDef → 从 YAML 加载每个 DB 程序的表定义 |
|
||
| `programs/` | 6 个 KIN/ZAN 程序的 DB schema YAML |
|
||
|
||
### `agents/` — LLM 智能体
|
||
|
||
| 文件 | 职责 |
|
||
|------|------|
|
||
| `llm.py` | LLMClient(httpx + 缓存 + 重试) |
|
||
| `agent1_parser.py` | COPYBOOK → FieldTree(LLM) |
|
||
| `agent2_data.py` | FieldTree → TestSuite(LLM 数据设计) |
|
||
| `agent3_diagnostic.py` | MISMATCH → 诊断建议(LLM) |
|
||
|
||
### `runners/` — 编译运行
|
||
|
||
| 文件 | 职责 |
|
||
|------|------|
|
||
| `runner.py` | Runner ABC + BuildResult/RunResult |
|
||
| `cobol_runner.py` | CobolRunner(cobc 编译执行) |
|
||
| `native_java_runner.py` | NativeJavaRunner(mvn package + java -jar) |
|
||
| `spark_java_runner.py` | SparkJavaRunner(spark-submit) |
|
||
| `data_writer.py` | DataWriter(二进制/JSON 数据写入) |
|
||
| `gixsql_runner.py` | GixsqlCobolRunner(gixpp + cobc) |
|
||
|
||
### `comparator/` — 对比引擎
|
||
|
||
| 文件 | 职责 |
|
||
|------|------|
|
||
| `aligner.py` | align_records(COBOL ↔ Java 记录对齐,按 CUST-ID 匹配) |
|
||
| `field_compare.py` | compare_field(decimal/string 容忍比较) |
|
||
| `cobol_binary_reader.py` | CobolBinaryReader(二进制输出解析) |
|
||
| `normalizer.py` | Normalizer(COMP-3/EBCDIC 解码) |
|
||
| `rounding_detect.py` | detect_rounding(舍入检测) |
|
||
|
||
### `data/` — 数据模型
|
||
|
||
| 文件 | 职责 |
|
||
|------|------|
|
||
| `field_tree.py` | Field + FieldTree(COPYBOOK 解析结果) |
|
||
| `test_case.py` | TestCase + TestSuite + SparkConfig |
|
||
| `diff_result.py` | FieldResult + VerificationRun(管道运行结果) |
|
||
|
||
### `storage/` — 存储
|
||
|
||
| 文件 | 职责 |
|
||
|------|------|
|
||
| `store.py` | DiskCache(SHA256 key → JSON)+ ReportStore(JSONL) |
|
||
| `bundle.py` | TestDataBundle(测试数据目录路径管理) |
|
||
|
||
### `hina/` — 程序类型分类
|
||
|
||
| 文件 | 职责 |
|
||
|------|------|
|
||
| `classifier.py` | classify_program(关键词/规则/LLM 三路径判定) |
|
||
| `gate.py` | gate_check(质量门禁检查) |
|
||
| `strategy.py` | supplement(策略补充) |
|
||
| `confidence.py` | 置信度计算 |
|
||
| `gcov_collector.py` | gcov 数据收集 |
|
||
| `retry.py` | 重试逻辑 |
|
||
| `rule_engine/` | 规则引擎定义 |
|
||
| `pipeline/` | 子管线定义 |
|
||
|
||
### `jcl/` — JCL 处理
|
||
|
||
| 文件 | 职责 |
|
||
|------|------|
|
||
| `parser.py` | JCL 解析 |
|
||
| `executor.py` | JCL 执行 |
|
||
|
||
### `web/` — Web 界面
|
||
|
||
| 文件 | 职责 |
|
||
|------|------|
|
||
| `api.py` | FastAPI(202+ polling 异步管线) |
|
||
| `worker.py` | 后台任务执行 |
|
||
|
||
### `report/`
|
||
|
||
| 文件 | 职责 |
|
||
|------|------|
|
||
| `generator.py` | ReportGenerator(JSON/HTML/机器JSON) |
|
||
|
||
---
|
||
|
||
## 六、与管道无关的测试/调试脚本
|
||
|
||
以下脚本位于根目录,非生产管线代码,用于开发调试/临时验证:
|
||
|
||
### 调试 KIN08DBU 特定
|
||
|
||
| 脚本 | 用途 |
|
||
|------|------|
|
||
| `_analyze.py` | 打印 KIN08DBU 第185-260行 |
|
||
| `_analyze2.py` | 查找 KIN08DBU 的 FILE CONTROL 段落 |
|
||
| `_check_db.py` | 检查 KIN08DBU DB 运行后状态 |
|
||
| `_check_db_full.py` | 完整 DB 状态 + SQL 直接插入测试 |
|
||
| `_check_flats.py` | 检查 KIN08DBU 扁平文件生成 |
|
||
| `_check_schema.py` | 查看 SQLite 表结构 |
|
||
| `_check_sysin.py` | 检查 SYSINFILE 布局检测 |
|
||
| `_debug_sql.py` | SQL INSERT 问题调试 |
|
||
| `_debug_step1.py` | Step 1 编译问题调试 |
|
||
| `_find_exit.py` | 查找 MSG/STOP RUN/GOBACK |
|
||
| `_find_exit2.py` | 查找 EXIT/GOBACK 和段落结构 |
|
||
| `_investigate_exit.py` | 完整 3 步骤 + DB 前后状态分析 |
|
||
| `_run_k08.py` | KIN08DBU 3 步骤运行 + SYSIN |
|
||
| `_run_k08_v2.py` | KIN08DBU 全 4 步骤 + 覆盖率 |
|
||
| `_test_insert.py` | 直接 SQLite INSERT 测试 |
|
||
|
||
### 通用调试
|
||
|
||
| 脚本 | 用途 |
|
||
|------|------|
|
||
| `debug_cons.py` | ZAN01CHK 约束调试(RRC 字段 <> 约束) |
|
||
| `debug_cons2.py` | ZAN01CHK 路径约束枚举调试 |
|
||
| `test_llm.py` | LLM 客户端直连测试 |
|
||
| `test_pipeline.py` | 全管线端到端测试 |
|
||
| `write_result.py` | 任务结果写入 uploads/tasks |
|
||
| `reset_task.py` | JSON 任务状态重置为 queued |
|
||
| `preprocessor.py` | 独立 COPYBOOK 展开器(非 cobol_testgen/read.py) |
|
||
| `test_hello.cbl` | 最小 COBOL "HELLO WORLD" 测试程序 |
|
||
|
||
### 工具库(可被生产代码引用)
|
||
|
||
| 脚本 | 用途 |
|
||
|------|------|
|
||
| `japanese_data.py` | 日文测试数据生成工具(被 cobol_testgen 正式 import,属于半生产代码) |
|
||
|
||
---
|
||
|
||
## 七、跨文件关键依赖关系图
|
||
|
||
```
|
||
main.py
|
||
└─→ orchestrator.py:run_pipeline()
|
||
├─→ agents/ (LLMClient, Agent1-3)
|
||
├─→ cobol_testgen/ (extract_structure, generate_data)
|
||
│ ├─→ read.py → grammar.lark (Lark)
|
||
│ ├─→ models.py
|
||
│ ├─→ core.py
|
||
│ ├─→ cond.py
|
||
│ ├─→ design.py + design_mcdc.py
|
||
│ ├─→ coverage.py
|
||
│ └─→ japanese_data.py
|
||
├─→ hina/ (classify, gate, strategy)
|
||
├─→ runners/ (CobolRunner, NativeJavaRunner)
|
||
├─→ comparator/ (align_records, compare_field, CobolBinaryReader)
|
||
├─→ data/ (VerificationRun, FieldResult, TestSuite)
|
||
├─→ storage/ (TestDataBundle)
|
||
└─→ report/ (ReportGenerator)
|
||
|
||
orchestrator_db.py:GixsqlOrchestrator
|
||
├─→ config/program_schema.py (ProgramSchema)
|
||
├─→ cobol_testgen/ (extract_structure, generate_data, flatfile, to_sql, coverage, gcov, pipeline_bridge)
|
||
├─→ runners/gixsql_runner.py
|
||
└─→ data/diff_result.py
|
||
|
||
web/api.py
|
||
└─→ orchestrator.py:run_pipeline()
|
||
```
|
||
|
||
---
|
||
|
||
## 八、关键注意事项总览
|
||
|
||
### 架构层
|
||
|
||
1. **两条管线分裂**: orchestrator.py (Native) 和 orchestrator_db.py (DB) 各自独立,共用 cobol_testgen 核心但互不调用
|
||
2. **管线替换设计缺陷**: orchestrator.py:112 用 complete_tests 整体替换 suite.test_cases,覆盖了 Agent2Data 的设计
|
||
3. **DB 管线硬编码路径**: C:/Temp/gix/{pid}.db,不灵活
|
||
|
||
### 稳定性层
|
||
|
||
4. **`_MAX_PATHS=10000` 截断**: 导致 F-branch 约束丢失,implied_branch 只是标记补偿,不生成真实测试数据
|
||
5. **MC/DC 合并 BUG**: cond.py 同字段约束合并改变语义,导致覆盖率匹配失败
|
||
6. **PermissionError 静默忽略**: coverage 清理 .gcda 文件时,可能积累
|
||
|
||
### 数据层
|
||
|
||
7. **OCCURS DEPENDING ON 未使用**: 虽被解析但 generate_records 未利用
|
||
8. **88-level VALUE 假设**: 系统假设目标程序无 88-level VALUE,但解析器仍保留该能力
|
||
9. **R02 APPL-ID 强制覆盖**: orchestrator_db.py:177-179 无条件同步 R02→R01 的 APPL-ID
|
||
|
||
### 安全/错误处理层
|
||
|
||
10. **NPE 静默忽略**: orchestrator.py:178 的 except: pass 吞掉 Agent3Diagnostic 的所有异常
|
||
11. **hina 分类失败不阻塞**: orchestrator.py:63-65 仅记录警告,不影响流程
|
||
12. **LLM API KEY 硬编码**: test_llm.py:4 和 test_pipeline.py:3 包含明文 API key
|
||
|
||
---
|
||
|
||
## 九、目录结构与功能总览
|
||
|
||
```
|
||
cobol-java-v3/ # 根工程
|
||
├── main.py # CLI 入口(非 DB 管线)
|
||
├── orchestrator.py # Native 管线编排(核心)
|
||
├── orchestrator_db.py # DB 管线编排(6步)
|
||
├── pyproject.toml # 包定义 verify-cli
|
||
├── requirements.txt # httpx, pyyaml, pytest, fastapi, uvicorn
|
||
│
|
||
├── cobol_testgen/ # 核心引擎(4层架构)
|
||
│ ├── __init__.py # 对外API + main() CLI
|
||
│ ├── read.py # INPUT层:预处理/DATA DIVISION解析
|
||
│ ├── core.py # CORE层:PROCEDURE DIVISION解析
|
||
│ ├── cond.py # CONDITION层:条件/MCDC/约束
|
||
│ ├── design.py # DESIGN层:路径枚举/值生成
|
||
│ ├── design_mcdc.py # MC/DC路径枚举
|
||
│ ├── coverage.py # 覆盖率统计/HTML报告
|
||
│ ├── output.py # JSON/文件输出
|
||
│ ├── flatfile.py # 扁平文件写入
|
||
│ ├── file_io.py # 输出文件读取
|
||
│ ├── to_sql.py # DB输入构建
|
||
│ ├── gcov.py # gcov解析
|
||
│ ├── pipeline_bridge.py # Lark回退解析桥接
|
||
│ ├── models.py # 共享数据模型
|
||
│ ├── grammar.lark # DATA DIVISION Lark语法
|
||
│ ├── procedure_grammar.lark # PROCEDURE DIVISION Lark语法
|
||
│ ├── procedure_parser.py # PROCEDURE DIVISION Lark解析器
|
||
│ ├── runner.py # 编译运行+验证
|
||
│ └── __main__.py # CLI入口
|
||
│
|
||
├── agents/ # LLM智能体
|
||
├── hina/ # 程序类型分类/质量门禁
|
||
├── runners/ # 编译运行引擎
|
||
├── comparator/ # 对比引擎
|
||
├── config/ # 配置/DB schema YAML
|
||
├── data/ # 数据模型
|
||
├── storage/ # 存储/缓存
|
||
├── report/ # 报告生成
|
||
├── jcl/ # JCL处理
|
||
├── web/ # FastAPI Web界面
|
||
│
|
||
├── _*.py (14个) # 调试脚本(非生产代码)
|
||
├── debug_cons*.py (2个) # 约束调试
|
||
├── test_*.py (3个) # LLM/管线测试
|
||
├── write_result.py # 任务结果写入
|
||
├── reset_task.py # 任务重置
|
||
├── preprocessor.py # 独立COPYBOOK展开器
|
||
├── japanese_data.py # 日文数据生成库
|
||
├── test_hello.cbl # 最小COBOL程序
|
||
│
|
||
├── tests/ # pytest测试套件
|
||
├── benchmark-programs/ # 36个基准COBOL程序
|
||
├── test-data/ # 测试套件
|
||
├── cobol-tna-system/ # KIN telecom COBOL系统
|
||
├── gixsql/ # gixsql预处理工具
|
||
│
|
||
├── tasks/ # Web任务JSON
|
||
├── uploads/ # Web上传目录
|
||
├── reports/ # 报告输出
|
||
├── output_20260701/ # 历史输出
|
||
├── coverage/ # 覆盖率报告
|
||
├── config/programs/ # 6个DB程序schema YAML
|
||
├── logs/ # 日志
|
||
└── docs/ # 文档
|
||
```
|