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
テスト書いてますか?そのテストは動いてますか?そのテストは他のメンバーに伝わりますか?/ PH...
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
sucalul
April 28, 2023
Technology
1
100
テスト書いてますか?そのテストは動いてますか?そのテストは他のメンバーに伝わりますか?/ PHPerKaigi-2023-after-event
PHPerKaigi-2023-after-event LT資料
sucalul
April 28, 2023
Tweet
Share
More Decks by sucalul
See All by sucalul
PR TIMESをSSRした裏側 /phpcondo-2024
sucalul
1
280
Other Decks in Technology
See All in Technology
20260204_Midosuji_Tech
takuyay0ne
1
160
クレジットカード決済基盤を支えるSRE - 厳格な監査とSRE運用の両立 (SRE Kaigi 2026)
capytan
6
2.8k
学生・新卒・ジュニアから目指すSRE
hiroyaonoe
2
670
30万人の同時アクセスに耐えたい!新サービスの盤石なリリースを支える負荷試験 / SRE Kaigi 2026
genda
4
1.3k
こんなところでも(地味に)活躍するImage Modeさんを知ってるかい?- Image Mode for OpenShift -
tsukaman
1
160
Claude_CodeでSEOを最適化する_AI_Ops_Community_Vol.2__マーケティングx_AIはここまで進化した.pdf
riku_423
2
600
コンテナセキュリティの最新事情 ~ 2026年版 ~
kyohmizu
2
300
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
5
1.6k
プロポーザルに込める段取り八分
shoheimitani
1
560
SchooでVue.js/Nuxtを技術選定している理由
yamanoku
3
130
AIと新時代を切り拓く。これからのSREとメルカリIBISの挑戦
0gm
2
3k
ランサムウェア対策としてのpnpm導入のススメ
ishikawa_satoru
0
200
Featured
See All Featured
sira's awesome portfolio website redesign presentation
elsirapls
0
150
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
170
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.3k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.7k
What's in a price? How to price your products and services
michaelherold
247
13k
Why Our Code Smells
bkeepers
PRO
340
58k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
93
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
110
Accessibility Awareness
sabderemane
0
54
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
0
210
The Limits of Empathy - UXLibs8
cassininazir
1
220
Transcript
テスト書いてますか? そのテストは動いてますか? そのテストは他のメンバーに伝わりますか? DateTime: 2023/04/26 At: PHPerKaigi2023アフターイベント 1
自己紹介 • yuya.miyazaki ◦ @sucalul in twitter, github • 所属
◦ 株式会社PR TIMES ◦ 2022年4月〜現在 ◦ 料金チーム ◦ 新卒2年目 • 職業 ◦ バックエンドエンジニア ◦ PHP/Go 2
料金チーム • PR TIMESの料金システム周りを改善 ◦ 請求を立てる ◦ プランの変更・予約 ◦ 請求情報を見れる
◦ など請求が関わる系はまるっと全部 • 過去のコードも参考になるが、arrayがいっぱい、テストはない、ドキュメントもない、 料金周りに詳しい人はいるが、エンジニアではない 3
テスト書いてますか? • Unitテスト • E2Eテスト など • 実装よりもテストを先に書く • 実装しながらテストを書く
• 実装と同時ではないが、リリースまで には書く • 書かない ???「テスト書かないとか(ry」 4 *弊社のライオンデーの紹介をしました。 slackの画像なので削除。 (ライオンデー:みんなでテスト追加する日)
そのテストは動いてますか? • CIが回っている • PRを出すタイミングで全てのテストを”必ず”回している • 不定期にせいよ、誰かが手元で回している • 作られたっきり動いていない・メンテナンスされてない など
5
そのテストは他のメンバーに伝わりますか? • (ある程度そのドメイン知識がある人、これから学ぼうとしている人向け) • 関数名、データプロバイダを読めばある程度わかる • テストコードをちゃんと読まないとわからない・読んでもわからない 6
テスト書いてますか? • これはある程度初期から(Unit、E2E)書くようになっていました • 手動での検証がめんどくさい • テストポチって押せば全部やってくれるのは楽 7
テスト書いてますか? • Unitテストのカバレッジは? ◦ 想定しうる異常系のパターンは全て満たしている? • 縦に限らず横は? ◦ plan_id: 1,
2 ◦ 想定しうる全てのケースを満たしている? 8
テスト書いてますか? • Unitテストのカバレッジは? ◦ カバレッジを見る • 縦に限らず横は? ◦ PdMと話したりして色々なパターンを考慮する ◦
プラン1からプラン2は変更できるけど、プラン2からプラン3には変更できないと か ◦ テストがでかくなっちゃう!! ◦ classを切ればよくて、「プラン1から変更のパターン」「プラン2から...」 9
そのテストは動いていますか? • CI回そう 10
そのテストは他のメンバーに伝わりますか? 元々 • 誰にも伝わらないテストを書いていた ◦ 圧倒的英語力不足 ◦ 他の人は当然、後日見返した時の自分でさえもわからない ◦ テストを書く目的の一つとして、いずれリファクタする時のコストをいかに下げ
れるかを考えておきたい →このままだと負債!! 11
そのテストは他のメンバーに伝わりますか? 改善 • 「どのような状況」、「期待される結果」を明記する • 日本語で書く ◦ >(日本語が母国語の人が多いので)テストの日本語化してテストの理解容易 性を向上させたり、そのテスト結果をドキュメント化できるかなどを試していま す。
◦ https://developers.prtimes.jp/2022/10/31/tdd-workshop-2022/ ◦ エンジニア以外にも伝えやすい・共通言語を作るきっかけになる 12
そのテストは他のメンバーに伝わりますか? • 例1. プランを予約するAPI ◦ before ▪ testMissingCompany ◦ ◦
◦ after ▪ test_存在しない企業の時_プラン予約に失敗すること 13
そのテストは他のメンバーに伝わりますか? • 例2. プランを予約するAPI ◦ before ▪ testNotTomorrowOrLater ◦ ◦
◦ after ▪ test_適応中のプラン終了日よりも前の日付がプラン開始日として選択さ れている時_プラン予約に失敗すること 14
まとめ • テストを書こう!動かそう!人に伝わるものにしよう!! • リファクタリング・機能改善する時にあなたはいないかもしれない!後世にテストを 通して仕様を伝えよう! 15
アフタートーク Q:これからテストを追加していくのですが、どのように進めるのがいいですか? A:まずは小さくて、inputとoutputがわかりやすい関数から入るといいと思います。 または、バグ修正のタイミングで、起きたバグをテストコードで表現した上で、それを直し て、テストが通ることを確認することもいいと思います。
アフタートーク Q:今動いているけど古いコードに対しても書いた方がいいですか? A:テストをかけるなら書いた方がいいですが、時間もなければそもそもテストをかける状 態かどうかも怪しい(どんなデータを扱っているのかわからない、その他の理由もある) 場合もあると思うので、まずは新しく実装したコードや、バグ修正のテストコードから書き 始めるのがいいと思います。
アフタートーク Q:どうすればみんなテストを書いてくれるようになりますか? A:僕は自分が書いたコードを手でぽちぽち確認するのはめんどくさすぎるのでテストを 書いている節があります。もちろん必要な時にはぽちぽちします。(まさか書いたコード を動作検証せずにPR出してないですよね?) また、コードが想定した振る舞いをするか、他の人に証明するためでもあります。
アフタートーク Q:どうすればみんなテストを書いてくれるようになりますか? A:リファクタリングする時に楽です。一発で綺麗なコードは書けないので、何回かリファ クタリングします。その時に役立ちます。 チーム全体で品質を担保していく意識は大事で、エンジニアができるアプローチとして、 テストコードを書くというのがあると思います。
アフタートーク Q:CIを導入しようと思っています(質問ではないですが、話題に上がったので) A:早めに導入することをおすすめします。毎回全部のテストを”必ず”回す人なんていな いですし、回されないテストは腐っていくだけです。自動で回る環境を整えておきましょ う。
アフタートーク Q:CIが毎回赤いですが、上の人に無視しろと言われました(質問ではないですが、話題 に上がったので) A:失敗しているテストを直すか、実装を直すか、そのテストを消しましょう。そのような状 態だと何がコケてるとか毎回みないと思います。もしいつもと違うコケ方をしても「赤く なった、いつも通り!無視無視!」と思い、インシデントを起こすだけです。非常に不健 全な組織です。常にグリーンである状態を当たり前に思ってください。