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

自動テストが巻き起こした開発プロセス・チームの変化 / Impact of Automated...

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

自動テストが巻き起こした開発プロセス・チームの変化 / Impact of Automated Testing on Development Cycles and Team Dynamics

More Decks by コドモン開発チーム

Other Decks in Technology

Transcript

  1. 8 CONFIDENTIAL - © 2022 CoDMON Inc. 8 そもそも •

    自動テストを推進するため にQAエンジニアに • テストは開発エンジニアも 巻き込むべきという思想 ◦ アンチ「最後の砦」
  2. 9 CONFIDENTIAL - © 2022 CoDMON Inc. 9 コドモンの自動テストのモチベーション 一般にテスト量はUnit

    Testを厚くして いくのが望ましいとされている 現状コドモンで注力している自動テスト • E2Eテスト (UI Test) • APIテスト (Integration Test) Unit Test Integration Test UI Test なのになぜコドモンではこのような 自動テスト戦略をとっているのか?
  3. 10 CONFIDENTIAL - © 2022 CoDMON Inc. 10 自動E2E・APIテストのメリット 1)

    ユーザーの操作に近いテストを自動化できる テストの基本は ストーリーに沿った ユーザー操作の代替と検証 • ユーザー操作不能を検知 • ユーザー目線での不具合を検知 • 定型的なリグレッションテストの工数削減
  4. 11 CONFIDENTIAL - © 2022 CoDMON Inc. 11 自動E2E・APIテストのメリット 2)

    テスタブルでないプロダクトに対する自動テストが可能 テスタブルでないプロダクトに 自動テストを導入する強力な手段 • 正しくアーキテクティングされていない ◦ リファクタリングのためのテスト • UTなど低レイヤーのテストが整っていない ◦ テスト拡充のためのテスト • 詳細な仕様が把握できていない
  5. 12 CONFIDENTIAL - © 2022 CoDMON Inc. 12 コドモンの状況 いままで

    これから レガシーアーキテクチャ 巨大モノリスで常に 慎重さが求められる モダンアーキテクチャ 可塑性があり 変化に強い構造 リアーキテクティング・リプレイスを正しく行うために 自動E2E・APIテストは欠かせない状況になっている
  6. 14 CONFIDENTIAL - © 2022 CoDMON Inc. 14 自動E2E・APIテストに対する要請 アジャイル開発

    • ATDD・TDD • プロダクトコードと 同じライフサイクル 開発者体験 • 作りやすい • 作れば実行され続けて 安心感が得られ続ける 実行速度 • 開発の支障にならない • リリースの支障に ならない • 並列化による高速実行 • 容易に作成可能 • プロダクトコードと一元管理 • CIによる継続自動実行 自動テスト基盤の 内製と運用
  7. 15 CONFIDENTIAL - © 2022 CoDMON Inc. 15 コドモンの現行自動E2E・APIテスト基盤 •

    specごとに閉じたデータ作成 ◦ 並列実行性 ◦ 再実行性 ◦ DB軽量化 ◦ テスト可搬性 ◦ 他テストと干渉しない setup.ts 実行環境 front / API spec DB specに閉じた施設データ 職員 園児 保護者 付帯データ INSERT
  8. 16 CONFIDENTIAL - © 2022 CoDMON Inc. 16 コドモンの現行CI環境 DB

    front / API Gauge test apply afdb7d DB front / API Gauge test apply • commit hashを識別子とした k8sによる独立環境自動構築 ◦ branchが干渉しない ◦ 開発者は考慮不要 68ff1a ★ テストを作っておけば 各種トリガーで勝手に実行される CI環境になっている コドモン Product Team Blog: https://tech.codmon.com/entry/2024/02/21/090546
  9. 19 CONFIDENTIAL - © 2022 CoDMON Inc. 19 テストファースト開発 「まずテストを作る」ことによるメリット

    • 不明瞭・暗黙的な仕様の明確化 • 明確な完了の定義 • テストがあることによる安心感 仕様(PRDなど) • 施設職員が機能Aで操作 Xを行うと、αできる テスト • 初期条件 ◦ 施設職員の権限 など • テスト操作 ◦ ログインする ◦ 機能Aを開く ◦ 操作Xを行う ◦ αできる 具体化 フィード バック 実装 if (職員.権限 !== 編集可能) { // 操作不能 } // 操作Xに関する処理の実行 実装で 実現 自動テスト 実行 自動テストを ガイドとして 間違いなく実装
  10. 20 CONFIDENTIAL - © 2022 CoDMON Inc. 20 リリース前の検証 開発チームA

    テスト 実装 開発チームB テスト 実装 集約ブランチ テスト 実装 • 自チームの対応は集約以前に 十分にテスト • 他チームの対応起因の 意図しない不具合の検出 ★ モノリスにおける各種心配事の軽減 ★ 受け入れテストのリグレッションテスト化 ◦ リグレッションテストのインクリメンタルな拡充
  11. 22 CONFIDENTIAL - © 2022 CoDMON Inc. 22 汎用テーブル解体・API分割 •

    多種多様なデータを格納 ◦ 認知負荷が高い ◦ 制約が設定できない ◦ 書き込み負荷の増大 など • データに引きずられた汎用API ◦ ドメインの結合 ◦ 高複雑度 コドモン Product Team Blog: https://tech.codmon.com/entry/2024/12/27/093720 • テスタブルでない ◦ UT作成のための リファクタリングが必要 ◦ リファクタリングする ためのテストが必要 • UTではDBはmockしての テストになってしまう 汎用テーブルによる問題
  12. 23 CONFIDENTIAL - © 2022 CoDMON Inc. 23 対応とテスト •

    汎用API分割 ◦ 機能ドメインごとに分割 ◦ 修正による他の機能への影響 を避ける 汎用API ドメインA API 「表面上の動作が変わっていないこと」を保証する → 自動E2Eテストが有用 ドメインB API 🆕 🆕 機能A 機能B
  13. 24 CONFIDENTIAL - © 2022 CoDMON Inc. 24 対応とテスト •

    リファクタリング ◦ モジュラーモノリス領域に分離 ◦ ロジックの集約・モデルへの制約 の実装 ◦ テーブル構造改善 「内部の動作が正当であること」 を保証する → 自動APIテストが有用 開発エンジニアによる テストの使い分けと テスト実装 ⛏
  14. 25 CONFIDENTIAL - © 2022 CoDMON Inc. 25 対応の結果と自動テストの効果 開発スピード

    向上 • 半年ほどで対応完了 ◦ 自動テストがなければ+1年くらい は伸びたかもしれない • 修正の機動力向上 • テストケース拡充が容易 安心感と DX向上 • 「自動テストなしでのテーブル解体 は考えられなかった」 • 修正してもテスト回せばOK 高難易度の 対応でも 挑戦 できるように なった!
  15. 27 CONFIDENTIAL - © 2022 CoDMON Inc. 27 みんなで自動テストを磨く •

    テスト拡充速度・質・密度の爆発的向上 ◦ 各ドメインのエキスパートが複数並列で拡充 • テスト作成ノウハウの共有 ◦ Flakyになりがちなパターンの蓄積など • 自動テスト基盤をみんなで育てる ◦ 「こんなアサーションがあったら便利だな」 テストの 民主化 みんなで使う自動テストだからこそ みんなが主体的に磨いていく
  16. 28 CONFIDENTIAL - © 2022 CoDMON Inc. 28 AI類によるテスト拡充 •

    自動テスト拡充の飛躍的な加速 ◦ 人力: ペア作業で1日1本 ◦ AI: 2〜3時間で1本 & 並列作成可能 • setup等含めほぼ自動で作成可能 ◦ 想定以上のアウトプットが出ることも • skillsを用いた自動化 ◦ 自動生成・実行 ◦ 作成・観点漏れ検知と補完 ★ 自動テストはAIも作成できる 自動化して あるかどうかで テスト活動の アジリティが 大きく変わる
  17. 30 CONFIDENTIAL - © 2022 CoDMON Inc. 30 テストの交通整理 ★

    想定を超えるテスト本数の増大 - メインプロダクトだけで1700本以上 テスト分析・計画・設計の 実施と随時の見直し • 今できる範囲での現実的な計画策定 • テスト一覧化・体系的整理 • テスト拡充状況の分析・把握と再計画 ◦ E2Eテスト偏重からの脱却 Ice Cream Cone Testing Trophy Test Pyramid
  18. 31 CONFIDENTIAL - © 2022 CoDMON Inc. 31 AIとの役割分担 人間の指示とAIの作業を

    橋渡しできる 自動テスト環境が必要 • 人間が作成したテスト仕様を実際のテスト に落とし込む仕組み ◦ テスト仕様の型化 • AIネイティブなコードベースの自動テスト 人間が行う作業 AIが行う作業 • 仕様面の調整・策定 ◦ 何を実現したいのか? ◦ 何を守りたいのか? • テスト実装 • プロダクト実装 • テスト実行・検証 → ヒューマンリーダブルなテスト仕様 → AIリーダブルなテスト実装
  19. 33 CONFIDENTIAL - © 2022 CoDMON Inc. 33 まとめ 開発プロセスをよりよくするきっかけとして、

    E2Eテスト自動化は有効な打ち手 • 自動テストとCI環境の整備はリグレッションテスト用途以外にも有効 ◦ 仕様の明確化・実装のガイド・バッティング不具合抑止 ◦ アジリティ・安心感・DX向上 • 自動テストだからこそみんなで磨いていける、AIパワーも生かせる