![]() |
||
|
特集 「テスト駆動開発」はプログラマのストレスを軽減するか? |
||
新しいソフトウェア開発技法へチャレンジできるか?
ソフトウェア開発の世界にも日々の進歩がある。そしてその中には、使えばさまざまな恩恵を受けられる技法もある。しかし、それらを現場ですぐに活用できるとは限らない。例えば、1990年代末に生まれ、1つのブームを形成したエクストリーム・プログラミング(XP)という開発技法がある。これは、とても優れた開発技法だと思うのだが、開発プロジェクト単位で、顧客まで巻き込んだ形で使われることが前提となっている。しかし、顧客ぐるみでまったく新しい方法にチャレンジできるかといえば、できないことの方が圧倒的に多いだろう。では、エクストリーム・プログラミングの技法を全部使おうとせず、使うことができる部分だけを取り出して試みることができるかというと、そういうわけにもいかない。エクストリーム・プログラミングは、いくつかのプラクティスと呼ばれる項目から成り立っているのだが、これらは相互にの弱点を補完し合う関係にあるため、特定の1つだけを取り出して使ってもうまく機能しないのである。
例えば、エクストリーム・プログラミングのプラクティスの1つに、「リファクタリング」というものがある。これは、あるルールに従って、ソース・コードを書き換え、重複を取り除き、より分かりやすい形に変えていくものである。リファクタリングを行うと、ソース・コードが分かりやすくなり、改変やメンテナンスが容易になるというメリットがあるとされる。だが、普通の開発プロジェクトでいきなりリファクタリングをやろうとしてもうまくいかない。通常は、「動いているソース・コードを変えてはならない」という常識がプロジェクトを支配していることが多く、ソース・コードを書き換える行為は強く戒められている。実際に、ただ単にリファクタリングを行って、いかにソース・コードが分かりやすくなったとしても、プログラムの信頼性が落ちるため、それがよいことだとはいえない。エクストリーム・プログラミングの一部としてリファクタリングを行う場合は、別のプラクティスによってもたらされる自動化された単体テストが、リファクタリングによる信頼性低下を防止する役割を担う。これでも完全な信頼性が保証されるわけではないが、信頼性への残された小さな不安よりも、ソース・コードを分かりやすく改善する方が大きなメリットを生む。
もう1つ、リファクタリングを行う場合には、エクストリーム・プログラミングのプラクティスの1つである「コードの共同所有」が不可欠である。もし、ソース・コードの部分ごとに担当者が決まっていて、彼/彼女以外は書き換えてはならない、ということになると、リファクタリングはとてもやりにくいものになる。例えば、あるメソッドが別のクラスに属しているべきだと判断された場合、双方のクラスのソース・コード担当者に話を通して書き直してもらう必要がある。このような手間をかけていては、とても効率の良い作業とはいえない。
このように見てみると、エクストリーム・プログラミングは、プロジェクトに所属する開発者の1人だけが試みることを決意しても無意味であることが分かるだろう。プロジェクト全体で、新しい技法に挑戦する場合はよいのだが、そのような例は多くはない。むしろ、プロジェクト内の少数派が、新しい方法にチャレンジする必要性を感じながら、それが実行できず、もんもんとすることの方が多いのではないかと思う。
そのような場合でも、比較的個人レベルでもチャレンジしやすいものとして、「テスト・ファースト」という技法がある。これもエクストリーム・プログラミングの一部を構成するものだが、比較的単独で使いやすい。これについては、すでにNUnit入門 Test Firstのススメ [NUnit 2.0対応版]という記事で解説している。
そして、テスト・ファーストのより洗練された、進化形ともいえる「テスト駆動開発(Test-Driven Development。以下TDD)」というものが提唱されている。これは、プログラマ個人レベルで、試みることが可能な技法である。例えば、大規模プロジェクトのメンバーとして、たった1つのメソッドの開発だけを命じられた場合でも、(事細かに開発の手順を指示されているのでなければ)そのメソッドを開発するために試みることができる。つまり、1990年代的な古い開発スタイルから、より新しい世界を体験する第1歩として、TDDは使えるかもしれない可能性を持っているわけである。
本稿の目的は、実際の開発に携わるプログラマの視点から、TDDを検証してみることにある。具体的には、『テスト駆動開発入門』(ケント・ベック著 ピアソン・エデュケーション刊)への筆者なりの感想と、実際にTDDを試みた結果を基に構成している。あくまで筆者の解釈によるTDD解説なので、よりオリジナルの形のTDDを知るには、この書籍を読むことをお勧めする。
TDDはテスト・ファーストとどこが違うのか
TDDは、テスト駆動開発という名前のとおり、「テスト」により「開発」が「駆動」される開発技法である。開発技法であって、テスト技法ではないことに注意が必要である。もちろん、テストとしての側面は持っているが、あくまで主テーマは「テスト」ではなく「開発」にある。
TDDでは、まず、テストを書き、そのテストをパスするように目的のコードを記述する。テストの実行には、NUnitのようなテスティング・フレームワークを使う。これらの特徴は、テスト・ファーストと何ら変わることはない。そこまでの手順は、既出のNUnit入門 Test Firstのススメ [NUnit 2.0対応版]で説明しているので、ここでは繰り返さない。
では、テスト・ファーストとTDDの違いは何か。
それは筆者としては、以下の2点に要約できると感じている。
- レッド/グリーン/リファクタリングのリズムで開発を行う
- このリズムを短く繰り返す
この2つは、どちらも開発の「リズム」に関する話であるように見える。とすれば、ただ単にリズムを変えただけにすぎない、ということもできる。しかし、リズムを変えるだけで、何かが改善されたりするのだろうか。
その話に進む前に、まず、レッド/グリーン/リファクタリングについて説明しよう。
| INDEX | ||
| [特集]「テスト駆動開発」はプログラマのストレスを軽減するか? | ||
| 1.新しいソフトウェア開発技法へチャレンジできるか? | ||
| 2.レッド/グリーン/リファクタリングの三拍子 | ||
| 3.再びレッドとグリーン、そしてリファクタリング | ||
| 4.どんなときにテスト駆動開発を採用すべきか | ||
ホワイトペーパー(TechTargetジャパン)
- Chapter15:LINQとクエリ式 (2010/3/17)
C# 3.0の目玉機能であるLINQについて、さまざまな記述例を交えながら徹底解説。書籍『[完全版]究極のC#プログラミング』より転載 - VBラムダ式 基礎文法最速マスター (2010/3/16)
今度はVB。ラムダ式の基礎文法を、短い説明と簡単なコードでまとめる。「ラムダ式、どう書くんだっけ?」という場合の簡易リファレンスとして活用できる - ASP.NET MVC 2がリリース (2010/3/15)
ASP.NET MVC 2の正式版(VS 2008のASP.NET 3.5向け、VS 2010には標準で含まれる予定)のリリースについてのお知らせ - 逆引きリファレンス:コア編 (2010/3/12)
jQueryのキモともいえる$()関数を始め、jQueryオブジェクトの中核となるメソッドについてまとめた、すぐに役立つ12本を一挙公開
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
| 「いつかは壊れるサーバ」そんな故障に 迅速で安価に手軽に対応する方法とは? New! |
| 「特権ユーザー」の事件を防げ! 万能権限を持つユーザーの管理方法とは? New! |
| 仮想環境の構築とデータ保護の特効薬?! 実績と信頼性の高いパッケージで安心運用 |
| 仮想環境のバックアップもこれまでどおり 「まるごと取ってまるごと戻す」簡単運用 |
| おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |
| その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |
| 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |
| 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜Java編〜
| ◆ | TomcatやJBossなどAPサーバ環境に関する 情報を集約! “業務”用APサーバ大百科 New! |
| ◆ | 一気に解説! 最新のクラスタストレージ 「RAIDを超えたストレージ基準」……など New! |
| ◆ | クラウド的ユーザー体験の変化は脅威か? 仮想化技術を使いこなす運用管理術を紹介 New! |

