Slide 1

Slide 1 text

Toms(@toms74209200) Testing Trophyは叫ばない フロントエンドカンファレンス北海道2025 2025-09-06

Slide 2

Slide 2 text

テスト書いてますか?

Slide 3

Slide 3 text

フロントエンドテストの普及 テストツールの充実

Slide 4

Slide 4 text

Testing Trophy https://x.com/kentcdodds/status/960723172591992832 🙅 🙆 『Googleのソフトウェアエンジニアリング―持続可能なプログラミングを支える技術、文化、プロセス』より

Slide 5

Slide 5 text

Testing Trophy • リソースには限りがあるよ • ユーザーの使い方に近いテストが意味のあるテストだよ • 統合テストが一番コスパがいいよ https://kentcdodds.com/blog/the-testing-trophy-and-testing-classi fi cations

Slide 6

Slide 6 text

新たな課題 • 2回に1回は失敗する • 変更のたびにテストが壊れる • いつまでたっても終わらない 第2回 偽陽性と偽陰性 ~自動テストの信頼性をむしばむ現象を理解する~ | gihyo.jp https://gihyo.jp/dev/serial/01/savanna-letter/0002 第8回 脆いテスト ~継続的な変更と改善を阻むテストの原因と対策~ | gihyo.jp https://gihyo.jp/dev/serial/01/savanna-letter/0008

Slide 7

Slide 7 text

• 2回に1回は失敗する • 変更のたびにテストが壊れる • いつまでたっても終わらない 新たな課題 第2回 偽陽性と偽陰性 ~自動テストの信頼性をむしばむ現象を理解する~ | gihyo.jp https://gihyo.jp/dev/serial/01/savanna-letter/0002 第8回 脆いテスト ~継続的な変更と改善を阻むテストの原因と対策~ | gihyo.jp https://gihyo.jp/dev/serial/01/savanna-letter/0008 「3回くらいリトライしたらうまくいくよ」 / / CIͩͱࣦഊ͢ΔͷͰεΩοϓ͍ͯ͠·͢ɻϩʔΧϧͰ࣮ߦ͍ͯͩ͘͠͞ɻ 失敗するから失敗してもテスト通ったことにします マシンパワーで解決💪 「リリースに間に合わないのでテストスキップしてリリースします」 CI通るまで休憩☕

Slide 8

Slide 8 text

• 2回に1回は失敗する • 変更のたびにテストが壊れる • いつまでたっても終わらない 新たな課題 第2回 偽陽性と偽陰性 ~自動テストの信頼性をむしばむ現象を理解する~ | gihyo.jp https://gihyo.jp/dev/serial/01/savanna-letter/0002 第8回 脆いテスト ~継続的な変更と改善を阻むテストの原因と対策~ | gihyo.jp https://gihyo.jp/dev/serial/01/savanna-letter/0008 「3回くらいリトライしたらうまくいくよ」 / / CIͩͱࣦഊ͢ΔͷͰεΩοϓ͍ͯ͠·͢ɻϩʔΧϧͰ࣮ߦ͍ͯͩ͘͠͞ɻ 失敗するから失敗してもテスト通ったことにします マシンパワーで解決💪 「リリースに間に合わないのでテストスキップしてリリースします」 CI通るまで休憩☕ どうしてこうなった🤷

Slide 9

Slide 9 text

Testing Trophyだけでは解決できない問題がある • 「統合テスト」って? • なんでもかんでも統合テストにしてない? • 単体テストでも統合テストでも 脆いテストや信頼不能テストは生まれる ここはOK👌

Slide 10

Slide 10 text

Toms(@toms74209200) 株式会社アジェンダ(@札幌) どんぐりはいいぞ whoami https://note.com/donguri_of fi cial/n/nc8ce1d339f09

Slide 11

Slide 11 text

ここまでのまとめ • テストつらい:信頼不能テスト、脆いテスト、スローテスト • Testing Trophyだけでは解決できなさそう 新しい指標が必要

Slide 12

Slide 12 text

Googleのテストサイズ Feature Small Medium Large Network access No localhost only Yes Database No Yes Yes File system access No Yes Yes Use external systems No Discouraged Yes Multiple threads No Yes Yes Sleep statements No Yes Yes System properties No Yes Yes Time limit (seconds) 60 300 900 https://testing.googleblog.com/2010/12/test-sizes.html 『Googleのソフトウェアエンジニアリング―持続可能なプログラミングを支える技術、文化、プロセス』

Slide 13

Slide 13 text

Googleのテストサイズ 『Googleのソフトウェアエンジニアリング―持続可能なプログラミングを支える技術、文化、プロセス』より

Slide 14

Slide 14 text

Feature Small Medium Large Network access No localhost only Yes Database No Yes Yes File system access No Yes Yes Use external systems No Discouraged Yes Multiple threads No Yes Yes Sleep statements No Yes Yes System properties No Yes Yes Time limit (seconds) 60 300 900 Googleのテストサイズ 安定 不安定 短い 長い テスト時間 安定性 https://testing.googleblog.com/2010/12/test-sizes.html

Slide 15

Slide 15 text

3つのテスト手法 『単体テストの考え方/使い方 プロジェクトの持続可能な成長を実現するための戦略』 状態ベース・テスト 出力値ベース・テスト コミュニケーション・ベース・テスト

Slide 16

Slide 16 text

フロントエンドの3つのテスト手法 出力値 状態 コミュニケーション 関数 (00% 0, /( UI  (00% 0, E2E  (00% 0, 壊れやすい 壊れにくい

Slide 17

Slide 17 text

Test sizesとテスト手法 関数 UI E2E Small GOOD GOOD - Medium NG OK GOOD Large NG NG OK

Slide 18

Slide 18 text

『Clean Architecture 達人に学ぶソフトウェアの構造と設計』

Slide 19

Slide 19 text

『Clean Architecture 達人に学ぶソフトウェアの構造と設計』 “最上位レベルのディレクトリ構造と 最上位レベルのパッケージのソースファイルは、 「ヘルスケアシステム」「会計システム」「在庫管理システム」と叫んでいるだろうか?”

Slide 20

Slide 20 text

叫ぶテストアーキテクチャ

Slide 21

Slide 21 text

叫ぶテストアーキテクチャ small・UIテスト medium・UIテスト small・関数テスト large・E2Eテスト

Slide 22

Slide 22 text

叫ぶテストアーキテクチャ vite.small.con fi g.ts

Slide 23

Slide 23 text

叫ぶテストアーキテクチャ 個別に実行できる CI/CDのタイミングに応じて実行するテストをカスタマイズ

Slide 24

Slide 24 text

まとめ • フロントエンドテストの課題:失敗しやすいテスト、脆いテスト、スローテスト • Test sizesとテスト手法によりテストを分類 • Test sizesごとにテストファイルを分離、分けて実行 関数 UI E2E Small GOOD GOOD - Medium NG OK GOOD Large NG NG OK