NTT DATA TECH
🕌

【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. 設計判断

当初は、

  • 例外は出るから問題ない
  • 異常終了するなら検出可能

と考えました。

しかし問題は、

  • 発生タイミングが異なる
  • ログ形式が異なる
  • 継続可否が異なる

点にありました。

設計としては、

  1. 数値項目へのMOVE前チェック
  2. 入力値バリデーションの明示化
  3. PACK/ZONE変換ロジックの統一
  4. 例外依存ロジックの排除

を実施しました。


9. 本質

データ例外は「不正データの問題」ではありません。

例外処理の前提が環境依存である

ことが問題です。

移行では、

  • 正常系の一致
  • 異常系の一致
  • 異常発生構造の一致

を確認する必要があります。


まとめ

データ例外は、

  • 発生有無
  • 発生位置
  • 処理停止条件

が変わる可能性があります。

移行検証では、

例外が出るかどうかではなく、
例外がどう出るかを確認する

ことが重要です。

次回は、「ファイル定義」による差異を整理します。

NTT DATA TECH
NTT DATA TECH
設定によりコメント欄が無効化されています