はじめに
実務においてテスト駆動開発でシステム設計を行うことがなかったので、学習の一環としてまとめます。
調べる前は、「テストする前にテストコードを書くくらい」といった印象。
テスト駆動開発とは?
テスト駆動開発(Test-Driven Development)の略称としてTDDと呼ばれています。
テストファーストの思考に基づく開発手法の一つで、ウォータフォールでよくある「設計→実装→テスト」のプロセスではなく、「テスト→実装→リファクタリング」
といった流れを何度も繰り返ししてプロダクトを成長させていくような開発手法です。
テスト駆動開発は、「レッド」「グリーン」「リファクタリング」のステップで構成されています。
【レッド】実装した機能の要件をもとに失敗するテストコードを書く
テスト駆動開発では「必ず失敗するコードを書く」、つまり、実装したい機能を実現するコードが一切書かれていない場合でも、
その機能のテストコードから書くことが基本になります。
テストツールを使用するとテストが失敗して赤色でエラーが出るためのこの工程をレッドと呼びます。
このステップで、実装したい機能の要件を粒度に分けて、リストアップします。
【グリーン】どんな方法でも良いので、テストを通るプログラムを作る
テストコードを書いた後に、機能実装を行います。
ここでのポイントは、完璧なコードではなくテスト条件をクリアさせるだけの「最低限」のコードを書くということです。
レッドとグリーンの工程は、リファクタリングの前に数回繰り返すこともあります。
【リファクタリング】テストが成功する状態を維持しつつ簡潔・明快なコードにする
テストを全て成功させた後に、リファクタリングを行なっていきます。
書いたコードの中で重複しいてるものや不必要なものを削ぎ落として洗練させたものにします。
プログラムの規模が増えた後にリファクタリングを行うと修正ん負担が増えるためグリーンのステップを達成したら、その都度リファクタリングを行うことが理想的です。
また、下記でメリットとデメリットについて挙げさせて頂きます。
メリット
- 後工程へバグを持ち越しにくい
- システム要件をより深く理解できる
- 開発者が安心してコーディングでき、心理的負担がある
デメリット
- 仕様が変わるたびにテストコードを書き換える必要が出てくるため、メンテナンスが大変
- 上記により開発時間が膨らんでしまう。特に開発初期段階での負担が大きくなる
終わりに
各言語・フレームワークやAWSについての記事は多くありましたが、一つの設計についての記事はあまりなく
今回は自己学習も含めまとめさせて頂きました。
参考になれば幸いです。