COBOLの境界値テストとは?初心者でもわかる数値・文字列のテスト例
生徒
「先生、プログラムってちゃんと動いてるかどうかって、どうやって確認するんですか?」
先生
「良い質問だね。プログラムが正しく動くかどうかを確認するには、いろんな方法のテストがあるけど、その中でも『境界値テスト』はとても大事なんだよ。」
生徒
「きょうかいち?それって何ですか?」
先生
「簡単に言うと、ギリギリの値でプログラムを試してみることだよ。たとえば、80点以上で合格なら、79点とか80点とか81点で試してみるのが境界値テストなんだ。」
生徒
「へぇ~、それってなんで大事なんですか?」
先生
「プログラムのエラーって、実はそのギリギリの部分でよく起きるんだよ。だから、境界値をちゃんとチェックすることでバグを見つけやすくなるんだ。」
1. 境界値テストとは?(限界値分析の基本)
境界値テスト(きょうかいちテスト)とは、「条件が切り替わるギリギリの値」を狙って入力し、プログラムが正しく判定を行っているかを確認するテスト手法です。専門用語では「限界値分析」とも呼ばれ、COBOL(コボル)のような業務システムから最新のWebアプリ開発まで、あらゆる現場で必須とされる基本中の基本のテスト手法です。
なぜこのテストが重要かというと、プログラミングにおいてバグが最も発生しやすいのは「範囲の端っこ」だからです。たとえば、開発者が「20歳以上」という条件を作る際、うっかり「20歳を超える(21歳以上)」と書き間違えてしまうミスは非常によくあります。
「テストの点数が80点以上なら合格」というルールを判定するプログラムを考えてみましょう。このとき、以下の3つの値をテストするのが「境界値テスト」の鉄則です。
- 79点(境界の1つ下):不合格になるはず
- 80点(境界ちょうど):合格になるはず
- 81点(境界の1つ上):合格になるはず
もし、80点を入れたのに「不合格」と表示されたら、プログラムの不等号(以上・以下・より大きい等)の書き方が間違っていることがすぐに分かります。このように、「OKとNGが入れ替わる瞬間」を重点的にチェックすることで、効率よくバグを見つけることができるのです。
この考え方は、数値だけでなく「文字数」や「日付」のチェックなど、あらゆる条件分岐に応用されます。初心者のうちは、ただ適当な数字を入れるのではなく、「この条件の境目はどこだろう?」と意識してテストデータを作るのが上達への近道です。
2. COBOLでの境界値テスト(数値編)
COBOLは銀行や保険会社のシステムなど、1円の狂いも許されないシビアな計算業務で長年使われています。そのため、数値の判定ミスを防ぐ「境界値テスト」は現場で最も重要視される工程の一つです。
プログラミング未経験の方でもイメージしやすいよう、「年齢による成人判定」のプログラムを例に見ていきましょう。例えば、20歳以上を成人と判定する次のようなCOBOLコードがあります。
IF AGE >= 20 THEN
DISPLAY "あなたは成人です。"
END-IF
このプログラムをテストする際、「10歳」や「50歳」といった離れた数値だけで確認するのは不十分です。なぜなら、バグは「20歳という境目」で発生するからです。具体的には、以下の3つのパターンをセットでテストします。
| テスト値 | 判定の意図(期待する結果) | チェックのポイント |
|---|---|---|
| 19 | 表示されない(未成年) | 「境界の1つ下」で正しく除外されるか |
| 20 | 表示される(成人) | 「境界ちょうど」が条件に含まれているか |
| 21 | 表示される(成人) | 「境界の1つ上」で正しく判定されるか |
もし開発者が、誤って IF AGE > 20 (20より大きい)と書いてしまった場合、20歳を入力したときに「成人です」と表示されず、バグを見つけることができます。このように、条件の境目(しきい値)とその前後をピンポイントで確認することで、最小限の手間で確実にプログラムの品質を高めることができるのです。
3. COBOLでの境界値テスト(文字列編)
数値のテストと同様に重要なのが、「文字列(文字の並び)」に関する境界値テストです。COBOLが使われる事務処理システムでは、氏名や住所、商品名などの文字入力が欠かせません。文字が全く入力されていない状態や、1文字だけ入力された状態など、「データの有無が切り替わる瞬間」をテストするのが基本です。
例えば、ユーザーが名前を入力したかどうかを判定するプログラムを考えてみましょう。COBOLでは、中身が空っぽ(スペースのみ)の状態をSPACESという言葉で表現します。
IF NAME NOT = SPACES THEN
DISPLAY "入力内容を確認しました。"
ELSE
DISPLAY "エラー:名前が入力されていません。"
END-IF
この処理をテストする場合、プログラミング未経験の方が特に意識すべき境界値は以下の3パターンです。単に「適当な名前」を入れるだけでなく、「これ以上削れない最小の単位」を狙うのがコツです。
| テストデータ | 判定結果 | テストの狙い(境界の考え方) |
|---|---|---|
| (すべてスペース) | 未入力(エラー) | データが「存在しない」境界の確認 |
| "A" (1文字のみ) | 入力あり(正常) | データが「存在する」最小の境界 |
| "田中 太郎" | 入力あり(正常) | 一般的なデータでの確認 |
特にCOBOLの場合、変数のサイズ(桁数)が固定されていることが多いため、「スペースを1つだけ入れた場合はどうなるか?」「全角と半角が混ざった時は?」といった視点を持つことで、より精度の高いテストが可能になります。このように「入力がある・ない」の境目をしっかり叩いておくことが、後々のシステムトラブルを防ぐ鍵となります。
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の条件判定はとても正確だからこそ、ギリギリのところを見ておくとバグを早く見つけやすくなるんだよ。
生徒:文字列のスペースと空文字の違いも思ったより重要でした。業務システムだと特に気をつけないといけない気がします。
先生:その通り。入力が必ずしも綺麗とは限らないから、境界値を丁寧に見る習慣が大事になるんだ。
生徒:これからテストするときは、ただ動けばいいじゃなくて、ぎりぎりの部分も試してみます!
先生:それが良い姿勢だよ。境界値テストを理解すると、プログラムの品質がぐっと高くなるはずだ。