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
sucalul
April 28, 2023
Technology
110
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
テスト書いてますか?そのテストは動いてますか?そのテストは他のメンバーに伝わりますか?/ 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
300
Other Decks in Technology
See All in Technology
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
4.9k
SmartHR Engineering Team Deck
smarthr
1
1.8k
OSPN.JPバージョンアップ作業進捗のご報告 / 20260801-osc26kyoto
akkiesoft
0
460
グローバル基準のSREは、運用現場でどう機能したか:成熟度アセスメントの実践 / SRE NEXT 2026
sorawatanabe
0
180
認知負荷をGemini で溶かす — GKE 基盤「Orbit」における AI エージェントの実践
sansantech
PRO
1
290
制約理論(ToC)入門 2026版
recruitengineers
PRO
8
2.2k
カートの信頼性を担保するWireMockを使ったe2eテスト
ykagano
0
160
PLATEAU で バーチャル花火大会
tatsuya1970
0
140
FDEの心得
noriakioji
3
3.1k
モダンフロントエンド 開発研修
recruitengineers
PRO
4
600
モノリス Rails でも日中に rails db:migrate を走らせたい! / Daytime rails db:migrate on Monolithic Rails!
euglena1215
4
580
20260608_Codexの可能性_ノンプログラマー向け_大城追記
doradora09
PRO
0
790
Featured
See All Featured
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
160
Claude Code のすすめ
schroneko
67
230k
First, design no harm
axbom
PRO
2
1.2k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
290
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
240
How to train your dragon (web standard)
notwaldorf
97
6.7k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
45k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
270
Speed Design
sergeychernyshev
33
2k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.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:失敗しているテストを直すか、実装を直すか、そのテストを消しましょう。そのような状 態だと何がコケてるとか毎回みないと思います。もしいつもと違うコケ方をしても「赤く なった、いつも通り!無視無視!」と思い、インシデントを起こすだけです。非常に不健 全な組織です。常にグリーンである状態を当たり前に思ってください。