Hitachi

COBOL2002 使用の手引 手引編


32.7.4 初期化漏れチェック機能

ここでは,初期化漏れチェック機能の使用方法について説明します。

〈この項の構成〉

(1) 初期化漏れチェック機能の概要

初期化漏れチェック機能とは,データ項目を参照しているが,値の設定(初期化)がされていない,またはその可能性のあるデータ項目を「初期化漏れ」として検出する機能です。

実行時に検出される初期化漏れが原因の不良は,不良個所の特定のために複数のプログラムにわたった調査が必要になります。このため,不良個所の特定に時間が掛かることがあります。初期化漏れチェック機能を使用すると,コンパイル時に初期化漏れを検出でき,テスト工程前に対策できるため,COBOLプログラムの開発効率を向上できます。

初期化漏れチェック機能で「初期化漏れ」を検出するCOBOLソースの例を次の図に示します。

図32‒4 初期化漏れチェック機能で「初期化漏れ」を検出するCOBOLソースの例

[図データ]

(2) 初期化漏れチェック機能を使用するときに指定するコンパイラオプション

初期化漏れチェック機能を使用する場合は,コンパイル時に次のオプションを同時に指定します。

注※

次の場合,-Compile,CheckOnlyオプションが無効となるため,初期化漏れチェック機能も無効になります。

  • 明示的に-Compile,NoLinkオプションを指定した場合

注意事項
  • 初期化漏れチェック機能は,-CBLVALUEオプションおよび環境変数CBLVALUE,ならびに環境変数CBLINITVALUE指定時に設定される初期値を無視します。

  • 初期化漏れチェック機能は,プログラムを実行したときに通る可能性のある経路(制御ブロック)をすべて走査し,手続き文で参照されているデータ項目の初期化漏れをチェックします。ただし,環境変数CBL_UNINITDATA_BREAKOFFの指定が無効な場合に,走査した制御ブロックの数が上限を超えたときは,初期化漏れチェック機能の警告メッセージを出力して,初期化漏れチェック処理を打ち切ります。環境変数CBL_UNINITDATA_BREAKOFFについては,「32.6.3 コンパイラ環境変数の詳細」の「(2) CBL_UNINITDATA_BREAKOFF」を参照してください。

(3) 初期化漏れチェック機能で出力するファイル

初期化漏れチェック機能では,この機能でチェックした初期化漏れの可能性があるデータ項目を,次に示す一覧でファイルに出力することもできます。

これらの一覧を出力する場合は,環境変数CBLUNINITDATA_OUTRESULTLISTにONを指定します。環境変数CBLUNINITDATA_OUTRESULTLISTの詳細は,「32.6.3 コンパイラ環境変数の詳細」の「(17) CBLUNINITDATA_OUTRESULTLIST」を参照してください。

また,これらの一覧の出力先を変更する場合は,環境変数CBLUNINITDATA_OUTRESULTLISTDIRに出力先ディレクトリを指定します。環境変数CBLUNINITDATA_OUTRESULTLISTDIRの詳細は,「32.6.3 コンパイラ環境変数の詳細」の「(18) CBLUNINITDATA_OUTRESULTLISTDIR」を参照してください。

初期化漏れチェック機能で出力するファイルの共通規則を次に示します。

