僕の勤めている会社では、AI をフル活用してソフトウェアを開発している。
で、まあ、当然ながら不具合は出る。
不具合が出ると「テストしたのか?」と聞かれることがある。偶によくある。
もちろん、テストはしている。僕も同僚諸氏も、テストをしてからリリースしている。少なくとも、動作確認すらせずにリリースしているわけではない。
ただし、これはいわゆる「開発者テスト」というやつだ。
テストしたんですけどね
開発者は、自分が実装したソフトウェアが動くことを確認するためにテストをする。
一方、QA/テストエンジニアは、ソフトウェアが動かないことを確認するためにテストをする。
……というのは、ちょっと乱暴な言い方かもしれない。開発者だって異常系のテストくらいするし、QA エンジニアだって正常系をテストする。
ただ、テストに対する考え方として、こういう違いがあるんじゃないかと思っている。
コンピュータ科学者のダイクストラは、こんなことを言っている。
Program testing can be used to show the presence of bugs, but never to show their absence!
テストはバグの存在を示すことはできるが、バグが存在しないことは示せない。
Edsger W. Dijkstra, Notes on Structured Programming (EWD249)
そりゃそうだ。
テストが全部成功したからといって、バグがないことを証明できたわけではない。テストしていない条件で不具合が出るかもしれないし、そもそもテストケース自体が間違っているかもしれない。
だから、何をどうテストするのかを考えなければならない。
そして、これには専門的な知識が必要になる。
いきなりシステムテスト
さて、AI の話に戻る。
バイブコーディングというのは、実に便利なもので、AI に「こんなものを作って」とお願いすると、動くものが出てくる。
本当に動く。素晴らしい。
で、出来上がったものを動かしてみて、「おお、動いた」となる。
しかし、よく考えると、これっていきなりシステムテストから始めているようなものではないか?
従来なら、設計して、実装して、単体テストして、結合テストして……と進めていたものが、AI に任せると一気に動くものまで出来上がってしまう。
もちろん、AI に単体テストを書かせることもできる。というか、書かせている人も多いだろう。
ただ、テストコードが存在することと、適切にテストできていることは別の話だ。
現実のソフトウェアは、複数のモデルや状態、条件が複雑に絡み合っている。
ある状態では操作できるが、別の状態では操作できない。ある条件と別の条件が同時に成立したときだけ不具合が出る。そもそも成立しない組み合わせもある。
こういうものをどうやってテストするのか。
例えば、ペアワイズ法(オールペア法)という組合せテスト技法がある。複数の因子について、任意の2因子の値の組み合わせを網羅するようにテストケースを設計する方法だ。
もちろん、これだけで十分という話ではない。3因子以上の組み合わせもあるし、状態遷移も考えなければならない。
要するに、適当に動かしてみるだけでは足りないのだ。
テスト容易性の話
もう一つ、テスト容易性という問題がある。
ソフトウェアは、テストしやすいように設計されている必要がある。
例えば、特定の状態を再現するために何日も待たなければならないとか、内部の状態が外から確認できないとか、そういうソフトウェアはテストするのが難しい。
だから、状態を自由に作れるようにしたり、時刻を制御できるようにしたり、必要な情報を観測できるようにしたりする。
こういうことを設計段階から考える必要があるわけだ。
さて。
AI にソフトウェアを作らせるとき、こうしたテスト容易性まで考慮してプロンプトを書いているエンジニアは、どれくらいいるんだろう?
「この機能を実装して。ただし、状態間の制約を考慮した組合せテストが可能で、テストデータを自由に構築でき、時刻や外部依存も制御できるようにしてね」
……なーんてことを、毎回 AI に指示している人は、あまりいないんじゃないかと思う。
少なくとも、AI に「テストも書いて」と頼むだけでは、この問題は解決しない。
ところで、この話の専門家は誰だ?
そんなわけで、AI によってソフトウェアの開発速度は上がった。
しかし、ソフトウェアを正しく検証することまで簡単になったわけではない。
テストコードを書くことと、テストを設計することは違う。さらに、テスト容易性を考慮してソフトウェアを設計することも必要になる。
で、こういう話を専門的にできるのは誰だろう?
そりゃ、QA/テストエンジニアだよね。
もちろん、開発エンジニアにも詳しい人はいる。ただ、テスト技法や品質保証を専門にしてきたのは彼らだ。
AI がソフトウェアを大量に作るようになれば、検証しなければならないソフトウェアも増える。
しかし、検証するための専門知識を持った人間が、同じように増えるとは限らない。
……あれ?
もしかして、これから QA/テストエンジニアの市場価値って暴騰するんじゃないか?
そんなことを考えている。
ちなみに、僕もテストはしている。
しているんだけどなぁ……。