94400d50d4
作为子目录纳入系统,与核心测试管道协同 Co-Authored-By: Claude <noreply@anthropic.com>
8.9 KiB
8.9 KiB
电信请求书系统 — COBOL 测试基准程序集
Telecom Billing System — COBOL Test Benchmark Suite
基于 cobol-test-benchmark.md 的 35 种 COBOL 程序类型 + 8 项横跨功能测试,映射为模拟的电信请求书(计费)处理系统。
系统架构
┌───────────────────┐
│ 外部系统 CDR │
│ (CSV 格式) │
└─────────┬─────────┘
│
┌─────────▼─────────┐
│ 15/21 CDR 取込 │ CSV→FB转换
└─────────┬─────────┘
│
┌─────────▼─────────┐
│ 13/27/31 CDR校验 │ 字段/半角/重複
└─────────┬─────────┘
│
┌──────────────┼──────────────┐
│ │ │
┌──────▼──────┐ ┌────▼────┐ ┌──────▼──────┐
│ 34 CDR 排序 │ │35 CDR合并│ │ 29 编码转换 │
└──────┬──────┘ └────┬────┘ └──────┬──────┘
│ │ │
└──────────────┼──────────────┘
│
┌─────────────────────▼─────────────────────┐
│ 02 合同↔CDR 匹配 (1:N) │
│ 03 线路↔请求书 (N:1) │
│ 01 请求书↔支付对账 (1:1) │
│ 16-22 二级/组合匹配 │
└─────────────────────┬─────────────────────┘
│
┌─────────────────────▼─────────────────────┐
│ 24 资费表检索 (SEARCH ALL) │
│ 25 计费子程序 (CALL) │
│ 05/06 条件判定 (IF/EVALUATE) │
└─────────────────────┬─────────────────────┘
│
┌─────────────────────▼─────────────────────┐
│ 07/08/30 用量/费用汇总 (key切) │
│ 32/33 混合处理 │
└─────────────────────┬─────────────────────┘
│
┌─────────────────────▼─────────────────────┐
│ 04 请求书编辑输出 (GETPUT/报表) │
│ 09/23/26 DB更新/检索 │
│ 14 在线照会 (CICS模拟) │
└─────────────────────┬─────────────────────┘
│
┌─────────────────────▼─────────────────────┐
│ 10/11/12 请求书分割输出 │
│ 28 SYSIN批量参数 │
└───────────────────────────────────────────┘
35 类型 → 电信业务映射
| 目录 | 电信功能 | COBOL 类型 | 处理阶段 |
|---|---|---|---|
01-matching-1-1 |
请求书↔支付对账 | 1:1匹配 | 对账 |
02-matching-1-N |
合同↔通话明细匹配 | 1:N匹配 | 计费前 |
03-matching-N-1 |
多线路→请求书汇集 | N:1匹配 | 计费后 |
04-edit-getput |
请求书编辑输出 | 编辑 | 输出 |
05-branch-if |
料金阶梯判定(IF) | IF分支 | 计费 |
06-branch-evaluate |
套餐类型判定 | EVALUATE分支 | 计费 |
07-keybreak-summary |
加入者月汇总 | key切汇总 | 集计 |
08-keybreak-aggregate |
套餐统计 | key切聚合 | 集计 |
09-db-update |
客户DB更新 | DB更新 | DB |
10-divide-50 |
请求书50分割输出 | 50分割 | 输出 |
11-divide-25 |
明细25分割 | 25分割 | 输出 |
12-divide-100 |
数据100分割 | 100分割 | 输出 |
13-validation-nodup |
CDR字段校验 | 校验(无重复) | 前处理 |
14-online-cics |
在线客户照会 | online/CICS | 在线 |
15-csv-fb-nolf |
外部CDR CSV取込(无LF) | CSV→FB | 取込 |
16-matching-2stage-1-1 |
二级请求书核对 | 二级1:1 | 对账 |
17-matching-2stage-N-1 |
线路汇总→请求书 | 二级N:1 | 集计 |
18-matching-MN-to-M |
合同↔套餐匹配 | M:N→M条 | 计费 |
19-matching-MN-to-N |
套餐适用明细 | M:N→N条 | 计费 |
20-matching-MN-to-MxN |
CDR详细清单 | M:N→M×N | 计费 |
21-csv-fb-lf |
CDR CSV取込(有LF) | CSV→FB(LF) | 取込 |
22-matching-2stage-MN |
二级套餐匹配 | 二级M:N | 计费 |
23-select-condition |
客户合同检索 | SELECT条件 | DB |
24-table-search |
资费表检索 | 内部表 | 计费 |
25-subprogram |
计费子程序 | 子程序 | 计费 |
26-db-search |
客户信息检索 | DB检索 | DB |
27-validation-halfwidth |
电话号码格式校验 | 半角校验 | 前处理 |
28-sysin |
批量参数设定 | SYSIN读取 | 共通 |
29-ascii-ebcdic |
主机编码转换 | 编码转换 | 接口 |
30-keybreak-other |
通话状态变化检测 | key切非汇总 | 检测 |
31-validation-withdup |
重复CDR检测 | 校验(含重复) | 前处理 |
32-mix-1N-samekeybreak |
合同+月别集计 | 1:N+同key切 | 混合 |
33-mix-1N-diffkeybreak |
线路+类型切替 | 1:N+异key切 | 混合 |
34-sort |
CDR排序 | SORT | 前处理 |
35-merge |
多源CDR合并 | MERGE | 取込 |
横跨功能
| 目录 | 电信业务场景 |
|---|---|
cross-cutting/variable-length |
可变长CDR记录、ODO套餐明细表 |
cross-cutting/loop |
批量处理循环(PERFORM变种) |
cross-cutting/numeric-precision |
资费计算精度(ROUNDED/SIZE ERROR) |
cross-cutting/japanese |
客户名日文处理(PIC N/全角假名) |
cross-cutting/date |
账期计算(闰年/和历/月末) |
cross-cutting/rerun |
请求书再发行(幂等性) |
cross-cutting/exclusion |
排他控制(文件竞争) |
cross-cutting/performance |
大容量CDR处理性能 |
cross-cutting/file-organization |
RRDS/索引文件编成 |
流水线处理 (pipeline/)
端到端批处理流程:
1. CDR取込 → 15-csv-fb-nolf (外部CDR CSV→固定长)
2. CDR校验 → 13-validation-nodup (字段校验)
3. CDR排序 → 34-sort (按客户/时间排序)
4. 合同匹配 → 02-matching-1-N (合同↔CDR关联)
5. 资费检索 → 24-table-search (套餐单价查找)
6. 计费计算 → 25-subprogram (时长×单价)
7. 月汇总 → 07-keybreak-summary (加入者别集计)
8. 请求书 → 04-edit-getput (请求书输出)
9. 分割 → 10-divide-50 (请求书50分割)
cd pipeline && bash run-pipeline.sh
快速开始
# 编译全部
bash common/scripts/build.sh
# 运行全部测试
bash common/scripts/run_tests.sh
# 运行流水线
cd pipeline && bash run-pipeline.sh
# 单个测试
cd 34-sort && bash run.sh
数据约定
- 客户ID:
CUST000001格式 (10字节) - 合同ID:
CTR000001格式 (10字节) - CDR编号:
CDR000001格式 (10字节) - 请求书ID:
INV2025001格式 (10字节) - 电话号码:
8613800138001格式 (中国手机, 11字节) - 套餐代码:
P01/P02/P03(3字节) - 金额: 分为单位 (9字节整数)
- 日期: YYYYMMDD 格式 (8字节)
- 账期: YYYYMM 格式 (6字节)