2006-02-28

[][]原因不明のバグが出てしまったときには 原因不明のバグが出てしまったときには - Nao_uの日記 を含むブックマーク はてなブックマーク - 原因不明のバグが出てしまったときには - Nao_uの日記 原因不明のバグが出てしまったときには - Nao_uの日記 のブックマークコメント

再現性の低い原因不明のバグが起こってしまったとき、原因がよくわからないからといってとりあえず再現するまでひたすら試してみるようなやり方はとても効率が悪い。

まずはバグが起こったときの情報からその状況を起こし得る原因を全て列挙し、それらの中から可能性が高そうな順に効率の良い再現方法を検討したり、ソース上でその事象が起こる可能性があるかどうかをチェックした方が、闇雲に再現を試みるよりもずっと楽で確実。

また、こういったトラブルが起こったときのためにも、起こり得ない事象や怪しい挙動が起こったときにはエラー情報をログにできるだけ多く出力するようにしておくことで、バグが起こったときの状況の把握が容易になる。ログの情報を元に適切に問題の切り分けを行うことで、原因究明にかかる時間を大幅に減らすことができる。

余裕がなくなってきて慌てるとこういうあたりまえの事を忘れてしまうことがあるので、注意したい。

[][]過誤を減らす方法 過誤を減らす方法 - Nao_uの日記 を含むブックマーク はてなブックマーク - 過誤を減らす方法 - Nao_uの日記 過誤を減らす方法 - Nao_uの日記 のブックマークコメント

ミスを防ぐための構造が最初から組み込まれている機械がある。製造業で使うプレス機は、左右のスイッチを同時に押さないと作動しない。両手を使わないとできない作業なので、プレス機に手を挟むことを防ぐことができる。医療現場ではCTがそう設計されている。スキャナーの角度を変更するスイッチは中にしかないので、必ず患者のそばにいないと操作ができない。このことで、機械が患者をつぶすことが無いよう配慮している(某社のは離れたところから簡単に角度変更ができる。子供のCT撮影を見たことがない人が設計したとしか思えない。)。

機械やシステムに異常が発生すると、安全な方向に作動する設計をしているとエラー対策は強力になる。昔の腕木式の信号機は遠くからワイヤーで操作したが、ワイヤーは一定の確率で切れる。ワイヤーが切れると信号機は「止まれ」のまま静止するようにできており、ワイヤーを修理するか、係員が手信号を出すまではすべての列車は停止せざるを得ない。

ミスやエラーはどんなに注意しても必ず起こってしまうものなので、最初からそれを起こし得ないようなデザインにしたり、万が一起こってしまったときにも安全が保証されるように普段から工夫しておくのがいいのだろう。

[][]究極のドッグフーディン究極のドッグフーディング - Nao_uの日記 を含むブックマーク はてなブックマーク - 究極のドッグフーディング - Nao_uの日記 究極のドッグフーディング - Nao_uの日記 のブックマークコメント

「己のドックフードを喰らう」 (eat one's own dog food) という喩えがある [Wikipedia] 。これは,開発者が製作物を自ら使用する行為を意味する。開発者がユーザーの立場に身を置くことによって,ユーザーとの間にある距離を縮め,製作物に対する理解を深める。ユーザビリティを改善するプロセスにおいて重要な概念のひとつであると言える。

この「ドッグフード」という表現は,不味くて不快なものを喩えている。既に市場にある完成された製品を捨て,敢えて不完全なものを使うには,ある種の自己献身の精神が必要となる。例えば社内で新しいウェブブラウザを開発しているとして,その発展途上のバージョン ― 10分毎にハングアップするような代物 ― を日常的に使いたいと思うだろうか? 「ドッグフーディング」の精神に従うならば,この「不味いもの」を敢えて食らう覚悟を持たなくてはならない。



SawStop はテーブルソー(机型の電動丸ノコ;画像参照)の安全装置として発明された。テーブルソーは木工に欠かせない機械だが,見て分かる通り非常に危険な機械でもある。アメリカ国内だけでも年間に約6万人もの怪我人を出しており,そのうち約3千人は部位の切断に至っている。

1999 年のある日, Gass 氏はあるアイデアを思いついた。木材と人体の間にある静電容量の違いを利用して安全装置を作成することはできないだろうか。静電容量の違いは丸ノコの歯に電気信号を流すことによって検出することができる。あとは,人体への接触を検出した瞬間に丸ノコを停止させる強力なブレーキを用意すればよい。

Gass 氏はいくつかの技術的問題を解決したのちにプロトタイプを作成し,ホットドッグウインナーを使って実験を繰り返した。この実験は見事に成功したが,「ウインナーに対する安全装置」は誰も必要としていない。 Gass 氏は自らの手を使って安全装置の作動を確認する必要に迫られた。

― 2000 年の春の午後, Gass 氏は作業場に立ち,唸りを上げて回転する丸ノコの歯に向かって自らの薬指を突き入れるべく,闘志を呼び覚まそうと試みた。氏は切り傷による痛みを和らげようと,ノボケイン・クリーム(局部麻酔薬)を指に擦り込んだ。最初の挑戦,心臓が猛烈に鳴り響く中,指を近づけはしたものの触れる前に引っ込めてしまった。数分後,氏は再び挑戦する。今度はうっすらと赤く跡がつくぐらい近くまで指を進めることができたものの,うろたえてブレーキが作動する前に引っ込めてしまった。次の挑戦では,緊張から腕が痙攣を始めてしまった。もはや自らの手を固定することさえ難しい。それでも,三度目の挑戦を行うべく神経を集中させた ― すると,ついに歯は止まった。それはまさに氏が思い描いていた通りだった。

SawStop は素晴らしい発明のように思われるが,既存産業との間の軋轢などがあり,未だ広く普及するには至っていない。自動車のエアバッグなどがそうであったように,たとえ安全性を向上させることが明白であったとしても,そのコストを産業が良しと考えない限りは,広く普及することはない。

― Gass 氏は諦めることを拒んだ。氏の経営するポートランド法律事務所の3人の弁護士と協力し,15万ドルを掻き集め,更に洗練されたプロトタイプを構築し, 2000 年 8 月にアトランタで開催された国際木工フェアに参加した。そこでの反応は驚くべきものだった。 SawStop のブースは観衆で埋め尽くされ,観衆の注目はテーブルソーに次から次へとウインナーを突き入れる Gass 氏とその仲間の姿に注がれていた。「後で,その人たちが上がってきて言うんです ― 『あなたと握手がしたい』って」。仲間の一人である David Fanning 氏はそう回想する。「その人たちの多くは,2・3本の指を失った手で握手をしてきたんです」。

まさに究極・・・。ここまでやれるのは凄い。