3.9 KiB
振り分け(IF) データ生成規則
概要
単一の入力ファイル(CSVまたは固定長)を読み取り、IF文による条件分岐に基づいて複数の出力ファイルに振り分けるプログラムのテストデータを生成する。
本规则定义5组数据,覆盖测试基准说明 §2.2「条件分支系测试(IF / EVALUATE)」中 IF文相关的 B-N001〜B-N005。B-A001(IF未闭合)は编译错误であり运行时测试対象外(代码审查范畴)のためデータ组としない。EVALUATE文による分岐は「振り分け(EVALUATE).md」を参照。
输入
- 詳細設計書の処理詳細(IF条件と出力先の対応)
- 入力ファイルのCOPYBOOKフィールド定義
生成データ組
| 组 | 用途 | 内容 |
|---|---|---|
| 1 | IF 2路分支(B-N001) | IF条件成立/不成立(ELSE)を各1件以上カバー |
| 2 | IF 3路分支 ELSE IF(B-N002) | ELSE IF 链式分支の全分岐を各1件カバー |
| 3 | IF 复合条件 AND/OR(B-N003) | 複数条件のAND/OR組合せ全パターン |
| 4 | IF 88-level 条件名(B-N004) | 88条件名の成立/不成立 |
| 5 | IF 嵌套3层(B-N005) | 3層ネストIFの全組合せ(外層×中層×内層) |
组1:IF 2路分支(B-N001)
IF条件成立→出力A、不成立(ELSE)→出力B の2路分岐。成立・不成立それぞれ1件以上のデータを生成する。
例:STATUS='1'→正常出力、STATUS='9'→取消出力
组2:IF 3路分支 ELSE IF(B-N002)
IF → ELSE IF → ELSE の链式分支。各分岐(3路)に1件ずつデータを生成する。
例:STATUS='0'→出力A、STATUS='1'→出力B、それ以外(ELSE)→出力C
组3:IF 复合条件 AND/OR(B-N003)
複数条件の組合せをカバーする。AND/ORそれぞれについて成立・不成立の全パターンを生成する。
例(AND):STATUS='1' AND TIME >= '0900' → 成立/STATUS='1' AND TIME < '0900' → 不成立 例(OR):STATUS='1' OR STATUS='2' → 成立/STATUS='9' → 不成立
组4:IF 88-level 条件名(B-N004)
88-level条件名(例:88 WS-VALID VALUE '0' '1')による判定。条件名成立・不成立のデータを生成する。
组5:IF 嵌套3层(B-N005)
3層ネストIF(外層IFの中で中層IF、さらに内層IF)の全組合せデータ。内層IFが外層IFの変数を参照するケースを含む。
データ生成手順
- IF条件の特定: 処理詳細からすべてのIF条件、対応する出力先、関係演算子を抽出する
- 分岐パターンの列挙: 正常系(検証通過→正常出力)と異常系(エラー→ERROR-LOG)の全パターンを列挙する
- データ生成:
- 各组の分岐パターンに最低1件のレコードを生成する
- フィールド値はPIC定義に従い生成する
- 正常系データ: 全チェックを通過する有効な値
- 異常系データ: 該当するチェックに引っかかる値(不正な日付、不正な時刻、範囲外の値など)
- 値のルール:
- PIC X(n): 左詰め・スペース埋め
- PIC 9(n): 右詰め・先行ゼロ
- DATE/日付系: 実在しそうな日付(YYYYMMDD形式)、異常系では不正な日付(99999999等)
- TIME/時刻系: 実在しそうな時刻(HHMM形式)、異常系では範囲外の時刻
- STATUS系: 0/1/9 などのコード値
- CSV項番号フィールド: 分割後の項目数
- 生成後自检: 各IF分岐が漏れなくカバーされていること、各出力先に最低1件振り分けられることを確認する
出力
每组输出1个JSON文件:{プログラムID}_g{groupId}.json
组数约束:输出组数必须与本规则定义的5组一致(g1〜g5),组号连续从1开始。禁止添加本规则未定义的组,禁止缺组。正常系→異常系→特殊分岐の順にレコードを並べる。