https://confengine.com/conferences/scrum-fest-niigata-2022/proposal/16447/01-e2e
スライドトップと してご利用ください マネーフォワード事業本部 山田 太郎 © Money Forward, Inc.0 → 1 フェーズでE2E 自動テストを導入した私たちのこれまでとこれから株式会社マネーフォワードHiroaki Nishijo / Yoya Kobayashi© Money Forward, Inc.2022.05.21 Scrum Fest Niigata 2022
View Slide
西條 広晃(Nishijo Hiroaki)@jojojo_no_johttps://note.com/nishijo_hiroaki/© Money Forward, Inc.マネーフォワード クラウド会計: QAマネージャー クラウド確定申告: 初代担当経歴● 2009〜2014 SESで開発&テスト● 2014〜2018 ネット証券会社でテスト● 2018〜 マネーフォワード JOIN
小林 羊哉(Kobayashi Maya / yoya)@yoya_k https://note.com/yoya_kマネーフォワード クラウド確定申告2代目QAリーダーMarkin’ Quality レギュラーメンバー(1日目の懇親会ジャックしたチームです!)経歴● 2009〜2016 小売業向けシステム開発● 2016〜2019 ブラウザゲーム開発● 2019〜 マネーフォワード JOIN & QAエンジニアに転身© Money Forward, Inc.
© Money Forward, Inc.本セッションでお話しするE2EテストはUIテストのことを指していますはじめに おことわりUnit TestsIntegrationTestsUITests
© Money Forward, Inc.みなさんE2Eテストの自動化やってますか?いつから自動化をはじめましたか?ノーコード?ローコード?順調?難航中?ローンチ前?運用に入ってから?
© Money Forward, Inc.リリースするまではUIの変更も多いだろうし、やっぱり運用フェーズに入ってからよく実行するテストケースを自動化するのが定石じゃないですか?そんなことないよ!!ええっ!?というのが今回のお話。
© Money Forward, Inc.本題に入る前に… ◀ 2020年フルリニューアル! 個人事業主のための確定申告作業をラクにする クラウド型確定申告ソフト● 青色申告や白色申告に対応● 確定申告書Bや青色申告決算書など申告に必要な書類の自動作成が可能● 2021年から分離課税・損失申告も可能に!アプリで確定申告をより簡単に! ▶iOS、Androidそれぞれ提供日々の仕訳業務からマイナンバーカードを利用した確定申告書提出まで1つのアプリで完結できるとは
© Money Forward, Inc.2013 2020 2021.06リリースフルリニューアルプロジェクト2月 キックオフ11月 リリース!・・・・・・本日の話の流れ導入篇 運用篇
導入篇
© Money Forward, Inc.プロジェクトが動き出した時の様子は?Sprint 0 期間:約2ヶ月やったことPdM:● ユーザーニーズの把握や要件まとめ(ペルソナ作成など)チーム:● インセプションデッキの作成● ペルソナを元にしたワークショップに参加● ユーザーストーリーマッピングをプロジェクト関係者全員で作成QAE:● どのように品質保証を進めるかを考える
● PJ開始当初から以下の条件のもとで進める必要があった○ スコープが広い○ ほぼ確定した納期がある○ スクラムを組んでイテレーティブな開発を行う○ 他PJとの兼ね合いで潤沢なQAリソースは見込めない© Money Forward, Inc.どのように品質保証を進めるか? 〜前提〜
● できるだけ前工程でバグを潰す○ 要件やデザインのレビューを行い、他機能との関連性やデザインの統一性などを確認● 不具合の資産化○ 不具合情報を資産として残せるよう、不具合管理を継続して行う© Money Forward, Inc.どのように品質保証を進めるか? 〜作戦1〜
● QAチェックを効率よく効果的に行う工夫○ スコープ、デリバリー、QAEリソースを加味して、実装が完了した機能に対して受入基準ベースの探索的テストを実行する○ 探索的テストの内容を自動化し、後続のSprintでリグレッションテストとして実行できるようにするのがQCDのバランス的に最善だと考えた○ QAEリソースに余裕ができた場合は積極的にリソースを投入し、いろんな視点でのチェックを行う© Money Forward, Inc.どのように品質保証を進めるか? 〜作戦2〜
● QAチェックを効率よく効果的に行う工夫○ スコープ、デリバリー、QAEリソースを加味して、実装が完了した機能に対して受入基準ベースの探索的テストを実行する○ 探索的テストの内容を自動化し、後続のSprintでリグレッションテストとして実行できるようにするのがQCDのバランス的に最善だと考えた○ QAEリソースに余裕ができた場合は積極的にリソースを投入し、いろんな視点でのチェックを行う© Money Forward, Inc.どのように品質保証を進めるか? 〜作戦2〜🔦自動E2Eテストの導入検討はここから始まりました。
● Must○ 使いやすいフレームワークであること○ 開発が継続して行われていること、ドキュメントが整っていること○ テスト結果をわかりやすく集計してくれること○ 各種CIツールで利用できること● Need○ テストケースが直感的に書けること○ 誰でも書けること● Want○ Spec/Stepの概念があると嬉しい、SpecがMarkdownなどで書けると嬉しい○ 日本語が使えると嬉しい© Money Forward, Inc.自動E2Eテスト導入まで道のり 〜選定条件〜
条件に合致した gauge+TAIKO を採用することに決定!© Money Forward, Inc.自動E2Eテスト導入まで道のり 〜採用〜参照:gauge.org
© Money Forward, Inc.● https://gauge.org/● SpecがMarkdown形式で書ける● 実装部分は複数言語サポート○ 確定申告ではjsを採用● https://taiko.dev/● Chromiumベースの自動テスト用API● Gaugeとセットで利用することが推奨されているメリット● Markdown形式のためレビューしやすい● taiko APIを利用することで、エンジニア経験が浅いメンバーでも実装が可能● GitHubでソース管理しているため、Sprintごとの差分やレビュー記録が参照しやすいgaugeとTAIKOについてちょっと紹介
© Money Forward, Inc.2020.5.7初めて画面のテストをpushするまで2020.3.5PJ本格始動!Specのない初期構成をpush2020.5.20初めて画面のテストをpush・・・・・・Sprint 0 の中盤 〜 Sprint 2 Sprint 3 Sprint 4
● gauge+TAIKO+Headless Chrome(以降同じ)● 自分の業務用Macbook Pro 1台● ケースが少なかったので直列で実行していた● 実行時間は30分くらい© Money Forward, Inc.実行環境 〜導入初期〜
© Money Forward, Inc.実行環境 〜導入中期〜● 導入中期 前半○ 直列で1時間半位かかるようになってきた■ →並列化(8並列)○ まだ自分の業務用Macbook Pro 1台● 導入中期 後半○ さらにケースが増えて3時間位■ →クラウドサーバに環境構築○ と自分の業務用Macbook Pro 1台○ 重要度の低いテストケースを実行対象外に○ 各8並列の計16並列で2時間くらい
● クラウドサーバのメモリを増強して、全てクラウドサーバ上で処理できるようにした● Jenkinsからキックできるようにした● 20並列で大体1時間15分位● 30分位かかるSpecがある○ 並列数を増やしてみたりした■ これ以上並列化しても時間短縮は見込めず© Money Forward, Inc.実行環境 〜導入後期〜jenkins.io
● 一人で対応していたので辛かった...○ 1Sprint 2week■ 1Sprintの前半に探索的テスト■ 1Sprintの後半に自動E2Eテストの実装○ 加えて、グループリーダー業務+プロジェクト掛け持ち● 時間に追われてドキュメントを残せていなかった...○ mayaさんごめんなさい© Money Forward, Inc.困ったこと・課題 〜その1〜
● 取りきれない不具合はもちろん存在した...● ランダムフェイルが多い...● クロスブラウザの対応ができなかった...(Chromeのみ)© Money Forward, Inc.困ったこと・課題 〜その2〜
● 0→1フェーズだからという理由で困ったことはない(と思う)○ 最初に目的や方針を明確にしていたのが良かったかも■ 作るケースの粒度があまりブレなかった○ Sprint 0でインセプションデッキやユーザーストーリーマッピングの構築に参加できたのも良かったかも■ プロダクトが目指している姿の解像度が高かった○ テスト実装の前に要件やデザインのレビューができていたのも良かったかも■ テスト観点の整理が早い段階でできた© Money Forward, Inc.良かったこと 〜その1〜
● やりきれたこと● gauge+TAIKOだからという理由で困ったことはない● SpecがMarkDownで残るのから超Good● 新機能実装時に既存機能の手動リグレッションテストの工数をだいぶ省ける● 自動テストの動作確認時にもう一回機能のチェックができる© Money Forward, Inc.良かったこと 〜その2〜
● 個人的には0→1フェーズでE2Eテストの自動化に取り組むのも悪くないなと思った○ 正直めちゃめちゃうまく行ったとは思ってない○ 変更が頻繁に入るプロダクトやプロジェクトだともっとつらみが凄そう○ QAEのプロダクトやプロジェクトへの関わり方によっても変わってきそう© Money Forward, Inc.導入篇まとめプロダクトやプロジェクトの性質、払えるコスト、スケジュールなどから適切に判断する必要がありそう
© Money Forward, Inc.運用篇
© Money Forward, Inc.怒涛の1stリリースを経て……● いちプロジェクトだったチームは、個人事業主本部として独立へ○ モバイルアプリ版の開発チームも合流● QA組織も併せて再構築することに○ 別プロジェクトに従事していた yoya に白羽の矢が立ったのだが……noteリンクはこちら
© Money Forward, Inc.PO / PdM+Domain Expert+Designer+QAFeature Team B個人事業主が日常的に使えるアプリへ!Feature Team A確定申告の機能を充実させよう!PBIItem 1Item 2Item 3Item 4Item 5・・・Product背景:One Team Scrum から LeSS へ1Sprintの期間も、この頃には2週間 → 1週間となっていた
© Money Forward, Inc.背景:実は結構難しい、確定申告という仕組み入出力のパターンがかなり多い● そもそも項目が多い○ 画面数も所得の種類などに合わせて多くなっていた● 複数の閾値が絡み合う○ 年齢や所得額によって異なる計算式○ 所得の種類も複数● 法令の絶妙な言い回し○ 合計所得金額 ≠ 総所得金額等 ≠ 総所得金額分離課税と損失申告 (2021年のマイルストーン)● 同じ名前の所得でもケースによって異なる課税形式(ex. 上場株式等の配当等)● 所得金額の再計算が入るため、計算式も難易度UP(参考)令和3年分所得税及び復興特別所得税の手引き(確定申告書B用)
© Money Forward, Inc.● 複数のフィーチャーチームに分かれたことで爆増したスクラムイベント○ QAがスクラムイベントの参加を減らすことによるリスクはこれまでの経験で理解していた○ というわけで、全部参加■ 更に当初、リファインメントが PO<->開発 と PO<->デザイナーの2セットあった■ それぞれのスクラムイベントが長時間になりがち● これは半年後くらいに解消されるが、それはまた別のお話早速キャパオーバー
© Money Forward, Inc.● 「QAさんのテストやレビューがOKにならないとDoneにならないんです」○ (QAが当たり前に開発フローの中に入っているのはありがたい話だと思いつつ)○ そもそもこれまでの1年分の仕様やその背景を知らない状態からのスタート■ 前年のプロダクトバックログアイテム(PBI)と国税庁のページを都度検索しながらのテスト■ Sprint前半はデザインレビュー、後半は仕様書レビューと探索的テスト● じっくり仕様を理解する時間が取りにくい○ 次Sprintに持ち越してしまうPBIが徐々に増えていった…早速キャパオーバー
© Money Forward, Inc.そしてE2E自動テストはどうなったか● 慣れるまでは西條さんが実行とメンテを担当するということで合意していたが……○ 結局余裕の無いまま、3ヶ月くらいお願いすることに● E2E自動テストの中でどんなシナリオが実行されて、何が担保されているのかほとんどわからない、ブラックボックス状態が続いた○ すでにシナリオは400件近くある○ それぞれのシナリオの意図を読み解くのが難しい内容になっていた■ 「なんでこの入力でこの出力結果になるんだろう?」「なんでこの表示をチェックしている(or していない)んだろう?」→ 根拠となる計算式やPBIを探し出すのに1〜2時間…
© Money Forward, Inc.● 新規画面のシナリオを作る余裕がない● シナリオ修正もひとりで抱え込むことに○ QAチームの他のメンバーは開発未経験■ 教える余裕がない■ 何から教えればいいのか考える余裕もない● その結果○ 深夜までシナリオ修正する日が度々発生していた○ 「E2E自動テストで何がテストされているのかわからない」というチーム内での不満が溜まっていくのを感じる実装・実行も引き継いだが……JSの構文を見せても伝わるかな…Gitはコマンド教えるだじゃダメだよね…
Gauge道場開設します!!!© Money Forward, Inc.そして2021年末、決意した
© Money Forward, Inc.週に1回、60〜90分くらいのハンズオン1. バージョン管理の基礎2. GitHubの使い方3. ローカルでGaugeを実行してみよう4. モブプロで簡単なシナリオ実装5. PRを出してみよう6. ブランチの運用についてGauge道場とは
© Money Forward, Inc.その結果……みんなにはきっと難しいと勝手に決めつけて壁を作っていたんだな…● 想定より1ヶ月前倒しでシナリオ実装が進んだ● シナリオの修正が必要な箇所を自主的にタスク化するようになった● 手動テストの要否を既存のシナリオから判断できるようになった○ =負担が大幅に減った!● なによりメンバーの目が輝いてきた!!!
© Money Forward, Inc.● いつ、何のPBIによって発生したシナリオ修正なのかコミットログやPRに残る○ シナリオの意図が第3者からも掴みやすい● 複数人でコードを触ると何が起きるか、というのを身をもって体験できる○ なぜブランチを作成する必要があるのか○ なぜデグレやコンフリクトが発生するのか○ ここから開発者の気持ちを考えるきっかけになるGitHub を使うことによる副次的な効果
© Money Forward, Inc.● 「ノーコードの自動テストツールに乗り換えることも検討した方がいい」と西條さんに言われたことがあったが、その選択は取らなかった● 実装経験を積む機会を回避させることが 最善だとは思えなかった○ E2Eテスト以外にも、ノーコードではないツールを使ってみたい・作ってみたいというタイミングは必ずどこかで出てくる○ どこかで一歩目を踏み出さないと、可能性は広がらない● ここでやれなかったら、どこでやるの?○ 一番挫折しがちな環境構築は済んでいて、運用もしている○ 少なくとも今1人、教えられる開発経験者がいる(=私)Gaugeを使い続ける理由 (1)
© Money Forward, Inc.● テキストベースでシナリオを記述できる強み○ コメントを柔軟に残しやすい■ 最近は途中計算や背景となったPBIのリンクを手厚めに記載している○ QA以外のメンバーに共有しやすい■ シナリオの一部をSlackにコピー&ペーストして挙動を相談することも○ 差分の比較もしやすい■ 毎年更新される様式と「5年前までさかのぼって申告できる」という要件■ プロダクトコードもE2Eテストのシナリオも、最大5つのバージョンを維持しなければならないGaugeを使い続ける理由 (2)
© Money Forward, Inc.リニューアル版 クラウド確定申告のリリースから約2年● これまでに作成されたPBI 2,000件以上● 複雑さゆえに重厚化していく要件と仕様ドキュメントを残すだけでは「現在どのように動作しているのか」という疑問や不安をカバーし続けるには限界があるだからこそ「具体的な入出力」を「ユーザーと同じふるまいで」メンテナンスし続ける「生きた手順書」 が必要動き続ける、生きた手順書
ご清聴ありがとうございました© Money Forward, Inc.QA Engineer 積極採用中ですまずはカジュアルにお話しましょう!