ここでのテストは、開発者テスト、の中の、ユニットテストの話。XPとTDDの文脈において、設計を駆動するテストについてです。(※最近、テスト、と言う言葉を慎重に使わないと、いろんな他の方面から誤解を招く、ということを知って、文脈を特定しておきます。^^;;)

テスト容易性(EoT=Ease of Testing)が重要な設計品質である、ということを以前書いた。もう少し具体的な根拠を書きたい。

ユニットテストをたくさん作るということは、設計に対してどんな意味を持っているのだろう?物理的にいうと、「プログラムのエントリーポイントを増やしている」ということになる。

blog6

エントリーポイントとは、プログラムのスタート地点である。通常であれば、プログラムはmainという名前の決まったエントリーポイントから呼び出され、多くのモジュールを通過して終了する。しかし、ユニットテストを導入することによって、多くのテストメソッドが独立したエントリーポイントなる。main以外にも多数のエントリーポイントが作られ、テスト対象のモジュール(クラスやメソッド)はさまざまな道筋(文脈)で呼び出されることになる。こうして多くの道筋で使われることで、モジュールの文脈依存が小さくなり、この結果分かりやすく再利用しやすいテスト対象モジュールが取り出されることになる。さらに、モジュールの良い名前の採択が進む(文脈を表す名前でなく、責務を表すメソッド名が現れる)。そして、――これが最も大切なことなのだが―テストがあることによって以降のソフトウェアの変更が小さなコストでできるようになる(EoTは、EoC(Ease of Changing)の前提条件でもある)。

結論として、テストしやすい設計とは、「再利用性の高い設計」、「変更容易性の高い設計」を、テストというより具体的な言葉によって方針化しているといえる。以前、XPをやり始めたチームで、「このメソッドはユニットテストできません」という発言をよく聞いた。例えば、「タイマー起動である条件に合致するユーザをDBから選択し、そのユーザのアドレスにメールを送る」というメソッドをテストしようとしており、これはテストできない、という言い分である。これは典型的な間違いだ。まず、「タイマー起動」、「DBから条件に合致するユーザを選択」、「メールを送付」という3つに分けてテストできないか、と考える。テストを基点としてモジュール分割を考えるわけだ。タイマー起動のメソッドについては、時間をパラメータとし、すぐに起動されるイベントをテストしよう。メールを送付できることをテストするのは難しい。そこでMock(スタブ)を登場させる。メールの送付が他のクラスの責務であれば、自クラスのテストとしてはMailerMockを定義して、そこにメッセージが送られていることをテストすればよい。基本は、

「テストしやすいように、責務を分割する」

ことだ。この指針が、EoT(Ease of Testing)の本質だ。テストはモジュール分割のよいナイフになる。

平鍋

Special

- PR -
コメント
Akapon 2005/09/11 08:20

責務分担の基準をテストし易さにおくのは良いですよね。操作分割の基準も明確だし,なにより凝集度も高くなりますね。

平鍋 2005/09/11 11:02

ええ、外部変更要因のカプセル化、ともアラインすることが多いんです。SRP(Single Responsibility Principle)では、

クラスに変更が起こる理由は、一つであるべき。
A class should have only one reason to change.

といいますが、EoTは相関がかなり高いです。


コメントを投稿する
メールアドレス(必須):
URL:
コメント:
トラックバック

http://app.blogs.itmedia.co.jp/t/trackback/77444/2825412

トラックバック・ポリシー


» このブログのTOP

» オルタナティブ・ブログTOP



プロフィール

平鍋 健児

平鍋 健児

株式会社チェンジビジョン代表取締役社長、永和システムマネジメント副社長。
オブジェクト指向開発、UMLの勘所、アジャイルな開発手法の未来、マインドマップのソフトウェア開発での利用方法、プロジェクトファシリテーション(見える化)を語ります。現在、マインドマップとUMLの融合エディタ、astah*(アスター、旧JUDE)を開発中。

詳しいプロフィール

最近のトラックバック
カレンダー
2012年5月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    
カテゴリー
エンタープライズ・ピックアップ

news094.gif ストレス社会との付き合い方
政府がメンタルヘルス検査の義務化を検討しています。しかしうつになった後だけではなく、なる前の予防も大切なのではないでしょうか。(5/24)

news094.gif 「思いやり経営」のススメ
産学・NPO連携の民間団体が先頃、「思いやり経営」という観点で評価した指標や企業ランキングを発表した。企業のマネジメント力を知る手立てとして注目されそうだ。(5/24)

news094.gif テレワークが労働者のマインドを変える
テレワークが普及すると、労働者の評価は従来の「時間×生産性」から「成果」へと変化する。時間や場所を自分の裁量でコントロールできる変わりに、成果を最大化するために労働をマネジメントする能力とマインドが労働者には必要になる。(5/23)

news094.gif 求む、クックパッド男子
高身長も高学歴も高収入もいらない。私が男性に求めるのは「料理の腕」だけです。(5/18)

news094.gif 37歳の常識――我々は一生学び続ける
学び続けなければ衰退するのみだ。(5/18)

オルタナティブ・ブログは、専門スタッフにより、企画・構成されています。入力頂いた内容は、アイティメディアの他、オルタナティブ・ブログ、及び本記事執筆会社に提供されます。

Special

- PR -

サイトマップ | 利用規約 | プライバシーポリシー | 広告案内 | お問い合わせ