実践テスト駆動開発――テストに導かれてオブジェクト指向ソフトウェアを育てる

2012/11/09 14:12:49

Manual_2 実践テスト駆動開発

Steve Freeman、Nat Pryce(著)
和智右桂、高木正弘 (翻訳)
翔泳社
2012年9月

ISBN-10: 4798124583
ISBN-13: 978-4798124582
4,410 円(税込)

■「実践テスト駆動開発」ーー諸君、これがTDDの実践だ!

 TDDは広まりつつある。しかし……。

 アジャイル開発を行う上で、必須といってもいいプラクティスの1つに「テスト駆動開発・TDD」がある。このTDDのバイブルである「テスト駆動開発入門」をKent Beck氏が世に出してから、10年が経った。その間に、欧米では、すでにアジャイルがメインストリームとなった。日本でも、多くの諸先輩方が実践を続けていくなかで、ようやく広まってきたところだ。TDDを学ぶイベント「TDD Boot Camp」も、毎回キャンセル待ちの人が数多く出る人気イベントとなっている。

 日本でも、TDDに対する裾野はだいぶ広がっているのだろう。しかし、いざ実際の仕事でTDDをやろうとすると、いくつもの壁にぶち当たる。イベント駆動型クライアントアプリケーションの場合、データベースが絡む場合、マルチスレッドの場合、サードパーティのコンポーネントを使う場合。あまりに壁が大きいため、挫折してしまった人も少なからずいるだろう。かくいう私も、こうした壁を前にして、心が折れた経験を持っている。

 そうした、悩めるTDDerに向けて書かれた本が、本書「実践テスト駆動開発」である。本書は、世界中のアジャイリストが10年の歳月をかけて積み上げてきた、“TDDを行う上での壁”に立ち向かう術を教えてくれる、テスト駆動開発の奥義書である。

■そもそもTDDとは何か

 Wikipediaによると、

 プログラムに必要な各機能について、最初にテストを書き(これをテストファーストという)、そのテストが動作する必要最低限な実装をとりあえず行った後、コードを洗練させる、という短い工程を繰り返すスタイルである。

とある。

 では、TDDをすることで、どういった恩恵があるのだろうか。本書では

 システムを開発する際には、TDDを採用することで、実装(「正しく動くか?」)と設計(「適切な構造になっているか」)両方の質についてのフィードバックが得られる。テストを先に書いて開発することで、投入した労力による恩恵が二重に得られるのだ。

とある。つまるところ、TDDをすることは、設計と実装を小さなスケールで絶え間なく繰り返すことで、正しいソフトウェアを作っていくことに他ならない。

■立ちはだかる壁を内包したアプリケーションを、TDDで育てていく

 では、実際にTDDはどういった形で進めていくのだろうか。本書のサンプル「オークションスナイパー」というサンプルアプリケーションの開発内容を一部紹介していく。

 まず行うのが、アプリケーションの全体像を考えること。必要となるプロトコルや、状態遷移、扱う機能について洗い出す。いきなりテストコードを書くのではないのだ。何をしなければいけないのか。どういった技術基盤の下に行うのか。そうしたアプリケーションの設計を行う必要があるのだ。

 そうしてアプリケーションの設計をした後に行われるのが、「動くスケルトン」と呼ぶものを作ること。これはシステムで必要となるコンポーネントを網羅した形で一つの機能を、エンドツーエンドテストーーユーザーインターフェイスからサーバとの通信を経て、結果が出るまでーーとして成功するものとして構築したものである。

 「オークションスナイパー」システムでいうと、ユーザーインターフェイスやスナイパーコンポーネント、オークションサービスとの通信を網羅した形で一つの機能をTDDで実装するとしている。

 このとき、オークションサービスは実際のものを使わず、同じように動作させることのできる仮想サービスを用意して行う。

 いわば、アーキテクチャの検証である。考えたアーキテクチャが正しいかどうかを検証するのだ。こうしてアーキテクチャの検証を終えた「動くスケルトン」に一つずつ機能を追加していく。

 「オークションスナイパー」システムは、最初偽のオークションサービスとコネクションを行い、オークションの終了を見届けるだけの機能から作成を始めている。そこから一つづつ機能を追加していく形で、入札を行ったり、新しい商品を追加できるようにしていっているのだ。

 もちろん、テストコードを書き、それが全て成功するのを保つようにして追加していくのだ。このようにして、正しいソフトウェアを育てているのだ。

 実際のアプリケーションをTDDで開発していくのにここまでやる必要があるのかと、私は圧倒された。しかし、ここまでやるからこそ正しいソフトウェアを育てていけるのだろう。ウォーターフォール型開発で最後にテストを行なうことで、バグが吹き出して苦しい思いをする。それに比べれば、こちらの方が、開発は大変ではあるが、安心して開発ができるように思う。

