バグは至るところに、しかも堂々と潜んでおり、自信満々なプログラマーほど、目の前のバグに気付かないものです。「バグ検出ドリル」の第19回の問題は、商品と個数から合計金額を求めるプログラムのバグです。なぜか1円だけ合わない、このバグの原因を突き止めよう!
本連載では、エンジニアのバグ検出力の向上を目指し、バグ入りの問題を出題して読者のみなさんに見つけていただいています。少しずつ、バグを見つける嗅覚が身についているでしょうか。今回は、いつもより気楽に取り組める内容にしました。問題に挑戦していただき、明日のソフト開発につなげてください。
ソフトウェアを作成し、顧客に納入すると、顧客は受領テストを実施します。この時、特定の入力条件で発生する不思議なバグが見つかることがあります。エンジニアは非常に焦りながら、さまざまな入力条件を調べ、原因を特定し、顧客に報告します※1)。原因が分かってしまえば、非常に単純なのですが、顧客の不信感を払拭することは、簡単ではありません※2)。
※1)今回のメインテーマではありませんが、筆者が焦ったバグの1つが「実装抜け」です。仕様を一通り実装し、マネジャーに自信満々に「作成完了しました」と伝えた数時間後、異常ケースを実装していないことが分かり、慌てて追加しました。実装抜けは、意外なことに、要求仕様系で最も多いバグです。非常に厄介で、最後の最後まで注意しましょう。
※2)いったん顧客サイドでバグが見つかったときに、うるさく言われることの一つが「その他の類似バグはないか」です。ソフトウェアには、類似の箇所が多くありますので、顧客の心配につながります。バグが見つかったら、類似のバグが無いか考えてみましょう。
類似バグを探すポイントとして、まず、「同じ設計者が作った他のプログラム」「よく似た機能」の2点をチェックしましょう。さらに、「なぜ、そんなバグを作ってしまったかの原因を調査し、同じ要因で作ったプログラムを見直す」といいでしょう。バグを作ったのは、「時間がなくて、十分に考えなかった」であれば、同様に、やっつけ仕事で設計した箇所をチェックする必要があります。「十分考えたのに、バグを作りこんでしまった」は根が深そうですね。大きな勘違いがあり、他の箇所でも、同じような「勘違いによるバグ」がありそうです。以上のように、「同じ設計者」「類似の機能」「類似の原因」の3点をキチンとチェックし、レポートにまとめれば、顧客も(かなり)安心してくれます。
今回は、筆者が過去に経験した、特定の入力条件で発生する不思議なバグを題材にしました※3)。問題の内容はシンプルで、プログラム内に定義した商品価格と個数を読み取り、合計金額を求めるだけの簡単なものですが、1円だけ結果が合いません。皆さんには、その原因を見つけていただきます。
会計処理のソフトウェアでは、たかが1円の違いが大問題に発展します。今回の問題を取り組んでいただき、1円の重要性を感じていただければと思います。また、問題にはひっかけ要素がありますので、さまざまな観点から考察してください。
※3)「不思議なバグ」と書いてありますが、原因が分かってしまえば「当たり前のバグ」です。原因が分からないから不思議なのです。
Copyright © ITmedia, Inc. All Rights Reserved.