正しいコードを正しく書くこと
【正しいコードを正しく書くこと】 接触確認アプリ「COCOA」の不具合についての 調査報告書 を読んだ。少し、暗い気持ちになる。 不具合についての経過はこうだ。主に、二つの段階があった。 第一。「1.1.3 バージョン以前」 陽性者と「単なる接触」があっただけで通知が出てしまう不具合があった。 この不具合は、昨年8月ごろには、すぐに気づかれていた。なぜなら「市役所や企業で大量通知が発生して、保健所検査負担が増加する一方、ほとんど陽性者は出ないということで、大きな問題という認識」は生まれていた。 第二。「1.1.4 バージョンアップ」 主要に、先の問題に対処しようとして行われた、「1.1.4 バージョンアップ」で、Android端末上のCOCOAで大きな問題が発生する。Androidでは、濃厚接触に該当するケースでも、 必要な通知・表示まで、一切、出なくなってしまったのだ。 Android では、4つのパラメーターで算出されるリスク値の設定のミスで、濃厚接触を示す値が論理的に生じ得ない状況となっていたからである。悪いことに、その不具合に、4ヶ月もの間、誰も気づかなかった。(GitHub上では、指摘があったにもかかわらず) 二つの不具合を振り返ってみれば、「接触確認アプリ」の中核的な機能である「濃厚接触の有無のチェック」に重大なバグがあったことがわかる。 大量通知を乱発したは、1.1.3 バージョン以前のアプリは、「接触確認」についていえば、10年前にAndroid界隈ではやったすれ違い通信「すれちがったー」レベルのものだし、二つ目の1.1.4 バージョンのどんなに濃厚接触しても濃厚接触なしと答えるのは、「接触確認アプリ」としては最悪である。 こうしたバグは、テストをしないと見つからないものなのだろうか? 僕は、そうは思わない。もちろん、テストすることに反対しているわけではないのだが、今回のミスは、ちゃんと情報を集めて、ちゃんと考えれば気づくことのできた誤りだと思う。 実際に手を動かして当該部分のコードを書いた人には、きつい言い方になるかもしれないが、プログラマーは、どんな状況にあっても、正しいコードを正しく書くことを求められていると、僕は思う。 当面の僕の主要な関心は、ストレートで狭いもので、どうしてプログラマーがミスを犯したか、どうしてマネージャーがそれに気がつかな