Python上級

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

導入

テスト駆動開発(TDD)は、ソフトウェア開発において重要な手法の一つです。特に、Pythonのような柔軟な言語では、TDDの実践が非常に効果的です。今回は、実際のプロジェクトで遭遇する可能性のあるシナリオを通じて、TDDの具体的な適用方法を探ります。

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

重要な概念の整理

TDDの基本は、「テストを書くことから始める」ことです。このプロセスは、まず失敗するテストを作成し、その後にそのテストをパスさせるためのコードを書くというサイクルを繰り返します。これにより、コードの品質を保ちながら機能追加や修正を行うことができます。

コード例(Python)


class Calculator:
    def add(self, a, b):
        return a + b

    def subtract(self, a, b):
        return a - b

# テストコード
import unittest

class TestCalculator(unittest.TestCase):
    def setUp(self):
        self.calc = Calculator()

    def test_add(self):
        self.assertEqual(self.calc.add(1, 2), 3)
        self.assertEqual(self.calc.add(-1, 1), 0)

    def test_subtract(self):
        self.assertEqual(self.calc.subtract(2, 1), 1)
        self.assertEqual(self.calc.subtract(1, 2), -1)

if __name__ == '__main__':
    unittest.main()

コードの行ごとの解説

  1. class Calculator: 計算機のクラスを定義します。
  2. def add(self, a, b): 二つの数を加算するメソッドを定義します。
  3. return a + b 加算結果を返します。
  4. def subtract(self, a, b): 二つの数を減算するメソッドを定義します。
  5. return a – b 減算結果を返します。
  6. import unittest Pythonのユニットテストフレームワークをインポートします。
  7. class TestCalculator(unittest.TestCase): Calculatorクラスのテストケースを定義します。
  8. def setUp(self): 各テスト前に実行される初期化メソッドです。
  9. self.calc = Calculator() Calculatorのインスタンスを作成します。
  10. def test_add(self): addメソッドのテストを定義します。
  11. self.assertEqual(self.calc.add(1, 2), 3) 期待される結果と実際の結果を比較します。
  12. def test_subtract(self): subtractメソッドのテストを定義します。
  13. self.assertEqual(self.calc.subtract(2, 1), 1) 同様に、期待される結果と比較します。

練習問題編

以下の練習問題に取り組んで、TDDの理解を深めましょう。

  • 問題1: Calculatorクラスに乗算メソッドを追加し、そのテストを作成してください。
  • 問題2: Calculatorクラスに除算メソッドを追加し、ゼロ除算に関するテストケースを含めてください。
  • 問題3: すべてのテストを実行し、失敗した場合はその原因を特定して修正してください。
  • 問題4: Calculatorクラスに履歴機能を追加し、過去の計算結果を保持するテストを作成してください。
  • 問題5: すべてのメソッドのテストを一度に実行するスクリプトを作成してください。

まとめ

  • TDDはコードの品質を保ちながら開発を進める手法です。
  • 具体的なシナリオを通じて、テストと実装を繰り返す重要性を理解しました。
  • 練習問題を通じて、実際の開発に役立つスキルを身につけることができます。