Windows 秘話効率よりも苦労を

Raymond Chen

ソフトウェア開発者にとって、Windows エラー報告を使用する大きなメリットの 1 つは、プログラムでどのようにエラーが発生したのかについての実情報を入手できることです。このようなエラー報告は、winqual.microsoft.com にオンライン登録したすべてのソフトウェア ベンダに公開されています。ラボを使用してさまざまな種類のテストを実行することは可能ですが、ラボの条件と実環境の条件が同じになることはありません。この差異により、ラボで行ったテストで発生しなかったバグが実環境で発生して、顧客を怒らせる事態を招くことがあります。

数年前、あるプログラマから次のような話を聞きました。彼は、開発に携わっている製品の信頼性チームから作業を依頼されました。このチームは、特定のコンポーネントがクラッシュしたり、ハングしたりする主要原因に対応する必要がありました。何度か話し合いを重ねた結果、彼とこのチームは、このような障害を半数に削減するという目標を掲げることに合意しました。Windows エラー報告で収集された、そのコンポーネントの少なくとも 50% のクラッシュやハングの原因になるバグを修正するつもりでした。

ご存じのとおり、エラーの発生頻度はエラーによって異なります。めったに発生しないものもあれば、よく発生するものもあり、(相対的に言うと) 非常によく発生するものもあります。エンジニアリングでは、さまざまなものを天秤に掛ける必要があります。時間、お金、知力という限られたリソースを与えられ、最大の効果を得られるところにリソースを割り当てる必要があります。ここではクラッシュとハングの数を減らすことを目標としていたので、Windows エラー報告で報告された最も一般的なエラーを調査し、根本的な原因を特定して、このような一般的なエラーに対応することが、堅実なアプローチでした。

fig00.gif

Windows エラー報告では実環境で発生したプログラム エラー情報が提供される (画像をクリックすると拡大表示されます)

このプログラマがエラー報告のデータを詳しく調査したところ、ある 5 種類のクラッシュとハングがエラー報告の 60% 以上を占めていることがわかりました。この 5 つのエラーの原因となっているバグを修正することができたら、目標とする 50% を大幅に上回る 40% までクラッシュとハングの数を減らすことができます。

マイクロソフトが独自に Windows エラー報告データを分析した結果によると、Windows のクラッシュとハングの経験則は、「バグの 20% がエラーの 80% の原因である」というパレート原理を見事に反映したものであることがわかりました。また、「たった 1% のバグが 50% のエラーの原因になっている」という驚くべき事実も判明しました。すべてのバグが同じように発生しているわけではありませんが、発生頻度にこれほど開きがあるのことには、とても驚きました。

この 5 つのエラーについて調査を進めたところ、このプログラマは、すべてのエラーの根本的な原因が同じであることに気が付きました。これらのクラッシュやハングは、同じバグが違う形で現れていただけでした。ですから、品質保証チームと協力して、このバグの修正方法を考案してテストし、次の修正プログラムに含める作業に取り掛かりました。1 つのバグの修正で、このコンポーネントの理論上のエラー発生率は即座に 40% にまで落ちました。こうして、彼の任務は 1 つの非常に簡単なコードの修正で完了しました。

この話を聞いたとき、そのコンポーネントのエラー分布曲線の勾配が Windows のものよりも急であったことに驚きました。つまり、すべてのクラッシュとハングの半数以上が 1 つのバグが原因で発生していたということです。このようにコードを明確に理解することは、Windows エラー報告のようなものによって集められたデータなしでは、成し得なかったでしょう。

信頼性チームがこのように非常に短時間で目標を達成したことに有頂天になると思われるかもしれません。何しろ、取り決めた目標は、1 つの修正を行うことでたったの 2 週間で達成されたのですから。しかし、信頼性チームは激怒しました。

「これは 2 か月かかるはずだったのに、こんなに早く終わるなんて受け入れられません。簡単すぎたみたいですね。」どうやら信頼性チームは、このプログラマが、効率的に作業を進めるのではなく、もっと苦労することを望んでいたようです。

Raymond Chen は自分の Web サイト「The Old New Thing」および同じタイトルの書籍で、Windows の歴史と Win32 プログラミングについて扱っています。彼が持っている服の 20% が、彼の洗濯物の 80% の原因となっています。