Python

pythonによるTDD実践(4):素数列挙機能をTDDで作ってみようその2

前回までのコード

prime_enumerator.py


def enumerate_prime_number_under(n):
  pass

test_prime_enumerator.py

from tdd_prime.prime_enumerator import enumerate_prime_number_under

def test_prime_enumeration():
  assert enumerate_prime_number_under(10) == [2, 3, 5, 7]

明白な実装と仮実装

TDDを実践するにあたって、実装が簡易的・実装の仕方が直ぐに思いつくような場合は「明白な実装」と呼ばれ、機能のロジックを直接実装していく方法がとられる。一方で、ステップが大きかったり、実装方針が直ぐには思いつかない場合には「仮実装」という手段を用いて、一旦テストを通すようなコードを書いてしまってから、機能のロジックを徐々に実装する方法がとられる。また、仮実装には、テストコードが正しく書かれているという保証を与える役割もある。

仮実装

ここでは、実際に仮実装のコードを書いてみましょう:
prime_enumerator.py


def enumerate_prime_number_under(n):
  return [2, 3, 5, 7]

ただ、テストケースの[2, 3, 5, 7]を返すだけのコードを書きました。ここで、再度テストを実行すると、テストに成功しているため、テストが正しく動作していることが確認できます。

本実装へ向けて

では、ここから本格的に素数列挙の機能を実装することを考えます。まず、素数とは、「1と自分自身でしかわりきれない数」が定義ですので、仕様を次のように書き換えることができます:

  • 素数であるかどうかを判定
  • n以下でそのように判定されたものを列挙する

このように、仕様を小さく分けることで、小さなステップを踏んで実装を行うことができます。

まとめと次回以降について

  • 今回は、仮実装の解説と仕様の分解を行いました
  • 次回は、素数列挙の本実装を行います
D.S S.O
データサイエンティストのS.Oです。