Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
フロントエンドにおける テスト方針〜Testing Trophyの概念とBDD〜
Search
やじはむ
October 25, 2023
Technology
2
5.7k
フロントエンドにおける テスト方針〜Testing Trophyの概念とBDD〜
2023/10/25 CTOA若手エンジニアコミュニティ 勉強会 #4
やじはむ
October 25, 2023
Tweet
Share
More Decks by やじはむ
See All by やじはむ
TypeScriptのパフォーマンス改善
yajihum
21
8.9k
アクセシビリティを考慮したUI/CSSフレームワーク・ライブラリ選定
yajihum
3
2.1k
Cloudflare R2 + Reactを使って 絵文字ピッカーのnpmパッケージを作ってみた
yajihum
0
1.2k
Other Decks in Technology
See All in Technology
Building Products in the LLM Era
ymatsuwitter
10
5.3k
急成長する企業で作った、エンジニアが輝ける制度/ 20250214 Rinto Ikenoue
shift_evolve
3
1.2k
エンジニアのためのドキュメント力基礎講座〜構造化思考から始めよう〜(2025/02/15jbug広島#15発表資料)
yasuoyasuo
16
6.5k
人はなぜISUCONに夢中になるのか
kakehashi
PRO
6
1.6k
目の前の仕事と向き合うことで成長できる - 仕事とスキルを広げる / Every little bit counts
soudai
24
7k
Developers Summit 2025 浅野卓也(13-B-7 LegalOn Technologies)
legalontechnologies
PRO
0
650
室長と気ままに学ぶマイクロソフトのビジネスアプリケーションとビジネスプロセス
ryoheig0405
0
360
2/18/25: Java meets AI: Build LLM-Powered Apps with LangChain4j
edeandrea
PRO
0
100
自動テストの世界に、この5年間で起きたこと
autifyhq
10
8.4k
飲食店予約台帳を支えるインタラクティブ UI 設計と実装
siropaca
7
1.7k
Cloud Spanner 導入で実現した快適な開発と運用について
colopl
1
510
データの品質が低いと何が困るのか
kzykmyzw
6
1.1k
Featured
See All Featured
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Into the Great Unknown - MozCon
thekraken
35
1.6k
Being A Developer After 40
akosma
89
590k
Rebuilding a faster, lazier Slack
samanthasiow
80
8.8k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
29
1k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
9
440
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.7k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Writing Fast Ruby
sferik
628
61k
Fireside Chat
paigeccino
34
3.2k
Transcript
フロントエンドにおける テスト方針 やじはむ @yajihum 2023/10/25 @CTOA若手エンジニアコミュニティ 勉強会 #4 〜Testing Trophyの概念とBDD〜
@yajihum @yajihum https://yajium.day やじはむ 自己紹介 ↑ロリス @COMPASS Front-end Engineer 社会人2年目
フロントエンドのテスト、 何を意識して書いてますか? 突然ですが... そもそも、ただ書くのではなく、何かを意識しながら書けていますか?
BDD Testing Trophy 弊社では最近、以下を意識してテストを書いている
E2Eテスト End to Endの略 ヘッドレスブラウザ+UIオートメーションで実施するテストのこと Integration(結合)テスト コンポーネント間の相互作用をテストするもの 単体テストより単位が大きく広くカバーする Unit(単体)テスト コンポーネント単体をテストするもの
コーナーケースの検証の向いている 静的解析 TypeScriptやESLintなどによる静的解析 前提として、テストの種類には以下の4つがある
どの範囲のテストにどれくらいのコストをかけるか テストピラミッドの図 参照:https://gihyo.jp/dev/serial/01/savanna-letter/0005 テストピラミッドは、 Unitテストの比率が一番高くな るようにしている フロントエンドのテストにおいて 本当に効果的か?
最適化の答えの一つ Testing Trophyの考え方 Testing Trophyの図 参照:https://testingjavascript.com/ Testing Library の 作
者 で あ る Kent C.Doddsは、 Integrationテスト に最もコストをかけるべきだと 言っている
なぜInteg rationテストか? Testing Trophyの図 参照:https://testingjavascript.com/ コンポーネントだけで成立する機能は ほとんどない フロントエンドにおいて、単体の Integrationテストが一番 効果とコストのバランスが取れている
ソフトウェアが正しく動くことを 保証する効果が薄いのに単体テストを多 く書くことは最適ではない
Testing Trophyのテスト方針とBDD Integrationテストを多く書くことが大切なのはわかったが、 具体的に何をどう書いていけばいいか? ⭐️実装の詳細をテストしないことが大切
Testing Trophyのテスト方針とBDD 実装の詳細とは? →簡単に言うと、「ユーザーから見えないもの」のこと 例えば、以下の2つの対比がある ユーザーから見えないもの コンポーネント内で使用している関数 ステートなど ユーザーから見えるもの ボタンや表示されているテキスト
UI部分全般
Testing Torphyのテスト方針とBDD なぜ実装の詳細を書いてはいけないのか? False Negative 壊れるべきでないときに壊れてしまう ユーザーの振る舞いを変えずに実装の詳細だけを変更(リファクタリン グ)するときに、実装の詳細を書いたテストは当然壊れる False Positive
壊れるべきときに壊れない 実装の詳細のテストは粒度が小さいため、コンポーネント間の連携などの 挙動を担保できない テストは通っているのに、アプリ全体の挙動は壊れているなどに繋がる
Testing Torphyのテスト方針とBDD ユーザーから見えるものをテストする つまりBDDをするということ! BDD:Behavior-Driven Development(振る舞い駆動開発) 「ユーザーがこれをするとこうなる」という粒度(抽象度)でテストを書くこと になるので、ユースケース単位のコンポーネント間の連携テストが書きやすい
まとめ Testing Trophyの概念とは、各テストの効果とコストを 考えた上で、一番効果的なIntegrationテストをたくさん 書こうというもの Testing Trophyの概念に沿ったテストの書き方として、 「実装の詳細を書かない」ことが大切 「実装の詳細を書かない」→「ユーザーから見えるものを テストする」にはBDDをしよう!
ご清聴 ありがとうございました!
参考 【フロントエンド】コンポーネント指向 React / Vue のテスト 方針 テストピラミッド~自動テストの信頼性を中長期的に保つ最適 なバランス~ フロントエンド開発のためのテスト入門
今からでも知っておき たい自動テスト戦略の必須知識