orangeitems’s diary

40代ITエンジニアが毎日何か書くブログ

何も問題が起きないことを証明しなさい、というのはとても難しい

 

マイナンバーカード関連のシステムトラブル、ベンダー側の富士通も頭を抱えているだろうなと思った次第で感想を書いておく。

 

xtech.nikkei.com

マイナンバーカードを使ったコンビニ証明書交付サービスで、別人の住民票などが発行されるトラブルが立て続けに発生した問題を受け、河野太郎デジタル相は2023年5月9日の閣議後記者会見で、同システム開発を手掛ける富士通Japanに対してシステム停止の上で総点検することを同8日に要請したと発表した。

 

アプリケーション開発でもインフラでも、何か作ったらテストをする。

テストの内容や粒度はともかく、テストをする目的は、本番リリースした後に問題が起きないかを調べ上げることだ。

テスト項目が多ければ多いほど、物理的にトラブルが事前検知できる確率は上がる。ただし100%の検出は絶対に無理である。どんなパターンで未検出になるかをいくつか挙げよう。

 

***

 

①テストパターンの考慮漏れがあった

そんな使われ方をするとは思わなかった。

そんな条件になることなど、天文学的確率なので無視した。

などなど、開発者の思い込みでテストパターンを省いてしまったものの、現実は厳しく、その条件が発生してしまったと言うオチ。

 

②テストにおいてサンプリングにおける抜け漏れがあった

全ての条件をシミュレートするのは難しいので、代表する複数のパターンを抜き出しテストした。その結果、テストしていないパターンがリリース後に現れてしまった。どこまで想定しテストするかは、結構人間の主観の部分も関係するので、ユーザー側にどこまでテストするかを費用と相談しながら決める。

費用が登場するため、どうしても安くしたくて力業でテストを省略する場合は、抜け漏れが発生しやすくなるのは当たり前。

 

③要件定義で約束していない使い方を利用者がした

システムとは、開発前に必ず利用条件を決める。特定時間あたりの同時利用ユーザー数、データ量、利用数など。前提となる負荷条件を決め、それに耐えうるインフラ基盤を構築しその上にアプリケーションを構築する。

もちろん、それを超える利用条件で使われたら、CPU負荷が高止まりしたりメモリーが足りなくなったり、またネットワーク帯域が枯渇したりなど、可用性を損ねるような状況が訪れる。

テストも、利用条件の範囲内で動くことを担保するので、条件を超えられる使い方をされたらひとたまりもない。

 

④本番リリース後のデータでのみ起きる問題だった

テストを本番データでやるかどうかは、そのデータが機微かどうかで変わる。個人情報バリバリの内容の場合、本番データをマスクするなど加工し問題のない状態に変換したり、仮想のデータを作成してテストすることも多い。

架空のデータのため、本番リリース後とは条件が異なる。そのため、テストはパスしたのにリリース後は問題が生じる場合が起こりえる。

 

⑤テストに不正があったり、正確に実施する能力がなかった

テスト項目は正しかった。そしてテスト結果も成功となっていた。

しかし、テスト結果を捏造した。もしくは、テストを正確に実施するために必要な能力を持っておらず、失敗なのに成功と考えてしまった。

不備があるのに、それをチェックする体制や能力がなく、そのままテストを成功として終了してしまったというパターン。

最近、いろんな企業で、テストの捏造の問題が発生する。

(今回の件は違うと思うけど・・)

 

***

 

現在まで起きているトラブルの原因は、上記に含まれるのかそれともまた別の要因かはわからないが特定されていると聴く。

ただ、それよりも、「未来に障害が必ず起きないようにしなさい」というのはこれは、かなりハードルの高い要求と言える。

 

富士通Japanはこれまでも不具合が明らかになった際に不具合箇所の特定、不具合の改修は完了しているとしてきたが、デジタル庁ではトラブルが相次いで発生していることを重く見て、「早急に運用を停止して、問題が起きない確認をしてもらいたいということで、運用を停止してテストするように要請した」(河野デジタル相)。

 

つまり、そもそも過去のリリース時のテストはパスしているため、それを二度やっても意味がないということになる。

新たなテストを作成したときに「問題が起きない確認」となり得るのか。

また、上に挙げた4つのような問題をはらまないのか。

富士通も会社を挙げて対応するだろうけれど、「悪魔の証明」と言う言葉を思い出した。

 

globis.jp

悪魔の証明とは「○○がないことを証明できないなら、○○は存在する」「△△であることを証明できないなら、△△だ」といった、「ない」ということを証明しようとする論法のことを指します。未知証明と呼ばれることもあります。

「ある」ということを証明するのであれば、実際に事例を紹介すれば事足ります。しかし、通常、「ない」ということを証明するのは容易ではありません。想定されるすべての可能性をつぶさねばならず、それは通常、ほぼ不可能に近いからです。また、それを利用して、相手に証明責任を転嫁することもしばしばあります。

 

今回のデジタル庁の要請が、上記の記載に当てはまっているような気がしないでもない。

システム停止をしてテストをしたら、証明できることなのだろうか。

総点検の「総」とは何を意味しているのだろうか。