| ◆ | 上司や部下、部署内メンバーとの情報共有 を“ガラッ”と変えるコラボツールとは? New! |
| ◆ | おばかアプリ選手権、第4弾開催中!! ムダにカッコよくてくだらない作品求ム! |
| ◆ | 社内ファイルサーバを“クラウド”に統合 VPN直結「クラウド型ストレージ」を紹介 |

| ◆ | Twitterのアカウントはなぜ突破された? メールによる新手の攻撃手法とその対策 |
| ◆ | もう仮想化のお試しフェイズは終わりだ! Hyper-V 2.0が基幹システムも仮想化 |
| ◆ | 美人!? まあまあ? 気になる いやし系!! PV急増で「美人時計」がとった手段とは? |

| ◆ | クライアント企業から求められる人材 ⇒IT技術と経営戦略を併せ持つ「戦略家」 |
| ◆ | .NET編集長が実践する「技術情報検索術」 サンプル・コードを簡単に探す“技”は? |
| ◆ | 業務効率と情報セキュリティ対策を両立! 手間なく確実に機密情報を守る方法とは? |

| ◆ | 進化を続ける富士通ストレージETERNUS DX 製品開発者の自信を裏付けるものとは何か |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |

| ◆ | 【CTC事例】約30の基幹システムを統合! 膨大なバッジジョブを制御した方法は? |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |
| ◆ | その数、なんと400台以上! グループ内 サーバの「統合管理」によるメリットは? |







