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

『呪術廻戦 ファントムパレード』のバックエンドにおけるテスト実装の取り組み【CAGC2024】

CyberAgent
March 08, 2024
370

『呪術廻戦 ファントムパレード』のバックエンドにおけるテスト実装の取り組み【CAGC2024】

『呪術廻戦 ファントムパレード』のバックエンドチームでは、大規模なソース開発を安定して行うためテスト実装についてルールを策定し取り組んでいます。
本セッションでは、ファンパレのバックエンドにおけるテスト実装の取り組みについてご紹介します。
具体的にどのようなテストを実装しているのか、どのようなことを意識してチーム内で取り組んでいるのかをご説明しつつ、テストを活用した仕組みの例もご紹介させていただきます。

https://cagc.cyberagent.co.jp/2024/session/index.html?id=Mv7FRTUd

©芥見下々/集英社・呪術廻戦製作委員会 ©Sumzap, Inc./TOHO CO., LTD.
Copyright © CyberAgent, Inc.

CyberAgent

March 08, 2024
Tweet

More Decks by CyberAgent

Transcript

  1. バックエンドにおけるテスト実装の役割 5 テストを通して、APIや実装の振る舞いが正しい事を動作確認する レベルアップするリクエスト - キャラのデータ - 消費するアイテムの データ -

    何レベル強化するか API レベルアップしたレスポンス - レベルアップした キャラのデータ - 所持数の減った アイテムのデータ テスト用に仮のデータを作って、実行してみる
  2. バックエンドにおけるテスト実装の役割 6 テストを通して、APIや実装の振る舞いが正しい事を動作確認する レベルアップするリクエスト - キャラのデータ - 消費するアイテムの データ -

    何レベル強化するか API レベルアップしたレスポンス - レベルアップしてない キャラのデータ - 所持数が減ってない アイテムのデータ 想定外の結果となったら、テスト失敗
  3. テスト実装の取り組み 12 主に3種類のテストを実装しています - Unitテスト - Featureテスト - Integrationテスト 以下の事を重視しています

    - なるべく全てのメソッドを網羅するテストを書くこと - 不要なDBアクセスを避け、テストを軽くすること
  4. Featureテストの役割 16 主にリクエストのバリデーションが正しいかを検証 レベルアップするリクエスト - キャラAのデータ - 強化アイテム15個 - 「3レベル強化」

    チェック項目 • キャラのデータは正しい? • アイテムの消費数は整数? • 強化するレベルは正の整数? テスト用に仮のデータを作って、実行してみる Request
  5. Featureテストの役割 17 主にリクエストのバリデーションが正しいかを検証 レベルアップするリクエスト - キャラAのデータ - 強化アイテム15個 - 「-5

    レベル強化」 チェック項目 • キャラのデータは正しい? • アイテムの消費数は整数? • 強化するレベルは 正の整数ではない 異常なリクエストが、正しくエラーになることを確認 Request
  6. Integrationテスト実装時のルール 20 - Actionごと(APIごと)に必ず書く - mockを使わず、包括的にテストを実施する - 実際にDBにデータを入れてテストする - HTTPステータスではなく、実際のResponseの内容を見て評価する

    - 正常系のみのテストが好ましい - 1テストごとにデータ挿入、データ削除をしているので truncateする分大変に重い - なるべくテストを軽くするため、ケース数を減らす
  7. テスト実装の取り組み - まとめ 22 主に3種類のテストを実装しています - Unitテスト - Featureテスト -

    Integrationテスト 以下の事を重視しています - なるべく全てのメソッドを網羅するテストを書くこと - 不要なDBアクセスを避け、テストを軽くすること
  8. テスト実装にかかる時間 26 話者が3種の実装中でテスト実装に掛かった時間は以下の通り - 規模の大きなAPIの実装 約50分 (実装全体: 約240分) - やや規模の大きなAPI改修

    約15分 (改修全体: 約120分) - 小規模な改修 約10分 (改修全体: 約40分) 特に複雑で規模の大きな新規実装においては、 テストの実装はかなり時間がかかってしまう。