【COBOL勉強法】プログラム不具合を取り除くためのヒント|学習講座

作成したプログラムに潜む不具合を取り除くためのヒントとは

基礎-プログラム不具合-イメージ

プログラム不具合とは

一般的にプログラムを作成する際は、ある目的を満たすための計算処理や処理条件が書かれた設計書を基に作成を進めます。この設計書に書かれる内容の粒度はプロジェクトにより異なりますが、具体的なプログラムの記述についてはプログラム作成者に任せられる事が多いです。

プログラム不具合は、このようにプログラム作成者によって作成されたプログラムが、設計書に書かれた動きにならない誤りや欠陥の事を指します。不具合は単純な計算式の間違いから、ほとんどのデータは正しいのに、あるデータだけ正しい結果が得られないなど様々です。効率的に不具合を取り除くためには、なぜその不具合が起きているのか、原因特定をスムーズに進められるかがカギになってきます。

COBOL言語のプログラム不具合のケースとは

ここからはプログラム不具合が起きるケースを具体的に取り上げます。特にCOBOL言語初学者の方が陥りやすいミスを取り上げましたので、参考にしていただければと思います。

1.データ種の考慮不足

・COBOLはファイルやDBのデータを基に加工・編集する処理を得意としています。データを加工編集する際は、そのデータの種類により処理を分岐させる事がありますが、この分岐の条件が足りず不具合が生じる場合があります。

2.データ件数の考慮不足

・ファイルやDBから取得されるデータが何らかの問題で想定通りの件数連携されない場合があります。例えば、1レコードしか想定していないマスタデータが複数レコード連携されるなどです。プログラムを作成する際、そういう事態を想定していないと、データをロストしたり、余分なデータが後処理につながり、不具合が生じるという事があります。

3.キー項目(データ順)の考慮不足

・COBOLはあるキー項目単位に処理を行いデータ集計したり、あるキー項目単位にマッチング処理をしたりする事がよくありますが、この設定するキー項目に過不足があり、正しく処理が行われず不具合につながる事があります。

4.先頭、末尾の条件判定の考慮不足

・プログラムには、処理前に必ず条件判定を行う場合と、処理後に条件判定を行う場合の2つのパターンが存在します。この使い分けが正しく行われていない事により不具合が生じる場合があります。

プログラム不具合のケースとそれを取り除くためのヒント

先程プログラム不具合が起きるケースを具体的に取り上げましたが、実際のプログラムとその実行結果を確認しながら不具合が起きるケースとその取り除き方について考えてみましょう。

1.データ種の考慮不足

pgm_sample01.cob

基礎-プログラム不具合-使用例1

入力ファイル(in01.txt)

基礎-プログラム不具合-入力ファイル1

出力ファイル(out01.txt)

基礎-プログラム不具合-出力ファイル1

このプログラムはファイルを読込み、そのファイルのデータ項目「IN01-SUJI」の値が10以下の場合、ファイル出力するという処理です。10以下の場合しか処理条件が記述されていませんが、10より大きな数字だった場合の処理についても考え記述しておくといいでしょう。例えば、エラー処理を行う、編集内容を変えてファイル出力する、何もしない事を明示的に記述する、などです。こうする事でデータロストや後処理での不具合を未然に防ぐ事ができます。

2.データ件数の考慮不足

pgm_sample02.cob

基礎-プログラム不具合-使用例2

入力ファイル(in01.txt)

基礎-プログラム不具合-入力ファイル2

出力ファイル(out01.txt)

基礎-プログラム不具合-出力ファイル2

このプログラムは、「pgm_sample01」の28行目の繰り返し処理を削除したものです。ファイルのレコード数が1件想定ですが、複数レコード存在した場合も考え処理を記述しておくといいでしょう。例えば、エラー処理を行う、レコードをネグレクトする、などです。

3.キー項目(データ順)の考慮不足

pgm_sample03.cob

基礎-プログラム不具合-使用例3-1

基礎-プログラム不具合-使用例3-2

入力ファイル(in01.txt)

基礎-プログラム不具合-入力ファイル3

出力ファイル(out01.txt)

基礎-プログラム不具合-出力ファイル3

このプログラムはファイルをキー項目が変わるまで読み込みつつ、キー項目単位にデータを集計する処理になっています。今回キー項目として4桁(年)を指定していますが、この桁数の指定によって結果が大きく変わる事に気づくと思います。今回出力ファイルとして「202007」「030」の結果が出ていますが、「202007」「010」が正しい集計結果であるとも考えられます。この辺りの気づきを基にキー項目の正しさを確認するのも1つの手段です。

4.先頭、末尾の条件判定の考慮不足

pgm_sample04.cob

基礎-プログラム不具合-使用例4

入力ファイル(in01.txt)

基礎-プログラム不具合-入力ファイル4

出力ファイル(out01.txt)

基礎-プログラム不具合-出力ファイル4

このプログラムは、「pgm_sample01」の28行目の条件を見直したものです。「TEST AFTER」指定する事で必ず1レコードファイル出力される事になりますが、「TEST BEFORE」を指定の場合、何もレコードがファイル出力されない事を確認してみてください。

プログラム不具合を取り除く、その他のヒント

プログラム不具合のケース、内容をご理解いただけたでしょうか?実践ではこれらのケースが複数複雑に絡み合う事もあります。そういった不具合をできるだけ事前に取り除くプログラム作成方法をご紹介したいと思います。

・頻繁に登場する処理をパターン化しておく

COBOL言語にはよく利用されるプログラムのパターンが存在します。例えばファイル操作です。1つのファイルを読み込み、レコード編集後、1つのファイルに出力する。1つのファイルを複数ファイルに分割する。複数ファイルをマッチング処理する、などです。これらよく利用するプログラムは予めテンプレート化して作成しておくと、プログラムのコーディング量を減らせるため、不具合が減らせるだけでなく、生産性高くプログラムを作成する事ができます。

・処理を階層化させない

繰り返し処理や条件判定処理は、複数階層もたせられますが、この階層が深くなればなるほど処理内容がわかり難くなり不具合につながってしまいます。できるだけ階層構造を持たないようなプログラムの記述ができないか考えてみましょう。

・処理実績があるものを利用する

プログラムは新しい記述が増えれば増えるほど、不具合が起きる可能性が増します。プログラム単位でも、処理単位でも構いません。既に処理実績があるものを利用できるのであれば、それを活用する事を考えてみましょう。不具合原因の特定時に、確認するプログラムの量が減るため、原因の特定を効率的に行う事ができるはずです。

・コメントを残す

プログラムは新しく作成するだけはありません。既に作られているものに手を入れる事もよくあります。自分以外の人がそのプログラムの動きについて理解が進むよう、処理概要や注意事項等コメントを残しましょう。そうする事によって不具合の特定を早めたり、不具合自体起きる事を防ぐ事ができます。

いかがでしたでしょうか?プログラムの不具合とその取り除き方について理解いただけたでしょうか?今回ご紹介したのは1つの例です。実践を積む事で徐々に不具合の傾向や対処法についても身についてくると思いますので、いろいろなケースに取り組んでみましょう。またインターネット上にも参考情報はあります。困った時は何か事例がないか探してみるのもいいかと思います。

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

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

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

COBOL入門のカテゴリー

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