Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
フロントエンドにおける テスト方針〜Testing Trophyの概念とBDD〜
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
やじはむ
October 25, 2023
Technology
8.2k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
フロントエンドにおける テスト方針〜Testing Trophyの概念とBDD〜
2023/10/25 CTOA若手エンジニアコミュニティ 勉強会 #4
やじはむ
October 25, 2023
More Decks by やじはむ
See All by やじはむ
TypeScriptのパフォーマンス改善
yajihum
21
12k
アクセシビリティを考慮したUI/CSSフレームワーク・ライブラリ選定
yajihum
3
2.5k
Other Decks in Technology
See All in Technology
脆弱性診断って、何をしているの? 〜弱点を見つけて、会社の改善につなげるまで〜
keeg
0
580
スキルを作る、その前に!複数人で使われるスキルを 作るためのプロセス
junkifurukawa
2
350
不可逆な意思決定を避けながら10億超の顧客データを AI Ready にするデータ基盤設計
baseballyama
1
160
FOSS4Gを活用した自治体業務DXの試み
470715
0
120
自律型 AI をセキュアに実装!Gemini と MIG で作る動的コード実行環境
recruitengineers
PRO
1
230
DWH の限界突破! AI エージェント向け爆速リアルタイムデータ基盤 ClickHouse
jozono
1
270
並行性の問題を防げ!実践トランザクション入門
occhi
0
280
Datadog の学び方 - あるいは、オブザーバビリティを学ぶとは何か
mananyuki
1
500
契約書画像からの情報抽出に特化した視覚接地モデルを育てる話
sansantech
PRO
1
150
Claude Code本は、どのように執筆チームで書かれたか
oikon48
0
320
OpenSharing について熱く語る〜AI アセットの共有について〜
kameitomohiro
0
240
購入ドメインでの課題と取り組み
ykagano
0
150
Featured
See All Featured
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
350
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
390
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
390
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
Designing for Timeless Needs
cassininazir
1
520
HDC tutorial
michielstock
2
950
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Odyssey Design
rkendrick25
PRO
2
860
The Art of Programming - Codeland 2020
erikaheidi
57
14k
So, you think you're a good person
axbom
PRO
2
2.2k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
Mobile First: as difficult as doing things right
swwweet
225
10k
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 のテスト 方針 テストピラミッド~自動テストの信頼性を中長期的に保つ最適 なバランス~ フロントエンド開発のためのテスト入門
今からでも知っておき たい自動テスト戦略の必須知識