Slide 1

Slide 1 text

いいから黙って テストは最初に書いておけ May 15, 2024 | 強い思想LT サーバーサイド編 諸君、私はテストファーストが好きだ 鈴木智也 a.k.a だっしー

Slide 2

Slide 2 text

2 About Me 鈴木智也 a.k.a だっしー ● サーバーサイドリードエンジニア ● ゆめみは2社目 ● ゆめみ在籍もうすぐ5年になりそう ○ 新卒メンバーすげーと思いながら仕事をしてる日々 ● GWはしまなみ海道走ってきました

Slide 3

Slide 3 text

3 今日話すこと テストファースト = 最初にテストを書く

Slide 4

Slide 4 text

4 話さないこと CI・CD For Keys カバレッジ テスト手法 テストコードの書き方 などなど

Slide 5

Slide 5 text

5 アジェンダ どのようにするのか? テスト駆動で開発する なぜテストファースト? 1 2 3

Slide 6

Slide 6 text

なぜテストファースト? 1

Slide 7

Slide 7 text

7 なぜテストファースト? 後からテストを書くのは労苦に近い ● 動くコードは「完成」している ● テストコードは将来の開発者のためのコード(諸説) ● 出来上がったコードのどこにどのようにテストを書くかわからない ● お客さんからも催促されてる、手動テストも通ってる 「テストコードは後にしてリリースしようぜ」という悪魔の囁きが聞こえる

Slide 8

Slide 8 text

8 なぜテストファースト? 先に書くとどうなるのか ● 動くコードは「完成」している ○ 動くコードとテストコードが同時に揃って完成する ● テストコードは将来の開発者のためのコード ○ 今の自分にとって役に立ってくれる ● 出来上がったコードのどこにどのようにテストを書くかわからない ○ 最初にテストコードを書いているので起きない ● お客さんからも催促されてる、手動テストも通ってる ○ ここはどうにもならない、実装が早くなるわけではない

Slide 9

Slide 9 text

どのようにするのか? 2

Slide 10

Slide 10 text

10 どのようにするのか? ある関数を実装する前に 実装しようとする関数のテストを書く ● 関数名 ● インターフェース ○ 引数 ○ 戻り値 ● メソッドならどの構造体をレシーバに取るのか これらを呼び出し側から見て違和感無いように作る sumArroundAlive() はまだ無いからエディタには怒られる

Slide 11

Slide 11 text

11 どのようにするのか? テストはお題から考えて書きやすい単位で テストを書く→実装コード書く際に書き辛いようなら、 テストの単位を細かくしたり粗くしたりする 先にTODOリストを作っておくのもいい FizzBuzzであればこんな感じで - 3の倍数が来たらFizzを返す - 5の倍数が来たらBuzzを返す - 15の倍数が来たらFizzBuzzを返す - どれにも当てはまらないなら数字を文字列に変換して返す

Slide 12

Slide 12 text

12 どのようにするのか? 初めは趣味プロでやってみるといい おすすめのお題 ● FizzBuzz ● Game of Life cyber-dojoというTDD勉強用のプラットフォームもある (需要ありそうならモブプロ勉強会再開したい)

Slide 13

Slide 13 text

テスト駆動で開発する 3

Slide 14

Slide 14 text

14 テスト駆動で開発する テストファーストはテスト駆動のはじめの一歩 ● 自然とテストしやすい設計になる ● テストによって細かい単位で検証しながら進んでいける ……などなど、テストコードが「今現在の自分」にとって役立つものとなる

Slide 15

Slide 15 text

15 テスト駆動で開発する テスト駆動開発は仕事術でもある ● テストをパスさせて次のテストを書く、というリズムを刻んで仕事が出来る ● 差し込みタスクへの対応後、休み明けでもスムーズに仕事を再開できる

Slide 16

Slide 16 text

16 テスト駆動で開発する 令和の時代だからこその 恩恵がもうひとつ

Slide 17

Slide 17 text

17 テスト駆動で開発する Github Copilotが一撃で補完出来る ある程度小分けされた関数であれば、 テストを先に書いておけばCopilotの補完で完成する 逆も出来るかもだが、 やはりテストは網羅性の観点からも自分で書きたい

Slide 18

Slide 18 text

18 まとめ ● まずは「先に書くだけ」から始められる ● テストを先に書くと、テストが駆動して開発出来る ● テストを後から書くのは面倒である

Slide 19

Slide 19 text

ご清聴ありがとうございました

Slide 20

Slide 20 text

20 Appendix 書籍:テスト駆動開発 Kent Beck (著), 和田 卓人 (翻訳) https://www.amazon.co.jp/dp/4274217884/ref=cm_sw_r_tw_dp_U_x_BWLBDb7XS8 DYV (特に付録Cがオススメです!) Qiita:初心者プログラマーの僕が、テスト駆動開発を愛する5つの理由 https://qiita.com/anchor-cable/items/4b7b73bc1a2163ded6b6 (私の書いた記事です...内容が一部重複しています)

Slide 21

Slide 21 text

21 Special Thanks 私にテストの啓蒙をしてくださった方 @nihonbuson TDD ワイワイ会の皆さん(東京・沖縄の方は参加してみるといいかも) https://tddyyx.connpass.com/