共通規則
  1. ファイルはCSV形式です。

  2. ファイルの1行目は列名を表します。2行目以降は列に対する内容の値を表します。

  3. 各項目は引用符(")で囲みます。ただし,項目の値がない場合は囲みません。

    "列名1","列名2","列名3",…

    "値1",,"値3",…

  4. ファイルの文字コードはCOBOLソースファイルの文字コードと同じです。

  5. ファイルは,コンパイルの対象となるCOBOLソースファイルの単位に出力します。

  6. ファイルは,コンパイルごとに上書きして出力します。

  7. ファイル入出力でエラーが発生した場合,メッセージを出力し,処理を中断します。

(a) 初期化漏れ確認結果一覧

初期化漏れ確認結果一覧は,初期化漏れチェック機能でチェックした,初期化漏れの可能性があるデータ項目の情報を出力する一覧です。初期化漏れ確認結果一覧は,初期化漏れのメッセージごとに,次に示す形式で情報を出力します。

初期化漏れ確認結果一覧の形式

列名

内容

#

初期化漏れ確認結果一覧内の一意な通番です。

ディレクトリ名

COBOLソースファイルがあるディレクトリ名です。

ファイル名

COBOLソースファイル名です。

プログラム名

プログラム名です。

COPY定義ディレクトリ名

メッセージが出力された個所が登録集原文内である場合,登録集原文があるディレクトリ名です。登録集原文内でない場合は何も出力されません。

COPYファイル名

メッセージが出力された個所が登録集原文内である場合,登録集原文のファイル名。登録集原文内でない場合は何も出力されません。

一連番号

メッセージが出力された,コンパイルリストの原始プログラムリストに表示される行番号です。

ファイル内行番号

メッセージが出力された,COBOLソースファイルまたは登録集原文ファイル内の相対行番号です。

ただし,埋め込みSQL文の場合,メッセージは語「EXEC」の位置に出力されますが,ここにはデータ項目の位置が出力されます。

ファイル内カラム

メッセージが出力された,COBOLソースファイルまたは登録集原文ファイル内のカラム番号です。

ただし,埋め込みSQL文の場合,メッセージは語「EXEC」の位置に出力されますが,ここにはデータ項目の位置が出力されます。

データ項目名

データ項目の修飾付きデータ名です。

修飾付きデータ名の形式を次に示します。

データ名 〔OF 集団項目名〕…〔IN ファイル名〕

従属項目一覧有無

初期化漏れ従属項目一覧への情報の出力有無を0または1で示します。

0:初期化漏れ従属項目一覧へ情報は出力していません。

1:初期化漏れ従属項目一覧に情報を出力しています。

初期化漏れ確認結果一覧の規則
  1. 初期化漏れ確認結果一覧のファイル名称は,「<COBOLソースファイル名(拡張子を除く)>-UninitCheckResult.csv」です。

    (例)COBOLソースファイル名が「Prog1.cbl」の場合

      Prog1-UninitCheckResult.csv

  2. 初期化漏れ確認結果一覧のファイルは,初期化漏れの可能性があるデータ項目を検出しなかった場合でも出力します。

初期化漏れ確認結果一覧の出力例
COBOLソースファイル
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. MAIN.
000300 DATA DIVISION.
000400 WORKING-STORAGE SECTION.
000500 01 A PIC X.
000600 01 B PIC X VALUE 'B'.
000700 01 C.
000800   03 C1 PIC X.
000900   03 C2 PIC X.
001000 PROCEDURE DIVISION.
001100     DISPLAY A.
001200     IF B = 'B' THEN
001300         MOVE SPACE TO C
001400         PERFORM SEC1
001500     ELSE
001600         PERFORM SEC1
001700     END-IF.
001800     STOP RUN.
001900 
002000 SEC1.
002100     COPY SAMPLECOPY.
002200 
002300 END PROGRAM MAIN.
登録集原文
           DISPLAY C1.
コンパイルリストの原始プログラムリスト

[図データ]

初期化漏れ確認結果一覧
"#","ディレクトリ名","ファイル名","プログラム名","COPY定義ディレクトリ名","COPYファイル名","一連番号","ファイル内行番号","ファイル内カラム","データ項目名","従属項目一覧有無"
"1","/usr/user/WORK","Prog1.CBL","MAIN",,,"001100","11","20","A","0"
"2","/usr/user/WORK","Prog1.CBL","MAIN","/usr/user/WORK/COPY","SAMPLECOPY.CBL","2101","1","20","C1 OF C","0"

(b) 初期化漏れ従属項目一覧

初期化漏れ従属項目一覧は,初期化漏れチェック機能でチェックした,初期化漏れの可能性があるデータ項目が集団項目である場合に,その従属項目の情報を出力する一覧です。初期化漏れ従属項目一覧は,次に示す形式で情報を出力します。

初期化漏れ従属項目一覧の形式

列名

内容

#

初期化漏れ従属項目一覧内の一意な通番です。

確認結果一覧の#

初期化漏れ確認結果一覧での#(通番)です。

従属項目名

初期化漏れの可能性がある従属項目の修飾付きデータ名です。

修飾付きデータ名の形式を次に示します。

データ名 〔OF 集団項目名〕…〔IN ファイル名〕

初期化漏れの可能性がある従属項目がFILLER項目の場合は,データ名をFILLERとみなした修飾付きデータ名です。なお,対象は,従属項目のうち基本項目だけとなります。

初期化漏れ従属項目一覧の規則
  1. 初期化漏れ従属項目一覧のファイル名称は,「<COBOLソースファイル名(拡張子を除く)>-UninitCheckSubordinate.csv」です。

    (例)COBOLソースファイル名がProg1.cblの場合

      Prog1-UninitCheckSubordinate.csv

  2. 初期化漏れ従属項目一覧のファイルは,初期化漏れ確認結果一覧での初期化漏れの可能性があるデータ項目に集団項目がない場合でも出力します。

初期化漏れ従属項目一覧の出力例
COBOLソースファイル
       IDENTIFICATION DIVISION.
       PROGRAM-ID. MAIN.
       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 A.
        03 A1.
          05 A11 PIC X.
        03 A2.
          05 A21 PIC X.
       01 B.
        03 B1.
          05 B11 PIC X.
        03 B2.
          05 B21 PIC X.
       PROCEDURE DIVISION.
           DISPLAY A.
           
           MOVE SPACE TO B1.
           DISPLAY B.
       
       END PROGRAM MAIN.
コンパイルリストの原始プログラムリスト

[図データ]

初期化漏れ確認結果一覧
"#","ディレクトリ名","ファイル名","プログラム名","COPY定義ディレクトリ名","COPYファイル名","一連番号","ファイル内行番号","ファイル内カラム","データ項目名","従属項目一覧有無"
"1","/usr/user/WORK","Prog1.CBL","MAIN",,,"16","16","20","A","1"
"2","/usr/user/WORK","Prog1.CBL","MAIN",,,"19","19","20","B","1"
初期化漏れ従属項目一覧
"#","確認結果一覧の#","従属項目名"
"1","1","A11 OF A1 OF A"
"2","1","A21 OF A2 OF A"
"3","2","B21 OF B2 OF B"

(4) 初期化漏れチェック機能の使用方法

初期化漏れチェック機能を使用するときの作業の流れを次の図に示します。初期化漏れチェック機能を使用する前に,あらかじめSレベル,Uレベルのコンパイルエラーがないことを確認してください。

図32‒5 初期化漏れチェック機能を使用するときの作業の流れ

[図データ]

初期化漏れチェック機能は,次の方法で使用できます。

(a) コンパイルリストから調査する方法

コンパイルリストから初期化漏れを調査する手順を次に示します。

  1. -CheckUninitDataオプション,-Compile,CheckOnlyオプションおよび-SrcListオプションを指定してコンパイルする。

    コンパイルリストに初期化漏れチェックの結果が出力されます。

  2. コンパイルリストまたは標準エラー出力に,初期化漏れチェック機能の警告メッセージが出力されていないかを確認する。

  3. 初期化漏れチェック機能の警告メッセージが出力されている場合は,メッセージの内容を確認して,初期化漏れの可能性があるデータ項目に,値設定が必要かどうかを確認する。

  4. 値設定が必要な場合は,プログラムを修正する。

(5) 初期化漏れチェック機能使用時の注意事項