ソフトウェア技術者のためのバグ百科事典(3)意外に厄介なデータ入力ミスのバグ山浦恒央の“くみこみ”な話(124)(2/4 ページ)

» 2019年12月10日 10時00分 公開
※本記事はアフィリエイトプログラムによる収益を得ています

3.データのバグ

 今回、取り上げるバグは、データ設定ミスによる「データのバグ」です。リスト1の例では、日本の成人年齢は20歳以上ですから、20歳(seijin = 20)という数値を初期設定しています※1)。誤って、「seijin = 19」と、19歳を成人年齢に入力すると、プログラム上で成人の年齢値が変わります。入場者の年齢が「19歳」の場合、入場料が2000円となり、意図しないパスを実行することとなります。

※1)成人とは、法的には、単独で法律行為が行える年齢です(内閣府では20歳と定義しています)。日本では(でも?)、「法律的な行為」は分野により、同じではありません。選挙権や運転免許は18歳以上、お酒や煙草は20歳以上、また、19歳未満の場合、手術では保護者の同意が必要になります。海外での成人は、18〜20歳が多いようです。なお、米国では、飲酒が可能なのは21歳以上です(20歳は飲酒できないので、20歳だからとパスポートを見せても、お酒を飲めませんのでご注意ください)。

 データの設定方法は幾つかあります。代表例は、「GUIから外部入力する」「プログラムにハードコーディングする」「テキストファイルなどの外部ファイルから読み出す」などがあります。いずれも、データ入力のミスにつながります。

 データのバグは、ロジックは正しいのですが(プログラムにはバグはありません)、データの設定ミスによるものが大半です。よって、プログラミング開発に関係するエンジニアの皆さんには、「ロジックが正しい。私は間違っていない」と堂々と言えます。プログラマーには、大きな問題とは思えないでしょうが、プログラムの流れは、データの設定値で流れるパスが大きく変わるため、出力結果は七変化します。

 この種類のバグに関し、筆者は、「私(プログラマー)が作ったロジックは正しい。単に、データを設定した他人のミスである」と斬り捨て、プログラムのロジックに何の対策もしないことは良くないと思います。

 下記に、筆者が思い付くデータのバグの例題を示し、細かく検討します。

  1. 金額計算が正しくない
  2. 制御系プログラムの動作が安定しない
  3. 文字化けする

3.1 金額計算を間違える

 EC系サイトでは、各商品に商品データ(商品名、価格、税率など)が設定してあります。そのため、データの設定値を間違えると金額計算が不正になる可能性があります。例えば、最近話題となった軽減税率の対象商品の設定値を間違えると、本来、消費税が8%の商品が10%となるため、合計金額を過大請求することになります※2)

※2)軽減税率とは、特定の商品を通常の税率より低く設定するものです。2019年10月の施行では、食料品や新聞などは8%、お酒は10%となりました。ただし、購入の形式によって8%と10%の境界線が分かりにくいのが問題です。

3.2 制御系プログラムの動作が安定しない

 制御系プログラムでは、さまざまなパラメータを使って制御対象を正しく動作させます。例えば、各種ゲインとリミッタの値で、誤った値を設定すると、制御対象が暴走する可能性があります。

3.3 文字化けする

 プログラムによっては、表示する文字(タイトル、ボタン名称など)を外部入力ファイル(CSVなど)から設定する場合があります。外部入力ファイルを使用する場合、文字コードや改行コードが指定と異なっていると表示が化ける可能性があるでしょう。

 上記の通り、たかがデータ値の設定ミスの話ですが、プログラムの出力結果が七変化する「厄介なバグ」です。以下に「筆者がやってしまったデータ設定のバグ」を紹介し、対策案をまとめます。

Copyright © ITmedia, Inc. All Rights Reserved.