
Webエンジニアの仕事をしていると、いろいろなテスト思考の話を聞くことがある。
単純なユニットテストから、複雑なストーリーテストなど、方式も山のように存在するし、ツールも山のように存在する。
そんな中、テストには、メソッド派と、デトロイト派の2つの派閥があることを耳にした。
よほど仕事でテストを重要視しているチームじゃない限り、この手の話が出ることはないので、知識を深めるために、これらの派閥を調べてみることにした。
テストのメソッド派とデトロイト派って何?
まず、この「メソッド派」と「デトロイト派」という呼び方は、テスト駆動開発(TDD)の文脈でよく出てくる。
元々は、テストの設計思想やアプローチの違いを表すもので、どちらが正しいというよりも「どんな価値観でテストを書くか」という方が正しい。
一言で言えば、
- メソッド派(London派) は「モック重視・単体主義」
- デトロイト派(Classic派) は「実際の動作重視・統合主義」
という対比になる。
メソッド派(London派)の考え方
テスト対象のクラスや関数以外の依存は、できるだけモック(擬似オブジェクト)に置き換える。
各クラスを
単体として正しく動くことを確認することに重点を置く。
テストを書く際に、外部とのやり取りをモックで検証(たとえば、特定のメソッドが呼ばれたかなど)。
テスト設計が明確でスピード感があり、コードの責務を整理しやすい。
ただし、モックを多用しすぎると、
実際の挙動と乖離してしまうことも。
デトロイト派(Classic派)の考え方
テスト対象を、できるだけ実際の依存関係を含めた形で動かす。
つまり、実際のデータベース・ネットワーク・ファイルなども含めて、
システムとしての動作を重視。
モックよりも本物のオブジェクトを使い、全体の協調動作をテストする。
テストが現実に近くなる反面、スピードが遅くなったり、環境依存が発生するリスクもある。
「本番で動くものをちゃんと保証したい」という現場志向のアプローチ。
どちらが正しいわけではない
どちらの派も目的は同じで、「壊れないコードを書くこと」だと思われる。
メソッド派は「コード構造を保つ」ためのテスト。
デトロイト派は「動くものを保証する」ためのテスト。
プロジェクト規模や開発チームの文化によって、どちらを重視するかは変わる。
たとえば、金融系や制御系では「デトロイト派」的に信頼性重視。
スタートアップやWebサービスでは「メソッド派」的にスピード重視、が多い傾向。
結局、どう使い分けるのが良い?
どちらか一方に偏るよりも、レイヤーごとに使い分けるというのが現実的だと思った。
たとえば、開発段階でベータ版が出来上がる前までは、メソッド派で、本番検証時点では、デトロイト派で行うという合わせ技もありだと思う。
ドメインロジック → メソッド派(モック中心のユニットテスト)
インテグレーション層 → デトロイト派(実際の連携をテスト)
「どこまでモック化するか」を決めるのが、テスト設計のセンスとも言えるかも。
そもそもチーム内で「何を守るためのテストか」を共通認識にしておくことが重要なので、チーム思考に依存する可能性が高い。
あとがき
テストの世界にも「思想の流派」があり、それぞれに背景がある。
メソッド派は構造的・理論的なテスト。
デトロイト派は現実的・実務的なテスト。
どちらの派閥も、「壊れないコード」を目指すための異なるアプローチに過ぎないと思われる。
自分の開発現場に合ったテスト哲学を見つけることこそ、真のTDDへの第一歩なのではないかな?
一人で開発することが多い自分にとっては、両方のいいとこどりをしたいと思ったので、それはMYNT派と名付けることにしよう(自分しか呼ばんけど)。
0 件のコメント:
コメントを投稿