【COBOL勉強法】プログラム不具合を取り除くためのヒント|学習講座
作成したプログラムに潜む不具合を取り除くためのヒントとは
プログラム不具合とは
一般的にプログラムを作成する際は、ある目的を満たすための計算処理や処理条件が書かれた設計書を基に作成を進めます。この設計書に書かれる内容の粒度はプロジェクトにより異なりますが、具体的なプログラムの記述についてはプログラム作成者に任せられる事が多いです。
プログラム不具合は、このようにプログラム作成者によって作成されたプログラムが、設計書に書かれた動きにならない誤りや欠陥の事を指します。不具合は単純な計算式の間違いから、ほとんどのデータは正しいのに、あるデータだけ正しい結果が得られないなど様々です。効率的に不具合を取り除くためには、なぜその不具合が起きているのか、原因特定をスムーズに進められるかがカギになってきます。
COBOL言語のプログラム不具合のケースとは
ここからはプログラム不具合が起きるケースを具体的に取り上げます。特にCOBOL言語初学者の方が陥りやすいミスを取り上げましたので、参考にしていただければと思います。
1.データ種の考慮不足
・COBOLはファイルやDBのデータを基に加工・編集する処理を得意としています。データを加工編集する際は、そのデータの種類により処理を分岐させる事がありますが、この分岐の条件が足りず不具合が生じる場合があります。
2.データ件数の考慮不足
・ファイルやDBから取得されるデータが何らかの問題で想定通りの件数連携されない場合があります。例えば、1レコードしか想定していないマスタデータが複数レコード連携されるなどです。プログラムを作成する際、そういう事態を想定していないと、データをロストしたり、余分なデータが後処理につながり、不具合が生じるという事があります。
3.キー項目(データ順)の考慮不足
・COBOLはあるキー項目単位に処理を行いデータ集計したり、あるキー項目単位にマッチング処理をしたりする事がよくありますが、この設定するキー項目に過不足があり、正しく処理が行われず不具合につながる事があります。
4.先頭、末尾の条件判定の考慮不足
・プログラムには、処理前に必ず条件判定を行う場合と、処理後に条件判定を行う場合の2つのパターンが存在します。この使い分けが正しく行われていない事により不具合が生じる場合があります。
プログラム不具合のケースとそれを取り除くためのヒント
先程プログラム不具合が起きるケースを具体的に取り上げましたが、実際のプログラムとその実行結果を確認しながら不具合が起きるケースとその取り除き方について考えてみましょう。
1.データ種の考慮不足
pgm_sample01.cob
入力ファイル(in01.txt)
出力ファイル(out01.txt)
このプログラムはファイルを読込み、そのファイルのデータ項目「IN01-SUJI」の値が10以下の場合、ファイル出力するという処理です。10以下の場合しか処理条件が記述されていませんが、10より大きな数字だった場合の処理についても考え記述しておくといいでしょう。例えば、エラー処理を行う、編集内容を変えてファイル出力する、何もしない事を明示的に記述する、などです。こうする事でデータロストや後処理での不具合を未然に防ぐ事ができます。
2.データ件数の考慮不足
pgm_sample02.cob
入力ファイル(in01.txt)
出力ファイル(out01.txt)
このプログラムは、「pgm_sample01」の28行目の繰り返し処理を削除したものです。ファイルのレコード数が1件想定ですが、複数レコード存在した場合も考え処理を記述しておくといいでしょう。例えば、エラー処理を行う、レコードをネグレクトする、などです。
3.キー項目(データ順)の考慮不足
pgm_sample03.cob
入力ファイル(in01.txt)
出力ファイル(out01.txt)
このプログラムはファイルをキー項目が変わるまで読み込みつつ、キー項目単位にデータを集計する処理になっています。今回キー項目として4桁(年)を指定していますが、この桁数の指定によって結果が大きく変わる事に気づくと思います。今回出力ファイルとして「202007」「030」の結果が出ていますが、「202007」「010」が正しい集計結果であるとも考えられます。この辺りの気づきを基にキー項目の正しさを確認するのも1つの手段です。
4.先頭、末尾の条件判定の考慮不足
pgm_sample04.cob
入力ファイル(in01.txt)
出力ファイル(out01.txt)
このプログラムは、「pgm_sample01」の28行目の条件を見直したものです。「TEST AFTER」指定する事で必ず1レコードファイル出力される事になりますが、「TEST BEFORE」を指定の場合、何もレコードがファイル出力されない事を確認してみてください。
プログラム不具合を取り除く、その他のヒント
プログラム不具合のケース、内容をご理解いただけたでしょうか?実践ではこれらのケースが複数複雑に絡み合う事もあります。そういった不具合をできるだけ事前に取り除くプログラム作成方法をご紹介したいと思います。
・頻繁に登場する処理をパターン化しておく
COBOL言語にはよく利用されるプログラムのパターンが存在します。例えばファイル操作です。1つのファイルを読み込み、レコード編集後、1つのファイルに出力する。1つのファイルを複数ファイルに分割する。複数ファイルをマッチング処理する、などです。これらよく利用するプログラムは予めテンプレート化して作成しておくと、プログラムのコーディング量を減らせるため、不具合が減らせるだけでなく、生産性高くプログラムを作成する事ができます。
・処理を階層化させない
繰り返し処理や条件判定処理は、複数階層もたせられますが、この階層が深くなればなるほど処理内容がわかり難くなり不具合につながってしまいます。できるだけ階層構造を持たないようなプログラムの記述ができないか考えてみましょう。
・処理実績があるものを利用する
プログラムは新しい記述が増えれば増えるほど、不具合が起きる可能性が増します。プログラム単位でも、処理単位でも構いません。既に処理実績があるものを利用できるのであれば、それを活用する事を考えてみましょう。不具合原因の特定時に、確認するプログラムの量が減るため、原因の特定を効率的に行う事ができるはずです。
・コメントを残す
プログラムは新しく作成するだけはありません。既に作られているものに手を入れる事もよくあります。自分以外の人がそのプログラムの動きについて理解が進むよう、処理概要や注意事項等コメントを残しましょう。そうする事によって不具合の特定を早めたり、不具合自体起きる事を防ぐ事ができます。
いかがでしたでしょうか?プログラムの不具合とその取り除き方について理解いただけたでしょうか?今回ご紹介したのは1つの例です。実践を積む事で徐々に不具合の傾向や対処法についても身についてくると思いますので、いろいろなケースに取り組んでみましょう。またインターネット上にも参考情報はあります。困った時は何か事例がないか探してみるのもいいかと思います。
この記事を読んだ人は、こちらの記事も読んでいます
あなたのCOBOL技術を活かしませんか?
COBOL入門のカテゴリー
1. 優良社員が多数在籍しています
2. 即日派遣、又は請負います
3. 安心価格で請負います
4. 同時、協力会社募集中です
1. 正社員
2. 契約社員
3. 個人事業主
などの 求人情報 が閲覧できます。
目指せ!COBOLダントツ一番企業。
創業当初の話や理念が閲覧できます。
応募条件
※2020年5月31日を以って、締切りました。
18歳~28歳の方。
正社員採用において、北川社長の著書『祈り方が9割』を読んで感想文を事前に提出すると、無条件で最終面接まで進むことができます。
COBOLとは、どのようなプログラミング言語なのか、初心者にもわかりやすく、文法の例をあげて解説してます。
COBOL入門の人気記事
- COBOL言語とは?プログラムの書き方やルールを解説!|基礎ガイド
- 【COBOL言語】条件分岐処理の代名詞「IF文」について知ろう|用語辞典
- COBOL言語の「MOVE文」とは?転記のルールをご紹介します|用語辞典
- COBOL言語の「STRING文」とは?文字連結の基礎知識と注意点|用語辞典
- 多枝分岐ってなに?COBOL言語の「EVALUATE文」を知ろう!|用語辞典
- COBOL言語の「PICTURE句」とは?基本事項を解説します!|用語辞典
- COBOL言語で計算処理をするなら「COMPUTE文」|用語辞典
- COBOL言語の「REDEFINES句」とは?使い方を確認しよう!|用語辞典
- 覚えておけば楽ができる?COBOL言語の「COPY文」の使い方|用語辞典
- COBOL言語の文字列操作のパターンを理解しよう!|基礎ガイド
- COBOL言語の初期化処理に重宝する「INITIALIZE文」とは?|用語辞典
- COBOL言語の「LOW-VALUE」の使い方について理解しよう!|基礎ガイド
- COBOL言語の「OCCURS句」について知ろう!学ぶべき基本とは|用語辞典
- COBOL言語初心者も安心! 難解「CALL文」をスッキリ解決|用語辞典
- COBOL言語の「PERFORM文」とは。実行制御について解説!|用語辞典
- COBOL言語の繰り返し処理のパターンを理解しよう!|基礎ガイド
- COBOL言語の「定数」の種類と使い方について理解しよう!|用語辞典
- COBOLのDBアクセスパターンを学ぼう!「FETCH」|応用ガイド
- COBOL言語の「DISPLAY文」は、ディスプレイ出力の為にある|用語辞典
- COBOL言語の「VARYING句」は便利?使用方法を学びましょう|用語辞典