正しいコードを正しく書くこと

【正しいコードを正しく書くこと】

接触確認アプリ「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 バージョンのどんなに濃厚接触しても濃厚接触なしと答えるのは、「接触確認アプリ」としては最悪である。

こうしたバグは、テストをしないと見つからないものなのだろうか? 僕は、そうは思わない。もちろん、テストすることに反対しているわけではないのだが、今回のミスは、ちゃんと情報を集めて、ちゃんと考えれば気づくことのできた誤りだと思う。

実際に手を動かして当該部分のコードを書いた人には、きつい言い方になるかもしれないが、プログラマーは、どんな状況にあっても、正しいコードを正しく書くことを求められていると、僕は思う。

当面の僕の主要な関心は、ストレートで狭いもので、どうしてプログラマーがミスを犯したか、どうしてマネージャーがそれに気がつかなかったか、また、そのことをどう考えているのかにある。

報告書は、33人の「関係者」から聞き取りを行なったという。実際にその発言が紹介されてのは、こんな人々だ。

 管理職級 A 
 再委託事業者 B
 オープンソースコミュニティー A
 再委託事業者 C
 CIO 補佐官 A
 CIO 補佐官 B
 管理職級 B
 担当者 C
 CIO 補佐官 C
 管理職級 D
 担当者 E
 担当者F
 指定職級 G
 指定職級 H
 指定職級 I
 指定職級J
 指定職級K
 指定職級L
 管理職級 M
 指定職級N
 管理職級O

なんと多くの人が関わっているのか。
ただ、「1,200万円の自主的返納を申し出た」とメディアで報じられた元請の委託業者の声は、ほとんど聞こえてこない。

どうしてこんなバグが生まれるんだという僕の素朴な疑問に、何らかの形で答えてくれたのは、残念ながら、次の二つの発言だけだったように思う。長くなるが引用しよう。

○ 再委託事業者C は、Apple とGoogle がつくっているEN API に関する最上流の情報のキャッチアップとそれがCOCOA に与える影響を素早く検知して判断すること、GitHub のような消費者の声をキャッチアップできることが大きいと思う旨、また、厚生労働省側か事業者側に、プロジェクトを外の目から監視するような仕組みがあれば、思い込みは解消されたのかなと思う旨、一番反省しているのは、何があっても検知できるようなテストを、テストができる状態になったときに、やり直しましょうというふうにできなかったことである旨を述べている。

○ 再委託事業者A は、大きく2つの先入観があった旨を述べており、1つは、iOS とAndroid の共通仕様性に対しての先入観があり、Apple に確認して回答をもらえば、それでGoogle も含めてリリースしていたが、本来ならGoogleにもその仕様で間違いないか検証等が必要だったこと、もう1つは、リスク値と呼ばれる陽性判定の部分の処理は全てOS側に一任されており、COCOAは関与していないと考えていたが、実際には基となる情報を生成するところはCOCOA が何を引き渡しているかに引っ張られるものであり、そこも確認しておくべきだったと思う旨を指摘している。

彼らは、インタビューを受けた多くの他の「関係者」より、問題の所在をキチンと理解しているように、僕には思えた。多分、それは偶然ではないと思う。「再委託業者」というのは、実際に、手を動かしてコードを書いた人たちだ。

今回の「不具合」に、彼らの責任はもちろんある。プログラマーは、どんな状況にあっても、正しいコードを正しく書くことを求められていると僕は考えているからだ。ただ、そんなこと言ったって、役割不明(僕にとってはだが)の「関係者」が多数存在していて、肝心のコードを生み出す開発者には、正しく問題を解決する権限が与えられてはいないのだ。

報告書を読んで、暗い気持ちになるのは、多分、僕の問題意識も狭いからだと思う。

コメント

このブログの人気の投稿

マルレク・ネット「エントロピーと情報理論」公開しました。

初めにことばありき

人間は、善と悪との重ね合わせというモデルの失敗について