Slide 1

Slide 1 text

自動テストが巻き起こした 開発プロセス・チームの変化 2026年3月3日 株式会社コドモン 水落 光 QA Tech Talk #8 開発チームで取り組むE2Eテスト自動化 3社のQAに聞く、「挑戦」の一歩目

Slide 2

Slide 2 text

2 経歴 元C++エンジニア。「自動化できるテストは自動化し、人が やらなければならないことに注力する」ためにQAエンジニアに。 朝食はご飯でもパンでもなく、餅派。 自己紹介 2020.01 コドモンにQAエンジニアとして入社       主にテスト自動化・パイプライン構築に従事 水落 光 (シチウ @dashi_no_ajiwai) みずおち ひかる

Slide 3

Slide 3 text

3 Mission

Slide 4

Slide 4 text

4 すべての先生に 子どもと向き合う 時間と心のゆとりを こんなプロダクトを開発しています メインプロダクトは、保育・教育施設向けWebアプリケーション。 保護者と施設のやり取りを支えるモバイルアプリケーションや、施設職員向けモバイル版 アプリケーション、外部サービスと連携するAPIなども開発しています。

Slide 5

Slide 5 text

5 こんなプロダクトを開発しています 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 24,000 施設 700自治体導入

Slide 6

Slide 6 text

6 コドモンの自動テストの現在の方針 1 2 3 コドモンの自動テストのしくみ 自動テストがもたらした変化 4 見えてきた課題 5 まとめ

Slide 7

Slide 7 text

7 コドモンの自動テストの現在の方針 1 2 3 コドモンの自動テストのしくみ 自動テストがもたらした変化 4 見えてきた課題 5 まとめ

Slide 8

Slide 8 text

8 CONFIDENTIAL - © 2022 CoDMON Inc. 8 そもそも ● 自動テストを推進するため にQAエンジニアに ● テストは開発エンジニアも 巻き込むべきという思想 ○ アンチ「最後の砦」

Slide 9

Slide 9 text

9 CONFIDENTIAL - © 2022 CoDMON Inc. 9 コドモンの自動テストのモチベーション 一般にテスト量はUnit Testを厚くして いくのが望ましいとされている 現状コドモンで注力している自動テスト ● E2Eテスト (UI Test) ● APIテスト (Integration Test) Unit Test Integration Test UI Test なのになぜコドモンではこのような 自動テスト戦略をとっているのか?

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

11 CONFIDENTIAL - © 2022 CoDMON Inc. 11 自動E2E・APIテストのメリット 2) テスタブルでないプロダクトに対する自動テストが可能 テスタブルでないプロダクトに 自動テストを導入する強力な手段 ● 正しくアーキテクティングされていない ○ リファクタリングのためのテスト ● UTなど低レイヤーのテストが整っていない ○ テスト拡充のためのテスト ● 詳細な仕様が把握できていない

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

13 コドモンの自動テストの現在の方針 1 2 3 コドモンの自動テストのしくみ 自動テストがもたらした変化 4 見えてきた課題 5 まとめ

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

17 コドモンの自動テストの現在の方針 1 2 3 コドモンの自動テストのしくみ 自動テストがもたらした変化 4 見えてきた課題 5 まとめ

Slide 18

Slide 18 text

18 開発工程の変化

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

21 リアーキテクティングの実例: 汎用テーブル解体・API分割 とそのテスト

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

26 想定を超えた変化

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

29 コドモンの自動テストの現在の方針 1 2 3 コドモンの自動テストのしくみ 自動テストがもたらした変化 4 見えてきた課題 5 まとめ

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

31 CONFIDENTIAL - © 2022 CoDMON Inc. 31 AIとの役割分担 人間の指示とAIの作業を 橋渡しできる 自動テスト環境が必要 ● 人間が作成したテスト仕様を実際のテスト に落とし込む仕組み ○ テスト仕様の型化 ● AIネイティブなコードベースの自動テスト 人間が行う作業 AIが行う作業 ● 仕様面の調整・策定 ○ 何を実現したいのか? ○ 何を守りたいのか? ● テスト実装 ● プロダクト実装 ● テスト実行・検証 → ヒューマンリーダブルなテスト仕様 → AIリーダブルなテスト実装

Slide 32

Slide 32 text

32 コドモンの自動テストの現在の方針 1 2 3 コドモンの自動テストのしくみ 自動テストがもたらした変化 4 見えてきた課題 5 まとめ

Slide 33

Slide 33 text

33 CONFIDENTIAL - © 2022 CoDMON Inc. 33 まとめ 開発プロセスをよりよくするきっかけとして、 E2Eテスト自動化は有効な打ち手 ● 自動テストとCI環境の整備はリグレッションテスト用途以外にも有効 ○ 仕様の明確化・実装のガイド・バッティング不具合抑止 ○ アジリティ・安心感・DX向上 ● 自動テストだからこそみんなで磨いていける、AIパワーも生かせる

Slide 34

Slide 34 text

34 ちなみに

Slide 35

Slide 35 text

35 コドモン採用ページ コドモンでは一緒に働きたい仲間を募集しています! 開発チームX

Slide 36

Slide 36 text

36 ご清聴ありがとうございました!

Slide 37

Slide 37 text

No content