[動画で解説]和田卓人の“テスト駆動開発”講座

第20回 テストコードの重複はアリかナシか

この記事を読むのに必要な時間:およそ 2 分

ニコニコ動画:http://www.nicovideo.jp/watch/sm2326646

第17回で,プロダクトコードの重複の話をしました。そこでは,DRY(Don't rpeart yourself)原則,コードの「重複は悪」という話をしました。

では,テストコードの重複はどうでしょうか? 今回はその点について議論してみたいと思います。

テスト対象,納品対象のコードは,コードの重複や機能の重複というのは,あってはならない,というか理想的には1行も重複がないという状態で書かれるべきですが,ではテストコードはどうなのかという話です。

テストコードの中の重複をどんどん排除してくと,たとえばテストのヘルパクラスをたくさん作ったりとか,テストクラスの継承がどんどん深くなるといった結果になり,そのテストが実際にどのように動いているのかを調べるために,いろんなテスト用クラスを行ったり来たりしなければならないというような状況が出てきてしまいます。

そのような状況に直面したときに,テストコードの重複は善か悪かというような議論が出てきます。

2つの指針

「テストコードの重複」は,一番最後のトピックとしてちょうどいいかなと思っています。そして意見は以下の二つ

「テストコードには重複があってもいい,テストコードはその部分だけ見ればある程度何をやってるかわかるコード,重複があってもいいから何をやってるかわかるノッペリとした書かれ方がいい」

という考え方と,

「テストコードもコードはコード,テストコードにもプロダクトコードと同様にDRY原則が満たされなければならない」

という意見に,だいたいやはり2種類に分かれるんですね。

故・石井勝(masarl)さんの考え

故・石井勝さんという方は,テストコードは重複があってもいいと,おっしゃっています注1)。テストは,そのテストコードのブロックだけ見れば,ある程度なにやってるかわかるという単純な書かれ方がよいという考え方です。

私自身もmasarlさんの考え方に沿っています。重複がいくつかあってもいいという考え方ですので,テストのメンテナンスをするときに何ヵ所かを同時にいじるという状況になってしまうことがあり得るんですけども,それでもテストは単純な書かれ方のほうがいいという考えです。

注1)
http://www.morijp.com/masarl/homepage3.nifty.com/masarl/article/junit/programming-style
-guide.html

達人プログラマーDave ThomasとAndy Huntの考え

一方,『達人プログラマー』注2という本で有名なDave ThomasとAndy Huntは,『達人プログラマー』(アスキー刊のほう)の中で「テストコードも実コードである」ということを書いています。テストコードも実コードと同じ厳しい基準であたり,テストコードにも重複はあってはならないという意見です。

注2)
www.amazon.co.jp/%E9%81%94%E4%BA%BA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC%E2%80%95%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E9%96%8B%E7%99%BA%E3%81%AE%E8%81%B7%E4%BA%BA%E3%81%8B%E3%82%89%E5%90%8D%E5%8C%A0%E3%81%B8%E3%81%AE%E9%81%93-%E3%82%A2%E3%83%B3%E3%83%89%E3%83%AA%E3%83%A5%E3%83%BC-%E3%83%8F%E3%83%B3%E3%83%88/dp/4894712741/ref=pd_bbs_sr_1?ie=UTF8&s=books&qid=1197186076&sr=8-1"">達人プログラマー ― システム開発の職人から名匠への道(Andrew Hunt/David Thomas(著),村上 雅章(訳),ピアソン・エデュケーション),達人プログラマー ― ソフトウェア開発に不可欠な基礎知識 バージョン管理/ユニットテスト/自動化(David Thomas/Andrew Hunt/Mike Clark(著),長瀬 嘉秀(監訳),テクノロジックアート(訳),アスキー)

著者プロフィール

和田卓人(わだたくと)

タワーズ・クエスト株式会社 プログラマ 兼 取締役社長。
2003年頃XPやテスト駆動開発に目覚める。後年「チームかくたに」のコーチとしてXPやTDDをチームで行った経験をもとに,『WEB+DB PRESS Vol.35』と『WEB+DB PRESS Vol.37』でTDDやリファクタリングについての巻頭特集を執筆。現在はSeasar.orgのコミッタとしての活動もしつつ,社長として会社を回している。

URLhttp://d.hatena.ne.jp/t-wada

コメント

コメントの記入