COBOLのテストコードの書き方、気になっていませんか?
システム開発の世界では、作ったプログラムが正しく動くか確認する「テスト」が欠かせませんよね。でも、COBOLとなると「え、どうやるの?」「情報が少ない…」なんて声も聞こえてきそうです。
この記事では、そんなCOBOLのテストコード作成について、基本の「き」から手順を追って解説していきますよ!
この記事で学べること
- COBOLでテストコードを書く意味
- テストコードの基本的な考え方
- テストコードの組み立て方
- テストデータ準備から結果確認までのステップ
- 簡単なテストコードのサンプル
- 初心者が気をつけたいこと
「なんだか難しそう…」と感じている方も大丈夫! この記事を読み終わるころには、「なるほど、こう書けばいいのか!」と、テストコード作成への第一歩を踏み出せるはず。
なぜCOBOLでテストコードを書く必要があるのか?
「そもそも、昔から動いているCOBOLプログラムに、今さらテストコードなんて必要なの?」と思う方もいるかもしれませんね。
答えは、もちろん「必要」です!
理由はいろいろありますが、大きな目的はプログラムの品質を保つことでしょう。
例えば…
- プログラムを修正したら、関係ないはずの別の場所がおかしくなった!(デグレードの防止)
- 作った機能が、ちゃんと仕様通りに動いているか確かめたい!(動作保証)
- 将来、誰かがこのプログラムを引き継ぐときに、安心して改修できるようにしたい!(保守性の向上)
テストコードがあれば、プログラムの変更後に「前は動いていた機能が動かなくなった…」なんて事態を防ぎやすくなります。
テストコード自体がプログラムの仕様を示すドキュメントの役割も果たしてくれるのです。特に、長く使われているCOBOLプログラムは、機能追加や修正が繰り返されていることが多いはず。だからこそ、テストコードで品質を守ることが、安定稼働に繋がるのですね。
COBOLテストコードの基本的な考え方と種類
じゃあ、COBOLのテストコードって、一体どんなものなのでしょうか?
簡単に言うと、「あるCOBOLプログラム(テストしたいプログラム)が、期待通りに動くかを確認するための、別のCOBOLプログラム」のことです。
テストしたいプログラムを「テスト対象プログラム」、確認用のプログラムを「テストコード」や「テストプログラム」と呼びます。
考え方の基本はシンプルで、
- テスト対象プログラムを動かすための「入力データ」を用意する。
- テスト対象プログラムを呼び出して、実行させる。
- 実行結果が、事前に予想していた「期待する結果」と同じかどうかを比べる。
テストには色々なレベルがありますが、この記事では一番基本となる「単体テスト(ユニットテスト)」、つまりプログラム1つ1つを対象にしたテストの書き方に絞って解説していきますね。
テスト対象プログラム(ユニット)の特定
まずは、「どのプログラムをテストするのか」を決めないといけません。
COBOLでは、通常`PROGRAM-ID`で示される一つのプログラムがテストの単位となります。
たくさんのプログラムがいきなり連携するような大きな動きをテストするのは、最初からだとちょっと大変かもしれません。
なので、初めは機能が比較的シンプルで、他のプログラムとの連携が少ない(または無い)プログラムを選んで、テストコード作成に挑戦してみるのがおすすめです。
例えば、「受け取った2つの数値を足して返す」とか、「特定のコード値に対応する名称を返す」といった、小さなプログラムから始めてみましょう。
COBOLテストコードの基本的な構造
テストコードもCOBOLプログラムの一種なので、基本的な構造は普通のCOBOLプログラムと似ています。
おなじみの4つのDIVISION(部)で構成されることが多いでしょう。
テストコードで特に意識するのは、`DATA DIVISION`と`PROCEDURE DIVISION`です。
- `DATA DIVISION`
テストに必要な入力データや、比較するための期待結果データをここで定義します。 - `PROCEDURE DIVISION`
テスト対象プログラムを呼び出したり、実行結果を期待結果と比較したりする処理をここに記述します。
つまり、テスト用のデータ置き場と、テストを実行する手順を書く場所が重要、と覚えておきましょう。
COBOLテストコードの具体的な書き方
ここからは、テストコードを実際に書いていく手順を見ていきましょう。
大きく分けて、3つのステップで進めます。
- テストデータの準備
- テスト対象プログラムの呼び出し
- 実行結果の検証と比較
一つずつ、丁寧に見ていきましょうね。
ステップ1:テストデータの準備 (入力・期待結果)
最初のステップは、テストに必要な「データ」を用意すること。
テスト対象プログラムに渡す「入力データ」と、プログラムが正しく動いた場合に返ってくるはずの「期待結果データ」の2種類が必要です。
これらのデータは、テストコードの`DATA DIVISION`の`WORKING-STORAGE SECTION`(作業場所)に定義するのが一番簡単でしょう。
例えば、こんな感じです。
DATA DIVISION. WORKING-STORAGE SECTION. * テスト対象プログラムに渡すデータ(入力) 01 INPUT-DATA. 05 INPUT-A PIC 9(3) VALUE 100. 05 INPUT-B PIC 9(3) VALUE 50. * テスト対象プログラムから返ってくるはずのデータ(期待結果) 01 EXPECTED-RESULT. 05 EXPECTED-SUM PIC 9(4) VALUE 150. * テスト対象プログラムから実際に返ってきたデータを入れる場所 01 ACTUAL-RESULT. 05 ACTUAL-SUM PIC 9(4).
ここでは、`INPUT-A`と`INPUT-B`が入力データ、`EXPECTED-SUM`が期待結果データ、`ACTUAL-SUM`が実際の実行結果を入れておくための場所です。`VALUE`句を使って、あらかじめ値を入れておくのがポイントです。
「どんな入力の時に、どんな結果になれば正解か」という組み合わせ(テストケースと言います)を考えて、ここで定義しておきましょう。
ステップ2:テスト対象プログラムの呼び出し
次に、準備した入力データを使って、テストしたいプログラムを動かします。
プログラムを呼び出すには、`PROCEDURE DIVISION`で`CALL`文を使います。
こんな風に書きます。
PROCEDURE DIVISION. MAIN-PROC. CALL 'TARGETPROG' USING INPUT-DATA ACTUAL-RESULT. * (この後、結果を検証する処理が続く) STOP RUN.
上の例では、`TARGETPROG`という名前のテスト対象プログラムを呼び出しています。`USING`の後には、テスト対象プログラムに渡したいデータ(ここでは`INPUT-DATA`)と、結果を受け取りたいデータ(ここでは`ACTUAL-RESULT`)を指定します。
`CALL`文の`USING`句で指定するデータの順番や型は、テスト対象プログラムの`PROCEDURE DIVISION`の`USING`句や`LINKAGE SECTION`の定義と、きっちり合わせておく必要があります。ここが違うとエラーになってしまうので注意しましょうね。
ステップ3:実行結果の検証と比較
テスト対象プログラムの呼び出しが終わったら、いよいよ最後のステップ、結果の検証です。
テスト対象プログラムが処理を終えて、結果が`ACTUAL-RESULT`のような変数に入っているはずです(ステップ2の`CALL`文の`USING`で指定した変数)。
この「実際の実行結果」(`ACTUAL-RESULT`)と、ステップ1で用意しておいた「期待結果データ」(`EXPECTED-RESULT`)が、同じかどうかを比較します。
比較には、おなじみの`IF`文を使います。
* CALL 'TARGETPROG' ... の後 IF ACTUAL-SUM = EXPECTED-SUM THEN DISPLAY 'テスト成功!' ELSE DISPLAY 'テスト失敗…' DISPLAY '期待結果: ' EXPECTED-SUM DISPLAY '実際結果: ' ACTUAL-SUM END-IF. STOP RUN.
このように、`IF`文で実際の値と期待する値を比べて、一致していれば「成功」、一致していなければ「失敗」と判断します。失敗した場合は、期待していた値と実際の結果がどう違ったのかを表示してあげると、後で原因を調査するのに役立ちます。
`DISPLAY`文でコンソールにメッセージを出すのが一番簡単な方法ですが、テスト結果をファイルに出力したり、専用の管理簿に記録したりする方法もあります。
初心者が注意すべきCOBOLテストコード作成のポイント
COBOLのテストコードを書き始める際に、特に初心者が気をつけておきたい点をいくつか挙げておきますね。
小さく始める
いきなり複雑なプログラムのテストに挑むのではなく、まずは機能が単純なプログラムから試してみましょう。成功体験を積むのが継続のコツです。1つのテストでは1つのことを確認する
1回のテスト(1つのテストケース)であれもこれも確認しようとせず、「この入力なら、この出力になるはず」という一点に絞って検証するのが基本です。複雑になると、失敗したときに原因の特定が難しくなります。テストデータの管理
テストの種類が増えてくると、テストデータの管理が煩雑になりがちです。最初は`WORKING-STORAGE`に直接書くのが簡単ですが、データが多くなってきたら、テストデータをファイルから読み込む方法なども検討すると良いかもしれません(これは少し応用編です)。ファイルやデータベースの扱い
テスト対象プログラムがファイルやデータベースを更新する場合、テストの準備や後始末が少し複雑になることがあります。例えば、テスト前に特定のデータを用意したり、テスト後にデータを元に戻したりする必要があるかもしれません。最初は、ファイルやデータベースを扱わないプログラムからテストするのが取り組みやすいでしょう。完璧を目指しすぎない
特にレガシーなシステムでは、すべてのパターンを網羅するテストを書くのが現実的でない場合もあります。まずは主要な機能や、よく使われる処理の流れをカバーすることから始めましょう。焦らず、一歩ずつ進めていくことが、テストコード作成を身につける近道ですよ。
【まとめ】COBOLテストコードの書き方をマスターする第一歩
今回は、COBOLのテストコードの書き方について、基本的な考え方から具体的な手順、サンプルコード、注意点までを見てきました。
ポイントをまとめると、
- テストコードは、プログラムの品質を守るために書く。
- 基本は「データ準備 → 呼び出し → 結果検証」の3ステップ。
- `DATA DIVISION`でテストデータと期待結果を用意する。
- `PROCEDURE DIVISION`で`CALL`文で呼び出し、`IF`文で結果を比較する。
- まずは簡単なプログラムから、1つずつ試してみる。
最初は少し戸惑うかもしれませんが、この記事で紹介したステップに沿って、まずは簡単なプログラムでテストコード作成に挑戦してみてください。自分で書いたテストコードでプログラムの正しさを確認できた時の「よし!」という感覚は、なかなか良いものですよ。
【関連記事】
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。