テスト駆動開発(TDD: Test-Driven Development)とは
テスト駆動開発(TDD: Test-Driven Development)は、ソフトウェア開発手法の一つで、テストを書くことから始め、そのテストを満たすようにコードを実装していくプロセスです。これにより、設計が慎重に行われ、バグが減るというメリットがあります。
テスト駆動開発(TDD: Test-Driven Development)の3つのステップ
基本的な流れは次の3つのステップから成ります。
- Red: まずテストを書く。この時点ではテストは失敗する(Red)。
- Green: 最小限のコードを実装してテストを通過させる(Green)。
- Refactor: コードをリファクタリングして改善する。テストが再び通ることを確認する。
具体例
例えば、整数のリストを受け取り、そのリストの合計を返す関数 sum_list
を実装するとします。
1. テストを書く(Red)
まず、関数 sum_list
が正しく動作するか確認するテストを書きます。
def test_sum_list():
assert sum_list([1, 2, 3]) == 6
assert sum_list([0, -1, 1]) == 0
assert sum_list([]) == 0
この時点では、sum_list
関数がまだ存在しないため、このテストは失敗します(Red)。
2. 最小限のコードを書く(Green)
次に、テストが通るように最小限のコードを書きます。
def sum_list(numbers):
return sum(numbers)
これでテストを実行すると、テストが通過します(Green)。
3. リファクタリング(Refactor)
コードが単純な場合、リファクタリングの必要はないかもしれませんが、複雑なロジックや冗長な部分がある場合は、ここでリファクタリングを行い、コードをきれいに保ちます。例えば、この例では sum()
を使っているため、特に改善する必要はないでしょう。
テスト駆動開発のポイント
- 失敗するテストを書くことから始める: テスト駆動開発では、最初に失敗するテストを書くことで、何を期待しているのかを明確にします。
- 小さなステップで進む: 一度に大きな機能を実装するのではなく、小さなステップで進みます。テストを通すために必要な最小限のコードを書いて、それを次々と積み上げていくことで、設計が自然に進みます。
- 常にテストが通る状態を保つ: テスト駆動開発では、常にテストが通る状態を維持することが重要です。これにより、安心してコードを変更できます。
このプロセスを繰り返すことで、信頼性の高いコードを段階的に開発することができます。