■すべてのTDDの難問に対する解はここに

 この「オークションスナイパー」のサンプルには現れていない、TDDをする上で陥りやすい罠や立ちはだかる壁はまだ多くある。こうした難問に対しても、本書は解を示している。

 例えばデータベースを扱う際のTDDはどのようにして行えばいいのか。永続データの消去をテストの開始前に行うのだ。整合性制約があるので、テーブルから行を削除する順序を一つにまとめ、行うのがよいとしている。

 トランザクションを必要とする場合はどうすればいいか。トランザクション管理を行うオブジェクトを抽出し、そのなかでユニット・オブ・ワークパターンを用いればよいとしている。

 他にもマルチスレッドでのTDDや非同期処理でのTDDなど、「こういう場合のテストはどう書けばいいんだ……」という、TDDerの悩みに本書は応えてくれるだろう。

■TDDを学び、本書を携え実践しよう

 残念ながら、本書はこれからTDDを学ぼうとする人が読むには敷居が高いだろう。初めてTDDを学ぶならば、やはりKent Beck氏の「テスト駆動開発入門」を読み、実際にコードを打ち込んで、体験する必要があるだろう。もちろん、TDD Boot Campへ参加するのもいいだろう。

 そうやって、TDDを学んで実際に使い始めると「こういう場合どうすればいいんだ……」という場合が必ず訪れる。そのときこそ、本書はあなたの力になってくれるだろう。私もまた、本書を携えてTDDを実践していこうと思う。

『What a wonderful world』コラムニスト たのっち)

『クラウド時代の製品・サービス選び』――気にするなと言われても気になる「雲の中」は最新技術の宝庫

2011/05/31 17:34:59

クラウド時代の製品・サービス選び  クラウド時代の製品・サービス選び Vol.1――クラウドからサーバー、セキュリティまで失敗しないIT導入をサポート

TECH.ASCII.jp編集部
角川グループパブリッシング

2011年2月
ISBN-10: 4048703706
ISBN-13: 978-4048703703
1280円(税込)

■雲の中をのぞいてみよう!

 クラウドコンピューティングを利用するユーザーにとって、そのコンピュータ資源は雲の中に隠されている。どこにあって、どのような機器が用いられていて、どう運用されているのか――ユーザーは意識する必要がない。

 しかし、いざわれわれがクラウドサービスを利用する際、完全なブラックボックスの中からサービスを選定するわけにはいかない。やはり、ある程度は「雲の中がどうなっているのか」を把握しておく必要がある。企業での利用ともなれば、なおさらだ。

 本ムックは、さまざまな角度から「雲の中」を紹介している。以下、4つの特集を軸に、解説していこうと思う。

■特集1 IaaS導入のベストチョイス

 IaaS(Infrastructure as a Service)といえば、Amazon EC2が最も有名だ。Amazon.co.jpのサーバが最も高負荷になるのはクリスマスシーズンである。インフラはピーク時を想定して構築するが、それ以外のシーズンは余剰リソースとなってしまう。それらの余剰リソースを安価で一般に開放したことが、Amazon EC2の始まりだった。

 本特集は、Amazon EC2という巨人に対抗する日本企業の各IaaSサービスを紹介している。

 クラウドというと、どうしてもAmazonやSalesforce.comなど、米国の企業に注目が集まりがちだが、これら海外企業は当然ながらデータセンターを海外に保有している。「データの所在を意識する必要がない」というクラウドのメリットは、「データがどこの国に保存されているのかが分からない」というデメリットに転じてしまう。保存されているデータの取り扱いは、それが存在する国の法体系に依存するからだ。

 去年、わたしはIT関連のとあるシンポジウムに参加し、そこでクラウドについての研究、発表を行った。この研究過程で、クラウドサービスを利用するユーザー企業にヒアリングを行ったのだが、そこで示された「ユーザー企業における最も関心の高い懸念事項」はデータの所在に関する問題だった。

 海外各社も日本国内にデータセンターを建設するなど、日本企業向けに対応を始めているものの、「データが国内に保存されている」という事に対する信頼は、やはり国産クラウドに一日の長があるだろう。

 本特集は、日本企業が国産クラウドを選定する際の一助となると思う。

