“これは、私がこれまでに見た機械学習の応用の中で、最も心を揺さぶるものだ”
インスタグラムの共同設立者、マイク・クリーガー。
マイク・クリーガーの言葉は誇張ではない。 MLはデータ分析や洞察という点で目覚ましい能力を発揮するが、GitHub Copilotは世界中の製品開発者に潜在的な有用性を提供できるため、完全にゲームチェンジャーとなる。
コーディング・コパイロットとジェネレーティブAIは、ソフトウェア開発ライフサイクルをこれまで想像もできなかったスピードまで加速させるなど、チームが大きなメリットを引き出すのに役立つ。 しかし、この技術がRPAとソフトウェア・テストに与える影響は、この素晴らしい技術の最もエキサイティングなフロンティアの2つである。
この記事では、コーディング・コピロットとジェネレーティブAIが、ソフトウェアテストとRPAの世界をどのように変えたかを見ていく。
コパイロットとジェネレーティブAI
ソフトウェア開発入門編
ジェネレーティブAIとコーディング・コパイロットは、ソフトウェア開発の現場では比較的新しい存在だ。 彼らのスペースへの影響を論じる前に、彼らの経歴と仕事ぶりを見ておこう。
1.AI自動コーダー
大規模言語モデル(LLM)はここ数年で目覚ましい進歩を遂げている。 データセットのサイズと計算能力が指数関数的に増大するにつれて、アウトプットの質も上昇している。
LLMの恩恵を受けられる業種は多い。 最も多く書かれているのは、テキスト、画像、動画、その他のメディアの生成である。 しかし、これらのユースケースは印象的だが、開発者にとってはもっと興味深い意味がある。
LLMオートコーダーは市場に数多く出回っている。 しかし、GitHub CoPilotはおそらく最も有名で、最も実績がある。 その理由の大部分は、GitHubのリポジトリで訓練されているからだ。 オープンソースのコード、ベストプラクティス、アプリケーションアーキテクチャなど、何百万もの事例から学ぶことができるため、高品質で多彩なアウトプットを提供することができる。
2.コーディング・コパイロットはどのように機能するのか?
コーディング・コパイロットがどのように機能するかを語る最も簡単な方法のひとつは、このゲームの代表的な製品であるGitHub CoPilotを見ることだ。 このアプリケーションはOpenAiのChatGPT-3モデルに基づいています。
ChatGPTや同様のLLMと同様、CoPilotは何十億ものパラメーターに基づいている。 ChatGPT-3の開発中、OpenAIはOpenAI Codexという専用のコーディングプログラムを作り始めました。 マイクロソフトはこの製品への独占的なアクセスを購入した。
しかし、ここで重要なのは、マイクロソフトがすでにギットハブを所有していたことだ。 コーダーならGitHubのことは何でも知っているだろう。 基本的には、ソフトウェア開発プロジェクトにおけるバージョン管理とコラボレーションに使われるウェブベースのプラットフォームだ。 彼らは、オープンソースで公開されている数百万行のコードを含むGitHubライブラリでOpenAI Codexを訓練した。
CoPilotは機械学習を使ってコード行間のパターンと関係を見つける。 ChatGPTのように、単語や行を見て、膨大な過去のデータに基づいて、次に何が来るかの確率を計算する。
AIコパイロットの威力は、開発者が編集する際にコード・スニペットを提案する能力にある。 コーディングのオートコンプリートをパワーアップさせたようなものだ。 コーダーがコード行を入力すると、LLMはそのコードの先頭を過去のプロジェクトの膨大なライブラリーと比較する。 そこから、確率的なラインや斬新なコードラインを提案する。
ここでの明らかな利点は、開発者がこのオートコンプリートによって信じられないほどの時間を節約できることである。 生産性が向上し、多くの場合、コードの正確性も向上する。
3.コーディングと開発のためのジェネレーティブAIは?
コパイロットの歴史からわかるように、ジェネレーティブAIとコパイロットはルーツが似ている。 どちらも、統計的な確率を利用して、推測された情報に基づいてユーザーが必要としているものを予測する技術である。
しかし、コパイロット・ソフトウェアとジェネレーティブAIの大きな違いは、後者がプロンプトベースであることだ。 要するに、ユーザーが機械に一連の文章による指示を入力し、機械がコンテンツを出力するということだ。 ChatGPTや似たようなアプリケーションを使ったことがある人なら誰でも知っているように、この出力はテキスト、画像、ビデオ、コードの形をとることができます。
したがって、コーダーが自動コーディングに到達するために使用する方法は異なるが、AI支援自動コーディングまたはジェネレーティブ・コーディングという同じような傘の下に置くことができる。
ソフトウェア・テストの進化
ソフトウェア・テストは、常に進化している。 数十年の間に、新しい要求に応え、技術の進歩を利用するために、それは変化し、変容してきた。
1.手動テスト:
ソフトウェアテストの黎明期には、手作業によるテストが行われていた。 この種のテストは、一連のテストケースを開発し、実行し、結果を記録し、修正スケジュールを立て、プロセスを繰り返すことによって、QA専門家がソフトウェアを細かくチェックする必要があるため、高価で時間がかかるものだった。
これらのテストで、起こりうるすべてのシナリオと状況を確実にカバーすることは大きな課題であり、それにかかる時間とコストを加えると、手作業によるテストはリソースを大量に必要とするものであった。 また、人為的なミスの影響を受けやすく、配信オプションが限られていたため、未発見のバグがあってもすぐにパッチを当てることが難しかった。
2.スクリプトテスト:
スクリプトテストは、QAコミュニティにとって大きな前進だった。 開発者は、手作業でコードやテストシナリオを確認する代わりに、ソフトウェアを自動的にテストできるプログラムを書くことができるようになった。 ここでの大きなプラス面は、テストがより効率的になり、ヒューマンエラーが起こりにくくなったことだ。 しかし、これを達成するには、包括的なカバレッジを確保するために、熟練した正確で時間のかかる計画とコーディングが必要だった。
3.テスト自動化:
テストの自動化は、テストの次の進化だった。 ZAPTESTのようなツールは、スクリプトテストのすべての利点を、コードなしのインターフェースでコーダーに提供することができた。 ここでも、時間の節約、再利用可能で適応性のあるテスト、UIとAPIのテスト、クロスプラットフォームとクロスデバイスのテストが大きなメリットとなった。
4.データ駆動テスト:
データ駆動テストは、さまざまなデータセットを処理するソフトウェアをテストするという問題に対する解決策だった。 これもテスト自動化の一形態だが、この方法ではテストスクリプトを作成し、割り当てられたデータセットに対して実行する。 このタイプのテストにより、開発者はより速く作業し、テストを分離し、テストケースを繰り返す時間を減らすことができる。
5.ジェネレーティブAIテスト:
ジェネレーティブAIテストは、ソフトウェアテストにおける最新のイノベーションである。 LLMを使用することで、QAチームはテストケースとテストデータを作成し、テストプロセスを加速することができる。 これらのテストケースは非常に柔軟で編集可能であるため、開発者はテストを再利用・再目的化し、テストの範囲を大幅に広げることができる。
現在のコパイロットの使い方と
ソフトウェアテストとRPAにおけるジェネレーティブAI
ジェネレーティブAIとコパイロットは、ソフトウェアテストに大きな影響を与えている。 しかし、これらのツールはコーダーに取って代わるというよりは、むしろテスターを補強するのに役立っている。 つまり、開発者の迅速化と効率化を支援し、多くの場合、テストの質を高める。
スタックオーバーフロー
2023年スタックオーバーフロー開発者調査
は、ソフトウェア開発コミュニティにおけるAIツールの現在の使用について、いくつかの洞察を提供している。 この調査で最も興味深かったのは、全開発者の半数強がソフトウェアテストのためのAIツールに興味があると回答した一方で、これらのツールを信頼していると回答したのは3%未満だったことだ。 さらに、現在ソフトウェアテストにAIツールを使用していると回答したのは、わずか4人に1人だった。
この統計が興味深いのは、AIツールの利用がまだ普及しておらず、アーリーアダプターがまだ優位に立てることを示している点だ。
1.ソフトウェアテストとRPAにおけるコパイロットとジェネレーティブAIの使用例
コピロットとジェネレーティブAIは、ソフトウェア開発のあらゆる分野に影響を与えている。 ソフトウェア・テストとRPAにおいて、この技術がどのように役立つかをいくつか紹介しよう。
要求分析
要求分析は、ソフトウェア開発ライフサイクルの重要な部分である。 このプロセスでは、利害関係者の要求と、ソフトウェアの構築に必要なさまざまな機能を理解する。 ジェネレーティブAIは、新しいアイデアや視点を生み出すことで、チームのアイデア出しを支援することができる。
テスト計画
テスト要件がよく理解できたら、QAチームは十分なテストカバレッジを確保するために、物事をスケジュールに落とし込む必要がある。 この種の作業には専門知識と経験が必要だが、Generative AIは事例やガイドを通じてチームをサポートし、さらに独自の要件に応じた特定のツールやベストプラクティスを提案することができる。
テストケースの作成
QAチームは、LLMを使ってコード、ユーザー要求、ソフトウェア仕様を分析し、システムの背後にある根本的な関係を理解することができる。 AIがソフトウェアの入力と出力、そして期待される動作を把握したら、ソフトウェアをテストするテストケースを作り始めることができる。
ここでの利点は、時間の節約や手作業によるコーディングにとどまらない。 AIによるテストケースの作成は、QAエンジニアが考慮しないような領域を探索することができるため、より包括的なカバレッジにもつながり、より信頼性の高いビルドにつながる。
バグの発見と解決
機械学習によって、QA担当者はバグの発見と解決にかかる時間を大幅に短縮することができる。 ソフトウェアのテストでは、多くのバグは簡単に見つけることができる。 しかし、多くのシナリオでは、それは手間と時間のかかるプロセスである。 ジェネレーティブAIは、手作業によるチェックの数分の一の時間でチェックを実行し、最も頑固なバグも浮き彫りにすることができる。 さらに、これらのAIツールは特定したバグを解決することもでき、QAチームの時間を限りなく節約することができる。
UIテスト
ジェネレーティブAIツールは、さまざまなユーザーの行動やソフトウェアシステムとのインタラクションをシミュレートすることができる。 このメソッドは、開発チームに、自分たちのインターフェースが人間とコンピューターの幅広い用途に対応できるという自信を与えることができる。 さらに、ジェネレーティブAIはユーザーインターフェースのデータやヒートマップを分析し、UIを改善し、よりユーザーフレンドリーにする方法を提案することもできる。
コパイロットとジェネレーティブAIの未来
in ソフトウェアテストとRPA
ソフトウェアの自動化におけるコパイロットとジェネレーティブAIの活用は、現在すでにエキサイティングなものとなっているが、将来はさらに大きな可能性を秘めている。
コパイロットとジェネレーティブAIの将来は、製品に改良が加えられるかどうかにかかっている。 パデュー大学の最近の研究で、次のようなタイトルがつけられた。 誰がより良い答えを出すのか? ソフトウェア工学の質問に対するChatGPTとStack Overflowの回答の詳細分析 は、ジェネレーティブAIモデルの限界のいくつかを示している。
研究者はStack Overflowから500以上の質問をChatGPTに与えた。 AIツールは半分以上を不正確に回答した。 ここで重要なのは、研究者たちが指摘した最も重大な問題のひとつは、AIが質問を正しく理解しなかったために最も頻繁に失敗したということである。 この詳細は、ジェネレーティブAIにおけるプロンプト・エンジニアリングの重要性を強調している。
さらに、グーグルとアマゾンの両社は今年、ジェネレーティブAIツールの質を面接問題で検証する独自のテストを実施した。 どちらのケースでも、このツールはテストの質問にうまく答えることができた。
CNBC
および
ビジネスインサイド
それぞれ
つまり、私たちがこの技術において、可能性はあるが、いくつかの細かい点を解決しなければならない段階にいることは明らかなのだ。 近年、このようなツールの規模が向上していることから、おそらく予定よりも早く、必要なレベルに達することができると確信している。
それでは、これらの技術がソフトウェア開発テストの未来に影響を与える分野のいくつかを見てみよう。
1.ハイパーオートメーション
ハイパーオートメーションは、自動化可能なすべてのプロセスが自動化される、企業の進化の到達点を示している。 それは、生産性を高めるための総合的なアプローチであり、相互に高度に関連している。
ソフトウェア開発に関して言えば、ビジネス・プロセスの要件を監督する中央集権的なシステムを想像するのは難しくない。 このシステムは、ニーズと効率性を理解・特定し、テクノロジーによって改善すべき分野を常に特定する。
ビジネスが進化するにつれて、このような集中型システムは、ボトルネックや非効率を自動的に解決するアプリケーションを構築するためにジェネレーティブAIを使用するようになるだろう。
2.ソフトウェア・アーキテクチャの設計
十分なデータがあれば、AIツールはソフトウェア・アーキテクチャのベスト・プラクティスを理解し、最大の効率を得るためにこれらの設計を改善する方法を見つけることができる。 機械学習とは、人間の頭脳の範疇を超えたパターンや関係を見つけ出すことだ。
AIツールがさまざまなアプリケーションについて十分な知識を持っていれば、以前のアーキテクチャを新たな要件に向けて曲げるよう指示することができ、より効率的な構築や、そうでなければ考えられなかったようなアイデアを導き出すこともできる。
3.レガシーシステムの近代化
完璧なソフトウェアなどないとはいえ、優れた仕事をし、企業のインフラに深く組み込まれているため、代替が難しいツールは数多くある。 特に、流行遅れのソフトウェア・コードを使って書かれた場合はなおさらだ。
将来的には、ジェネレーティブAIツールはこのコードを最新の言語に変換することができるようになり、チームはレガシー・システムを維持し、多くの場合は改善することができるようになるだろう。
4.ローコードとノーコード開発の強化
ジェネレーティブAIツールによるソフトウェア・テストの自動化の課題の1つは、コーダーが出力を検証するための知識や経験が不足しているという状況である。
AIコパイロットは、堅牢なアプリケーションにつながるより良い提案をすることで、ローコードツールを補強するのに役立つだろう。 洗練されたテスト・ツールは、人間のオペレーターに自由な創造性を許すと同時に、彼らの仕事を常に検証し、技術者以外の専門家にも必要なアプリケーションを構築する門戸を開く。
ソフトウェアテストにおけるジェネレーティブAIの利点
ソフトウェア・テストにジェネレーティブAIを使用することには多くの利点があり、品質を落とすことなく迅速に作業を進めたい開発チームにとって魅力的な選択肢となる。
1.ソフトウェア開発ライフサイクルのスピードアップ
開発者は、ソフトウェアや新機能をタイムリーに市場に投入するために、長時間労働を強いられるプレッシャーに常にさらされている。 アジャイル/DevOpsの方法論は、開発がより効率的であることを保証しているが、さらなる合理化の恩恵を受けることができる個々の開発段階がまだ存在する。
ジェネレーティブAIツールは、プロトタイプの生成からUIテストまで、テストチームがSDLCの様々な段階に取り組むことを可能にする。
2.包括的なバグ検出
ソフトウェアテストにおけるAIの最も強力な用途のひとつは、大規模なデータセットを比較する技術から生まれる。 MLツールは膨大なデータセット(コードを含む)を分析し、情報のリポジトリと予想されるモデルを構築することができる。
開発者がコードをコミットする際、これらのモデルと比較することで、予期せぬシナリオや依存関係、脆弱性を浮き彫りにすることができ、開発プロセス全体を通してより良いコードを作成することができる。
3.テストカバレッジの向上
機械学習ツールは、膨大なデータセットを分析し理解するために構築されている。 ソフトウェアテストに適用することで、チームはソフトウェアテストの範囲を広げることができる。 AIはまた、より包括的なテストにつながり、複雑な一連のシナリオにおけるバグ検出を向上させる。
4.コスト削減
QAエンジニアのチームを雇用し、反復的で時間のかかるソフトウェア・テスト作業にQAエンジニアを使用するのと比較すると、ジェネレーティブAIとRPAはより迅速でコスト効率に優れている。
ソフトウェア開発の世界では競争が激化しており、品質が高く耐久性のある製品を予算内で提供する方法を見つけることの重要性が増している。 ジェネレーティブAIツールとコパイロットは、エンジニアへの依存を減らし、エンジニアが価値主導の仕事を行うことを可能にし、ビルドの肥大化を抑えることにつながる。
AIツールは終わりを告げるのか?
人間のソフトウェア・エンジニアの?
明らかな利点があるにもかかわらず、どのような自動化ツールも労働者に将来への不安を与える可能性がある。 これは普通の反応だが、ジェネレーティブAIのスピードと範囲は、懸念が通常よりも広範囲に及ぶことを意味する。 これらのツールは多くの作業を自動化する能力を持つが、ソフトウェア・エンジニアが行うすべての作業を行うことはできない。 技術の能力と限界を理解することは、エンジニアとリーダーにとって不可欠である。
まず覚えておかなければならないのは、AIによるテスト自動化ツールはかなり以前から市場に存在しているということだ。 しかし、ジェネレーティブAIのユーザーフレンドリーな性質は、さらなる柔軟性を可能にしている。
まず考えなければならないことのひとつは、生成AIは検証可能なアウトプットに対して最も効果的だということだ。 これが重要なポイントだ。 LLMがどのように訓練されているかという性質は、たとえそれが事実、参考文献、議論を「幻覚」することを意味することがあったとしても、あなたに答えを与えるために最善を尽くすことを意味する。
コーディングに関する十分な知識があれば、ジェネレーティブAIが出力するテキストを読んで検証し、潜在的なエラーを発見することができる。 もしあなたが、コーディングができない代わりにジェネレーティブAIを使っている市民コーダーなら、このようなミスを発見する能力はないだろう。
つまり、この観点から見た場合、熟練したエンジニアがソフトウェア開発エコシステムの重要な一部であることに変わりはない。 監督的、実務的な意味でのテストが求められることに変わりはない。
ソフトウェア・テストにおけるジェネレーティブAIのもうひとつの限界は、モバイル・テストである。 例えば、ChatGPTはウェブサイトのUIをテストするのに良いオプションです。 しかし、さまざまなモバイル機器にアクセスすることはできない。 市場にはさまざまな端末やモデルがあるため、ZAPTESTのような現在のテスト自動化ソフトウェアに遅れをとっている。 この問題も小さなハードルではない。 以上
インターネット利用の半分はモバイル
その数は年々増加している。
したがって、ジェネレーティブAIは開発者から多くの仕事を奪うだろうが、テストインフラやアウトプットを検証する能力に大きな変化がない限り、こうした専門家が時代遅れになることはないだろう。
最終的な感想
ソフトウェア・テストとRPAは常に改善の道を歩んでいる。 新しいテクノロジーや手法が生まれるにつれ、QAチームが手動テストの何分の一かの価格で、より迅速かつ包括的なテストを提供できるよう、両分野はベストプラクティスを吸収している。
テストの範囲を改善し、ヒューマンエラーとコストを削減することは、AIを活用したテストのより明白な利点の一部であるが、チームが継続的インテグレーションとデプロイメント・パイプライン(CI/CD)アプローチを採用するのにも役立つ。
消費者の期待と競争がかつてないほど高まる中、ジェネレーティブAIは、品質に妥協することなく、迅速かつ効率的なテストを提供する方法をチームに提供する。