Slide 1

Slide 1 text

MagicPodミートアップ ヘルススコアNight ヘルススコアの改善の過程で起きた 嬉しい変化 Takafumi Yanagawa (@tyngw) MagicPodミートアップ ヘルススコアNight

Slide 2

Slide 2 text

MagicPodミートアップ ヘルススコアNight Agenda | 01 02 03 04 05 About me & us はじめに ヘルススコアを上げるために取り組んだこと ヘルススコアを改善する中で起きた嬉しい変化 まとめと今後の課題

Slide 3

Slide 3 text

MagicPodミートアップ ヘルススコアNight ● スタディサプリのQAエンジニアをしています ● ソフトウェアテストが好きです ○ テスト⾃動化も好きです ● ⼩学1年と1歳の娘がいます ● 電気⼯事⼠の資格を持ってます ○ 我が家の照明・配線器具の交換やエアコン 掃除をしています ⾃⼰紹介 Takafumi Yanagawa (@tyngw) 別名: アシカ

Slide 4

Slide 4 text

MagicPodミートアップ ヘルススコアNight 👆こちらのプロダクト群を横断する QA組織に所属しています

Slide 5

Slide 5 text

MagicPodミートアップ ヘルススコアNight 対象は Webアプリ 本⽇のスコープとなるサービス 本⽇お話しする対象のサービス スタディサプリ for TEACHERSの機能の1つ 先⽣と⽣徒間、先⽣と保護者間での コミュニケーション機能

Slide 6

Slide 6 text

MagicPodミートアップ ヘルススコアNight Agenda | 01 02 03 04 05 About me & us はじめに ヘルススコアを上げるために取り組んだこと ヘルススコアを改善する中で起きた嬉しい変化 まとめと今後の課題

Slide 7

Slide 7 text

MagicPodミートアップ ヘルススコアNight 本⽇お話しすること 🙆 E2Eテスト⾃動化の安定運⽤を実現するために、何を考え、 どのように実践していったのかをご紹介します 🙆 その結果、得られた効果をご紹介します 🙅 MagicPodで実装する上でのTIPSやテクニックはご紹介しません (交流タイムでたっぷりとお話ししましょう🍺)

Slide 8

Slide 8 text

MagicPodミートアップ ヘルススコアNight 体制 ◯ ◯ ◯ 開発 △△△開発 □□□開発 QAグループ QAエンジニア QAエンジニアは開発組織に常駐し、 実業務やプロセスの整備と改善を⾏っています QAエンジニア QAエンジニア

Slide 9

Slide 9 text

MagicPodミートアップ ヘルススコアNight * Darklaunchと呼ばれるFeature Togglesの仕組みにより、デプロイとは独⽴してリリースタイミング を決めることもできます。 スタディサプリのWebアプリケーションはこうやって開発されている https://blog.studysapuri.jp/entry/2023/03/17/studysapuri-development リリースサイクルについて リリース⽅法 対象 タイミング・テスト⽅法 Weekly Release モノリスアプリケーションや モノリスに依存するWebサー ビス群 週に1度、Weekly Happy Path Testを実⾏し、ブロッカ ーがなければリリース(*) Single Release モノリスに依存がないマイク ロサービス 任意のタイミングでリリース 所属チームがオーナーシップを持っているサービスのリリース⽅法は主に2種類あります

Slide 10

Slide 10 text

MagicPodミートアップ ヘルススコアNight E2Eテスト⾃動化の⽬的 ● 任意のタイミングで⾏われるSingle Releaseにおいて、利⽤者に影響 がある⽋陥を検出する ● Weekly Releaseで実施しているリグレッションテストよりも早いタイ ミングでリグレッションを検知することにより、開発者に素早く⽋陥 の情報をフィードバックする

Slide 11

Slide 11 text

MagicPodミートアップ ヘルススコアNight ⽬的を達成するために考えていたこと リグレッションを 検知したい テスト結果の 信頼性を⾼める ⾃動テストの 保守性を⾼める 偽陽性/偽陰性 を減らす テスト対象の 試験性の向上 定期的に実⾏ 結果のモニタリ ングと修正 開発者の協⼒

