C#上級

上級 C#で学ぶテスト駆動開発|練習問題編

導入

テスト駆動開発(TDD)は、ソフトウェア開発における品質向上の手法として広く採用されています。特にC#を使用する現場では、TDDを実践することで、変更に強いコードを構築することが可能です。本記事では、上級者向けにTDDの実践的なアプローチを紹介し、具体的なシナリオを通じて理解を深めます。

教科書レベルの解説(テスト駆動開発)

重要な概念の整理

TDDは「テストを先に書く」アプローチを基本とし、以下のサイクルを繰り返します。

  • – テストを書く。最初は失敗する。
  • – コードを実装し、テストを通過させる。
  • リファクタリング – コードを整理し、テストが通ることを確認する。

実際の業務では、テストケースを設計する際に、ビジネスロジックに基づいたシナリオを考慮することが重要です。具体的な要件に基づいてテストを作成することで、開発の初期段階から品質を確保できます。

コード例(C#)


// 数値のリストから特定の条件を満たす数値をフィルタリングするクラス
public class NumberFilter
{
    public List FilterEvenNumbers(List numbers)
    {
        return numbers.Where(n => n % 2 == 0).ToList();
    }
}

コードの行ごとの解説

  1. public class NumberFilter: フィルタリング機能を提供するクラスの定義。
  2. public List FilterEvenNumbers(List numbers): 偶数をフィルタリングするメソッドの宣言。
  3. return numbers.Where(n => n % 2 == 0).ToList();: LINQを使用して偶数を選択し、リストとして返す。

練習問題編

以下の練習問題を通じて、TDDの理解を深めてください。

  1. 問題1: 1から100までの整数の中から、3の倍数だけを返すメソッドを実装してください。
  2. 問題2: 与えられた文字列が回文かどうかを判定するメソッドを作成してください。
  3. 問題3: リスト内の数値の合計を計算するメソッドを実装し、テストケースを作成してください。

模範解答と解説

問題1の解答:


public List FilterMultiplesOfThree(List numbers)
{
    return numbers.Where(n => n % 3 == 0).ToList();
}

このメソッドは、リスト内の数値をフィルタリングし、3の倍数だけを返します。

問題2の解答:


public bool IsPalindrome(string input)
{
    var reversed = new string(input.Reverse().ToArray());
    return input.Equals(reversed, StringComparison.OrdinalIgnoreCase);
}

このメソッドでは、文字列を反転させて元の文字列と比較します。

問題3の解答:


public int CalculateSum(List numbers)
{
    return numbers.Sum();
}

リスト内の数値の合計を計算するシンプルなメソッドです。

まとめ

  • TDDを通じて、開発プロセスの初期段階から品質を確保することが可能です。
  • 具体的なシナリオを考慮したテストケースの設計が、実務においては特に重要です。