COBOL2002 操作ガイド
テストデバッガには,主・副プログラムシミュレーション機能,ファイルシミュレーション機能,DCシミュレーション機能などの単体テスト機能があります。単体テスト機能を使用すると,プログラムやファイルなどの実行環境が整わない段階でも,作成したプログラムを単体でテストできます。
テストデバッガでは,プログラムの単体テストを行うために,次のシミュレーションをする機能があります。
SIMULATE MAINコマンドで,ソース要素を呼び出す主プログラムをシミュレーションします。ソース要素に渡す引数に,TDコマンドで値を設定するなどの操作ができます。呼び出されるソース要素は,プログラム定義です。
SIMULATE MAINコマンドの詳細については,「12.4 TDコマンドの詳細」の「(32) SIMULATE MAIN(主プログラムシミュレーションの設定)」を参照してください。
主プログラムシミュレーションは,次の手順で行います。
主プログラムシミュレーションの使用例を次に示します。
SIMULATE MAIN( #PROG( SUB1 ) ) ASSIGN DATA( PARAM01 ) VALUE( 1 ) ASSIGN DATA( PARAM02 ) VALUE(100) ENDSIMULATE GO *>プログラムの実行を開始する。
SIMULATE MAIN( #PROG( SUB1 ) 'ENTRYSUB' ) ASSIGN DATA( PARAM01 ) VALUE( 2 ) ENDSIMULATE GO *>プログラムの実行を開始する。
SIMULATE SUBコマンドで,テストデバッグ対象のソース要素が呼び出す副プログラムのインタフェースをTDコマンドでシミュレーションします。副プログラムに渡される引数の値を表示して確認したり,副プログラムが値を返す引数に値を設定したりできます。シミュレーションする副プログラムのソース要素は,プログラム定義です。
SIMULATE SUBコマンドの詳細については,「12.4 TDコマンドの詳細」の「(33) SIMULATE SUB(副プログラムシミュレーションの設定)」を参照してください。
副プログラムシミュレーションをする手順を次に示します。
呼び出す副プログラムのソース要素がある場合は,-SimSubコンパイラオプションを指定してコンパイルする必要はありません。存在する副プログラムの処理を,SIMULATE SUBコマンドの設定によって,TDコマンドの処理に置き換えて実行させることができます。
CALL文の引数とRETURNINGのデータ項目は,記号名を割り当ててシミュレーションの手続きで参照できます。複数のCALL文で異なるデータ項目の引数やRETURNINGが指定されている場合でも,記号名を割り当てることで,同一の名称によって,シミュレーションの手続きで参照できます。
副プログラムシミュレーションの実行回数を,カウンタ変数によってカウントし,参照できます。
副プログラムシミュレーションの使用例を次に示します。
01 X PIC X(10). 01 Y. 02 Y1 PIC X(10). 02 Y2 PIC X(10). 01 RTN. 02 R-NAME. 03 N-DATA PIC X(10).
CALL 'PROG1' USING X,Y RETURNING RTN.
SIMULATE SUB( #PROGRAM(PROG1) ) USING(A,B) RETURNING(R) DEFINE 01 A 01 B 02 B1 02 B2 01 R 02 R1 03 R11 ENDDEFINE IF CONDITION(A=1) ASSIGN DATA( B1 ) VALUE ('APPLE') ASSIGN DATA( B2 ) VALUE ('PANDA') ASSIGN DATA( R11 ) VALUE ('NORMAL') ELSE DISPLAY DATA ( A ) ASSIGN DATA( R11 ) VALUE ('ABNORMAL') ENDIF ENDSIMULATE
SIMULATE FILEコマンドで,プログラムから入出力するファイルがないときに,入出力文によるインタフェースをシミュレーションできます。
SIMULATE FILEコマンドの詳細については,「12.4 TDコマンドの詳細」の「(31) SIMULATE FILE(ファイルシミュレーションの設定)」を参照してください。
入力文のシミュレーションでは,ファイルのレコード領域への値の設定ができます。出力文のシミュレーションでは,レコード領域の内容を表示できます。また,入出力文で,擬似的に入出力条件を発生させることができます。
ファイルシミュレーションは,ファイル結合子とオープンモード(INPUT,OUTPUT,I-O,EXTEND)の単位に,シミュレーションで行う手続きを指定します。さらに,入出力文ごとに手続きを指定できます。
ファイルシミュレーションの実行回数を,カウンタ変数によってカウントし,参照できます。
SET QUALIFICATION( #PROG( 社員/社員 ) ) SIMULATE FILE( 給与ファイル ) OPENMODE( IO ) COUNTER(CNT) IF CONDITION(CNT = 1) ASSIGN DATA(基本給) VALUE(100000) ENDIF IF CONDITION(CNT=2) ASSIGN DATA(基本給) VALUE(101000) ENDIF IF CONDITION(CNT=3) ASSIGN DATA(基本給) VALUE(104000) ENDIF ENDSIMULATE
SET QUALIFICATION( #PROG( 社員/社員 ) ) SIMULATE FILE( 給与ファイル ) OPENMODE(IO) REPEAT TIMES(2) ASSIGN DATA(基本給) VALUE(100000) ENDREPEAT REPEAT ASSIGN DATA(基本給) VALUE(101000) ENDREPEAT REPEAT TIMES(3) ASSIGN DATA(基本給) VALUE(104000) ENDREPEAT ENDSIMULATE
SET QUALIFICATION( #PROG( 社員/社員 ) ) SIMULATE FILE( 給与ファイル ) OPENMODE(IO) SELECT ACTION(DELETE) REPEAT TIMES(2) DISPLAY DATA(名前) ENDREPEAT ENDSELECT SELECT ACTION(READ) REPEAT ASSIGN DATA(基本給) VALUE(104000) ENDREPEAT REPEAT TIMES(3) ASSIGN DATA(基本給) VALUE(108000) ENDREPEAT ENDSELECT ENDSIMULATE
ファイルシミュレーションの手続き中で,次の入出力条件を擬似的に発生させることができます。
表9-4 シミュレーション対象入出力条件
コマンド | シミュレーション対象入出力条件 | 入出力文 |
---|---|---|
GO END | ファイル終了条件 (END OF FILE) |
READ |
GO EOP | ページ終了条件 (END OF PAGE) |
WRITE |
GO INVALID | 無効キー条件 (INVALID KEY) |
READ, WRITE, REWRITE, START, DELETE |
GO ERROR | 入出力誤り | READ, WRITE, REWRITE, START, DELETE |
ファイルシミュレーションの手続きで,入出力状態の値(FILE STATUS句に指定されたデータ名の値)に任意の値を設定できます。次の場合は,入出力状態の値にテストデバッガが値を設定します。この場合も,ASSIGN DATAコマンドによって値を変更できます。
ファイルの入出力処理の論理誤りをチェックして,エラーがあった場合,シミュレーションは実行しません。シミュレーション対象ファイルに入出力状態の値(FILE STATUS句に指定されたデータ名の値)の指定があるときは,シミュレーションの終了状態によって「表9-5 論理誤りチェック条件」の値を入出力状態の値に設定します。
また,シミュレーション手続きによって「表9-4 シミュレーション対象入出力条件」で示したコマンドが実行されたときは,「表9-6 論理誤りチェック以外の設定条件」で示した値が設定されます。
シミュレーション手続きで指定がない場合は,「表9-7 成功完了の設定条件」の成功完了時の入出力状態の値が設定されます。
表9-5 論理誤りチェック条件
入出力状態の値 | 内容 |
---|---|
41 | 開かれているファイル結合子に対してOPEN文を実行しようとした。 |
46 | GO ENDコマンド実行後に再度READ文を実行しようとした。 |
47 | 入力モード(INPUT)や入出力モード(I-O)で開かれていないファイル結合子に対してREAD文やSTART文を実行しようとした。 |
48 | 正しいOPENモードでは開かれていないファイル結合子に対してWRITE文を実行しようとした。順アクセス法の場合,ファイル結合子が出力モード(OUTPUT)や拡張モード(EXTEND)で開かれていない。動的アクセス法や乱アクセス法の場合,ファイル結合子が出力モード(OUTPUT)や入出力モード(I-O)で開かれていない。 |
49 | 入出力モード(I-O)で開かれていないファイル結合子に対してREWRITE文やDELETE文を実行しようとした。 |
表9-6 論理誤りチェック以外の設定条件
入出力状態の値 | 内容 |
---|---|
10 | GO ENDコマンド実行による終了。 |
23 | GO INVALIDコマンド実行による終了(相対ファイル,索引ファイル)。 |
34 | GO INVALIDコマンド実行による終了(順ファイル)。 |
90 | GO ERRORコマンド実行による終了。または,論理誤りが発生した。 |
表9-7 成功完了の設定条件
入出力状態の値 | 内容 |
---|---|
00 | 正常終了。一般のコマンド(入出力状態の値を設定するコマンドは除く)で終了。 |
07 | REEL/UNITのCLOSE文を実行した(CLOSE処理を行わない。OPEN状態を残す)(順ファイル)。 |
記号名は,次のシミュレーションでデータ項目の名前を置き換えるときに使用します。
記号名で置き換えるデータ項目が集団項目の場合は,DEFINEオペランドによって,基本項目をレベル番号と構造定義で指定できます。基本項目を参照しないなど,必要がないときは,DEFINEオペランドの指定は不要です。
レベル番号の指定については,「12.4 TDコマンドの詳細」の「(37) レベル番号(記号名構造指定)」を参照してください。
01 A. 02 A1. 03 A11 PIC X(10). 03 A12 PIC X(10). 02 A2.
CALL 'SUB1' USING A.
SIMULATE SUB(#PROGRAM(SUB1)) USING(P) DEFINE 01 P *> Aに対応する。 02 P1 *> A1に対応する。 ENDDEFINE : ENDSIMULATE
01 A. 02 A1. 03 A11 PIC X(10). 03 A12 PIC X(10). 02 A2 PIC X(10).
CALL 'SUB2' USING A.
SIMULATE SUB(#PROGRAM(SUB2)) USING(P) DEFINE 01 P *> Aに対応する。 04 P1 *> A1に対応する。 ENDDEFINE : ENDSIMULATE
01 A. 02 A1 PIC X(10).
CALL 'SUB3' USING A.
SIMULATE SUB(#PROGRAM(SUB3)) USING(P) DEFINE 01 P *> Aに対応する。 02 P1 *> A1に対応する。 02 P2 *> 対応するデータ項目がない。 ENDDEFINE : DISPLAY DATA(P) *> 実行される。 DISPLAY DATA(P1) *> 実行される。 DISPLAY DATA(P2) *> 実行できない。 : ENDSIMULATE
01 TYPE1 IS TYPEDEF. 02 A1 PIC X(1). 02 A2 PIC X(1). 01 U1. 02 PRM1 PIC X(1). 02 PRM2 TYPE TO TYPE1.
CALL 'SUB4' USING U1.
SIMULATE SUB(#PROGRAM(SUB4)) USING(P) DEFINE 01 P *> U1に対応する。 02 P1 *> PRM1に対応する。 02 P2 *> PRM2(TYPE1)に対応する。 03 P3 *> A1に対応する。 03 P4 *> A2に対応する。 ENDDEFINE : ENDSIMULATE
01 X. 02 X1 OCCURS 5. 03 X11 PIC X(2). 02 X2 PIC X(2). 01 Y PIC 9. 01 RTN. 02 R OCCURS 5 PIC X(10).
CALL 'PROG1' USING X,X11(2),Y RETURNING R(1).
SIMULATE SUB(#PROGRAM(PROG1)) USING(A,B,C) RETURNING(R) DEFINE 01 A *> Xに対応する。 02 A1 *> X1に対応する。 03 A11 *> X11に対応する。 02 A2 *> X2に対応する。 ENDDEFINE IF CONDITION( C=1 ) ASSIGN DATA(A11(1)) VALUE('OK') ASSIGN DATA(R) VALUE('normal') ELSE ASSIGN DATA(B) VALUE('NG') ASSIGN DATA(R) VALUE('abnormal') ENDIF ENDSIMULATE
FD 給与ファイル DATA RECORD IS 形式1. 01 形式1. 02 社員コード PIC X(9). 02 氏名. 03 名字 PIC N(10). 03 名前 PIC N(10). 01 形式2. 02 契約コード. 03 種別 PIC X(9). 03 コード PIC X(40). 01 形式3 PIC X(49).
SIMULATE FILE(給与ファイル) OPENMODE(IO) RECORD(A,B,C) DEFINE 01 A 02 A1 02 A2 03 A21 03 A22 01 B 02 B1 03 B11 03 B12 ENDDEFINE : ENDSIMULATE
FD 給与ファイル. 01 形式1. 02 社員コード PIC 9(8). 02 氏名. 03 名字 PIC X(30). 03 名前 PIC X(30). 01 形式2. 02 契約コード. 03 種別 PIC 99. 03 コード PIC 9(4). 01 形式3 PIC X(80). 01 形式4 PIC X.
SIMULATE FILE(給与ファイル) OPENMODE(IO) RECORD(A,B,C) DISPLAY DATA(B) : ENDSIMULATE
SIMULATE DCコマンドによって,次のDC文をシミュレーションします。DC文を使用したOpenTP1のインタフェースをシミュレーションすることもできます。SIMULATE DCコマンドの詳細については,「12.4 TDコマンドの詳細」の「(30) SIMULATE DC(DCシミュレーションの設定)」を参照してください。
対象とするDC文の種別と通信記述名を指定して,シミュレーションで実行する手続きをTDコマンドで記述します。手続きでは,メッセージファイル領域の参照,値の設定ができます。また,状態コード(STATUS KEY句で指定したデータ項目)に対して,値を設定できます。
DCシミュレーションの実行回数を,カウンタ変数によってカウントし,参照することもできます。
SIMULATE DC( DISABLE ) CDNAME(CD1) ASSIGN DATA( STATUS-KEY ) VALUE( 1 ) ENDSIMULATE
SIMULATE DC( COMMIT ) ASSIGN DATA( STATUS-KEY ) VALUE( 2 ) ENDSIMULATE
All Rights Reserved. Copyright (C) 2013, 2016, Hitachi, Ltd.