Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
フロントエンドエンジニアとQAエンジニアの協働による自動テストを増やす開発プロセス
Search
Ryota Kunisada
July 30, 2024
Programming
0
32
フロントエンドエンジニアとQAエンジニアの協働による自動テストを増やす開発プロセス
TechRAMEN Conference 2024で発表した資料です。
https://techramenconf.net/
Ryota Kunisada
July 30, 2024
Tweet
Share
More Decks by Ryota Kunisada
See All by Ryota Kunisada
開発者とQAの越境で自動テストが増える開発プロセスを実現する
92thunder
1
160
トランクベース開発の導入で見えた DevOpsの技術・プロセス・文化との繋がり
92thunder
0
770
開発生産性向上の取り組みログ
92thunder
0
65
どんなページでも動かす!JS_CSS汚染を避ける戦い
92thunder
0
180
Other Decks in Programming
See All in Programming
As an Engineers, let's build the CRM system via LINE Official Account 2.0
clonn
1
660
複雑な仕様に立ち向かうアーキテクチャ
myohei
0
160
事業成長を爆速で進めてきたプロダクトエンジニアたちの成功談・失敗談
nealle
3
1.4k
Discord Bot with AI -for English learners-
xin9le
1
120
rails stats で紐解く ANDPAD のイマを支える技術たち
andpad
1
270
useSyncExternalStoreを使いまくる
ssssota
5
960
競技プログラミングで 基礎体力を身につけよう / You can get basic skills through competitive programming
mdstoy
0
170
CSC305 Lecture 26
javiergs
PRO
0
130
Jakarta EE meets AI
ivargrimstad
0
1.2k
Zoneless Testing
rainerhahnekamp
0
110
第5回日本眼科AI学会総会_AIコンテスト_3位解法
neilsaw
0
160
数十万行のプロジェクトを Scala 2から3に完全移行した
xuwei_k
0
140
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
88
5.7k
Optimising Largest Contentful Paint
csswizardry
33
3k
Testing 201, or: Great Expectations
jmmastey
40
7.1k
GitHub's CSS Performance
jonrohan
1030
460k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
170
Producing Creativity
orderedlist
PRO
341
39k
Designing on Purpose - Digital PM Summit 2013
jponch
116
7k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
Building Your Own Lightsaber
phodgson
103
6.1k
Transcript
フロントエンドエンジニアと QAエンジニアの協働による 自動テストを増やす開発プロセスの実現 Tech RAMEN Conf 2024 @92thunder 2024/7/27
国定 凌太 @92thunder テックタッチ株式会社のフロントエンドエンジニアとして 全てのWebシステムの価値を向上するサービスを開発 フロントエンドからDevOpsをサポートする取り組みが好き 岡山県の津山高専(旭川と同じく街から離れた坂の上にある) → ソニーデジタルネットワークアプリケーションズ →
テックタッチ株式会社(当時創業1ヶ月 1人目社員) 2023年6月に北海道旭川市に移住 好きなラーメン:らーめん玄の醤油
デジタルアダプションプラットフォーム (DAP):テックタッチ • WebサイトにJavaScriptを組み込むことで、 ノーコードでガイドやツールチップでの案内を追加 • JavaScriptスニペット / ブラウザ拡張で提供 DX支援
(社員向け) CX支援 (顧客向け)
フロントエンド エンジニア QA エンジニア 自動テストだけで 品質を担保できる? どのテストが自動化 されているか管理したい 手動テスト前提の テストケースをそのまま
自動化しにくい テスト分析・設計って難しそう 素早く高品質な 機能を届ける! 💪 自動テストって何? ⬆ DevOpsを信じる心 🔥❤ ⬆ 様々な課題 Q Aと 対 話 し な が ら 1つ ず つ 乗 り越 え て い く
本日のお題目 フロントエンドとQAで自動テストを増やす取り組み 1. 自動テストとは? QAエンジニアとは? 📝 2. テックタッチのフロントエンドにおけるテストとは?🤔 3. QAエンジニアとフロントエンドでテストの状況を可視化する
🤝 4. 自動テストが増える開発プロセスの導入 🏃
手動テスト /自動テストとは
手動テスト、自動テストとは 手動テスト - 人が実際にシステムを操作して、期待値通りの結果となるか確認すること 自動テスト - 人が手作業でテストすることなく、プログラムやツールを使って 自動でテストを実行すること - プログラミング言語やアプリ/ブラウザ/APIなどのプラットフォーム向けに
多様なテスティングライブラリ / フレームワークが存在する
Playwrightによるコンポーネントテストのデモ - UIモードでコンソールや ネットワークを 確認しながらデバッグ - Headedモードで実際の ブラウザでの動作を確認可能 - page.pause()
で途中のUIを確認 - Watchモードでファイルの変更を検 知して自動実行 (2024/7/27現在ではexperimental) デモに使ったリポジトリ https://github.com/92thunder/playwright-ct-react-demo
QAエンジニアのお仕事
QAエンジニアのお仕事(参考資料: QAファンネル) テックタッチで は今ココ QAのロールをファンネルで表現したもの 組織内での役割の整理などに使われる 出典 :https://www.slideshare.net/slideshow/quality-management-funnel-3d-how-to-organize-qarelate d-roles-and-specialties/249498558#3
テックタッチの開発体制 フロントエンド ReactやTypeScriptを使い、Webフ ロントエンドの開発に取り組む 仕様の策定に関わることも多い QA(品質保証)エンジニア テスト実施だけでなく、開発プロセスの 早期から密に連携し、テスト分析やテス ト設計で品質に貢献する バックエンドエンジニア
デザイナー データエンジニア プロジェクト 異なる職能のメンバーが 集まって機能開発💪
テックタッチの開発体制 フロントエンド ReactやTypeScriptを使い、Webフ ロントエンドの開発に取り組む 仕様の策定に関わることも多い QA(品質保証)エンジニア テスト実施だけでなく、開発プロセスの 早期から密に連携し、テスト分析やテス ト設計で品質に貢献する バックエンドエンジニア
デザイナー データエンジニア プロジェクト 異なる職能のメンバーが 集まって機能開発💪 リグレッションテストの工数 - リリース前に行う手動テストの工数が多い - QAチームだけで自動テストを増やすのが難し い テストのシフトレフト エンジニア主体のテスト活動を増やしたい 開発者のためのテストを超えない テストを書く文化は根付いてきたが、 QAチームが実施する手動テストを減 らすまで繋がらない
フロントエンドとQAの共通目標 自動テストを増やすことで 手動テストの工数を減らし 安定したリリースを実現する
フロントエンドと QAで 自動テストの分類を揃える
どんなテストがある? - URLからドメインを抽出する処理は正しい? - 1週間後の日付を算出する処理は正しい? - アプリを操作してDBに正しいデータが保存されているか? - UIに意図しない変更が入ってない? -
バックエンドまで繋いだ状態で動作する? - localhostで起動したサービス/サーバで動作する? - 実際にデプロイされたサービスが一通り動作する? - 明日12時に設定したリマインダーが正しく通知されるか
どんなテストがある? - URLからドメインを抽出する処理は正しい? - 1週間後の日付を算出する処理は正しい? - アプリを操作してDBに正しいデータが保存されているか? - UIに意図しない変更が入ってない? -
バックエンドまで繋いだ状態で動作する? - localhostで起動したサービス/サーバで動作する? - 実際にデプロイされたサービスが一通り動作する? - 明日に設定したリマインダーが正しく通知されるか 複数の関数の組み合わせでも ユニットテスト? UI, 外部API, DBに依存するなら インテグレーションテスト? E2Eテストで時間差で動作する機能を 動作確認できる?
テストスコープとテストサイズによる分類 テストスコープ - 関数、モジュール、アプリといったテスト対象の結合度による分類 - ユニットテスト/インテグレーションテストはチームによってブレやすい テストサイズ - 基準が明確なのでテストスコープと比べて分類がブレにくい -
Small: 1プロセスで実行可能 - Medium: 1マシンで実行可能 - Large: 複数マシンで実行可能
テストスコープ /サイズを掛け合わせて考えるコスパ 詳しくはt-wadaさんの過去の発表資料を参照してください 🙏 https://speakerdeck.com/twada/automated-test-knowledge-from-savanna-202303
なぜテストの分類が必要か - フロントエンド・QAの双方 - テストの分類という共通の定義によって、 テストケースをどのテストで自動化するべきかといった会話が捗る - QAエンジニア - E2Eテスト以外の自動テストを知ることでテストケース分解した後の
自動テスト実行のイメージができる - フロントエンドエンジニア - テストのパターンができるため、テストへの心理的ハードルが下がる - 開発成果に対してどんなテストができているのか整理できる
テックタッチのフロントエンドにおけるテストの分類 - ユニットテスト - UIを必要としないロジックのテスト。主に開発者のためのテスト - コンポーネントテスト - ロジックを含むUIコンポーネントを対象としたテスト -
バックエンドAPIはモックとして、仮のレスポンスデータを返す - インテグレーションテスト - SPAやブラウザ拡張をビルドした成果物に対してのテスト - バックエンドAPIはモックして、それ以外は実際の動作環境と同じ - E2Eテスト - 実際に動作するバックエンドAPIを使ったテスト
テックタッチのフロントエンドにおけるテストの分類 - ユニットテスト:UIを必要としないロジックのテスト - コンポーネントテスト:UIコンポーネントを対象。バックエンド APIはモック - インテグレーションテスト:バックエンドAPIはモック、それ以外は実際の動作環境と同じ - E2Eテスト:実際に動作するバックエンド
APIを使ったテスト 分類で大事にしたこと • 分類に迷いにくいようにわかりやすい基準を使う • テストサイズの分類を参考に • QAエンジニアにレビューしてもらいながら作成
テックタッチの自動テストでテストのコスパを考える Small Medium Large ユニットテスト Jest ユニットテスト インテグレーション Playwright コンポーネント
Playwright インテグレーション E2Eテスト Playwright E2E UIコンポーネントに対して直接テストできる 致命的に遅いわけではないので、 Watchモードも実用的 テストサイズ テスト スコープ 内部でViteでビルドしてPlaywrightでテスト実行するため、1プロセス実行ではない→厳密にはSmallと呼ばないかも
テストピラミッド / テスティングトロフィー テストサイズによるテストピラミッド:Smallを増やすとテストのコスパが良い テスティングトロフィー:インテグレーションテストが信頼性とコスト/速度のバランスが良い https://speakerdeck.com/twada/automated-test-knowledge-from-savanna-202305-edition https://kentcdodds.com/blog/the-testing-trophy-and-testing-classifications
テストピラミッド / テスティングトロフィー テストサイズによるテストピラミッド:Smallを増やすとテストのコスパが良い テスティングトロフィー:インテグレーションテストは信頼性とコスト/速度のバランスが良い https://speakerdeck.com/twada/automated-test-knowledge-from-savanna-202305-edition https://kentcdodds.com/blog/the-testing-trophy-and-testing-classifications Playwright コンポーネントテストは どちらとしても理に適っている
テスト管理ツールの導入と 自動テストの連携
テスト管理ツール Qase の導入 - 以前はGoogleスプレッドシートで大量のテストケースを管理していた - QAチームでテスト管理ツール Qase を導入 -
メリット - 対象のテストケースが手動なのか自動なのか管理できる - 定期実行している自動テストの結果の一覧を確認できる - JestやPlaywrightなどのテスティングフレームワークと連携できる
Qaseの機能紹介:テストケースの管理、登録 https://docs.qase.io/general/get-started-with-the-qase-platform/test-cases テストスイート・テストケースの管理 テストケースの登録 Automation Statusも管理できる
Qaseの機能紹介:テストランで実行するテストの管理 https://docs.qase.io/general/get-started-with-the-qase-platform/create-a-test-run テスト実施するケースの決定やアサイン テストの実行状況を確認
Qase Playwright Reporter - Playwrightで記述したテストを テストケースとしてQaseに登録できる - テストの実行結果をQase上で 確認することができる https://www.npmjs.com/package/playwright-q
ase-reporter
自動テストを増やす準備は整った! - フロントエンドのテスト分類 - QAエンジニアとフロントエンドで実施しているテストの認識を揃えた - Playwrightでどんな自動テストが実現できるのかわかった - Qaseでのテスト管理 -
手動テストと自動テストの総数がわかるようになった - PlaywrightとQaseの連携 - テストケースの自動化とテストの実行結果が可視化された
自動テストが増える 開発プロセスを実現する
テストのシフトレフト シフトレフトとは? - 開発プロセスの早期にテストに取り組み、品質を高める活動 - セキュリティの文脈で語られることが多いが、 テストやQAとしてもShift Left Testingとしてトレンドになっている 開発プロセス
要件定義 設計 実装 テスト 結合 小さくテスト テスト分析で貢献
テックタッチにおけるテストのシフトレフト - インプロセスQAとして、実装と並行でテスト分析 /設計、 テスト可能な粒度で細かくテスト実施 - TIY : QAチームが考案したTIY(Test It
Yourself)というテックタッチ社内活動 - 開発者が主体的にテスト活動を行い、品質とアジリティが同時に高まることを期待 - プロジェクト内のQAメンバーにサポートしてもらいつつ、 テスト分析・設計から開発者が取り組み、テストケースを作成する - https://www.qbook.jp/column/1846.html - TIYによって開発者がテスト活動に直接関わることで、テスト活動への関心が高まる → 実際に後続の取り組みに繋がる
TIY(Test It Yourself)とテスト自動化の課題 - テスト分析・設計に深く取り組む負担が大きい - QAのテスト技法はそれだけでお金を稼ぐこともできる職能スキル - 仕様策定から設計・実装まで時間をかけている開発者に さらに工数の負担を増やすことになる
- テストケースの手順を作成すると、E2Eテストを前提にしたものとなり メンテナンスコストの低い自動テストに繋がりにくい
手動テスト (E2E)を前提としたテストケースの例 例:ToDoリストアプリ タスクの期日を設定できること 1. アプリケーションのURLを開く 2. タスク一覧のページを開く 3. タスクAを作成する
4. タスクAの詳細を開く 5. タスクAの期日を設定する 前提となる操作が必要 → 他の影響によってテストが故障しやすくなる 対象機能だけでなく、 ページ遷移も動作確認する必要がある コスパ良く自動化するには分解が必要 作成 / 詳細を開く / 期日を設定
仕様から駆動する開発 + TIY 仕様策定 設計 実装 テスト分析・設計 テストケース作成 テスト実施 フロントエンドエンジニアが担当
することが多い テスト技法・工数の 負担が大きい 手動テストを前提とした テストケースはそのまま 自動テストになりにくい 仕様策定で得た知識が 設計に役立つことが多い
仕様から駆動する自動テストへ 仕様策定 設計 実装 テストリスト作成 テストリスト レビュー フロントエンドエンジニアが担当 することが多い 仕様策定で得た知識が
設計に役立つことが多い テストケース 登録 仕様・設計を元に テストしたいことリストを作成 テストリストを元に 自動テストを追加 QAエンジニアに追加すべき観点を教えてもらい 少しずつテスト分析・設計力を向上 QAエンジニアによるテスト分析 /設計やテストケース作成も引き続き並行
実際の例:仕様 →テストリスト →自動テスト
仕様書から駆動する自動テスト - 仕様や設計によってテストリストが生まれ、自動テストに繋がる - メリット - QAエンジニアから見て、テストリストのほとんどがテスト自動化 されるという認識を持つことができる - 自然言語で確認項目を記述するため、フロントエンドエンジニアにとって書きや
すい - テストケースは作らず、テストしたいことを元にテストを書くので テストサイズの小さいテストが生まれやすい
自動テストがテストの主役になってきた …! - QAエンジニアによるテストリストのレビュー、テストリストを元に 自動テスト書いてますよーというコミュニケーションを続けていた - ある日、QAチームからの新機能を対象としたテスト内容のレビューにて - 基本的な機能のテスト →
各チームの自動テスト - 機能全体を通して機能の動作を確認するテスト → QAチームによるシステムテスト、経験ベースのテスト - 自動テストをテストの中心として考えるようになってきた!!
残っている課題:手動テストの自動化 機能の追加時には、自動テストを基本的なテストとして追加できるようになった 既に作成されている大量の手動のテストケースを どう分解して自動テストに置き換えていくか・・・ 手動テスト 🆕 自動テスト 手動テスト 機能 追加
自動テスト
本日の発表のまとめ フロントエンドとQAで自動テストを増やす取り組み 1. 自動テストとは? QAエンジニアとは? 📝 - フロントエンドのテストはPlaywrightコンポーネントテストが便利 - QAエンジニアはテスターではなく、品質の改善に取り組む職能
2. テックタッチのフロントエンドにおけるテストとは? 🤔 - 分類を作ることで、QAとフロントエンドで自動テストの認識を揃えた 3. QAエンジニアとフロントエンドでテストの状況を可視化する 🤝 - QaseとPlaywrightを連携して自動化状況や実行ステータスの可視化 4. 自動テストが増える開発プロセスの導入 🏃 - 仕様→テストリスト→自動テスト という繋がりによって 自動テストをテストの主役に近づけることができた
今日の発表内容の多くは t-wada さんの アウトプットを何度も読んで着想を得て 現場で実践してきた内容です この場を借りてあらためて感謝 🙏 t-wadaさんの資料をたくさん読んで 心の中のt-wadaさんとテストに取り組もう!