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

開発者とQAの越境で自動テストが増える開発プロセスを実現する

 開発者とQAの越境で自動テストが増える開発プロセスを実現する

ソフトウェアテスト自動化カンファレンス2024 で発表した資料です。
https://testautomationresearch.connpass.com/event/333442/

Ryota Kunisada

December 12, 2024
Tweet

More Decks by Ryota Kunisada

Other Decks in Programming

Transcript

  1. 国定 凌太 @92thunder テックタッチ株式会社のフロントエンドエンジニアPOとして 全てのWebシステムの価値を向上するサービスを開発 🆕 2024年12月からプロダクトオーナーになりました! 岡山県 津山高専 →

    ソニーデジタルネットワークアプリケーションズ → テックタッチ株式会社(当時創業1ヶ月 1人目社員) 2023年6月から北海道旭川市に移住 🆕 10月に家を建てたので東神楽町に引っ越した
  2. デジタルアダプションプラットフォーム (DAP):テックタッチ • WebサイトにJavaScriptを組み込むことで、 ノーコードでガイドやツールチップでの案内を追加 • JavaScriptスニペット / ブラウザ拡張で提供 DX支援

    (社員向け) CX支援 (顧客向け) ※1 弊社調べ、MAU換算 ※2 出所:株式会社アイ・ティ・アール「ITR Market View コミュニケーション/コラボレーション市場2023」 「デジタル・アダプション・プラットフォーム市場:ベンダー別売上金額推移およびシェア(2021~2023年度予測)」 ※1 ※2
  3. テックタッチの開発体制 フロントエンド ReactやTypeScriptを使い、Webフ ロントエンドの開発に取り組む 仕様の策定に関わることも多い QA(品質保証)エンジニア テスト実施だけでなく、開発プロセスの 早期から密に連携し、テスト分析やテス ト設計で品質に貢献する バックエンドエンジニア

    デザイナー データエンジニア プロジェクト 異なる職能のメンバーが 集まって機能開発💪 リグレッションテストの工数 - リリース前に行う手動テストの工数が多い - QAチームだけで自動テストを増やすのが難し い テストのシフトレフト エンジニア主体のテスト活動を増やしたい 開発者のためのテストを超えない テストを書く文化は根付いてきたが、 QAチームが実施する手動テストを減 らすまで繋がらない
  4. TIY(Test It Yourself)というテックタッチの社内活動 - TIY : QAチームが考案したTIY(Test It Yourself)というテックタッチ内の活動 -

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

    4. タスクAの詳細を開く 5. タスクAの期日を設定する 前提となる操作が必要 → 他の影響によってテストが故障しやすくなる 対象機能だけでなく、 ページ遷移も動作確認する必要がある コスパ良く自動化するには分解が必要 作成 / 詳細を開く / 期日を設定
  6. 継続的な開発に求められる自動テストとは - QAエンジニアが信頼できる自動テストになっていること - 自動テストに任せても良い、と思える文化が育っていないと手動テスト中心の開発プ ロセスになる - テストケースと自動テストが連携できていること - 連携されていないと、自動テストを増やしたところでリリース前に実施する手動テスト

    (リグレッションテスト)の工数は減らない - 開発プロセスの中で自動テストを増やし続けること - 手動テスト(E2Eテスト)を自動テストにするためにはテストケースの分解コストが必要 となってしまうため、始めから自動テストを前提としたテストケースを作る
  7. どんなテストがある? - URLからドメインを抽出する処理は正しい? - 1週間後の日付を算出する処理は正しい? - アプリを操作してDBに正しいデータが保存されているか? - UIに意図しない変更が入ってない? -

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

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

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

    バックエンドAPIはモックとして、仮のレスポンスデータを返す - インテグレーションテスト - SPAやブラウザ拡張をビルドした成果物に対してのテスト - バックエンドAPIはモックして、それ以外は実際の動作環境と同じ - E2Eテスト - 実際に動作するバックエンドAPIを使ったテスト
  11. Playwrightによるコンポーネントテストのデモ - UIモードでコンソールや ネットワークを 確認しながらデバッグ - Headedモードで実際の ブラウザでの動作を確認可能 - page.pause()

    で途中のUIを確認 - Watchモードでファイルの変更を検 知して自動実行 (2024/12/7現在ではexperimental) デモに使ったリポジトリ https://github.com/92thunder/playwright-ct-react-demo
  12. テックタッチの自動テストでテストのコスパを考える Small Medium Large ユニットテスト Jest ユニットテスト インテグレーション Playwright コンポーネント

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

    メリット - 対象のテストケースが手動なのか自動なのか管理できる - 定期実行している自動テストの結果の一覧を確認できる - JestやPlaywrightなどのテスティングフレームワークと連携できる
  14. 仕様から駆動する開発 + TIY 仕様策定 設計 実装 テスト分析・設計 テストケース作成 テスト実施 フロントエンドエンジニアが担当

    することが多い テスト技法の習得・工数の 負担が大きい 手動テストを前提とした テストケースはそのまま 自動テストになりにくい 仕様策定で得た知識が 設計に役立つことが多い
  15. 開発者 QA エンジニア “テストスクラム ” というプラクティスを考案 テスト プランニング テストリスト 作成

    テストリスト レビュー 自動テスト レビュー テスト 分析・設計 実装 仕様策定 テストケース作 成 - 自動テストを増やすために開発者とQAエンジニアが越境する場であり、 開発者にとって自然に品質を作るプロセスを求めてために考案した - いくつか自動テストを増やすためのイベントを設定しているため、スクラム開発に ちなんでテストスクラムと名付けてみた
  16. ここまでの取り組みから得られた学び Problem & Concern - テストリスト作成は仕様書を作成した開 発者からしたら仕様をなぞった確認とな りやすく二度手間に感じるのでは - テストしたいことを元にテストリストを作

    ることはできるが、テスト技法を使った分 析までは距離を感じる - Qaseと自動テストの連携がユースケー スに合わない部分がある - リグレッションテストの計画において、自 動テストがあるから手動テストを減らす ことに繋がるかはこれから Keep - テストの分類によって QAと開発者で協 力して自動テストに対する共通の認識を 持つことができた - ブラウザ上で動作するテストは QAエン ジニアにとって信頼が得られやすい - テストリストの作成とレビューによって、 テストケースを意識した自動テストに繋 げることができた - 自動テストを認識する場ができたことで QAエンジニアは経験ベースのテストに 集中しやすくなった