見出し画像

ソフトウェアの品質保証のための強化学習

以下の記事を参考に書いてます。

Reinforcement Learning for Software Quality Assurance

1. はじめに

私は最近、強化学習を使用して、エージェントに画像の特徴の選択を教えるプロジェクトに取り組みました。エージェントは非常にうまく機能し、驚くべき結果を上げることができました。そして、このプロジェクトで最も印象的だったのが、エージェントがアプリ開発自体にどのように役に立ったかになります。

アプリを開発し、特定のマイルストーンを作成した時、エージェントに環境をテストさせました。エージェントはアプリにチート可能なルートやバグがあった場合、間違いなくそれを見つけました。実際、このアプリを人間でもテストしましたが、エージェントは一般的にバグをより迅速に発見しました。

以下は、このアプリの詳細記事へのリンクになります。

2. 品質保証の自動化

実際、エージェントを起動して「訓練セッション」または「テストセッション」を実行するだけで、コードの多くの領域で問題をすばやく見つけることができました。

「強化学習」は力技で学んでいると、非難されることがよくあります。強化学習エージェントは、「報酬」が見つかるまで、考えられるあらゆる方法を試すからです。テストの場合、あらゆる方法を試すことは、非常に良いことです。

私が発見したのは、強化学習を使用してアプリのテストを自動化することでした。これにより、1日ですばやくアプリを構築し、4日程度の繰り返しで動作確認できました。実際のQAを行ったり来たりしていた場合、プロセスはその2倍または3倍になると確信しています。

また、「Unity ML-Agents」を使用することで、アプリに強化学習エージェントをすばやく組み込むことができたことも言及する必要があります。「Unity ML-Agents」は、さまざまなAIタスクのエージェントをすばやく構築することができる強化学習プラットフォームです。これは最新の研究のいくつかに匹敵する最先端プラットフォームです。使用方法も簡単です。Unityと強化学習についていくつかの本を書いたので、少し偏見があるかもしれませんが、私はこのツールを歓迎します。

3. 解決方法の例

2番目の本と5番目の本で、「強化学習」および「Unity ML-Agents」について書いている時に、強化学習を使用したテストの美しさを発見しました。それは私に大きな影響を与え、前回の本を変更し、「Unity ML-Agents」を使用したテスト/デバッグフレームワークの構築に関する特別に長い章を書きました。Unityの経験豊富なユーザーであれば、自分で作成するか、私のコードを使用することができます。経験の浅いユーザーは、実践的なウォークスルーのために私の本を購入したいと思うかもしれません。

私の本のチュートリアルは、詳細で非常に実践的です。そのため通常は、より技術的なブログ投稿を避けています。ここでは、基本的なワークフローを軽く紹介します。

画像1

(1) 「Unity」と「Unity ML-Agents」をインストール。

(2) 「Unity Asset Store」からサンプルのゲームプロジェクトをインポート。
どのゲームでも機能しますが、WASDのキーコントロールを使用するゲームが最も効果的です。

(3) Unityでゲームプロジェクトを開き、Playerとなるゲームオブジェクトを特定。
プレイヤーを自動化して、ゲームを自動的に実行します。

(4) TestAcademyオブジェクトをシーンに追加。
サンプルコードでは、これらはこのクラスの実装です。AcademyクラスとTestAcademyなどのサブクラスは、エージェントの訓練マネージャーです。

(5) TestAgentコンポーネントをPlayerオブジェクトに追加。
Agentクラスは強化学習エージェントを表します。サブクラスTestAgentは、テスト専用の実装です。

(6) ゲームに「報酬」を追加。
衝突したときにエージェントに報酬を与える立方体を使用します。

(7) エージェントにブレインを追加。
エージェントに訓練ブレインを追加し、「Visual Observation」を使用します。「Visual Observation」により、エージェントはプレーヤーと同じビューでゲームを見ることができます。これにより、エージェントは人間の人間と同じようにゲームを学び、ゲームと対話することができます。

(8) コンフィギュレーションの追加。
エージェントのブレインのために設定する必要があるいくつかのパラメータがあります。

(9) 訓練の実行。
すべての設定が完了したら、エージェントを実行して、独自にゲームをプレイします。エージェントが何かを実行するまでに少し時間がかかりますが、やがて可能な限り探索しはじめます。

画像2

もちろん、欠けている詳細はたくさんありますが、「Unity」と「Unity ML-Agents」の経験がある場合は、下部にあるコードを使用して実行できる可能性があります。必要に応じて、本で詳細に説明しているときに、「模倣学習」を追加することもできます。「模倣学習」は、強化学習のサブブランチであり、エージェントが何をしたいかを示すことでエージェントを学習させます。これは、たとえば特定のタスクに焦点を絞るのに最適な方法です。「Unity」を使用すると、これらすべての設定を非常に簡単に行うことができます。次のゲームプロジェクトでは、この形式の自動テストを検討することを強くお勧めします。

4. ゲームだけでなく

賢くてエネルギッシュなスタートアップがこのアイデアを一歩進め、Unity以外のあらゆるプラットフォームのインターフェースを構築できると私は考えています。JavaScriptで構築された強化学習プラットフォームが、QA Webページとサイトを自動化することを想像してみてください。これをさらに一歩進めて、「Eclipse」や「Visual Studio」のようなお気に入りのIDEにプラットフォームを構築できます。さらに一歩進んで、単体テストも自動化します。さらには、自動化された単体テストのフェーズに合格して、完全にテストされたコードを自動生成することに移行するのではないかと思います。

いずれにせよ、私を驚かせるものは、ソフトウェア開発のためのAIのこの分野へのGoogle、Microsoft、Amazon、Appleのような大手の動きの明らかな欠如です。

5. MonkeyRunner 2.0?

「MonkeyRunner」は、UIをランダム操作するテストアプリです。テストの自動化を行います。これはAndroid用に作成されましたが、他のプラットフォームにも同様のテストアプリが存在します。ただし、QAの強化学習はランダムではありません。強化学習は学習し、エージェントに与える報酬によって学習します。エージェントにバグを見つけさせたい場合は、できる限りのことを試みます。バグを見つけると、報酬を見つけます。つまり、バグを修正してエージェントを再テストすると、QAの場合と同様に、エージェントは自動的にバグに直接移動します。その後、QAと同じように機能し、バグに関連するさまざまな反復を試行します。そのため、エージェントは単なるランダムではなく、アプリの弱点を学習します。さらに、すべて同じエージェントをテストして、同じインターフェイスまたはコードをテストすることができます。

6. これはQAの終了を意味するのか?

あなたがQAの仕事をしている人の場合、あなたの収入を脅かすこのテクノロジーに恐怖を抱いている、怒っている、あるいはその両方かもしれませんが、あなたはそうすべきではありません。私の経験では、QAチームは一般的に過労しているため、この技術を手に入れることによってチームは追いつくことができます。

ボタンを押すだけでコードの100%を自動的にテストするAIシステムを介して、テクノロジー企業にソフトウェアの認定を強制するようになるかもしれません。特に、空から落ちる飛行機のようなものは、より徹底的なテストで回避できた場合、強化学習によるテストで認定することが法律に加わるかもしれません。


この記事が気に入ったらサポートをしてみませんか?