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
100
1
Share
テスト書いてますか?そのテストは動いてますか?そのテストは他のメンバーに伝わりますか?/ PHPerKaigi-2023-after-event
PHPerKaigi-2023-after-event LT資料
sucalul
April 28, 2023
More Decks by sucalul
See All by sucalul
PR TIMESをSSRした裏側 /phpcondo-2024
sucalul
1
290
Other Decks in Technology
See All in Technology
Master Dataグループ紹介資料
sansan33
PRO
1
4.6k
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
10
78k
AIが書いたコードを信じられない問題 〜レビュー負荷を下げるために変えたこと〜 / The AI Code Trust Gap: Reducing the Review Burden
bitkey
PRO
6
1.1k
EBS暗号化に失敗してEC2が動かなくなった話
hamaguchimmm
2
180
Do Ruby::Box dream of Modular Monolith?
joker1007
1
320
MLOps導入のための組織作りの第一歩
akasan
0
320
Snowflake Intelligence導入で 分かった活用のコツ
wonohe
0
130
AI와 협업하는 조직으로의 여정
arawn
0
110
AgentCore×VPCでの設計パターンn選と勘所
har1101
3
260
20年前の「OSS革命」に学ぶ AI時代の生存戦略
samakada
0
330
Amazon S3 Filesについて
yama3133
2
200
AIを共同作業者にして書籍を執筆する方法 / How to Write a Book with AI as a Co-Creator
ama_ch
2
130
Featured
See All Featured
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
1.9k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
810
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.1k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
140
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
170
Documentation Writing (for coders)
carmenintech
77
5.3k
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:失敗しているテストを直すか、実装を直すか、そのテストを消しましょう。そのような状 態だと何がコケてるとか毎回みないと思います。もしいつもと違うコケ方をしても「赤く なった、いつも通り!無視無視!」と思い、インシデントを起こすだけです。非常に不健 全な組織です。常にグリーンである状態を当たり前に思ってください。