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

フロントエンドエンジニアとQAエンジニアの協働による自動テストを増やす開発プロセス

 フロントエンドエンジニアとQAエンジニアの協働による自動テストを増やす開発プロセス

TechRAMEN Conference 2024で発表した資料です。
https://techramenconf.net/

Ryota Kunisada

July 30, 2024
Tweet

More Decks by Ryota Kunisada

Other Decks in Programming

Transcript

  1. フロントエンド エンジニア QA エンジニア 自動テストだけで 品質を担保できる? どのテストが自動化 されているか管理したい 手動テスト前提の テストケースをそのまま

    自動化しにくい テスト分析・設計って難しそう 素早く高品質な 機能を届ける! 💪 自動テストって何? ⬆ DevOpsを信じる心 🔥❤ ⬆ 様々な課題 Q Aと 対 話 し な が ら 1つ ず つ 乗 り越 え て い く
  2. Playwrightによるコンポーネントテストのデモ - UIモードでコンソールや ネットワークを 確認しながらデバッグ - Headedモードで実際の ブラウザでの動作を確認可能 - page.pause()

    で途中のUIを確認 - Watchモードでファイルの変更を検 知して自動実行 (2024/7/27現在ではexperimental) デモに使ったリポジトリ https://github.com/92thunder/playwright-ct-react-demo
  3. テックタッチの開発体制 フロントエンド ReactやTypeScriptを使い、Webフ ロントエンドの開発に取り組む 仕様の策定に関わることも多い QA(品質保証)エンジニア テスト実施だけでなく、開発プロセスの 早期から密に連携し、テスト分析やテス ト設計で品質に貢献する バックエンドエンジニア

    デザイナー データエンジニア プロジェクト 異なる職能のメンバーが 集まって機能開発💪 リグレッションテストの工数 - リリース前に行う手動テストの工数が多い - QAチームだけで自動テストを増やすのが難し い テストのシフトレフト エンジニア主体のテスト活動を増やしたい 開発者のためのテストを超えない テストを書く文化は根付いてきたが、 QAチームが実施する手動テストを減 らすまで繋がらない
  4. どんなテストがある? - URLからドメインを抽出する処理は正しい? - 1週間後の日付を算出する処理は正しい? - アプリを操作してDBに正しいデータが保存されているか? - UIに意図しない変更が入ってない? -

    バックエンドまで繋いだ状態で動作する? - localhostで起動したサービス/サーバで動作する? - 実際にデプロイされたサービスが一通り動作する? - 明日12時に設定したリマインダーが正しく通知されるか
  5. どんなテストがある? - URLからドメインを抽出する処理は正しい? - 1週間後の日付を算出する処理は正しい? - アプリを操作してDBに正しいデータが保存されているか? - UIに意図しない変更が入ってない? -

    バックエンドまで繋いだ状態で動作する? - localhostで起動したサービス/サーバで動作する? - 実際にデプロイされたサービスが一通り動作する? - 明日に設定したリマインダーが正しく通知されるか 複数の関数の組み合わせでも ユニットテスト? UI, 外部API, DBに依存するなら インテグレーションテスト? E2Eテストで時間差で動作する機能を 動作確認できる?
  6. なぜテストの分類が必要か - フロントエンド・QAの双方 - テストの分類という共通の定義によって、 テストケースをどのテストで自動化するべきかといった会話が捗る - QAエンジニア - E2Eテスト以外の自動テストを知ることでテストケース分解した後の

    自動テスト実行のイメージができる - フロントエンドエンジニア - テストのパターンができるため、テストへの心理的ハードルが下がる - 開発成果に対してどんなテストができているのか整理できる
  7. テックタッチのフロントエンドにおけるテストの分類 - ユニットテスト - UIを必要としないロジックのテスト。主に開発者のためのテスト - コンポーネントテスト - ロジックを含むUIコンポーネントを対象としたテスト -

    バックエンドAPIはモックとして、仮のレスポンスデータを返す - インテグレーションテスト - SPAやブラウザ拡張をビルドした成果物に対してのテスト - バックエンドAPIはモックして、それ以外は実際の動作環境と同じ - E2Eテスト - 実際に動作するバックエンドAPIを使ったテスト
  8. テックタッチの自動テストでテストのコスパを考える Small Medium Large ユニットテスト Jest ユニットテスト インテグレーション Playwright コンポーネント

    Playwright インテグレーション E2Eテスト Playwright E2E UIコンポーネントに対して直接テストできる 致命的に遅いわけではないので、 Watchモードも実用的 テストサイズ テスト スコープ 内部でViteでビルドしてPlaywrightでテスト実行するため、1プロセス実行ではない→厳密にはSmallと呼ばないかも
  9. テスト管理ツール Qase の導入 - 以前はGoogleスプレッドシートで大量のテストケースを管理していた - QAチームでテスト管理ツール Qase を導入 -

    メリット - 対象のテストケースが手動なのか自動なのか管理できる - 定期実行している自動テストの結果の一覧を確認できる - JestやPlaywrightなどのテスティングフレームワークと連携できる
  10. テックタッチにおけるテストのシフトレフト - インプロセスQAとして、実装と並行でテスト分析 /設計、 テスト可能な粒度で細かくテスト実施 - TIY : QAチームが考案したTIY(Test It

    Yourself)というテックタッチ社内活動 - 開発者が主体的にテスト活動を行い、品質とアジリティが同時に高まることを期待  - プロジェクト内のQAメンバーにサポートしてもらいつつ、 テスト分析・設計から開発者が取り組み、テストケースを作成する - https://www.qbook.jp/column/1846.html - TIYによって開発者がテスト活動に直接関わることで、テスト活動への関心が高まる → 実際に後続の取り組みに繋がる
  11. 手動テスト (E2E)を前提としたテストケースの例 例:ToDoリストアプリ タスクの期日を設定できること 1. アプリケーションのURLを開く 2. タスク一覧のページを開く 3. タスクAを作成する

    4. タスクAの詳細を開く 5. タスクAの期日を設定する 前提となる操作が必要 → 他の影響によってテストが故障しやすくなる 対象機能だけでなく、 ページ遷移も動作確認する必要がある コスパ良く自動化するには分解が必要 作成 / 詳細を開く / 期日を設定
  12. 仕様から駆動する開発 + TIY 仕様策定 設計 実装 テスト分析・設計 テストケース作成 テスト実施 フロントエンドエンジニアが担当

    することが多い テスト技法・工数の 負担が大きい 手動テストを前提とした テストケースはそのまま 自動テストになりにくい 仕様策定で得た知識が 設計に役立つことが多い
  13. 仕様から駆動する自動テストへ 仕様策定 設計 実装 テストリスト作成 テストリスト レビュー フロントエンドエンジニアが担当 することが多い 仕様策定で得た知識が

    設計に役立つことが多い テストケース 登録 仕様・設計を元に テストしたいことリストを作成 テストリストを元に 自動テストを追加 QAエンジニアに追加すべき観点を教えてもらい 少しずつテスト分析・設計力を向上 QAエンジニアによるテスト分析 /設計やテストケース作成も引き続き並行
  14. 自動テストがテストの主役になってきた …! - QAエンジニアによるテストリストのレビュー、テストリストを元に 自動テスト書いてますよーというコミュニケーションを続けていた - ある日、QAチームからの新機能を対象としたテスト内容のレビューにて - 基本的な機能のテスト  →

    各チームの自動テスト - 機能全体を通して機能の動作を確認するテスト  → QAチームによるシステムテスト、経験ベースのテスト - 自動テストをテストの中心として考えるようになってきた!!
  15. 本日の発表のまとめ フロントエンドとQAで自動テストを増やす取り組み 1. 自動テストとは? QAエンジニアとは? 📝 - フロントエンドのテストはPlaywrightコンポーネントテストが便利 - QAエンジニアはテスターではなく、品質の改善に取り組む職能

    2. テックタッチのフロントエンドにおけるテストとは? 🤔 - 分類を作ることで、QAとフロントエンドで自動テストの認識を揃えた 3. QAエンジニアとフロントエンドでテストの状況を可視化する 🤝 - QaseとPlaywrightを連携して自動化状況や実行ステータスの可視化 4. 自動テストが増える開発プロセスの導入 🏃 - 仕様→テストリスト→自動テスト という繋がりによって 自動テストをテストの主役に近づけることができた