ブログは死なず、ただ放置されるのみ。

終わっちゃいましたね。

正しい人がバカを見ないために

260万人の朝の足を直撃 プログラムに潜んだ“魔物” - ITmedia ニュース で首都圏の通勤がマヒした件について、どんな不具合があったのか想像してみる。ちなみに私はこの手の業界とは全く関係ない仕事しかしてないので、全ては想像もしくは妄想ですのでご注意。

ネガデータに「ある長さ、ある件数」といった条件が重なった時、データが読み込めなくなるプログラム不具合が判定部側にあることが判明。このため、判定部はエラーを返しながらネガデータ読み込みのリトライをひたすら繰り返す状態に陥り、起動処理が止まった。

一つ目は、ネガデータに「ある長さ、ある件数」といった条件が重なった時という記述を読むと、つまりはメモリリークなんじゃないかと思ったりするんですが、どんなもんなんでしょうね。改札機って不正カードIDを、改札からタッチ・アンド・ゴーしているわずかな時間にマッチングしないといけないわけで、データ構造は高速処理のために最適化されているだろう。しかも不正カード情報は後から追加・変更・削除が逐次あってリアルタイムで更新しないといけない。だからインデックス化もむずかしいだろう。だから、今回は最悪ケースになったんだけど、実際には不正IDだけど通してしまうとか、不正IDじゃないのに通せんぼされた場合とか、あるのではないかと思っていたりする。

二つ目は、判定部はエラーを返しながらネガデータ読み込みのリトライをひたすら繰り返す状態に陥り という部分、ここについて疑問があるのは、ネガデータとは不正カードをはじくための処理であって、重要なのはわかるのだけど、それは正規カード利用者に対して負担が伴わないレベルであるべきだと考える。そして「もしネガデータの読み込みが失敗した場合」の処理として、もっともな仕様は「ダウンロードしたネガデータを破棄し、センターに読み込み失敗を通知して起動」であるべきではないのか。そうすれば、すくなくとも正規カード利用者へは問題は発生しなかったはずだ。

1つ目の問題は、おそらくは技術的に問題で、不正IDマッチング処理の際にどっかのデータをぶち壊したせいで改札や窓口機が動作しなくなったのだと想像してるけど、ETCは不正カードを性能の問題から100万カードしかマッチングできないと聞いた覚えがある。不正なカードってそんなにあるのかと当時は驚いたものだが、Suica とかも同じようなものではないかと思っている。ここはがんばってちゃんと動くものを作ってください、としか言えない。

でも2つめの問題は「もしネガデータの読み込みに失敗したらどうなるか?」ということに対し、正しく設計もされておらず、テストもされていないことを意味している。仕様に対して動くか・動かないか、は、まあそこそこのスキルのある技術者であれば問題なくできるだろう。でも「もし起こりえないことがあった場合に、どうするべきか」に対して、「被害をこうむるべきでない人に迷惑をかけない」方向にちゃんとデザインし、またテストする、ということは重要なことだ。

今回の件は、おそらくは日本信号が自分で開発したのではなく、どこかのソフト系の会社に開発委託したのではないかと邪推しているのだけど、こういうのは見るべき人が見ればレビューで落とせるものだし、そうであるべきなんじゃないかと思ったりしました。

hanadix のお気に入りストア - システム開発