关于 cobol-modernization
该技能为将 COBOL 程序迁移到现代语言提供流程指导,面向需要维持行为一致性的开发者。重点涵盖定长数据格式分析、字节级输出比对和系统化测试。
主要功能
- 01分析 COBOL 数据布局与逻辑
- 02记录定长字段及字节格式
- 03建立状态重置与输出比对脚本
- 04覆盖验证路径和边界条件测试
适用场景
- 01迁移使用定长记录的 COBOL 程序
- 02核验现代实现与 COBOL 输出一致
- 03测试交易验证及边界场景
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ letta-ai/ skills --skill cobol-modernization安装后在 Claude Code 中输入/cobol-modernization确认已加载。
详细介绍
COBOL 现代化改造
概述
此技能提供了一套系统化方法,用于将 COBOL 程序转换为现代语言,同时确保行为完全等效。COBOL 现代化改造的关键挑战不仅在于转换逻辑,还在于保留精确的数据格式、定长记录结构以及字节级输出兼容性。
工作流
阶段 1:分析与文档编制
编写任何代码之前,请彻底分析 COBOL 源代码和数据文件:
-
阅读完整的 COBOL 源代码——了解程序结构,包括:
- 用于变量定义和大小设置的 WORKING-STORAGE SECTION
- 用于记录布局和字段定义的 FILE SECTION
- 用于业务逻辑的 PROCEDURE DIVISION
-
明确记录所有数据格式——为每个文件创建规范:
- 记录长度(每条记录的总字节数)
- 字段位置(起始字节、长度)
- 字段类型(COMP-3 数值、字母数字、压缩十进制数)
- 填充和对齐要求
-
在实现前解决格式差异——如果输入文件与预期格式不符(例如,文件为 15 字节,但 COBOL 预期为 22 字节),请先调查并记录 COBOL 程序的实际处理方式,再继续后续工作。
阶段 2:设置测试框架
在实现转换之前,先创建可复用的测试基础设施:
-
创建状态重置脚本——自动恢复原始数据文件:
# Example: reset_state.sh cp data/ACCOUNTS.DAT.orig data/ACCOUNTS.DAT cp data/BOOKS.DAT.orig data/BOOKS.DAT cp data/TRANSACTIONS.DAT.orig data/TRANSACTIONS.DAT -
创建比较脚本——自动比较输出:
# Example: compare_outputs.sh diff data/ACCOUNTS_PYTHON.DAT data/ACCOUNTS_COBOL.DAT diff data/BOOKS_PYTHON.DAT data/BOOKS_COBOL.DAT diff data/TRANSACTIONS_PYTHON.DAT data/TRANSACTIONS_COBOL.DAT -
保留原始 COBOL 输出——先运行 COBOL 程序,并将输出保存为参考基准,然后再开始任何转换工作。
阶段 3:实现
编写现代语言的等效程序时:
-
完全匹配 COBOL 的数据处理方式:
- 使用定宽字符串格式,而非可变长度格式
- 正确处理填充(字母数字字段填充空格,数值字段填充零)
- 处理 COBOL 数值字段中隐含的小数点
- 匹配 COBOL 对超出长度的值的截断行为
-
立即验证文件写入——写入代码文件后,重新读取文件,确认内容已完整、正确地保存,再进行测试。
-
使用一致的命名方式——避免创建过多临时文件。采用清晰的命名方案:
- COBOL 程序输出使用
*_COBOL.DAT - Python 程序输出使用
*_PYTHON.DAT - 每轮测试之间清理文件
- COBOL 程序输出使用
阶段 4:系统化测试
测试所有代码路径,而不只是顺利执行的路径:
-
创建测试矩阵,涵盖所有验证场景:
- 有效交易(成功场景)
- 不存在的主要实体(买家、卖家、书籍等)
- 所有权/权限验证失败
- 余额/资源不足的情况
- 边界条件(余额为零、最大值)
-
独立测试每种场景:
- 每次测试前重置状态
- 分别运行 COBOL 程序和现代实现
- 使用
diff逐字节比较输出
-
记录测试结果——跟踪通过的场景以及发现的任何差异。
常见问题
数据格式问题
- 定宽字段:COBOL 使用以空格或零填充的定宽字段。现代语言默认使用可变长度字符串。
- 数值格式:COBOL 中的 PIC 9(4)V99 表示 4 位数字、隐含小数点、2 位小数——存储为 6 个字符,不包含小数点。
- 记录终止符:COBOL 定长记录可能不使用行终止符。请确认是否需要换行符。
测试中的错误
- 边界情况覆盖不完整:只测试成功场景和一种失败场景,会导致某些验证路径未经测试。
- 未验证已写入的代码:工具响应可能被截断。请务必重新读取已写入的文件,确认内容完整。
- 状态污染:未重置状态就运行测试,会导致一连串的失败。
流程效率低下
- 重复执行命令:为执行次数超过两次的操作创建 shell 脚本。
- 工作区杂乱:制定统一的文件命名规范,并清理临时文件。
- 差异尚未解决:如果数据格式与预期不符,请在继续之前彻底调查。
验证清单
在宣布现代化工作完成之前:
- 已生成所有必需的输出文件
- 所有数据文件均与 COBOL 输出逐字节一致(
diff无输出) - 已测试所有验证路径(成功路径和每种失败类型)
- 已验证边界条件
- 不再有临时文件或调试文件
- 已重新读取代码,以确认内容完整且正确
评论
支持 Markdown