Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AI as a Tester

AI as a Tester

Yasuyuki Higa

November 17, 2024
Tweet

More Decks by Yasuyuki Higa

Other Decks in Programming

Transcript

  1. 自己紹介 名前: 比嘉 康至(ひが やすゆき) X(旧Twitter): @yh65743 勤務先: 株式会社ことば研究所 居住地:

    奈良(フルリモートで勤務しています) ❏ PHP ❏ React ❏ TypeScript 普段はこのあたりを使ってWebアプリケーション開発/保守やってます
  2. AIを使わなくても自動化できるテスト describe('add function', () => { test('adds 1 + 2

    to equal 3', () => { expect(add(1, 2)).toBe(3); }); test('adds 0 + 0 to equal 0', () => { expect(add(0, 0)).toBe(0); }); }); こういうシンプルな関数に対してならテスト コードをよく書く(書いてない)
  3. // Googleのホームページを開く await driver.get('https://www.google.com'); // 検索ボックスを見つけて検索語を入力 let searchBox = await

    driver.findElement(By.name('q')); await searchBox.sendKeys('Selenium testing', Key.RETURN); await driver.wait(until.titleContains('Selenium testing'), 5000); // 検索結果のタイトルを取得 let firstResult = await driver.findElement(By.css('h3')); let resultText = await firstResult.getText(); console.log(`最初の検索結果: ${resultText}`); // タイトルに"Selenium"が含まれているか確認 let title = await driver.getTitle(); assert(title.includes('Selenium'), 'Seleniumが検索結果のタイトルに含まれていません '); リクエストを送る ので遅い セレクタが壊れや すい 一部要素を比較でき るだけ
  4. AI を取り入れたテスト用 SaaS の紹介 E2E テスト用 SaaS には AI を取り込んでこの類の問題の解決を目指すものが多々あ

    る。 applitools, MagicPod, mabl, TestSigma, Autify 等。。。 どれもやってることは割と似通っているので今回は代表として applitools を紹介
  5. applitools による差分検出 applitoolsでは差分検出する方法と程度を次の中から選べる • Exact : ピクセルレベルの完全一致 • Dynamic :

    日付、番号、URLのような特定パターンの動的値の変化を無視してくれる • Ignore colors : 色を無視 • Layout : 値を無視してレイアウトのみ比較 • Strict : 人間の目で見たときの差分のみ検出(デフォルト) 今回は Dynamic を選択
  6. Auto Playwright • AIにより自然言語によるアクション、クエリ、アサーションを可能に test("auto Playwright example", async ({ page

    }) => { await page.goto("/"); const headerText = await auto("get the header text", { page, test }); await auto(`Type "${headerText}" in the search box`, { page, test }); const searchInputHasHeaderText = await auto( `Is the contents of the search box equal to "${headerText}"?`, { page, test } ); expect(searchInputHasHeaderText).toBe(true); });
  7. Auto Playwright 検証のため抽象的なアサーションを与えてみた const notDistorted = await auto( 'The display

    is not distorted',aiArgs) expect(notDistorted).toBe(true) 結論から言うとダメでした
  8. Auto Playwright の実装を見てみる • Auto Playwright の実装を見ると OpenAI API の

    Function Calling という機能を 利用し、テスト対象の DOM 丸ごと全部と DOM 操作に必要なツール(要素をクリッ クする、チェックする、テキストをインプットする、idから要素のテキストを取得する、 など)を渡している。つまり、 「 君のタスクは ”表示が崩れていないか”だよ。 これがテスト対象のHTMLです。必 要なら君はこれらのツールを使うことができるので、使いたいならツールを使う上で 必要なパラメータを伝えてね」 というような事を指示しているようなもの。
  9. AI にスクショを見せて検証 • AI が使えるツールに “takeScreenshot” を追加 takeScreenshot: { function:

    async () => { const buffer = await page.screenshot(); return { screenshot: buffer.toString("base64") }; }, name: "takeScreenshot", description: "Takes a screenshot of the current page and returns it as a base64 string.", …… },
  10. AI にスクショを見せて検証 • 指示文を色々と変更 そのままだとスクショを使ってくれないので「スクリーンショット を撮って表示が崩れていないか確認して」などとしておく。 • がっ……駄目っ……! • やはり回答できなかったり異常検知できなかったり

    • 表示が崩れていないかの問いに「提供されたスナップショットにはレイアウトの問題 はなさそうです。すべてのテキストがそれぞれの要素内に適切に収まっているよう に見えます。」と返してきたこともあった • Function Calling というフレームワークが悪さをしているのか、それとも base64 encoding された画像をうまく認識できていない?