SE Can't Code

A Tokyo based Software Engineer. Not System Engineer :(

歴史上最も高くついたバグ。

f:id:fixxman:20150911000313g:plain

アリアン5というロケットが発射された直後に爆発した事件がある。
1996年にアリアン5のフライト501は、コンピュータ内の計算ルーチンにあった、64bitの浮動小数点数を16bitの符号付き整数に変換する処理の際に、数字が16ビット符号付整数として保存できる最大値の32,768を超えてオーバーフローを起こし、エラーとなってコンピュータがクラッシュした。ロケットはそのまま空中分解することとなり、約3億1700万ドルが空に消えた。これは歴史上最も高くついたバグと言われている。

通常こういった不正な変換計算に注意を払ってトラッキングするためにコードの中でチェックが行われる。当然、アリアン5にもアサーションは仕込まれていて、打ち上げの際にもアサーションがトリガーとなってクラッシュを回避出来たはずだった。アリアン5はアサーションの失敗に対して、優れたリカバリ構造を持っていた。しかし、アリアン5は性能上の問題によってそのアサーションが無効化され、バグを検知することができずに終わった。

このようなミッションクリティカルなシステムは特にバグについて注意と予防線を張らなければならない。
僕は一番最初にアサインされたプロジェクトがミッションクリティカルなシステムであったけれども、それ以降はバグが出て止まったとして大惨事にはならず、お客さんの怒号が飛んでくるぐらいだ。とはえばバグは精神衛生上良くはないので、頑張って枯らすことに努力している。バグは基本出るもので、その時に早急に解析出来るかが問題となってくる。デバッグはそのための強力なツールである。 ということで、最近はデバッグについて改めて勉強している。

Remove all ads