《余録》テストケースの行間を読む #2

Smalltalk-80 で作成した例題を、Python3.1 で再構成しました。

■ 学習のポイント

「行間を読む」ことの大切さは、コードだけではなく「テストケースを読む」ときにも当てはまります。そこに「書かれてあるコード」を理解するだけなら、アマグラマーにもできます。プログラマーには、そこに「書かれていないコード」を読み解く術が求められます。

リファクタリング:事前条件を抽出する

実引数の有効範囲を検証するために、リファクタリングを実施します。デコレーターによって、事前条件とロジック本体を分割統治すると、コードが汚染されるのを防げます(関心分離の原則)。

《Tips》無知と未知との分かれ道:道標に '@' がなければただの「無知」ですが、道標に '@' があるその先には「未知」の世界があるかもしれません。□

リファクタリングを実施して、事前条件 itok_pre を抽出するとともに、テストケース

  • 異常ケース:def itok_pre
  • 正常ケース:def pre

も、各関数の本体に移動します。

def itok_pre(f):
    """
    >>> # 異常ケースのある風景
    >>> itok(-1)
    Traceback (most recent call last):
      ...
    AssertionError: itok(>> -1 <<) # 0..9999

    >>> itok(10000)
    Traceback (most recent call last):
      ...
    AssertionError: itok(>> 10000 <<) # 0..9999
    """

    def pre(n):
        """
        >>> # 正常ケースのある風景
        >>> s = 0,1,9,10,12,30,34,99,100,105,110,116,170,178,900,901,1000,1001,9999
        >>> for e in s: "%4d: %s"%(e, itok(e))
        ...
        """

        lower,upper = 0,9999
        assert lower <= n <= upper, (
            "itok(>> %s <<) # %s..%s"%(n, lower, upper))
        return f(n)

    return pre

@itok_pre
def itok(n):
    """
    # ここにあるべきテストケースがないのは?
    """

itok_pre では、事前条件を検証するとともに、テストケース(正常ケース、正常ケース)を起動します。すると、itok の本体ではコードが簡潔になるので、本質的なロジックに集中できるとともに、分割統治が可能になります(関心分離の原則)。

《Tips》ヘッドウェアの特性 vs. プログラミングの効率化:関数の本体にコードを記述するときには「有効範囲を気にせずに、本質的な問題解決に専念できる」という、プログラミングの効率化が期待できます。ハードウェアやソフトウェアと同様に、プログラマーのヘッドウェアの特性にも配慮する必要があります。□

》こちらに移動中です《
TOP


関連記事

Last updated♪2010/01/23