5.2 COBOLソースファイルを解析する
単体テスト支援でCOBOLソースファイルを解析する手順です。
COBOLソースファイルの解析では,単体テストがダミーで作成する主プログラム,副プログラム,ファイルの情報,およびプログラム定義で定義されているデータ項目などの情報を収集します。
COBOLソースファイルの解析が実行されるタイミングは次のとおりです。
-
テストプロジェクトを新しく作成するとき
-
[COBOLソースファイルの設定]ダイアログで[COBOLソースファイルの解析]ボタンをクリックしたとき
また,次の場合は,手動でCOBOLソースファイルの解析を実行する必要があります。
-
テスト対象のCOBOLソースファイルを編集したとき
-
テスト対象のCOBOLソースファイルが取り込んでいる登録集原文を修正したとき
COBOLソースファイルの解析を実行すると,解析前と解析後の情報が比較され,一致した情報に対するテストデータの設定が引き継がれます。
-
基本項目のデータ項目がレベル番号,データ項目名,ADDRESS句の有無およびアドレス名と一致するかどうか。
このときの名前の比較は,-EquivRuleコンパイラオプションの指定の有無に関係なく,名前が完全に一致するものだけを引き継ぎます。
-
集団項目に所属するデータ項目は,基本項目の比較条件に加え,集団項目のADDRESS句の有無およびアドレス名,集団項目内の定義順,OCCURS句の有無および繰り返し数,INDEXED指定の有無および指標名,DEPENDING指定の有無および制御変数名,RENAMES指定したデータ項目の有無およびデータ項目名,REDEFINES指定したデータ項目の有無およびデータ項目名も一致するかどうか。
一致しない場合は,所属している集団項目の全体が引き継ぎ対象外になります。
OCCURS句の繰り返し数については,環境変数CBLUTS_ANALYZEMAXOCCURSNUMの設定で,OCCURS句に設定できるテストデータの個数の上限値が変わった場合も引き継ぎ対象外になる場合があります。詳細は,「付録D 単体テスト支援の環境変数」を参照してください。
制御変数は,DEPENDING指定されている集団項目が引き継ぎ対象となった場合,レベル番号の変更や制御変数の所属する集団項目の変更で引き継ぎ対象外になった場合でも,制御変数自体は引き継ぎ対象になります。
例:
解析前のデータ定義
01 DAT1. 02 DAT11 OCCURS 10 TIMES DEPENDING ON DAT1DO. 03 DAT111 PIC X. 01 DATDO. 02 DAT1DO PIC S9(9). 02 DAT2DO PIC S9(9).
解析後のデータ定義
01 DAT1. 02 DAT11 OCCURS 10 TIMES DEPENDING ON DAT1DO. 03 DAT111 PIC X. 01 DATDO. 02 DATXDO PIC S9(9). 02 DAT1DO PIC S9(9). 02 DAT2DO PIC S9(9).
上記は,COBOLソースファイルを修正し,「02 DATXDO PIC S9(9).」を追加した例です。この場合,データ項目DATDO自体は集団項目内の定義順が一致しないため,比較の条件によって引き継ぎ対象外になりますが,データ項目DAT1は比較の条件によって引き継ぎ対象となるため,データ項目DAT1DOは引き継ぎ対象になります。
-
中断点の設定は,中断点を設定した文番号の値が一致するかどうか。
中断点を設定した行に文が複数存在する場合には,中断点を設定した文の順番も一致するかどうかが比較されます。一致しない場合は,その中断点で設定するデータ項目も含めて引き継ぎ対象外になり,中断点は削除されます。
作業の手順
-
[プロジェクト]−[COBOLソースファイルの解析]メニューを選択します。
[メッセージ]画面に,コンパイラのメッセージなどの解析の結果が表示されます。
-
解析がエラーになったときは,[メッセージ]画面でエラーメッセージを確認し,エラーの個所を修正します。
エラーが発生しているときは,[スタブ設定ページ]と[テストケースページ]は操作できません。修正方法を次に示します。
-
COBOLプログラムに問題があるときは,[ソーステキスト]−[COBOLエディタを開く]メニューを選択してCOBOLエディタを開きます。COBOLプログラムを修正し,[プロジェクト]−[COBOLソースファイルの解析]メニューを選択して解析を再実行します。
-
コンパイラオプションまたはコンパイラ環境変数に問題があるときは,[プロジェクト]−[プロパティページを表示]メニューを選択して,[プロパティページ]を開きます。[プロパティページ]の[変更]ボタンをクリックし,[COBOLソースファイルの設定]ダイアログで修正したあと,[COBOLソースファイルの解析]ボタンをクリックします。
-
注意
-
COBOLソースファイルまたは登録集原文を修正したあとに単体テストを実行する場合,「COBOLソースファイルの解析」を実行し必要に応じてテストデータを再設定したあとで単体テストを実行する必要があります。「COBOLソースファイルの解析」,またはテストデータを再設定しないで単体テストの実行した場合の結果は保証しません。テストデータの設定方法については,「4.4.7 データ項目に値または期待値を設定する」を参照してください。
-
「COBOLソースファイルの解析」を実行する前に,すでに設定してあるテストデータは,解析前後のデータ項目の対応が検索され,値は引き継がれます。ただし,対応が取れないデータ項目はテストデータとして設定した値がクリアされます。この場合,対応が取れなかったデータ項目一覧が[メッセージ]画面に表示されます。[メッセージ]画面を参照し,必要な個所にテストデータを再設定してください。
-
「COBOLソースファイルの解析」は解析処理のため,テストプロジェクトのプロパティに指定したコンパイラオプションに加え,次に示すコンパイラオプションが自動的に指定されます。
-
-SrcList,OutputAll
-
-TDInf
-
-CVInf
-
-SimMain
-
-SimSub
-
-SimIdent
-
-OutputFile
-
-Main,{System|V3}
上記のコンパイラオプションが無効になるコンパイラオプションは,テストプロジェクトのプロパティのコンパイラオプションには指定しないでください。指定した場合の単体テスト支援の動作は保証しません。コンパイラオプションの組み合わせによって有効または無効になるコンパイラオプションについては,マニュアル「COBOL2002 ユーザーズガイド」を参照してください。
注意が必要なコンパイラオプションを次に示します。これらのコンパイラオプションはテストプロジェクトのプロパティには指定しないでください。
コンパイラオプション
指定すると起こる現象
-Dll,{Stdcall | Cdecl}[32bit版のCOBOL2002の場合]
「単体テストの実行」でエラーになります。
-Dll[64bit版のCOBOL2002の場合]
-Compile,CheckOnly
「単体テストの実行」でエラーになります。
-LiteralExtend,Alnum
次のどれかを[プロパティページ]または[スタブ設定ページ]で設定している場合,-LiteralExtend,Alnumコンパイラオプションが無効化されます。
-
「テスト対象プログラムの種類」で副プログラムを選択する
-
[スタブ設定ページ]の「CALL定数で呼び出す副プログラム名」で1つ以上有効にする
-
[スタブ設定ページ]の「CALL一意名で呼び出す副プログラム名」に1つ以上のプログラム名を指定する
-
-
次の個所で設定した環境変数の合計値が65,535バイトを超えると,COBOLソースファイルを解析したときに論理エラーになります。回避するには,不要な環境変数を削除してください。
-
[新しくテストプロジェクトを作る]ダイアログ,[プロパティページ]または[COBOLソースファイルの設定]ダイアログで設定したコンパイラ環境変数
-
[プロパティページ]で設定した実行時環境変数
-
開発マネージャで設定したコンパイラ環境変数(開発マネージャから起動した場合)
-
システムに設定した環境変数
-
-
OCCURS指定ありデータ項目には,1次元当たり最大で500までテストデータを設定できます。500を超える分については,テスト対象にできません(表示,値の設定ができません)。
-
OCCURS指定ありデータ項目の1次元当たりに設定できるテストデータの個数の上限値を変える場合は,環境変数CBLUTS_ANALYZEMAXOCCURSNUMに上限値にしたい値を設定してください。環境変数の詳細は,「付録D 単体テスト支援の環境変数」を参照してください。
-
-StdCallコンパイラオプションを指定してもCOBOLソースファイルと同じフォルダに置いたstdcall呼び出し指示ファイルは有効になりません。有効にするには,-StdCallFileコンパイラオプションでstdcall呼び出し指示ファイルを絶対パスで指定してください。指定しない場合は,cdecl呼び出し規約のプログラムとしてスタブ生成の対象になります。
-
引き継ぎ対象外になった集団項目が,ファイル入出力文で参照するレコード領域の場合は,ファイルシミュレーションの設定画面でも引き継ぎ対象外です。
-
ファイルシミュレーションの設定は,ファイル名とオープンモードが一致する場合は引き継がれます。一致しない場合は,引き継ぎ対象外です。
同じファイルに対して,異なるオープンモードで開いていた場合は,一致しなかった組み合わせのデータだけ引き継ぎ対象外です。
-
中断点の設定は,中断点を設定した一連番号の値が一致する場合は引き継がれます。また,中断点を設定した行に文が複数存在する場合には,中断点を設定した文の順番も一致するかどうかが比較され,一致しない場合は,その中断点で設定するデータ項目も含んで引き継ぎ対象外です。
-
ファイル記述項で,別のレコード領域を新たに追加した場合,元からある領域に対してのテストデータの設定は引き継がれます。また,複数あったレコード領域の1つを削除した場合,残ったレコード領域に対するテストデータの設定は引き継がれます。
例:
左のコードを右に修正した場合も,右のコードを左に修正した場合も,REC1DATA1に対するテストデータの設定は引き継がれます。
制御変数は,DEPENDING指定されている集団項目が引き継ぎ対象の場合,レベル番号の変更や制御変数の所属する集団項目が変更となり引き継ぎ対象外となった場合でも,制御変数自体は引き継ぎ対象です。
例:
上記は,COBOLソースファイルを修正し,「02 DATXDO PIC S9(9).」を追加した例です。この場合,データ項目DATDO自体は集団項目内の定義順が一致しないため,比較の条件で引き継ぎ対象外になりますが,データ項目DAT1は比較の条件で引き継ぎ対象となるため,データ項目DAT1DOについては引き継ぎ対象です。