COBOLの境界値テストとは?初心者でもわかる数値・文字列のテスト例
生徒
「先生、プログラムってちゃんと動いてるかどうかって、どうやって確認するんですか?」
先生
「良い質問だね。プログラムが正しく動くかどうかを確認するには、いろんな方法のテストがあるけど、その中でも『境界値テスト』はとても大事なんだよ。」
生徒
「きょうかいち?それって何ですか?」
先生
「簡単に言うと、ギリギリの値でプログラムを試してみることだよ。たとえば、80点以上で合格なら、79点とか80点とか81点で試してみるのが境界値テストなんだ。」
生徒
「へぇ~、それってなんで大事なんですか?」
先生
「プログラムのエラーって、実はそのギリギリの部分でよく起きるんだよ。だから、境界値をちゃんとチェックすることでバグを見つけやすくなるんだ。」
1. 境界値テストとは?
境界値テスト(きょうかいちテスト)とは、テスト対象の条件ギリギリの値を使って、プログラムが正しく動くかどうかを確認するテスト方法です。COBOL(コボル)だけでなく、すべてのプログラミング言語で使われる基本中の基本のテスト手法です。
たとえば、「年齢が20歳以上なら成人と表示する」というプログラムがあるとします。このとき、19歳・20歳・21歳という値を使ってテストすることで、条件が正しく判定されているかどうかを確認できます。
2. COBOLでの境界値テスト(数値編)
次のようなCOBOLプログラムがあるとします。
IF AGE >= 20 THEN
DISPLAY "あなたは成人です。"
END-IF
このプログラムでは、AGE(年齢)が20以上のときに「あなたは成人です。」と表示します。境界値テストとしては、以下のように年齢を変えて動作を確認します。
- AGE = 19:表示されない(未成年)
- AGE = 20:表示される(成人)
- AGE = 21:表示される(成人)
このように、条件の境目(しきい値)をテストすることで、プログラムの間違いに早く気づけます。
3. COBOLでの境界値テスト(文字列編)
文字列(もじれつ)とは、「あいうえお」や「Hello」など、文字が並んだもののことです。COBOLでは、文字列の長さや内容によっても判定できます。
たとえば、名前の入力が空欄でないかをチェックする場合、次のように書きます。
IF NAME NOT = SPACES THEN
DISPLAY "名前が入力されています。"
ELSE
DISPLAY "名前が入力されていません。"
END-IF
ここでの境界値テストは以下のようになります。
- NAME = " "(スペースのみ):空欄とみなされる
- NAME = "A":入力ありと判定される
- NAME = ""(何も入力されていない):空欄とみなされる
このように、「入力されているか、されていないか」の境界でテストすることで、プログラムの動作を確認できます。
4. なぜ境界値テストが重要なのか?
境界値テストが大事なのは、プログラムのバグ(間違い)が起きやすい場所だからです。
人間でも、「ギリギリ合格」や「あと一歩で不合格」といった場面でミスが起きやすいのと同じで、プログラムも「条件の境目」で動作を間違えることがあります。
たとえば、以下のように「>=」と「>」を間違えていた場合:
IF AGE > 20 THEN
DISPLAY "あなたは成人です。"
END-IF
この場合、20歳ちょうどの人は成人と判定されないというバグが起きてしまいます。
これを防ぐには、「20歳ちょうど」でのテスト、つまり境界値テストが必要になります。
5. COBOLで境界値テストを試すためのコード例
次は、年齢によって成人・未成年を表示するプログラムの例です。
IDENTIFICATION DIVISION.
PROGRAM-ID. AGE-CHECK.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 AGE PIC 99.
PROCEDURE DIVISION.
DISPLAY "年齢を入力してください(例:19):".
ACCEPT AGE.
IF AGE >= 20 THEN
DISPLAY "あなたは成人です。"
ELSE
DISPLAY "あなたは未成年です。"
END-IF.
STOP RUN.
このプログラムに対して、以下のような境界値でテストしてみましょう。
- AGE = 19:未成年
- AGE = 20:成人
- AGE = 21:成人
実行結果の例:
年齢を入力してください(例:19):
19
あなたは未成年です。
年齢を入力してください(例:19):
20
あなたは成人です。
6. 文字列の長さにも注意しよう
文字列のテストでは、空文字や最大文字数も重要なポイントです。
たとえば、最大10文字まで入力できる名前の項目がある場合:
01 NAME PIC X(10).
このときのテスト例:
- 空文字("")→エラーとすべき?
- 1文字("A")→OK?
- 10文字ちょうど("ABCDEFGHIJ")→OK?
- 11文字("ABCDEFGHIJK")→切り捨てられる?エラー?
こうしたテストを通じて、プログラムが意図通りに動作しているかを確認できます。
7. COBOL初心者が覚えておきたいポイント
- 境界値テストは、条件の「ギリギリ」をチェックする大切な方法。
- 数値の境界:例えば「20歳以上」の20や19、21など。
- 文字列の境界:「空文字」「最大文字数」「スペースのみ」など。
- COBOLの
IF文やDISPLAY文で簡単にテストができる。 - プログラムのバグは「境界」で起きやすい。だからこそ、このテストが役立つ!
これらを意識してテストすれば、COBOLのプログラムをより安全に、正確に作れるようになります。
まとめ
COBOLの境界値テストについて全体を振り返ると、数値や文字列の条件がどのように評価されるかを丁寧に確認することがとても大切だと分かります。とくに、条件のきわどい部分で判断が分かれるような場面では、少しの書き方の違いによって結果が大きく変わってしまうことがあります。こうした境界の動作をしっかり見極めるために、年齢の例のように一つ一つの値の変化がどのように表示や処理に影響するのかを確かめることが大事になります。境界値を扱うと、COBOLのIF文の考え方やPICの定義の意味、空文字やスペースの扱いがどれだけ繊細なのかがよく理解できるようになりますし、実務でのチェックにも直結する知識になります。とくに業務システムでは、微妙な入力の差で処理が変わることも多いため、年齢・点数・金額・文字列の長さなど、どんなデータであっても境界になる部分は必ず確認しておく必要があります。こうした理解を積み重ねることで、COBOLでのテスト設計がぐっと強くなり、エラーを早い段階で気づけるようになります。
境界値テストで確認しておきたい基本パターン
たとえば、年齢の判断では「以上」と「より大きい」の区別が重要で、それによって二十歳の扱いが変わることがよくあります。文字列でも、空文字とスペースだけの状態は似ているようで、実際には全く違う扱いになるため注意が必要です。こうした差を明確に理解するためには、実際にCOBOLのコードを動かして境界の状況を試すことが役立ちます。とくに入力された値の長さが制限を超えるとどうなるか、切り捨てられるのかエラーになるのか、スペースが含まれているとどう扱われるかなど、実際のデータ処理を想定しながらテストを進めると効果的です。
境界値テストのサンプルプログラム
境界を確認する基本として、次のようなCOBOLコードを使って動きを確かめることができます。
DISPLAY "ぎりぎりの値をチェックします。".
MOVE 19 TO AGE.
IF AGE >= 20 THEN
DISPLAY "19は成人と判定されました".
ELSE
DISPLAY "19は未成年と判定されました".
END-IF.
MOVE 20 TO AGE.
IF AGE >= 20 THEN
DISPLAY "20は成人と判定されました".
ELSE
DISPLAY "20は未成年と判定されました".
END-IF.
MOVE 21 TO AGE.
IF AGE >= 20 THEN
DISPLAY "21は成人と判定されました".
ELSE
DISPLAY "21は未成年と判定されました".
END-IF.
このように、連続した境界値を一度に動かして違いを確認すると、条件がどのように判定されているかが明確に分かります。また、文字列の境界値テストをする場合には空文字や最大長の文字列などを用意して、PICの制約がどのように作用するのかを見ることが重要です。COBOLのデータ定義は業務処理に直結するため、小さな差でも大きな影響を生むことがあります。
生徒:きょうかいの値って、数が一つ違うだけで結果が変わるからすごく大事なんですね。
先生:そうだね。COBOLの条件判定はとても正確だからこそ、ギリギリのところを見ておくとバグを早く見つけやすくなるんだよ。
生徒:文字列のスペースと空文字の違いも思ったより重要でした。業務システムだと特に気をつけないといけない気がします。
先生:その通り。入力が必ずしも綺麗とは限らないから、境界値を丁寧に見る習慣が大事になるんだ。
生徒:これからテストするときは、ただ動けばいいじゃなくて、ぎりぎりの部分も試してみます!
先生:それが良い姿勢だよ。境界値テストを理解すると、プログラムの品質がぐっと高くなるはずだ。