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
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
250
Other Decks in Technology
See All in Technology
Amazon Qで2Dゲームを作成してみた
siromi
0
140
「Roblox」の開発環境とその効率化 ~DAU9700万人超の巨大プラットフォームの開発 事始め~
keitatanji
0
120
人に寄り添うAIエージェントとアーキテクチャ #BetAIDay
layerx
PRO
9
2.2k
AI関数が早くなったので試してみよう
kumakura
0
290
Rubyの国のPerlMonger
anatofuz
3
740
GMOペパボのデータ基盤とデータ活用の現在地 / Current State of GMO Pepabo's Data Infrastructure and Data Utilization
zaimy
3
220
S3 Glacier のデータを Athena からクエリしようとしたらどうなるのか/try-to-query-s3-glacier-from-athena
emiki
0
220
✨敗北解法コレクション✨〜Expertだった頃に足りなかった知識と技術〜
nanachi
1
710
Amazon GuardDuty での脅威検出:脅威検出の実例から学ぶ
kintotechdev
0
110
ファッションコーディネートアプリ「WEAR」における、Vertex AI Vector Searchを利用したレコメンド機能の開発・運用で得られたノウハウの紹介
zozotech
PRO
0
300
Lambda management with ecspresso and Terraform
ijin
2
160
Google Agentspaceを実際に導入した効果と今後の展望
mixi_engineers
PRO
3
700
Featured
See All Featured
Faster Mobile Websites
deanohume
308
31k
[RailsConf 2023] Rails as a piece of cake
palkan
56
5.8k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
23
1.4k
Music & Morning Musume
bryan
46
6.7k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Why You Should Never Use an ORM
jnunemaker
PRO
58
9.5k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
139
34k
We Have a Design System, Now What?
morganepeng
53
7.7k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3k
Agile that works and the tools we love
rasmusluckow
329
21k
Designing Experiences People Love
moore
142
24k
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:失敗しているテストを直すか、実装を直すか、そのテストを消しましょう。そのような状 態だと何がコケてるとか毎回みないと思います。もしいつもと違うコケ方をしても「赤く なった、いつも通り!無視無視!」と思い、インシデントを起こすだけです。非常に不健 全な組織です。常にグリーンである状態を当たり前に思ってください。