導入
テスト駆動開発(TDD)は、ソフトウェア開発において品質を確保するための強力な手法です。特に中級エンジニアにとって、TDDは単なるテストの実施に留まらず、設計や実装の思考を深めるための重要なプロセスです。この記事では、実務で直面する具体的なシチュエーションを取り上げ、その実践的なアプローチを学びます。
教科書レベルの解説(テスト駆動開発)
重要な概念の整理
TDDの基本的な流れは「テストを書く → 実装する → リファクタリングする」のサイクルです。このプロセスを通じて、コードの品質を向上させることができます。特に、実装前にテストを書くことで、要件を明確にし、バグの早期発見につなげることができます。
実務においては、特に「テストを書く際の視点」が重要です。どのような条件下でテストが成功し、失敗するのかを意識することが、後の実装やリファクタリングに大きく影響します。
コード例(Java)
public class Calculator {
public int add(int a, int b) {
return a + b;
}
public int subtract(int a, int b) {
return a - b;
}
}
コードの行ごとの解説
- public class Calculator: 計算機能を提供するクラスを定義します。
- public int add(int a, int b): 2つの整数を受け取り、その合計を返すメソッドです。
- return a + b: 引数として受け取った2つの整数の合計を計算し、返します。
- public int subtract(int a, int b): 2つの整数を受け取り、その差を返すメソッドです。
- return a – b: 引数として受け取った2つの整数の差を計算し、返します。
練習問題編
以下の練習問題に取り組んで、TDDの理解を深めてください。
- 問題1: 乗算を行うメソッドをCalculatorクラスに追加してください。テストケースも作成し、TDDの手法に従って実装してください。
- 問題2: 負の数に対する加算メソッドのテストケースを作成し、期待通りの結果が得られるか確認してください。
- 問題3: 2つの整数の最大公約数を計算するメソッドを追加し、そのテストケースを作成してください。
模範解答と解説
問題1: 乗算メソッドの追加例:
public int multiply(int a, int b) {
return a * b;
}
テストケース:
@Test
public void testMultiply() {
Calculator calculator = new Calculator();
assertEquals(20, calculator.multiply(4, 5));
}
問題2: 負の数のテストケース例:
@Test
public void testAddNegativeNumbers() {
Calculator calculator = new Calculator();
assertEquals(-1, calculator.add(-2, 1));
}
問題3: 最大公約数のメソッドとテストケース:
public int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
テストケース:
@Test
public void testGcd() {
Calculator calculator = new Calculator();
assertEquals(2, calculator.gcd(4, 6));
}
まとめ
- TDDは要件を明確にし、品質を向上させる手法である。
- テストを書くことで、実装時の思考が整理され、バグの早期発見につながる。
- 実務における具体的なシチュエーションを想定し、コードとテストを通じて学ぶことが重要である。