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
テストに慣れてないとテスタブルなコードって
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Sigma
June 23, 2021
820
1
Share
テストに慣れてないとテスタブルなコードって
テストに慣れてないとテスタブルなコードって書けないよねという話です。
【LT募集中!】設計 モデリング LT会 - vol.2 にて登壇しました。
Sigma
June 23, 2021
More Decks by Sigma
See All by Sigma
Proxmox_VE.pdf
seiyasugimoto
0
220
Stable Diffusionで遊んでみた
seiyasugimoto
1
140
EVAフレームワーク
seiyasugimoto
0
110
SSR+SPA
seiyasugimoto
0
150
Nuxtにおける設計
seiyasugimoto
0
100
Atomic Designを ディレクトリ以外で表現
seiyasugimoto
0
89
throttleすげぇぇぇ
seiyasugimoto
0
85
スマホでPythonしたい
seiyasugimoto
0
74
平文で保存するな!
seiyasugimoto
0
95
Featured
See All Featured
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
65
55k
Darren the Foodie - Storyboard
khoart
PRO
3
3.3k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.9k
Bash Introduction
62gerente
615
210k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
310
Faster Mobile Websites
deanohume
310
31k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.1k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
210
ラッコキーワード サービス紹介資料
rakko
1
3.4M
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
310
Transcript
テストに慣れてないと テスタブルなコードって 書けないよねという話 テスト失敗談
しぐま Sigma • 株式会社エヌエルプラスに去年入社しました。 ◦ リファラル採用やってます! • イベント配信プラットフォームやってます。 • 現在は主にNuxtとGoとGCPを触っています。
• 一応シニアエンジニアです。
テストが益々重要になってきた • 品質が保証されていないとあらゆるコードの修正に待ったが入る ◦ ビジネスサイドとしては、利益に繋がらない目的で動いているコードを変えるということに抵抗があ る。それが許されるのは十分に品質が保証されている場合だけ。 • アジリティを保つには自動テストが必要 ◦ 素早く変更し、素早く既存部分を含めた全ての機能が動いていることを保証し、実装した機能素早く
リリースするためには自動テスト以外の方法がない。 ◦ 幸い道具は全て持っている。 • 最悪の場合動いているコードに触れるなということになる
テストコードを書けと言われるけど • テストコードの品質ってどういうことだろう • テストコードが非常に長くなってしまう • テストコードを書いているのに品質上の問題が起きている
失敗例: 長い関数に対して無理やりテストを書く • 数百行程度の長い関数に対して後からユニットテストを書こうとしたが、大量のテス トケースが必要になってしまった。 • その関数が原因と見られる不具合が発生した。テストを増やして不具合の出るパ ターンを洗い出そうとしたが既存のユニットテストが何を保証していて何を保証して いないかわからず何週間もかかってしまった。
テストしやすい詳細設計 • 関数・メソッドは短い方がいい ◦ 行数が多くif文などを多く含む関数に対してテストをすると、分岐網羅や条件網羅を達成しようとす る際に難しくなる。 ◦ 場合にもよるが20行くらいに収めたい。 • 関数・メソッドは一つのことをする方が良い
◦ テストを書いたときテストの目的が分かりやすい。
アーキテクチャに問題があるケース
バックエンドに対してE2Eテストしか書けない • コントローラに殆どのロジックが書かれている • コントローラにか書かれているロジックをテストするために、DBに値を入れ、APIを 叩いてみるテスト(E2Eテスト)しか書けない • ユニットテスト保証すべき粒度の内容がE2Eテストに書かれていて、テストコードが 分かりづらい上実行が遅い •
サービス層等を導入しサービスに対してテストを書く等
何に責務を負っているか不明瞭 • 複数の責務を負っている関数は多機能になりがちで、テストが難しくなる場合が多 い。 • 責務が不明瞭なだけでも、テストケースが何を保証しようとしているか理解すること が困難になる。 • 単一責任の原則に基づいた設計をする
めちゃくちゃな依存関係 • 依存関係が乱雑になってしまっているシステムでは、大量の関数やモジュールを モックしなければならないモック地獄になる。 • DIを採用する、責務を見直すなどして依存関係を整理
シニアエンジニアとして • テストを書いてくれないことを嘆く前に、良い設計をして設計の意図をきちんと伝え る。 • レビューの際に初心を忘れず、テストなんて分かんないよという共通の前提に立っ てレビューする。
「強くてニューゲーム」しよう!