検索
連載

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

ソフトウェア技術者に向けて、バグに関する基礎知識をまとめていく新シリーズ「バグ百科事典」。第3回は、ある意味プログラマーにとって理不尽で、意外に厄介でもある「データ入力ミスのバグ」について解説します。

Share
Tweet
LINE
Hatena
※本記事はアフィリエイトプログラムによる収益を得ています

4.筆者のやってしまったデータ設定のバグ

 筆者が昔、Web系ソフトウェアを開発していた時のことです。プログラムの作成を終え、テストデータとして顧客データを作成していた時のことです。テストデータの原案は、顧客から提示があり、筆者はそれをデータベースに入る形式に整形する必要がありました。例えば、重複を削除したり、性別を数値に直したり、郵便番号を2つの項目(例:「123-4567」→「123」、「4567」)に分割するなどです(表1参照)。

No 氏名 年齢 性別(0:男 1:女) 郵便番号1 郵便番号2
1 山田一郎 30 0 111 1111
2 神田優子 40 1 222 2222
3 田中守 19 0 333 3333
表1 顧客データ

 変換では、CSVファイルをExcelで開いて手作業で行っていました。自動化プログラム(VBA)を作成するか迷いましたが、1回限りだろうと考えExcelの機能で何とかしようと考えました。

 一通り、データの整形を終えたため、これをデータベースに入れ込み、顧客に確認を依頼しました。初日は「問題なし」と回答をもらいほっとしていたのですが、次の日、以下の調査の連絡が入りました。

  • ありえない値が表示される
  • あるはずのデータがない

 初めは、プログラムを変更したばかりなので、プログラムのバグを疑いました。ですが、もう一度もともとのファイルを確認すると、間違ったデータを削除したり、データの並び順を間違えていたりしたのです。プログラムのロジックは正しかったのですが、データが不正でした。

5.対策と兆候

 データ設定系のバグを引き起こさないための対策案と兆候を以下に示します。

5.1 対策

5.1.1 データ整形プログラムを作成する

 データのバグを防ぐには、可能な限り人力作業を減らすことです。このバグの原因の大半は、プログラムではなく人間が原因なのです。よって、今回の例では、手作業ではなく整形プログラムを作成するべきでした※3)

 プログラムを作成すると、再現性があるため、どのような手順で整形したか追っていくことができます。人手を使うと、どこで間違ったか分からなくなりますので注意しましょう。筆者は、上記の「4.筆者のやってしまったデータのバグ」の後、整形用プログラムをVBAで作りました。

※3)整形プログラム自体にもバグがある可能性があり、過信するのは危険です。

5.1.2 複数人によるチェック

 データを作成した後は、書式(全半角、小数点の有効数字)まで確認し、複数人でチェックしましょう。1人で作成していると、細かな値のミスに気付かない可能性があります。少なくともダブルチェックをしましょう。

上記の「4.筆者のやってしまったデータのバグ」を発見したのは、顧客でした。顧客は、データの意味をよく知っていますし見慣れています。協力を依頼して、発見に努めましょう。

5.1.3 差分検出ツールを使う

 データの変更前と、変更後をしっかり確認しましょう。ネット上には無料で優秀なDiff(ファイル比較)ツールがあります。差分を確認し、修正前と修正後が正しいか確認しましょう。ここでかなりの間違いが見つかります※4)

※4)筆者は、WinMergeという差分検出ツールをよく使っています。フリーソフトですし、非常に優秀です。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る