■特集2 デスクトップ仮想化のすべて

 オフィスのPCと自宅のPCは「それぞれ環境が異なり、OS設定も別々」がこれまでの定石だった。出張した先でPCを借りても、普段自分が使っているPCと設定が異なっていて慣れるのに苦労する、という経験を持つ人は多いはずだ。

 だが、デスクトップの仮想化は、この煩雑さを無効にする。ユーザーがどこで作業しようとも、どのPCを使おうと、サーバにさえ接続できれば、常に同じデスクトップを利用できる。

 デスクトップ環境やデータはすべてサーバに存在しており、サーバで稼働する自分のデスクトップ環境をPCで利用する。そのため、従来のようにデータが各個人の端末に分散されない。デスクトップの仮想化は、セキュリティ面でもメリットの多い技術である。

 本特集では、そういったデスクトップの仮想化に関して、技術や仕組み、各社の戦略などを基礎から見ていくことができる。

 ここで個人的に興味深かったのは、ウイルス対策についてだ。

 多くの企業では、社内ネットワークでのグループポリシーなどに従って「毎週火曜日の昼休み」というように、定期的にウイルススキャンを実行する。私の職場でも同様のパターンでウイルススキャンを実行するが、いつも昼休みの時間内に処理が終わらない。午後の業務時間のうち1時間ほどはスキャンが動き続けるため、仕事に支障をきたすほどパフォーマンスが劣化する。

 デスクトップを仮想化すれば、それぞれのデスクトップはすべてサーバに保有されているから、深夜時間帯に一括でスキャンを実行できるのではないかと考えていた。

 ところが、話はそう単純ではないらしい。サーバ上に存在する40~50台の仮想マシンに一斉にウイルススキャンしようものなら、深刻なパフォーマンス劣化が発生するというのである。これについてはいくつかの負荷分散のアプローチが試みられているようで、今後の発展に大いに期待したいところだ。

■特集3 知っておきたいクラウドのリスクとセキュリティ

 クラウドを利用するうえで最も気になるのが、セキュリティだろう。

 つい最近も大規模な情報漏えい事故が世間をにぎわせており、セキュリティについての関心は高まっていると思われる。

 私自身も、先日の大規模情報漏えいによって自分の個人情報が流出してしまった可能性がある。クレジットカードの情報も登録してあったため、実際の被害はまだ受けていないものの、精神的なダメージは非常に大きかった。

 こういった実例が存在する以上、「クラウドのセキュリティが絶対に安全である」とはとてもではないが言い切れない。だからこそ事前に、クラウド利用によって生じるリスクと、セキュリティについての情報を集めておくことが不可欠だろう。

 本特集では、クラウドにおけるセキュリティについての問題を、エンドユーザーからの視点なども交えながら包括的に概観している。

 特に、今の日本は震災が頻発するため、人為的なセキュリティ事故にとどまらず、災害下におけるデータ保全についても注目度が高い。。本特集では自然災害におけるデータセンターの対応についての記事などもあり、読み応えがあった。

■特集4 エンジニアなら知っておきたい 失敗しないサーバ選びのポイント

 最後の特集はサーバ選びについて。

 こちらはクラウド利用というよりも、プライベートクラウドも含めたクラウド運用者向けの記事である。

 サーバ機について、メインフレームからPCサーバまで、用途に応じたサーバ選定のポイントを解説している。私はソフトウェア寄りの人間であるため、あまりハードの話題は詳しくないのだが、サーバ選択についてのTCO(総保有コスト)の観点など、興味深く読むことができた。

■雲の中は最新技術の宝庫だった

 サーバ機やセキュリティ対策、仮想化など、雲の中は最新技術であふれていた。

 遠くから見れば穏やかに浮かんでいるように見える雲も、中を見れば気流が激しく動き、膨張し、進化している。少しのぞきこんだだけでも、非常にエキサイティングな世界を垣間見れる。

 「雲の中」に興味を持つエンジニアとして、その激しくも先進的な世界に、これからも注目せずにはいられない。

@IT Special 注目企業
@IT Special ラーニング

エンジニアライフ 最新の投稿コラム

@IT自分戦略研究所 新着記事

コラムニスト プロフィール

書評チーム 「ELリーダーズ」

「エンジニアの人生=エンジニアライフ」に役立つ本を紹介します。

本をお探しの方は、インデックスからどうぞ。


2012年11月

        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  

バックナンバー

月間バックナンバー

検索

Powered by TypePad
- PR -
@IT Special 注目企業
インデックス

イベントカレンダー

アクセスランキング

もっと見る

@IT Special ラーニング