Slide 12

Slide 12 text

MagicPodミートアップ ヘルススコアNight あれ…ヘルススコアの項⽬そのものでは︖ ● ⼗分なメンバーが参加する ● ⼗分なテストケースを作成する ● 共有ステップを活⽤する ● テストケースを⻑すぎないように保つ ● テストケースを⽇次実⾏する ● 定期実⾏によるテストが安定して成功する ● 安定したロケータを使⽤する

Slide 13

Slide 13 text

MagicPodミートアップ ヘルススコアNight ヘルススコアを上げることで ⽬的達成もできる︕

Slide 14

Slide 14 text

MagicPodミートアップ ヘルススコアNight Agenda | About me & us はじめに ヘルススコアを改善するために取り組んだこと ヘルススコアを改善する中で起きた嬉しい変化 まとめと今後の課題 01 02 03 04 05

Slide 15

Slide 15 text

MagicPodミートアップ ヘルススコアNight ⾃動テストケース実装フェーズで取り組んだこと① 最⼩限のテストケースを実装 ⼀部のWeb開発者とHappy Path相当の 最⼩限のテストケースを実装 確実に保守できる量のテストケースを実装 機能⼀覧と考慮すべき条件の⼀覧を作り、 実装の優先度を決定 *実際のドキュメントを参考に作成したサンプル(架空)で す

Slide 16

Slide 16 text

MagicPodミートアップ ヘルススコアNight ⾃動テストケース実装フェーズで取り組んだこと② ハンズオンの開催 MagicPodを知らない開発者に対して ハンズオンを開催 ● 簡単なテストケースを実装してもらう ● 実装済みのテストの概要を知ってもらう E2Eテスト⾃動化の活動を認知してもらう もう◯◯ケースも実装されてい る︕ 処理の共通化もできるんですね なるほど、こうすると保守性が ⾼くなるのか〜 参加者のコメント

Slide 17

Slide 17 text

MagicPodミートアップ ヘルススコアNight Slackにテスト結果を通知し、 確認結果や対応状況をスレッドに投稿 ⾃動テストの運⽤・保守フェーズで取り組んだこと① 偽陽性・偽陰性への対処 ⽇次で実⾏し、結果をモニタリング ● 偽陽性が⾒つかった時は、即⽇中に修正 し、テストが失敗する状況を放置しない ● 偽陰性が⾒つかった時は、 E2Eテストで担保すべきか検討 テスト結果の信頼性を⾼める

Slide 18

Slide 18 text

MagicPodミートアップ ヘルススコアNight ⾃動テストの運⽤・保守フェーズで取り組んだこと② 振る舞いの変化への対応 テスト対象の挙動に変化があった時は、些細 なことでも開発チームに相談 相談の結果、意図した変更であることがほと んどであるものの、⾃動テストの担当者内で 閉じずに都度コミュニケーションをとる E2E⾃動テストの結果に関⼼を持ってもらう

Slide 19

Slide 19 text

MagicPodミートアップ ヘルススコアNight MagicPodさんが提案する プラクティスそのものです スタートガイド︓5.テスト⾃動化の習慣を最速で定着させる(ブラウザ)

Slide 20

Slide 20 text

MagicPodミートアップ ヘルススコアNight 取り組みの結果 ヘルススコアは98まで上がりました🎉

Slide 21

Slide 21 text

MagicPodミートアップ ヘルススコアNight Agenda | 01 02 03 04 05 About me & us はじめに ヘルススコアを上げるために取り組んだこと ヘルススコアを改善する中で起きた嬉しい変化 まとめと今後の課題

Slide 22

Slide 22 text

