《余録》テストケースの行間を読む #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