ソフトウェアテストの分野は、過去数十年間で大きく進化してきました。自動テストの飛躍的な進歩、より深いテストを可能にする驚異的なテストツールの登場、そしてチーム全体の品質重視へのシフトなどがその例です。しかし、私がソフトウェアテストに携わってきた18年間で、AI(人工知能)ほど、これほど多くの期待と興奮、そして同時に同じ程度の不確実性と抵抗感を引き起こした技術はありません。
どの立場に立っても、AIの存在を無視することはできません。AIは既にここにありますし、消えることはありません。では、ソフトウェアテストにおけるAIは本当に何ができるのでしょうか?テストを支援する部分と、妨げる部分はどこにあるのでしょうか?私は最近、多くのAIに実際に触れる機会を得ることができ、一部のケースではAIが大幅に役立ち、数時間の時間を節約できました。一方で、自分で30分でできたはずの作業に数時間を費やしたケースもあります。これらの経験から、現在のAIの機能と、それがテストおよびテスト担当者にどのような意味を持つのかについて、いくつかの意見を形成することができました。
テストの詳細に入る前に、この記事で「AI」とは何を指すのかを定義しておくことが重要です。AI は極めて広範なテーマであり、自然言語処理、機械学習、大規模言語モデル (LLM) など多岐にわたります。本記事では、特に生成型 AI とエージェント型 AI に焦点を当てます。これらのツールが私が実際に探索してきたものであり、ソフトウェアテストとソフトウェア開発の文脈で日々増加しているツールです。
本記事では、これらのツールをソフトウェアテストの各側面で活用することに重点を置きますが、より広範なソフトウェア開発ライフサイクルにおけるAI活用がテストに与える影響について簡潔に触れずには、不完全な記事となってしまうでしょう。
テストしているコードのうち、どれくらいがAIによって生成されたものですか?エンジニアはAIが生成したコードをレビューしましたか、それとも動作を確認してコミットしただけですか?コードはエージェントのみによって書かれたものですか?同じエージェントがプロセス中に気づかれない/不要な変更を加えたでしょうか?エージェントはユニットテストを書きましたか?そのコードは既存のコードと同じ品質基準を満たしていますか?このコードが劣っていると言っているわけではありません。それは非常に文脈依存です。しかし、そのコードを生成するプロセスは、AIを活用しない場合と根本的に異なります。
ユーザーストーリーについてはどうでしょうか?それらはいずれも人間によって書かれたものですか?顧客とのすべての会話に関与した同じ人間が書いたものですか?それとも、プロダクトオーナーが提供したミーティングのメモや選択的な情報に基づいてAIが書いたのでしょうか?それらのレビューはどの程度行われましたか?
これが、私がAIの使用について初期に気づいた点の一つです。AIは品質基準の欠如を悪化させます。SDLC全体で品質管理が不十分なチームがAIを導入すると、プロセスに混乱が生じ、品質が低下する可能性が高いです。これは、チームがプロセスに自動化を導入し始めた時と全く同じです。チームは、良い状態とは何か、そしてそれを測定する方法について確立された理解を持つ必要があります。これにより、チームはプロセスを維持し、できれば改善しながら、AIを制御された方法で導入できます。私の経験では、これらの基盤が整っていないチームでは、AIに責任を転嫁される混乱が発生し、実際にはAIを導入する準備ができていなかったことが明らかになります。これにより、AIがすべての問題を解決すると信じていたリーダーたちが混乱します。
近年、品質への注目が高まっています。品質エンジニアの登場とAIの導入は、この重要性を浮き彫りにしています。すべてのチームが品質エンジニアを必要とするわけではありませんが、すべてのチームは品質管理を導入する必要があります。そのためには、良い状態とは何かを明確に定義する必要があります。良い状態を共有できなければ、AIから得られる価値を最大限に引き出すことはできません。テスターと品質エンジニアは、この点で大きな価値を提供できると考えています。
AIはパラダイムシフトを加速させています。私は幸運にもこの変化に10年先んじています。そのパラダイムシフトとは、自動化=テスト自動化ではないということです。これが、私が2014年に「Automation in Testing」という用語を考案した理由です。テスト自動化とは、ソフトウェアテストを支援するためのソフトウェアの使用を意味すべきですが、残念ながらそうではありません。テスト自動化は「自動化されたテスト」を意味しています。私はこれを受け入れました。これは私が戦うべき問題ではありません。自動化とは、プロセスを支援するためにソフトウェアを使用することです。テスト自動化ツールを超える、ソフトウェアテストを支援するための多様なソフトウェアが存在します。私はテストを容易にする数百のツールを構築してきました。データ作成ツール、テスト自動化フレームワーク、ログ解析ツール、複雑なBashスクリプトなど、数多くのツールです。現在、そのリストにAIを追加できます。主にChatGPT、Claude、CopilotなどのLLM(大規模言語モデル)を活用したチャットツールを通じてです。
現在、私たちはかつてないほど多くの選択肢を持っていますが、それらをいつ、どのように使用するかを学ぶ必要があります。選択肢を拡大するだけでなく、より一般的に制限する差別化要因は何でしょうか。
従来の自動化について話すのは奇妙に感じますが、これがAIが既に業界に与えている影響です。この文脈での伝統的な自動化とは、ルールベースで確定的な自動スクリプトを指します。人間がシステムとのインタラクションから収集した情報をコード化したスクリプトです。これらのスクリプトは予測可能で再現可能であり、提供された正確な手順から逸脱することはありません。私たちは、システムが特定の動作をするのを見て、その情報を非常に重要だと判断し、その動作が突然機能しなくなった場合に備えて、その情報を記録するためにこれらのスクリプトを作成します。
近年、この分野に2つの強力な追加要素が登場しました。コード/テスト生成とテストエージェントです。私は「追加要素」と表現しましたが、これらは置き換えではなく、異なるものであり、特定の文脈では大きな価値をもたらす異なる選択肢を提供します。しかし、最終的には、これらは自動テストと同じカテゴリーに属する、または自動テストの作成プロセスの一部だと考えています。
まず、テストコード生成から始めましょう。これらは、人間がモデルに重要なコンテキストを提供するためにチャットで入力するプロンプトなどの入力を受け取り、テストコードを生成するツールです。このコンテキストには、ユーザーストーリー、テストデータ、品質基準、テストの数、重点を置くべき点などが含まれる可能性があります。または、単に「テストを生成してください!」と指示するだけの場合もあります。いずれの場合も出力はテストコードになりますが、その品質は大きく異なります。ゴミを入力すれば、ゴミが出力されます。これはコード生成と同じで、具体的な指示が少ないほど、生成されるコードは汎用的なものになります。
ただし、適切な文脈で適切なエンジニアがツールを使用すれば、作業を大幅に加速できる可能性があります。より良い結果を得るためには何ができるでしょうか:
テストツールボックスに最近追加されたのはテストエージェントで、このセクションでは特に自律テストを行うエージェントに焦点を当てます。自律テストとは、AIエージェントがアプリケーションを自律的に探索するように訓練されたテストの形態を指す用語です。これは、探索的テストとテスト自動化のハイブリッドのようなものです。少なくとも、そう説明されています。これは間違いなく大きな可能性を秘めた分野ですが、私の初期の経験では、まだ人間テスターの延長線上にあると言えます。私から見ると、これらは少し知能を持ったウェブクローラーのようなものです。従来の自動テストとは異なり、特定の動作を実行するように指示することはできますが、それがどのように実行されるかは分かりません。これが従来の自動テストに対するデメリットです。私たちは正確なフローが機能することを確認したいからです。しかし一方で、この点は活用できるメリットでもあります。
なぜそんなに慎重なのですか?これらのエージェントは、私たち人間が持つシステム全体の文脈を把握せずに動作するため、その文脈を提供するのは非常に困難です。現在はパズルのピースを断片的に与えることしかできませんが、真の価値は、これらのピースを結びつけるチーム内のヒューマンインタラクションから生まれることは誰もが知っています。文脈が欠如しているため、これらのエージェントはアプリケーションの表面をなでる程度しかできません。
ただし、これらのエージェントが価値がないわけではありません。一部の課題を検出できますが、その洞察が欠如しているため、それらを文脈に置き換えることが困難です。最高の状態では、これらのエージェントは活発な新人社員のような存在です:能力があり、速く、好奇心旺盛です。しかし、指導とメンターシップが必要です。監督なしに放置されると、ノイズを生成しますが、探索を続け、休憩や休暇は必要ありません(新人社員にはそれらを与えてください)。しかし、チームのテストアプローチに適切に統合されれば、より詳細な調査が必要な潜在的な問題領域を指摘する役割を果たせます。これらは、ここに何か発見すべきものがあるかもしれないと示す道標のような役割を果たします。AIは、人間の探索的テスターや伝統的なテスト自動化をすぐに置き換えることはありませんが、ツールキットの一部となる可能性があります。
上記のツールや技術には確かに進歩がありますが、これらは人間のアシスタントとして使用され、既存のテストを補完する形で機能します。これらの例を最初に挙げたのは、業界のテスト自動化に対する見解とより一致しているからです。しかし、AIはこれまで可能だった無限のツールの可能性を開き、それらを実装する難易度を大幅に低下させています。
テストは多くの相互接続されたプロセスから構成されており、現在ではAIを活用して多くのプロセスを支援し、甚至いはそれらを接続することも可能です。
ソフトウェアテストの初期段階の一つは、テストアイデアを考えることです。初期段階では正しい答えや間違った答えはありませんので、AIを活用してみてはいかがでしょうか?5分以内に数百のテストアイデアを生成し、甚至いは自身のアイデアを評価することも可能です。既に考えていたアイデアを進めることもできますし、その選択に少し自信を持って進めることができます。または、そうでなければ思いつかなかったアイデアを追加することもできます。ここでは効率に焦点を当てることが重要です。AIは完璧なテストアイデアを作成することはできませんし、そうしようとしても無駄なプロセスです。代わりに、AIを自身の思考プロセスを刺激するツールとして活用することに焦点を当ててください。
多くのテストプロセスは、データを収集し整理して活用することに依存しています。例えば、スプリントストーリーをすべて収集し、プルリクエストにマッピングし、その変更をテストにマッピングし、リスクが発生する可能性のある箇所を推定するといったプロセスです。AIは、このプロセスを代行できます。AIエージェントのセットを活用し、数分でデータを収集し中断するワークフローを設計できます。もちろん、AIは間違いを犯すでしょう。しかし、プロセスが適切に設計されており、 生データを提供できれば、その基盤の上に構築できる十分なスタートを切ることができます。 生データの取得はここでの重要なステップです。これがないと、AIが盲目になったり偏向したりするリスクがあります。生データを捕捉できれば、その決定が合理的なものであることを検証できます。または、間違いが発生した際に防御できます。
テストデータ生成、失敗したテストの調査、失敗したビルドの調査、自動テストのレビュー/評価など、可能性は無限大です。今こそ、試行錯誤を重ね、何が機能し、何が機能しないかを検証する時です。
ただし、以下の点を忘れないようにしてください。
AIがツール、ソフトウェア、プロセスにますます組み込まれる中、テスターの未来はどうなるのでしょうか?
未来のテスターはAIに置き換えられるわけではありませんが、AIと協力して働く方法を理解する人に置き換えられる可能性があります。テスト自動化についても同じことが言われましたが、それはテスターの置き換えとして位置付けられたため誤りでした。AIではその価値が支援にあるため、同じ過ちを犯さないようにする必要があります。
10年前にテスト技法や特定のテスト自動化の知識がチームにとって不可欠になったように、AI支援テストプラットフォームへの習熟が期待されるようになるでしょう。これらの前提条件、バイアス、境界、可能性を理解することは、構文を理解することと同じくらい重要になります。人々はGoogleの技術について語り、他の人がいかに優れた結果を得るのが上手いかを話しますが、AIアシスタントについても同じことが言えます。
AIがソフトウェア製品にますます組み込まれるにつれ、テストは倫理的な結果を確保する役割が拡大しています。これは、機能だけでなく、公平性、バイアス、説明可能性、安全性をテストすることを意味します。
人間を置き換えるのではなく、最も効果的なAIテスト戦略は協業に焦点を当てます。人間は常に主導権を握り、AIが生成する結果を検証し、挑戦し、精緻化する必要があります。スペルチェッカーが編集に取って代わらないのと同じように、AI はテストに取って代わるものではなく、それをサポートし、正しく使用すれば、仕事をより楽しいものにします。
テストについてよりよく話し合う必要があり、テストを単純な数ステップのプロセスとして捉えることをやめなければなりません。これらのプロセスをさらに拡大し、その複数の段階に AI を導入する必要があります。
スピード、規模、複雑さがますます重要になる現代社会において、AI は私たちを加速させる強力なツールを提供しています。しかし、テスト/品質はツールだけによって決まるものではありません。それは、好奇心、懐疑心、共感、システム思考といった考え方によって決まるものです。AI はテストの必要性を減らすものではありません。むしろ、より慎重なテストの必要性を高めます。
ソフトウェアテストの未来は、AIか人間かではありません。手動か自動化かでもありません。スキルを持った人間とツールの組み合わせであり、私たちのツールボックスはさらに大きく広がっていくでしょう。
また、AIはチームが品質エンジニアリングを真剣に考えるきっかけとなるでしょう。AIがコードの記述、要件の生成、テストの作成と実行、ビルドの破損調査を支援するようになった今、可能性は本当に無限大です。品質の重要性が変化しています。私たちは、次のような質問をもっと多く投げかける必要があります。「これは理にかなっていますか?」、「これは正しいことですか?」、「これは公平ですか?」、「これはプロセスを改善しましたか?」
未来のテスター(またはチーム内でテストの役割を担う人)は、単に機能を確認するだけでなく、AI支援の意思決定を確認する役割を担います。彼らは、これらの自律的なコンポーネントを結びつける接着剤が安全で合理的なものであり、ユーザーに役立っていることを確認しています。彼らは、AI が価値を生み出している場所とリスクを生み出している場所を特定しています。
私たちと肩を並べてです。置き換えとしてではなく、強力なコパイロット、オンデマンドのペアエンジニアとして、依然として人間がすべての運転を行う必要がある存在としてです。
これは、Richard Bradshaw 氏とのコラボレーションによる自動テストシリーズの最終回です。このシリーズでは、テスト自動化のさまざまな側面とその実装について探求しています。