MagicPodミートアップ ヘルススコアNight 嬉しい変化① ライブラリアップデート時のリグレッションを早期に検知可能に Renovate / Dependabot でのライブラリバージョンアップ時の問題にいち早く気づけるようになった これまでは週次のWeekly Happy Path Testで検知していた事象が PR mergeの翌⽇には検知できるようになった リグレッションの原因となったPRの特定がしやすくなった * PR = Pull Request

Slide 23

Slide 23 text

MagicPodミートアップ ヘルススコアNight リグレッションが検知できた︕ めでたしめでたし🎉

Slide 24

Slide 24 text

MagicPodミートアップ ヘルススコアNight おしまい🎉

Slide 25

Slide 25 text

MagicPodミートアップ ヘルススコアNight だけではなかった…︕

Slide 26

Slide 26 text

MagicPodミートアップ ヘルススコアNight 嬉しい変化② MagicPodを活⽤したテストの相談が来るようになった 開発チームから、フロントエンドビルド基盤のリプレースにあたって 実装済みのテストを活かしてリグレッションを検知することはできないかという相談が持ちかけられた まだVRT(Visual Regression Test)が実装されていないサブシステムに対して、既存のMagicPodシナ リオにVRTを追加することで、追加⼯数を最⼩限に抑えてVRTを実装 リグレッションを発⽣させることなくビルド基盤のリプレースを実現 * storycap + reg-cliによるVRTを導⼊しているサブシステムもあります

Slide 27

Slide 27 text

MagicPodミートアップ ヘルススコアNight 嬉しい変化③ 開発者から軽微な変更内容であっても共有してもらえるように ⾃動テスト担当者から軽微な変化を報告していった結果、 開発者からもデザインの微修正、⽂⾔の変更などを⾏った際に、 「E2E⾃動テストで差分が出るかもしれない」ことを事前に共有してもらえるようになった あらかじめ変更内容を把握できていることで、事前の修正やテスト結果の判定が容易に * 機能の変更などにはQAも関わりますが、デザイン・⽂⾔の変更はPO・デザイナーレビューで完結することもあります

Slide 28

Slide 28 text

MagicPodミートアップ ヘルススコアNight 嬉しい変化④ テスト対象システムの不安定さの検知 ⾃動テストスクリプト起因での失敗を減らしていくことで、 テスト対象システム起因で、再現頻度が毎回ではないエラーなどの事象に気づけるようになった ⾃動テストの効果を⽰していたことで、開発チームに温度感⾼く調査・修正してもらえるようになり、 テスト対象システムの安定性が向上した テスト対象システムの安定性が向上することで、 ⾃動テストの信頼性も⾼めることができた

Slide 29

Slide 29 text

MagicPodミートアップ ヘルススコアNight Agenda | About me & us はじめに ヘルススコアを上げるために取り組んだこと ヘルススコアを改善する中で起きた嬉しい変化 まとめと今後の課題 01 02 03 04 05

Slide 30

Slide 30 text

MagicPodミートアップ ヘルススコアNight ● テスト⾃動化のベストプラクティスを着実に実践することで、 リグレッションの検知という⽬的を達成することができました ● 継続的に、テスト対象システムの変化を報告していくことで、 開発者も含めたチーム全体に⾃動テストが認知されるとともに、 テスト結果が信頼されるようになりました ○ ⾃動テストという資産を活かした新たな取り組みができるように なりました ○ テスト対象システムの安定性を⾼めることにも繋がっています まとめ

Slide 31

Slide 31 text

MagicPodミートアップ ヘルススコアNight 今後の課題 ● テストが増えることによって実⾏時間が延びる ○ 並列実⾏を導⼊することで解消しつつあるものの、 テストデータの独⽴性に課題 ● 毎回ユニークなデータを作成しなければならないテストが⾃動化でき ていない ○ ユーザの新規登録といった⼀部のテストを除き、 ユーザデータなどは作成済みのデータを利⽤している ● Web/モバイルを跨ぐテストが⾃動化できていない ○ 例えば、Webで送信したメッセージをモバイルで確認するなど

Slide 32

Slide 32 text

MagicPodミートアップ ヘルススコアNight ご清聴ありがとうございました