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.8k
フロントエンドにおける テスト方針〜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
2/18 Making Security Scale: メルカリが考えるセキュリティ戦略 - Coincheck x LayerX x Mercari
jsonf
0
190
AIエージェント時代のエンジニアになろう #jawsug #jawsdays2025 / 20250301 Agentic AI Engineering
yoshidashingo
8
3.6k
クラウドサービス事業者におけるOSS
tagomoris
4
1k
大規模アジャイルフレームワークから学ぶエンジニアマネジメントの本質
staka121
PRO
3
1.1k
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
18k
ExaDB-XSで利用されているExadata Exascaleについて
oracle4engineer
PRO
3
240
Apache Iceberg Case Study in LY Corporation
lycorptech_jp
PRO
0
310
短縮URLをお手軽に導入しよう
nakasho
0
150
技術スタックだけじゃない、業務ドメイン知識のオンボーディングも同じくらいの量が必要な話
niftycorp
PRO
0
100
AIエージェント入門
minorun365
PRO
31
17k
サイト信頼性エンジニアリングとAmazon Web Services / SRE and AWS
ymotongpoo
7
1.5k
EMConf JP 2025 懇親会LT / EMConf JP 2025 social gathering
sugamasao
2
190
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
PRO
50
11k
Git: the NoSQL Database
bkeepers
PRO
427
65k
Large-scale JavaScript Application Architecture
addyosmani
511
110k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.3k
Mobile First: as difficult as doing things right
swwweet
223
9.4k
How GitHub (no longer) Works
holman
314
140k
Done Done
chrislema
182
16k
The Invisible Side of Design
smashingmag
299
50k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
21
2.5k
The Language of Interfaces
destraynor
156
24k
Bash Introduction
62gerente
611
210k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
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 のテスト 方針 テストピラミッド~自動テストの信頼性を中長期的に保つ最適 なバランス~ フロントエンド開発のためのテスト入門
今からでも知っておき たい自動テスト戦略の必須知識