COBOL言語のテストとデバッグモードを理解しよう!|基礎ガイド

COBOL(コボル)言語のテストための、デバッグモードとその使い方とは

基礎-デバッグモード-イメージ

COBOL(コボル)言語のテストに有効なデバッグモードの使用方法とは?

プログラムが正常に動作するか確認するテストでは、プログラムに実装した計算処理や条件判断が設計通りに正しく動作するか、実際にデータを作成し、データを流す事によって確認していきます。

テストを行う中で、思った通りの処理結果にならなかった場合には、デバッグという不具合(バグ)を取り除く作業を行う事になりますが、その際に有効なのがCOBOL(コボル)言語が持つデバッグモードという機能です。デバッグモードを利用する事でデータをトレースして確認する事ができるため、記述したプログラムのどこに問題があるか、ある程度絞り込んで確認する事ができるようになります。

ここでは、まず画面にメッセージを表示する簡単なプログラムを利用して、デバッグモードの処理結果と、通常の処理結果の違いをご紹介しますので、しっかりその書き方や使用方法、違いについて理解しましょう。

書き方:

D 処理

使用例:

基礎-デバッグモード-使用例

使用例は、画面にメッセージを表示する簡単なプログラムになりますが、デバッグ行(D DISPLAY "デバッグモード時のみ表示")は、デバッグモードでしか処理が実行されない事がおわかりいただけるかと思います。

実行結果(通常):

基礎-デバッグモード-実行結果1

実行結果(デバッグモード):

基礎-デバッグモード-実行結果2

COBOL(コボル)言語のデバッグモードの主な利用シーン

COBOL(コボル)言語の基本的なテストとデバッグモードの使い方について理解いただけたところで、次は具体的な利用シーンについてご紹介したいと思います。

デバッグモードは先ほどご紹介したデータの流れや内容を追いやすくするためにDISPLAY文と組み合わせて利用する事が多いですが、主な利用シーンは以下①~⑤のようになります。

①プログラムの開始・終了時

・どのプログラムで問題が起きているかの切り分けに利用します。特にサブプログラムやパラメタの引き渡し内容の確認に利用する事が多いです。

②条件分岐、繰り返し処理の直前、直後

・条件分岐や繰り返し処理はデータを加工、編集する処理が組み込まれている事が多いことから、その直前直後のデータの値を取得し、その変化が正しいか確認するために利用します。

③レコード件数の確認

・ファイルから情報を1レコードずつ読込み処理する場合に、何件が処理の対象になっているか、また、何件目の処理結果に問題があるのかを確認する際に利用します。

④処理時間の計測

・プログラムの中でどの処理が全体の処理時間に影響を及ぼしているのか確認する際に利用します。プログラム単位で処理時間を比較する際にも利用します。

⑤異常処理の確認

・異常処理は通常発生しないデータが来た場合を想定した処理になっている事が多いため、意図的に異常値を作り出し、処理を流す際に利用します。

では、今回は繰り返し処理にデバッグ用の処理を記述する方法について見ていきましょう。

使用例:

基礎-デバッグモード-使用例

使用例は、WK-SUJIを1ずつ加算していきWK-SUJIが5よりも大きくなった場合に、繰り返し処理を抜け、結果を画面に表示するというプログラムです。通常の処理結果が最後の値しかわからないのに対して、デバッグモードでは値がどのように変化していくか、その流れがよくわかるかと思います。

実行結果(通常):

基礎-デバッグモード-実行結果1

実行結果(デバッグモード):

基礎-デバッグモード-実行結果2

COBOL(コボル)言語のデバッグモードを利用する際の基本事項や注意事項

  • デバッグ行は正書法(固定形式)の標識領域(7桁目)に「D」を記述して宣言します。
  • デバッグ行はデバッグモード時のみ有効です。
  • デバッグモードを有効にするためには、コンパイル時にデバッグ用のコンパイラオプションを利用します。
  • プログラムの記述方法は、デバッグ行も通常の処理行も違いはありません。

デバッグモードのCOBOL(コボル)プログラム活用法

COBOL(コボル)言語のテストにおけるデバッグモードの基本的な書き方や主な利用シーンについて理解いただけたでしょうか?

最後に活用法として、プログラムの処理時間を計測する処理をご紹介します。この例のようにどのプログラムでも利用できるような共通の処理を予め用意しておく事は、プログラムのテストにおいても生産性と品質の向上につながりますので、しっかり内容を理解して実際のプログラム作成時に活用いただければと思います。

サンプルプログラム:

  1. IDENTIFICATION DIVISION.
  2. PROGRAM-ID. DEBUG_SAMPLE03.
  3. ENVIRONMENT DIVISION.
  4. DATA DIVISION.
  5. WORKING-STORAGE SECTION.
  6. D 01 WK-TIME.
  7. D 03 HH PIC 9(02).
  8. D 03 MM PIC 9(02).
  9. D 03 SS PIC 9(02).
  10. D 01 START-TIME PIC 9(06) VALUE ZERO.
  11. D 01 END-TIME PIC 9(06) VALUE ZERO.
  12. D 01 WK-TIME-9 PIC 9(06) VALUE ZERO.
  13. PROCEDURE DIVISION.
  14. D ACCEPT WK-TIME FROM TIME.
  15. D COMPUTE START-TIME = (HH*3600)+(MM*60)+SS.
  16. PERFORM 10000 TIMES
  17. PERFORM 60000 TIMES
  18. END-PERFORM
  19. END-PERFORM.
  20. DISPLAY "処理終了".
  21. D ACCEPT WK-TIME FROM TIME.
  22. D COMPUTE END-TIME = (HH*3600)+(MM*60)+SS.
  23. D COMPUTE WK-TIME-9 = END-TIME - START-TIME.
  24. D COMPUTE HH = WK-TIME-9/3600.
  25. D COMPUTE WK-TIME-9 = WK-TIME-9-(HH*3600).
  26. D COMPUTE MM = WK-TIME-9/60.
  27. D COMPUTE SS = WK-TIME-9-(MM*60).
  28. D DISPLAY "処理時間:" HH ":" MM ":" SS.
  29. STOP RUN.
  30. END PROGRAM DEBUG_SAMPLE03.

実行結果(通常):

基礎-デバッグモード-実行結果1

実行結果(デバッグモード):

基礎-デバッグモード-実行結果2

いかがでしたでしょうか?どんなに注意してプログラムを記述しても、プログラムの中には不具合が潜んでいるものです。

また、それらの不具合を洗い出すためにテストを行いますが、複雑な処理になればなるほど、プログラムソースのチェックや実際の処理の結果を見るだけでは、問題の特定は難しいです。

そういった場合に有効なのが、今回ご紹介したデバッグモードです。デバッグモードを利用する事で、実際のデータの変化を視覚的に確認できるため、不具合の解消に大いに役立ちます。

プログラミング言語の学習を進める際は、実際の処理の書き方だけでなく、このようなテストを効率的に進めるために用意されている機能についても是非学習し、理解を深めていっていただければと思います。

この記事を読んだ人は、こちらの記事も読んでいます

【未経験者歓迎】COBOLプログラマー・システムエンジニアの募集

株式会社COBOLの求人・転職・募集情報を見る

COBOL入門のカテゴリー

取引企業様 募集中
COBOL技術者 募集
COBOL魂
読者採用
COBOL入門