バグとミス
緊急地震速報の誤報は、結構話題になっているようだ。
結論は、業者が勝手にプログラムを改修したことが原因だったらしい。
時事通信より
————-
全国237カ所の震度計の機能強化のための改修を明星電気(本社・群馬県伊勢崎市)に委託。初日の24日は、誤ったデータを送った千葉県南房総市の観測点など4カ所のソフト改修作業を行ったが、この際、同庁が依頼していなかった緊急地震速報処理機能についても作業が行われた。
同社担当者から話を聞いたところ、地震波の振幅の小数点以下が切り捨てになっているのを、四捨五入の方がいいと判断して改修。この際に単位を誤り、過大な振幅データが送られるようになったという。
————–
http://www.jiji.com/jc/c?g=soc&rel=j7&k=2009082500836
これは、ずさんだ。
この記事を鵜呑みに理解したら、明星電気は、プログラムテストを行っていないと言うことになる。
切り捨てから四捨五入に変更は、ある意味正しい判断だと思われる。
しかし、プログラムを書き換えたら、デバッグを行い、その上テストを実施しなきゃ。
この程度の内容なら、デバッグで見つかると思う。
そもそも、あり得ない数値が結果として戻ってくるのだから、気が付かないわけがない。
それを気が付かず、差し替えを行ってしまうのだから、デバッグもテストも実施していないと言うことになる。
この状態で、「不具合」とか「バグだ!」と言う人がいるが、これはミスであって不具合やバグではない。
結果としては不具合ではあるが、人為的ミスと言った方が正しい。
バグとは、デバックもテストも行い、なおかつ本番で稼働していて、一見問題ないように稼働しているが、特定の条件で、特定の操作を行うと再現できてしまったなどの、まるで予期できない状況で発生する、プログラムの不具合の事を指している。
そのため、テストを行っても、本番で問題なく稼働し、気が付かないケースが多い。
しかし、今回の場合は、1回でもテストをすれば、見つけだせる範囲だと思う。
最低なプログラマが犯す、過ちの代表例である。
で、思いつくことは、本当は別の原因が存在するが、あまりに初歩的ミス過ぎて、発表できない。そのため今回のような理由を思いつき、「これで行こう」と判断した人がいるのでは無いかと言うこと。
いずれにしても、本番切り換え時に、入念なテストが行われなかったことが、一番の原因だと思う。
JR東日本も2008年末に、プログラムの仕様ミスで新幹線が稼働させられなかった事故があった。
1,午前5時までに入力したデータが当日のデータとして保存され、そのデータを基に列車を走らせる。
仕様としては問題ないと思う。
2,午前5時以降に入力したデータは、翌日のデータとして保存される。
ここも仕様として問題ないと思う。
で、年末に起こったこと
雪でダイヤが乱れ、定位置に列車が揃っていなかった、そのため全列車の停車位置や、そのほか必要な情報を、徹夜で入力していた。全データが入力終わったのが午前5時過ぎ。
始発が6時なので、職員は「やったー!何とか始発に間に合ったぞー。ふぅー疲れたぁ、お疲れー。あとは6時の始発を待って、微調整をすればOKでしょう」と思ったに違いない。
それ以上に「ふふふ、俺たち職人だぜ、始発まで間に合わせた。ポッポやとはこういう仕事のことを言うんだぜ、後輩達よ。」と責任感と達成感に溢れていたかもしれない。
これも問題ないと思う。
ところが、6時始発を迎えてみると、データが反映されない、それどころが白紙状態でデータが無い。
職員は、さぞかし心臓が止まるほどゾッとしたことだろう。
そこで、再度すべてのデータを再入力し、スタートさせるも、同じ状態でデータが反映されない。
これもいい判断だと思う。
「まずは自分たちを疑え」という基本が出来ている。
一晩掛かったデータ入力を、今度は2時間ほどで終わらせている。
さっきの職人魂が溢れている。
それからが大変だったろう、導入当初の担当者など存在せず、納入業者もすでに担当者は過去の人。
その過去の人たちを探しだし、仕様を確認し、原因を見つけることにした。
そこでわかったことは、先の「午前5時を境に、自動的に反映日時が決定されること」だった。
その上、入力時に「反映日時の確認画面が存在しない」「反映日時の設定が出来ない」という仕様の欠落だった。
いや、もっと言えば仕様の欠落に気が付かず、この二点を実装しなかったプログラマーの問題でもある。
そこで解決策を考えて出されたやり方が「サーバーの日時を過去の日時に変更し、データを入力すること」だった。
過去の人間の不誠実を押しつけられた感じが拭えない。
大手デベロッパーの下請けをしている友人などの話を聞いていても、まともに稼働しているシステムの少ないこと。
破綻を来しているプログラムをさらに改修し、見た目だけでも動かして納品し、さらにそのプログラムの改修に別のベンダーを指名する。指名されたベンダーは、1からプログラムを読み直し、さらに改修し収拾がつかない状態で納品。
これらが延々と繰り返されている。
職人プログラマーなど、夢のまた夢。
使い捨ての人材ばかり育成している気がしてならない。