単体テストを書くときについて考える。たとえば本/書店/著者といったMVCにおけるモデルがあり、それぞれがUTF-8での読み込み・書き込み処理を行うものとする。
ここで、テストの書き方には二種類が考えられる。まず始めに本/書店/著者といった存在についての項目を立て、その中にそれぞれUTF8での読み込み・書き込みについてのテストを書く方法と、始めにUTF8での読み込み・書き込みについての項目を立て、その中にそれぞれ本・書店・著者を対象としたテストを構成する方法だ。これらは書き方が異なるだけなので、内容的には全く同一である。
主体優先
- 本
- UTF8書き込み
- UTF8読み込み
- 書店
- UTF8書き込み
- UTF8読み込み
- 著者
- UTF8書き込み
- UTF8読み込み
規則優先
- UTF8書き込み
- 本
- 書店
- 著者
- UTF8読み込み
- 本
- 書店
- 著者
僕は前者を見ることが多い。というか前者しか知らない。おそらくメジャーな手法ではないのだろう。「うちではやってるぞ!」とか意見があれば教えてください。僕はテストや開発手法についてあまり詳しくないので勘違いがあったらご容赦ください。
ところで、このような違いは法律の世界にも存在することを知っているだろうか。例えば日本の民法典は「総則」「物権」「債権」という風に構成されていて、体系的な編成になっている。またそれぞれの編にも総則が存在している。これに対してフランス民法典では「人」、「物」、「変動」のような構成をとり、読みやすさを重視した構成である。それぞれ、パンデクテン方式、インスティトゥティオネス方式という呼称がある。パンデクテン方式、インスティトゥティオネス方式は東ローマ帝国のユスティニアヌス法典の中のパート分けである「学説彙纂Digesta」「法学提要Institutiones」が起源である。ちなみに学説彙纂Digestaにあたるギリシャ語はPandectaeであり、パンデクテンの語源である。学説彙纂は当時の法学者の学説を纏めたものであり、法学提要は法学を志す者にための教科書という位置付けだった。これが現在の法体系にまで影響を及ぼしており、ローマ帝国の影響力の強さが伺える。
どうやら「一定の規則の記述をどのように編纂するか」という問題はかなり昔から存在していたように思われる。そして現在もテストの書き方においてその問題は表われる(かもしれない)。ユスティニアヌス法典が編纂されるきっかけも、それ以前の方法が極めて雑多で体系化されておらず、重複や矛盾の処理が煩雑になったためだ。
異なる分野の話題がコンピュータ分野と交わるのを見るのは楽しい。