プログラミングに付き物の「バグ」を直せるようになるには? を考える記事の2回目です。
デバッグがうまくいかないと、砂の上に城を建てるように、土台がもろく、倒壊しやすいプログラムができてしまうことは前回も触れたとおりです。
たいていのプログラムは、コーディングから時間を置けば置くほど「素人=プログラムに詳しくない人」が触れるようになるため、詳しく的確なバグ報告を求めること自体に無理がある場合が多くなります。
そのため、バグの発見と修正は、とにかく早くやることが大切です。続く作業のためには早期のバグ修正は欠かせませんし、プログラマー自身の精神の安定を保つためにも必要なことです。
では、どうしたらより早くバグを発見し、そして修正できるのでしょうか?
自己テストの問題
書いたコードをすぐに自己チェックするとか、過去に発生させたバグを踏まえてプログラミングする、といった「当たり前」のことをお話しする必要はないでしょう。そういった方法をとることで、軽微なバグは逸早く発見できますし、そして自分で見つけたバグは原因がどこにあるかもわかりやすいので修正も比較的容易です。
でも、もう一歩踏み込まなかれば見つからない「奥深いバグ」にはあまり効果がありません。自分で作ったプログラムを自分でテストすることには、「作った本人は、うまく使えてしまう」という問題があるからです。
"あるプログラム"に初めて触れるユーザーは「最善手」を知らないので試行錯誤をするうちに最適ではない、不必要な操作を行なうことがあり、それがバグ発見につながることがよくあります。でも、プログラマー本人はかなり意識的にやらないと、同じことができません。
だからこそプログラマー本人ではなく他のスタッフがテストを担う体制が必要とされるわけですが、「それでは遅い」というのが今回のテーマですから、やはり「ひとまかせ」にはできません。
すると、答えはひとつ「自分が他人になる」しかありません(!?)
いかに他人をマネできるか
だからといって頭を強打して記憶を消すような過激な手段をとってはいけません。発見したバグを修正することもできなくなりますからね。
必要なのは、いつもの自分とは違う他人の行動をマネできるようになることです。そして、そのために役立つのが過去の他者からのバグ報告です。
過去のバグ報告を「同じバグを発生させないため」に活用するのはよくあることですが、それとは別に、ユーザーが「どんな意外な操作を行なったか」を記憶しておくことが大切です。
例えば名前と住所、メールアドレス等を入力するフォームがあったときに、一部のユーザーは「必須項目を記入せずいきなり[送信]を押す」とか「半角で、と書いてあるのに全角文字で記入する」とか「なぜか項目をひとつずつずらして記入する」といった行動を取ることがあります。こういった「誤った操作」は、正しい手順をとることを重視するプログラマーにはなかなか想像できません。
でも、過去の経験から「ユーザーがどんな行動をとるか」を知っておけばバグ発見の機会は増えますし、初めから多くのユーザーにわかりやすい設計にするためにも役立ちます。
なお、上記の例「ひとつずらして記入する」は、わかりにくい画面レイアウトなどが原因で実際に起きることがある問題ですが、結果的にメールアドレスの欄(短い)に住所(長い)を書こうとして「住所を記入しきれない!」というバグ報告につながります。
このような報告があったとき、当然プログラマーはまずバグを再現するため「住所欄」に長い住所を記入してみることになりますが、もちろんなんの問題も起きず長い住所を書ききれることでしょう。
これを「再現性のない、ウソの報告」として破棄してしまわずに「なぜ、こんな報告が来たのか」を考えてみることが、自分の"デバッグ力"を磨くうえで役立ちます。
「いいかげんな報告をしやがって!」「きちんと確認してから報告しろ!」と立腹する気持ちはよ~くわかるのですが、そのような"怒れるプログラマー"には得られないものがあるのです。起きるわけがないバグに"うんざり"させられたとしても、報告者に話を聞いてみることはきっと無駄にはなりません。
(つづく)










