关于 cobol-migration-analyzer
面向评估旧版 COBOL 和 JCL 系统并迁移至 Java 的团队。它提取程序结构与依赖关系,将 copybook 映射为 Java 类,并通过附带脚本估算迁移复杂度。
主要功能
- 01提取 COBOL 结构与逻辑
- 02分析 JCL 作业及依赖
- 03生成 copybook 对应的 Java POJO
- 04构建跨代码库依赖图
- 05估算迁移复杂度
适用场景
- 01盘点 COBOL 和 JCL 资产
- 02将 copybook 映射为 Java 数据类
- 03迁移前梳理依赖关系
- 04估算迁移工作量与风险
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ dauquangthanh/ hanoi-rainbow --skill cobol-migration-analyzer安装后在 Claude Code 中输入/cobol-migration-analyzer确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/java-class-template.javamigration-report-template.mdreferences/messaging-integration.mdperformance-patterns.mdpseudocode-cobol-rules.mdpseudocode-common-rules.mdtesting-strategy.mdtransaction-handling.mdscripts/analyze-dependencies.ps1analyze-dependencies.shestimate-complexity.pyextract-structure.pygenerate-java-classes.py详细介绍
COBOL 迁移分析器
分析遗留 COBOL 程序和 JCL 脚本,以便迁移到 Java。提取业务逻辑、数据结构和依赖项,生成可执行的迁移策略。
核心能力
1. COBOL 程序分析
提取 COBOL 分区(IDENTIFICATION、ENVIRONMENT、DATA、PROCEDURE)、Working-Storage 变量、文件定义(FD)、业务逻辑段落、PERFORM 语句、CALL 层次结构、嵌入式 SQL 和错误处理模式。
2. JCL 作业分析
解析 JCL 作业步骤、程序调用、数据依赖项(DD 语句)、条件逻辑(COND、IF/THEN/ELSE)、返回码和资源需求。
3. Copybook 处理
提取包含层级编号、REDEFINES 子句、组项、OCCURS 子句和图片子句的记录布局。根据 copybook 结构生成 Java POJO。
4. 依赖映射
构建完整的依赖关系图,展示代码库中的 CALL 层次结构、copybook 用法、文件依赖项、数据库表访问和共享工具引用。
工作流
第 1 步:发现 COBOL 资源
查找 COBOL 程序、JCL 作业和 copybook:
find . -name "*.cbl" -o -name "*.CBL" -o -name "*.cob"
find . -name "*.jcl" -o -name "*.JCL"
find . -name "*.cpy" -o -name "*.CPY"
使用 scripts/analyze-dependencies.sh 或 scripts/analyze-dependencies.ps1 生成依赖关系图。
第 2 步:提取结构
使用 scripts/extract-structure.py 解析 COBOL 程序,并以 JSON 格式提取分区、变量、段落和依赖项。
第 3 步:生成 Java 代码
使用 scripts/generate-java-classes.py 将 copybook 转换为 Java POJO,并添加适当的数据类型和 Bean Validation 注解。
第 4 步:估算复杂度
使用 scripts/estimate-complexity.py,根据 LOC、外部调用、文件操作、SQL 语句和控制流计算迁移复杂度。
第 5 步:制定迁移策略
记录程序概述、依赖项、数据结构、业务逻辑模式、拟议的 Java 设计、迁移估算和待办事项。
快速参考
COBOL 到 Java 的类型映射
| COBOL Picture | Java Type | 说明 |
|---|---|---|
PIC 9(n) | int、long、BigInteger | 无符号数值 |
PIC S9(n) | int、long、BigInteger | 有符号数值 |
PIC 9(n)V9(m) | BigDecimal | 无符号小数 |
PIC S9(n)V9(m) | BigDecimal | 有符号小数 |
PIC S9(n)V9(m) COMP-3 | BigDecimal | 压缩十进制数——精度至关重要! |
PIC S9(n) COMP / BINARY | int、long | 二进制存储 |
PIC S9(n) COMP-1 | float | 单精度(财务数据应避免使用) |
PIC S9(n) COMP-2 | double | 双精度(财务数据应避免使用) |
PIC X(n) | String | 字母数字/字符 |
PIC A(n) | String | 仅字母 |
PIC N(n) | String | 国家字符/Unicode |
OCCURS n | List<T> 或 T[] | 固定长度数组/表 |
OCCURS n DEPENDING ON | List<T> | 可变长度数组 |
88 level | enum 或常量 | 条件名称 |
INDEX | int | 表索引(在 COBOL 中从 1 开始) |
常见模式转换
- 文件 I/O:
READ...AT END→ 使用 try-with-resources 的BufferedReader或 NIO 流 - 文件更新:
REWRITE→ 数据库或文件系统中的更新操作 - 表查找:
SEARCH→ 使用流进行线性搜索 - 二分搜索:
SEARCH ALL→Collections.binarySearch()或stream().filter().findFirst() - 字符串操作:
STRING/UNSTRING→StringBuilder或String.split() - 检查:
INSPECT→String.replace()、replaceAll()或正则表达式 - CALL 语句:→ 方法调用或服务调用
- EVALUATE:→
switch语句(Java 14+ 支持增强型 switch) - 日期运算:
FUNCTION INTEGER-OF-DATE→LocalDate操作 - ACCEPT DATE/TIME:→
LocalDate.now()、LocalTime.now() - 条件名称(Level 88):→
enum或类型化常量 - 计算型 GO TO:→ 策略模式或
switch语句 - REDEFINES:→ 联合类型、ByteBuffer 视图或独立的访问器类
- COPY 语句:→ 包导入或共享实体类
示例:将 Copybook 转换为 Java POJO
COBOL Copybook:
01 EMPLOYEE-RECORD.
05 EMP-ID PIC 9(6).
05 EMP-NAME PIC X(30).
05 EMP-SALARY PIC S9(7)V99 COMP-3.
生成的 Java:
public class EmployeeRecord {
private int empId;
private String empName;
private BigDecimal empSalary;
// getters/setters
}
迁移注意事项
关键模式:
- 始终对 COMP-3 和带小数的数值使用
BigDecimal(绝不使用 float/double) - 保留精度:金融计算使用具有精确小数位数的
BigDecimal - 从 1 开始的索引:注明 COBOL 数组从 1 开始,Java 数组从 0 开始
- 隐式转换:明确处理 COBOL 自动进行的数值↔字符串转换
- REDEFINES:建模为联合类型、ByteBuffer 覆盖层或独立的视图类
- 计算型 GO TO:重构为策略模式或
switch语句 - ALTER 语句:重构为结构化控制流(if/while/switch)
- PERFORM THRU:映射为一个包含完整段落范围的单一方法
- BY REFERENCE 与 BY CONTENT:注明参数传递语义
- 严格测试:使用生产数据样本进行验证,尤其是 COMP-3
输出要求:
- 程序概览和类型分类
- 完整的依赖关系图(CALL 树、copybook、文件、数据库表)
- 数据结构映射(copybook → Java 类)
- 业务逻辑概要(关键段落 → 方法)
- 拟议的 Java 架构(服务、存储库、实体)
- 迁移工作量估算(复杂度评分、LOC、风险因素)
- 按优先级排列的待办事项
高级主题
有关详细的转换规则和模式,请参阅:
- pseudocode-cobol-rules.md - 全面的 COBOL 到伪代码转换规则,包括数据类型、语句、文件操作、字符串操作、表操作、程序控制、转换模式和常见注意事项
- pseudocode-common-rules.md - 适用于所有语言的通用伪代码语法和约定
- transaction-handling.md - 将 CICS/IMS 迁移到 Java 时的事务管理和回滚策略
- messaging-integration.md - 消息队列和异步模式(MQ、CICS 队列到 JMS/Kafka)
- performance-patterns.md - 批处理优化和内存管理
- testing-strategy.md - 全面的测试,包括单元测试、集成测试、并行验证和数据驱动测试
工具和脚本
所有脚本均支持跨平台执行(Windows PowerShell、bash):
analyze-dependencies.sh/ps1- 生成依赖关系图extract-structure.py- 将 COBOL 结构解析为 JSONgenerate-java-classes.py- 将 copybook 转换为 Java POJOestimate-complexity.py- 计算迁移复杂度评分
脚本仅使用标准库,并输出 JSON,便于与 CI/CD 管道集成。