COBOLのサブルーチンのテストとデバッグの基本を初心者向けにやさしく解説!
生徒
「先生、サブルーチンを作ったけどうまく動かないんです。どうやって確認すればいいですか?」
先生
「それは重要ですね。サブルーチンをテストして、問題があればデバッグ(バグ取り)する必要があります。わかりやすく説明しますね。」
生徒
「先生、デバッグって何から始めればいいですか?」
先生
「順を追って『確認』『検証』『修正』というステップを踏んでいけば大丈夫です。一緒にやってみましょう!」
1. サブルーチンのテストって何をすればいいの?
サブルーチンのテストとは、作った処理が正しく動いているか確認することです。具体的には「入力値に対して、期待した結果になるか」を調べます。
たとえば「おつり計算サブルーチン」は、「100円入れて80円払ったら20円返ってくるか」など、代表的なケース**をチェックします。
これを違うパターンでも試して、バグがないか確かめるのがテストです。
2. テスト手順は?はじめの3ステップ
- 1. テストケースを決める
代表的な値や境界値(最低、最大など)を選びます。 - 2. メインプログラムから呼び出して確認
サンプル値でCALLし、結果を画面に表示してチェックします。 - 3. 結果が違ったらデバッグ
どこが違うか、変数の値や処理の流れを順番に見ていきます。
この繰り返しで、バグをつぶしていきます。
3. テスト用のメイン+サブルーチン実例
例えば「税金計算」をするサブルーチンをテストした例です。
IDENTIFICATION DIVISION.
PROGRAM-ID. TEST-PROG.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 AMOUNT PIC 9(5) VALUE 1000.
01 TAX-RATE PIC 9(3)V99 VALUE 0.08.
01 TAX-RESULT PIC 9(5)V99.
PROCEDURE DIVISION.
CALL 'TAX-SUB' USING AMOUNT TAX-RATE RETURNING TAX-RESULT
DISPLAY "税込は " TAX-RESULT
STOP RUN.
IDENTIFICATION DIVISION.
PROGRAM-ID. TAX-SUB.
DATA DIVISION.
LINKAGE SECTION.
01 L-AMOUNT PIC 9(5).
01 L-RATE PIC 9(3)V99.
01 L-RESULT PIC 9(5)V99.
PROCEDURE DIVISION USING L-AMOUNT L-RATE RETURNING L-RESULT.
COMPUTE L-RESULT = L-AMOUNT + (L-AMOUNT * L-RATE)
EXIT PROGRAM.
税込は 1080.00
このようにテストを通すことで「税込計算が正しいか確認」できます。
4. デバッグの基本テクニック
COBOLのデバッグでは、次の方法があります:
- DISPLAY文で途中経過確認
途中の変数の値を画面に出して処理の流れを追えます。 - 簡単なケースから試す
最小値やゼロなどで動きを確認すれば原因がわかりやすくなります。 - 1つずつ確認する
問題の起きやすいところに絞って表示を入れると効果的です。
まるでパズルのピースを1つずつチェックするようなイメージです。
5. テストとデバッグのポイントまとめ
- 代表ケース+例外ケースの両方で試す
- 変数名のスペル、データ型の一致に気を付ける
- EXIT PROGRAMを忘れずに、呼び出しが戻らない原因を防ぐ
- DISPLAYで出力を確認しながら段階的に処理を追う
シンプルなコードを繰り返し確かめることで、バグは自然と減っていきます。
6. 初心者におすすめの練習法
最初は小さい処理で練習しましょう。例えば:
- 「足し算・引き算」など単純なサブルーチンで試す
- 境界値(0、最小値、最大値)でテスト
- 意図的に間違いを入れて、エラーが出るか確認
こうしたステップで、COBOLのサブルーチンテストとデバッグのスキルが自然に身につきますよ。
まとめ
COBOLのサブルーチンを正しく動かすためには、テストとデバッグの理解が欠かせません。サブルーチンはメインプログラムから呼び出され、入力値を受け取り、想定どおりの結果を返す仕組みで成り立っています。そのため、処理が思ったように動かないときは、サブルーチン内部でどのように値が扱われているかを丁寧に確認する必要があります。特に実務の現場では、金額計算、日付変換、データ整形などの共通処理がサブルーチン化されており、わずかなズレが全体の結果に影響を与えることもあります。 テストでは代表的な値を使うだけでなく、境界値や想定外の値で確認し、結果が期待どおりかを細かく検証していきます。たとえば「0円」「最小金額」「最大金額」「小数点あり」「極端な税率」などを実際にサブルーチンへ渡して動作を確認することで、予期しないバグを早い段階で見つけられます。また、デバッグにおいてはDISPLAY文を使った途中経過の確認がとても有効で、どの段階で値が変わってしまったのかを一歩ずつ追いかけられます。コード全体をいきなり見直すのではなく、特定の箇所に絞って処理を追跡することで、効率よく問題点を探せるようになります。 さらに、データ型の一致や変数名の誤り、EXIT PROGRAM の書き忘れなど、基本的なミスがバグにつながりやすい点も押さえておく必要があります。COBOLでは、PIC句が一致していないだけでも値が正しく渡らず、計算結果が崩れることがあるため、LINKAGE SECTION と USING 句の確認はとても重要です。これらの基礎を理解しておくと、複雑なサブルーチンでも安心して扱えるようになり、業務でも信頼性の高い処理を作成できるようになります。 ここでは、記事全体の理解を深めるために、もう一度テストとデバッグの流れを押さえられるサンプルプログラムをまとめて示します。
サンプルプログラム(まとめ用)
* メインプログラム:異なるテストケースを複数実行して確認
IDENTIFICATION DIVISION.
PROGRAM-ID. TEST-MAIN.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 PRICE PIC 9(5).
01 RATE PIC 9(1)V99 VALUE 0.08.
01 RESULT PIC 9(7)V99.
01 CASE-NO PIC 9 VALUE 1.
PROCEDURE DIVISION.
PERFORM TEST-LOOP UNTIL CASE-NO > 3
STOP RUN.
TEST-LOOP.
EVALUATE CASE-NO
WHEN 1
MOVE 1000 TO PRICE
WHEN 2
MOVE 0 TO PRICE
WHEN 3
MOVE 99999 TO PRICE
END-EVALUATE
DISPLAY "==== テストケース " CASE-NO " ===="
CALL 'CALC-SUB' USING PRICE RATE RETURNING RESULT
DISPLAY "入力金額:" PRICE
DISPLAY "結果:" RESULT
ADD 1 TO CASE-NO.
* サブルーチン:税金を含んだ金額を計算
IDENTIFICATION DIVISION.
PROGRAM-ID. CALC-SUB.
DATA DIVISION.
LINKAGE SECTION.
01 L-PRICE PIC 9(5).
01 L-RATE PIC 9(1)V99.
01 L-RESULT PIC 9(7)V99.
PROCEDURE DIVISION USING L-PRICE L-RATE RETURNING L-RESULT.
DISPLAY "計算前の値確認:" L-PRICE " / 税率:" L-RATE
COMPUTE L-RESULT = L-PRICE + (L-PRICE * L-RATE)
DISPLAY "計算後の結果:" L-RESULT
EXIT PROGRAM.
上記のようにテストケースを複数用意し、DISPLAY を用いて途中の値を丁寧に追うことで、間違いがどこに潜んでいるのかを自然に把握できます。また、RETURNING を使うサブルーチンでは戻り値の扱い方も重要で、意図しない型のズレが結果を崩す原因にもなるため、LINKAGE SECTION の定義も慎重に行う必要があります。こうした積み重ねが、より信頼性の高いCOBOLプログラムを構築する力となります。 テストとデバッグは地道な作業ですが、プログラムの品質を大きく左右する重要な工程です。慣れてくると「エラーの起きやすい部分の感覚」が身につき、効率的にバグを取り除けるようになります。初心者のうちは時間がかかっても、一つひとつの動きを確認しながら、丁寧にサブルーチンの挙動を理解していくことが大切です。仕事で使うCOBOLは正確性が求められるため、こうした基礎をしっかり身につけておくことで、確実にステップアップできます。
生徒
「先生、テストってこんなに重要なんですね。値を変えて試すだけで、いろんな気付きがありました!」
先生
「その通りですよ。サブルーチンは単体で動くわけではなく、メインプログラムから呼び出されるので、いろいろな値で試して確認することがとても大切なんです。」
生徒
「DISPLAYで途中の値を出すと、どこで間違っているのかがすぐ見えるのが便利でした!」
先生
「ええ、デバッグの基本は“見える化”です。慣れてくれば、どこに表示を入れれば原因が特定できるかも分かってきますよ。」
生徒
「これなら複雑な処理でも怖くない気がします。まずは小さな処理で練習してみます!」
先生
「良い姿勢ですね。テストとデバッグの習慣が身につけば、COBOLプログラムはぐっと安定したものになりますよ。」