![]() | ||||||||||||||||||||||||||||||||||||
Joel on Software このページは"ジョエル・オン・ソフトウェア
| ||||||||||||||||||||||||||||||||||||
|
※新しい翻訳はJoel on Software Translation Projectにあります。 その他の "Joel on Software" の記事(日本語) |
Joel Spolsky ジョエル・スポルスキ 翻訳: Yasushi Aoki 青木靖 2000/11/8 TRS-80 Level-I BASICはたった2つの文字列変数A$とB$しか格納できなかった。同様に、私は頭にたった2つのバグ格納スロットしか持たずに生まれてきたらしい。あなたが3番目を覚えさせようとしたら、1つは床に落っこちて綿ゴミと一緒にベッドの下に掃き込まれてしまうだろう。 バグデータベースを使っていることは優れたソフトウェアチームの目印になる。実際にそれをやっているチームがいかに少ないかということには、いつも驚かされる。大きな間違いはの1つは、プログラマがすべてのバグを覚えておけるとか、あるいはポストイットで管理できると信じていることだ。 しばらくあなたの耳を拝借できるなら、以前のアーティクル「やさしいスケジュール」と「やさしい機能仕様」の精神にのっとり、バグトラッキングのとても簡単なやり方について説明しよう。 何よりまず、本当のデータベースが必要だ。長い週末にちょっとしたコードを書いている2人のチームなら、たぶんテキストファイルでもデータベース替わりになるだろう。しかしそれよりも大きいプロジェクトでは、本当のバグトラッキングデータベースが必要になる。あなたの手に入るバグトラッキングデータベースはたくさんある。(あからさまな自己宣伝をすると、私たちがFog Creek Softwareで作ったFogBUGZという製品は、Webベースでとても使いやすく、非常に強力だ。自分でそう言って構わないなら。) 説明のため、ひとつのバグが誕生してから誰かがついにそれを苦難から救い出すまでの過程を見てみよう。私たちが追跡するのは有名なBug 1203だ。以下はこのバグに関するバグデータベースの内容だ。
起きたのはこういうことだ。 プログラマのミッキーは彼のいかしたMacintoshソフトの新しいFTPクライアント機能をハックしていた。ある時点でいい気になった彼は、自分のオリジナルバージョンの文字列コピー関数を書いた。うるさい再利用ポリスよ見るがいい!ガッハッハ! コードを再利用しないとまずいことが起きるんだよ、ミッキー。そして今日起こったまずいことは、ミッキーがコピーした文字列をゼロ終端し忘れたと言うことだ。彼がそれに気づかなかったのは、たまたま文字列をあらかじめ0で初期化されたバッファにコピーしていたからだ。 その週の後半に、それはそれは優秀なテスタのジルが額をキーボードの上で前へ後ろへと動かしながら、そのコードをガンガンたたき、言い換えれば過酷なテストをした。(ちなみにいいテスタの多くは名前がジルか、あるいはジリアンみたいなそのバリエーションになっている)。突然とても奇妙なことが起こった:彼女がテストに使っていたftpデーモンがクラッシュしたのだ。そう、それはLinuxマシンだったし、Linuxマシンが決してクラッシュしないというのは知ってるけど(slashdotの人たち、どうか騒がないで)、そいつはクラッシュしてしまったのだ。そして彼女はサーバには触りさえせず、ただミッキーのMacプログラムでファイルをFTPしただけだった。 さて、ジルはそれはそれは優秀なテスタで、自分がしていることを注意深く記録していた(たとえばキーボードの上で彼女が頭を動かすとき、その正確なピッチとヨーは、彼女の実験ノートに書き込まれているのだ)。彼女がすべて再起動し、きれいな状態でその手順を繰り返してみると、何ということか、再び起きたのだ!Linuxのftpデーモンが再びクラッシュしたのだ!これで1日に2回だ!聞いたかい、リーナス。 ジルは目を細めて再現手順のリストを見ていた。それは20ステップほどだった。そのいくつかは関係なさそうだった。いくつか実験して、ジルは問題の所在を4ステップにまで絞り込むことができた。さて彼女はバグレポートを提出する準備ができた。 ジルは新しいバグレポートをバグトラッキングデータベースに入力した。ところで、ただバグレポートを入力するのにも規律が必要だ。良いバグレポートと悪いバグレポートというものがあるのだ。 良いバグレポートが持っている3つのもの
良いバグレポートのルールを覚えるのは簡単だ。すべての良いバグレポートに必要なものは正確に3つだ。
簡単そうでしょう、どう?そうでもないかもしれない。みんないつも取り除けておいたバグを1つか2つ、プログラマの私に割り当てる。 もしあなたがバグの再現手順を言わなかったなら、私はあなたが何の話をしているのか分からないだろう。「プログラムがクラッシュして机に臭い糞みたいなものを残すんだ。」素敵だね、ハニー。君が何をやっていたのか教えてくれなかったら、私には何もできない。しかし、正確な再現手順を得るのが難しい2つのケースがあるのも確かだ。あなたは単に覚えていなかったり、ただ「現場」からのバグレポートを記録しているだけかもしれない。(しかし何でみんな「現場」(field)って呼ぶんだろう?ライ麦畑(field of rye)か何かみたいなもの?まあ何でもいいけど・・・) 再現手順がなくてもいいもう1つの場合は、バグが時々起きるが、いつも起きるとは限らないという場合だ。しかしその場合でも、再現手順を、それがそうたびたび起こるわけではないと言う注釈つきで書いておくべきだ。そのようなケースではバグを見つけるのはとても難しくなるが、それでも試みることはできる。 あなたが期待されることが何か示さなかったなら、何でそれがバグなのか私は理解できないかもしれない。スプラッシュスクリーンに血がついていた?だったら何?それを書いてたときに指を切ったんだ。何を期待してたの?ああ、仕様では血は出てこないことになってるって言ってるんだ!それで君がなぜバグだと思っているのかが分かったよ。 3番目は、代わりに何を見たか。あなたがそれを教えてくれなかったなら、私にはバグが何なのか分からない。これはすぐ分かることだと思う。 話に戻ろういずれにしても、ジルはバグレポートを入力した。いいバグトラッキングシステムは、それを自動的にプロジェクトの開発主任に割り当てる。これが2つ目のアイディアだ。どのバグレポートもそれが完了するまで、常にちょうど一人の人間に割り当てられていなければならない。バグレポートはホットポテト(厄介な問題)みたいなもので、それが割り当てられたとき、あなたはどうにかしてそれを解決するか、あるいは誰か別な人に割り当ててやる責任がある。 ウィリーは開発主任で、バグレポートを見て、それがたぶんftpサーバのせいだと判断し、それを「修正しない」として片付ける。なんと言ってもftpサーバを書いたのは彼らじゃないのだ。 解決されたバグレポートは、それを公開した人に割り当て直される。これが重要な点だ。バグレポートはプログラマが片付いたと思っただけでは片付かないのだ。黄金律はバグレポートを完了できるのはそれを公開した人だけだということだ。プログラマはバグレポートを「一丁あがり。」と言って解決することはできるが、しかし実際にバグレポートを完了させ、リストからはずすためには、それを公開した人が実際にフィックスされたことを確認するか、あるいはそれが何かの理由で直す必要がないということに同意する必要がある。 ジルはバグレポートが彼女のコートに打ち返されたことを告げるemailを受け取る。彼女はそれを見て、開発主任ウィリーのコメントを読む。どうも正しくなさそうだ。みんなそのftpサーバを何年も使っていたがクラッシュしたことはない。それがクラッシュするのはミッキーのコードを使ったときだけだ。それでジルはバグレポートを再開して彼女の考えを説明し、バグレポートはウィリーに送り返される。今度はウィリーはバグを修正するようにミッキーに割り当てる。 ミッキーはバグを調べ、長い間熱心に考え、そして完全な誤診をする。彼は全然違うバグを修正し、ジルが公開したバグレポートを解決する。 バグレポートはジルに戻され、今回は「解決-修正済み」とマークされている。ジルが最新のビルドで再現手順を実行すると、何ということか、Linuxサーバがクラッシュするのだ。彼女はバグレポートを再び再開し、直接ミッキーに割り当てる。 ミッキーはまごつくが、最後にはバグの原因を突き止める。(まだ分からない?これは読者の練習問題に残しておく。十分なヒントは与えたはずだよ!) 彼はそれをフィックスし、テストし、そして--やった!再現手順はもはやftpサーバをクラッシュさせない。もう一度彼は「修正済み」としてバグレポートを解決する。ジルもまた再現ステップを実行し、バグがちゃんと修正されているのを見て、それを完了させる。 バグトラッキングのための10のヒント
もしあなたがチームであれ単独であれコードを開発しており、コードの中の既知のバグをすべてリストアップした組織化されたデータベースを持っていないのなら、単に低品質のコードを出荷することになるだろう。良いソフトウェアチームでは、バグデータベースは広く使われているというだけでなく、人々はバグデータベースをto-doリストとして使うようになり、そして彼らはWebブラウザのデフォルトページを彼らに割り当てられたバグレポートのリストに設定する。そして彼らはマウンテンデューをもっとストックして置くようにというバグレポートを、オフィスマネージャに割り当てたいと思うようになる。 この記事の原文(英語)は Painless Bug Tracking です。 | |||||||||||||||||||||||||||||||||||
![]() ジョエル・スポルスキは、ニューヨーク市の小さなソフトウェア会社 Fog Creek Software の設立者です。イェール大学を卒業後、マイクロソフト社、Viacom社、 Juno社でプログラマとして働きました。 | ||||||||||||||||||||||||||||||||||||
このページは著者の個人的な意見を掲載したものです。
All contents Copyright ©1999-2005 by Joel Spolsky. All Rights Reserved.