🕌
【COBOL現新移行検証④】データ例外(0C7) ─ 例外発生の構造と移行リスク
※本記事は、ホスト系COBOL処理系からオープン系COBOL処理系への移行検証を整理する連載の第4回です。
1. なぜデータ例外を独立観点としたのか
データ例外は単なる異常系ではありません。
移行時に問題となるのは、
- 例外が発生するかどうか
- どの命令で発生するか
- 発生後の処理が継続するか停止するか
- 戻りコードやメッセージの違い
です。
つまり、
例外の“存在”ではなく、“構造”が問題
になります。
2. 検証設計
2.1 検証軸
ステートメント軸
- MOVE
- ADD
- SUBTRACT
- COMPUTE
- DIVIDE
- IF(比較)
- DISPLAY
データパターン軸
- 英字混在
- 空白混在
- 全角文字混在
- PACK形式不正
- 符号不正
- 桁あふれ
3. 検証コード
IDENTIFICATION DIVISION.
PROGRAM-ID. EXCEPTION-DETAIL.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WK-NUM PIC 9(4).
PROCEDURE DIVISION.
MOVE "A123" TO WK-NUM
ADD 1 TO WK-NUM
DISPLAY WK-NUM
STOP RUN.
4. 実行結果(ステートメント別)
4.1 MOVE
| 環境 | 挙動 |
|---|---|
| 現行 | MOVE自体は正常終了 |
| 次期 | MOVE自体は正常終了 |
→ MOVE時点では検査を行わない。
4.2 ADD / COMPUTE
| 環境 | 発生タイミング |
|---|---|
| 現行 | 演算時に例外が発生 |
| 次期 | 演算時に例外が発生 |
ただし、メッセージや終了コードが異なる場合がある。
4.3 IF(比較)
IF WK-NUM > 0
DISPLAY "POSITIVE"
END-IF
| 環境 | 挙動 |
|---|---|
| 現行 | 比較時に例外が発生 |
| 次期 | 比較時に例外が発生 |
→ 比較も数値解釈が発生する。
4.4 DISPLAY
DISPLAY WK-NUM
| 環境 | 挙動 |
|---|---|
| 現行 | 例外が発生しない |
| 次期 | DISPLAY時に例外が発生するケースあり |
→ 出力時に再評価される場合がある。
5. PACK / ZONE形式の検証
5.1 PACK不正データ
| 環境 | 挙動 |
|---|---|
| 現行 | 即時に例外が発生 |
| 次期 | 即時に例外が発生 |
5.2 ZONE空白混在
| 環境 | 挙動 |
|---|---|
| 現行 | 演算時に例外が発生 |
| 次期 | MOVE時例外になるケースあり |
→ 検査タイミングに差がある。
6. 戻りコードと終了状態
| 観点 | 現行 | 次期 |
|---|---|---|
| 異常終了コード | 固定値 | 別コード |
| メッセージ形式 | OS依存 | ランタイム依存 |
| 異常終了位置 | 演算命令 | 場合により前段 |
実行制御の差異は、
運用監視やジョブ制御にも影響します。
7. 差異の本質
データ例外の差は、
- 数値妥当性検査のタイミング
- 内部数値表現
- ランタイム検査ロジック
に起因します。
これは言語仕様差というより、
実行環境差として整理できます。
8. 設計判断
当初は、
- 例外は出るから問題ない
- 異常終了するなら検出可能
と考えました。
しかし問題は、
- 発生タイミングが異なる
- ログ形式が異なる
- 継続可否が異なる
点にありました。
設計としては、
- 数値項目へのMOVE前チェック
- 入力値バリデーションの明示化
- PACK/ZONE変換ロジックの統一
- 例外依存ロジックの排除
を実施しました。
9. 本質
データ例外は「不正データの問題」ではありません。
例外処理の前提が環境依存である
ことが問題です。
移行では、
- 正常系の一致
- 異常系の一致
- 異常発生構造の一致
を確認する必要があります。
まとめ
データ例外は、
- 発生有無
- 発生位置
- 処理停止条件
が変わる可能性があります。
移行検証では、
例外が出るかどうかではなく、
例外がどう出るかを確認する
ことが重要です。
次回は、「ファイル定義」による差異を整理します。
NTT DATA公式アカウントです。 技術を愛するNTT DATAの技術者が、気軽に楽しく発信していきます。 当社のサービスなどについてのお問い合わせは、 お問い合わせフォーム nttdata.com/jp/ja/contact-us/ へお願いします。