Upgrade to Pro — share decks privately, control downloads, hide ads and more …

テスト駆動開発✅️

 テスト駆動開発✅️

テスト駆動開発について自身の実践を交えた内容とケーススタディを記載しています。
もともと社内勉強会用に作成したものですが、一般に公開させて頂くことになりました。

More Decks by しが あきとし(AkitoShiga)

Other Decks in Programming

Transcript

  1. テスト駆動開発(TDD)とは • 一言で言えば、テストで設計を導く開発手法 ◦ ※ 本編で出てくる"テスト"はユニットテストを指す • "動作するきれいなコード" を実現する •

    アジャイル開発手法の一つであるエクストリームプログラミング(XP)の中のプラク ティスとして、ケント・ベックが考案した「テストファースト」が源流 2. テスト駆動開発とは
  2. テスト駆動開発のメリット 1. 認知負荷を下げて開発ができる a. 仕様をテストが担保してくれるので、実装中に脳のワーキングメモリをあまり使わなくて済む b. 複雑な制約が複数あるような機能を開発していたときに、頭のなかでそれらの整合性を考えなが ら実装しなくて済む 2. 作り込みを防ぐことが出来る

    a. テストを通すという観点でコードを書くので無駄なコードを書かなくて済む 3. きれいなコードを書きやすくなる a. 仕組み上書いたコードに対してリファクタがすぐ行える b. リファクタの試行回数が多くなるので、その分きれいなコードを書きやすくなる 2. テスト駆動開発とは
  3. よくある質問 • テストを先に書くと開発が遅くならない? ◦ 先述の通り個人的な感覚では TDDのほうがちょっと早い ◦ ロバート・C・マーティンは常に早いと言っている • めんどくさくない?

    ◦ 全てを厳密なTDDのプロセスに乗っ取らなくても部分的に取り入れるのも個人的にはあり ◦ また愚直に1つ1つのテストを通さなくても状況に応じて「テストの歩幅」を変えても良い 2. テスト駆動開発とは
  4. レッド・グリーン・リファクタリング 3. 手順 • レッド ◦ 失敗するテストを書く • グリーン ◦

    最低限の実装でテストを通す • リファクタリング ◦ 振る舞いを保ちつつコードを修正する
  5. 手順 3. 手順 1. チェックリスト(リスト)を用意する 2. 仕様の一つ一つをリストに追加する 3. リストの項目を選択する 4.

    選択した項目にTDDサイクルを実行する 5. 項目の内容を満たしたらチェックをつける 6. 追加・変更になった仕様はリストに追加する
  6. ケーススタディ レンタルビデオショップ • レンタルビデオショップの金額計算プログラムを作る • 貸出日数とビデオの種類によって金額を計算する • ビデオの種類は『一般』・『新作』・『子供向け』の三種類 • 一般の基本料金は100円で、3日目から1日あたり150円が追加される

    • 新作の基本料金は300円でレンタルした日数分基本料金がかかる • 子供向けの基本料金は150円で、4日目から1日あたり150円が追加される 4. 実践 参考: Martin Fowler『リファクタリング(第 2版): 既存のコードを安全に改善する』
  7. 参考書籍・Webサイト・ブログ等 • ケント・ベック「テスト駆動開発」 ◦ 今日やったことはここに全て書いてある • YouTube t-wadaさんが後世に残したい、実録レガシーコード改善 ◦ Findyさんが過去に開催されたイベントのアーカイブ

    ◦ 和田さんの思考過程が追えるので勉強になる • 田中ひさてる「ちょうぜつソフトウェア設計入門」 ◦ ひさてるさんが6章で実演しいてるTDDのレベルが高いのと設計の勉強にもなる • マイケル・C・フェザーズ「レガシーコード改善ガイド」 ◦ TDDではないがテストしやすいコードの書き方について勉強になる おまけ