バグゼロを望むのは「ゼロリスク症候群」と同じ

“Hello World” 程度の簡単なものならともかく,(残念ながら)バグを完全に潰すのは不可能だと言われている。もちろん様々な手法を使えば減らすことはできる。でもゼロにすることはできないし,無理にしようとすればコストとして跳ね返ってくる。 Google のような技術的先進企業でさえ,自身のアプリケーションのセキュリティ・バグの発見に報奨金を払わざるをえない(つまり自力では突き止めきれない)のである。これはリスク・マネジメントの考え方と同じ。

ならばどうするのかというと,バグをゼロにするのではなく,(要求に対する)逸脱をゼロにするのである。これについては大昔に記事を書いたことがある。

「逸脱がない」ことは「バグがない」こととは違います。 ソフトウェアの性質上「バグがない」プログラムを作ることは(それが大規模であればあるほど)至難の業です。 しかし「逸脱がない」プログラムを作ることは「バグがない」プログラムを作るよりもはるかに楽です。 何故なら「逸脱がない」プログラムを目指すことでエンジニアの責任範囲が有限になるからです。 顧客は「要求」に対して責任を持ち, 作り手であるエンジニアたちは要求に対して「逸脱がない」ことで自らの責任を果たします。 責任を分担しているわけです。

きちんとリスク分析と評価を行った上で設計・製造を行えば,仮にバグが存在しても運用上問題のないレベルまで抑えこむことができる。エンジニアも人間。無限の責任を負うことはできない。有限のリソースで如何に効果的に物事を進めるか。これが「設計(design)」である。

(某国立競技場に対する皮肉じゃないですよw)