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

チームでテストを実装していく / Implementing Tests as a Team

ropQa
June 01, 2024

チームでテストを実装していく / Implementing Tests as a Team

ropQa

June 01, 2024
Tweet

More Decks by ropQa

Other Decks in Technology

Transcript

  1. 01. チームによるテストの実装 02. テストの取り組み a. Integration Testの実装 b. テストサイズを⽤いたリグレッションテストの⾃動化 c.

    受⼊基準によるテスト実装の⽀援 d. バックエンドテスト指針‧Integration Testを書いてみる会 e. チームでテストアーキテクチャを育てるために学ぶ 03. チームでテストを実装するために⼤切だったこと ⽬次
  2. Integration Testの実装 Unit Testがイケてないなぁ Integration Testで解決できないか?? • コントローラ層のテストがmockだらけで、リファクタリング耐性が低い • DBとのすべてのやりとりを検証するなど、実装の詳細が不必要にテストに露出 している

    重要な機能のデグレを防ぐためにテストを書きたい。ただ、どう書く の?? • E2Eはすでに仕組みとしてある。ただ、外部サービスへのリクエスト内容はE2E ではテストしにくい… • Unit Testより範囲を広く、Integration Testでカバーしたい。だけど、実現⽅法 が分からない 当初の⼆⼈の課題感
  3. Integration Testの実装 開発合宿 • 2⽇間 • 普段とは違うやりたい開発ができる! DIやライブラリの設定など 共通部分を整えていく 仕組みを使って

    実際のテストケースを ごりごり書いていく ⼆⼈でIntegration Testの最初の1個を書いてみる at 開発合宿 2023年も開発合宿を開催しました freee Developers Hub
  4. NewApp NewUseCase NewDB NewHogeClient Integration Testの実装 プロダクションコード Integration Test そのまま

    NewConfig NewTestConfig 置き換え こんなIntegration Testを書いてみました 前提 • Back EndはGo • google/wireを利⽤ ちょっと紹介 • テストもwireでDI • 差分は最⼩限に e.g., 依存サービス のURL差し替え NewApp NewUseCase NewDB NewHogeClient
  5. ⽬の前の課題に集中して取り組み、その課題解決から得られたインサイト を元に次の課題に取り組む、という道を辿った a. ✅ Integration Testの実装 b. ⏭ テストサイズを⽤いたリグレッションテストの⾃動化 c.

    受⼊基準によるテスト実装の⽀援 d. バックエンドテスト指針‧Integration Testを書いてみる会 e. チームでテストアーキテクチャを育てるために学ぶ テストの取り組み
  6. また「そのテストケースで発⾒することを⾒込んでいる事象の重篤度情報(※)」を 整理し、どのテストから対応すると良いか判断できるようにした ※重篤度とは、freee社内で定義している「事象のヤバさ」を表現する指標  4段階の指標であり、重篤度が⾼い順にcritical, major, normal, minorとしている  Eng, QA, PdM,

    PD全員で、プロダクトの重篤度を定義している テストサイズを⽤いたリグレッションテストの⾃動化 重篤度を⽤いて、テストケースのインパクトを表現する このテストが落ちる(この機能が正常に 動かない)ということは、 誤送⾦が起こるリスクがあるということ 重篤度critical
  7. ⽬の前の課題に集中して取り組み、その課題解決から得られたインサイト を元に次の課題に取り組む、という道を辿った a. ✅ Integration Testの実装 b. ✅ テストサイズを⽤いたリグレッションテストの⾃動化 c.

    ⏭ 受⼊基準によるテスト実装の⽀援 d. バックエンドテスト指針‧Integration Testを書いてみる会 e. チームでテストアーキテクチャを育てるために学ぶ テストの取り組み
  8. ⽬の前の課題に集中して取り組み、その課題解決から得られたインサイト を元に次の課題に取り組む、という道を辿った a. ✅ Integration Testの実装 b. ✅ テストサイズを⽤いたリグレッションテストの⾃動化 c.

    ✅ 受⼊基準によるテスト実装の⽀援 d. ⏭ バックエンドテスト指針‧Integration Testを書いてみる会 e. チームでテストアーキテクチャを育てるために学ぶ テストの取り組み
  9. バックエンドテスト指針‧Integration Testを書いてみる会 バックエンドテスト指針 例) • 例えば、このValidateメソッド のようなビジネスロジックは Unit Testで書きたい •

    複数のプロセス外依存を呼び 出す、usecaseのテストは Integration Testでカバーした い ドメイン‧モデル/ アルゴリズム コントローラ 過度に複雑な コード コードの複雑さ/ ドメインにおけ る重要性 協⼒者オブジェクトの数 取るに⾜らない コード 単体テストの考え方/使い方 図7.1
  10. 例) 事実上のentrypointに対して、正常系の Integration Testを少なくとも1つ「必ず書く」 バックエンドテスト指針‧Integration Testを書いてみる会 バックエンドテスト指針 gateway infra usecase

    / grpc batch worker 🤔 書き⽅は分かったけど、 何に対してどれくらい書くの?? 必ず書きたいテストを明⽂化してルールに
  11. バックエンドテスト指針‧Integration Testを書いてみる会 チームで書けるようになった? • Integration Testを書いてみる会 ◦ 新規のテストケースも⼀から作成できるように! • バックエンドテスト指針

    ◦ いったん、⽅針にそってテスト実装を進めていけそう! 次の課題は持続可能性 困りごとや不満点に応じて、軌道修正もしていきたい!
  12. ⽬の前の課題に集中して取り組み、その課題解決から得られたインサイト を元に次の課題に取り組む、という道を辿った a. ✅ Integration Testの実装 b. ✅ テストサイズを⽤いたリグレッションテストの⾃動化 c.

    ✅ 受⼊基準によるテスト実装の⽀援 d. ✅ バックエンドテスト指針‧Integration Testを書いてみる会 e. ⏭ チームでテストアーキテクチャを育てるために学ぶ テストの取り組み