リファクタリング:
プログラミングの
体質改善テクニック

マーチン・ファウラー 著
児玉 公信,友野 晶夫,平澤 章,梅澤 真史 訳
ピアソン・エデュケーション 発行
2002年5月 424ページ
4800円(本体)
bk1で購入する
 そもそもソフトウエア開発のどこからどこまでを設計と呼ぶかは難しい問題なのですが,センスの良い設計と悪い設計の差なら,だいぶわかりやすいのではないでしょうか。不明な点が多く残る仕様書を受け取ったら困ります。同じプログラム・コードを何度も打ち込むはめになれば,設計が悪い! と思うはずです。プログラムができたあとから,「やっぱりこういう機能が必要だった」などと設計者が言い出すようでは,何をやってるんだか,と,ふてくされてもしょうがありません。どれも,結構よくあることのような気もします。ともかく,センスの良い設計とはどのようなものなのでしょうか。設計のセンスを身につけ,磨ける5冊をご紹介します。

 プログラマが設計の世界をのぞいてみたいなら,お薦めの1冊は「リファクタリング」です。リファクタリングとは,プログラムを外部的な振る舞いを変えずに,コードを書き直すことです。

 本書は,ビデオ・レンタルの料金を計算して印刷するプログラムの例から始まります。最初に示されたプログラム・コードに対してリファクタリングを進めていくと,コードがすっきり読みやすく改善されていく様子を体験できます。例のあとでは,リファクタリングの原則,コードを読みやすく改善できるポイント(著者はこれを「コードの不吉な匂い」と呼んでいます),改善する方法などを次々と解説していきます。プログラム・コードが悪くなる例と良くする方法を続けて見ていくことで,よい設計とはなにか,という問いに対するヒントを,数多く得られるのではないでしょうか。

 若干無愛想な表紙からは,ずいぶん堅そうなことが書いてありそうだという印象を受けるかもしれませんが,心配しないでください。やさしいサンプル・コードと,平易な話し言葉で,リファクタリングを解説しています。サンプル・コードはJavaで記述してありますが,Java特有のクラスライブラリを利用するようなコードはほとんど登場しないので,クラス,メソッドといったオブジェクト指向言語の用語を理解できるプログラマなら,十分読みこなせます。

独習UML 改訂版
ジョゼフ・シュムラー 著
多摩ソフトウエア 訳
長瀬 嘉秀 監訳
翔泳社 発行
2002年6月 419ページ
3600円(本体)
bk1で購入する
UML モデリングのエッセンス 第2版
マーチン・ファウラー/
ケンドール・スコット 著
羽生田 栄一 監訳
翔泳社 発行
2000年4月 165ページ
2400円(本体)
bk1で購入する
構造化分析と
システム仕様

トム・デマルコ 著
高梨 智弘,
黒田 純一郎 監訳
日経BP出版センター 
発行
1986年12月 397ページ
2718円(本体)
bk1で購入する

設計者の仕事と気持ちを理解し,
よい設計とは何かをつかむ3冊

 ソフトウエアを開発する一般的なプロセスは,(1)ユーザーの要求を分析して,(2)その結果に合わせて設計し,(3)プログラムを作成して,(4)テストする──というステップを踏みます。この,(1)や(2)の手法を,分析技法や,設計技法と呼びます。

 この技法を身につける最初の1冊としてお薦めなのが,「独習UML 改訂版」です。UMLは,Unified Modeling Languageの略で,日本語にすると「統一されたモデリング言語」という意味になります。自動車や飛行機を設計するときに設計図がありますね。ソフトウエア開発においてもこの設計図にあたるものの書き方がいくつかあります。UMLは最近注目されている書き方の一つです。

 本書は,クラス,継承などオブジェクト指向の重要な概念と,オブジェクト指向的なものの見方を説明したうえで,UMLの表記法,システム分析,設計のケーススタディなどを解説していきます。ほとんどの説明は,身近な例を挙げて説明しているため,理解しやすいです。

 たとえば,オブジェクト間の相互作用を時間順に表す「シーケンス図」の説明では,自動販売機でジュースを買うことを例にとって説明しています。またケーススタディでは,レストランのオーダー・エントリを例にとり,分析者,システム・エンジニア,レストラン経営者,シェフなどが出席する会議の模様を,まるでお芝居の台本のように紹介しています。よい設計をするために,設計者はどんなことを疑問に思い,どのようなこと聞かなければならないのか,というポイントをつかむことができるでしょう。

 もう1冊,オブジェクト指向設計の概念を把握するのにお薦めの書籍を紹介しましょう。「UML モデリングのエッセンス 第2版」です。

 一見UMLを解説する本に見えますが,一般的なオブジェクト指向設計とはどのようなものかの概要を把握するための本と表現した方がいいでしょう。本書は,UMLとは何かを最初に簡単に説明したうえで,ユースケース,クラス図,相互作用モデルという三つの技法を中心に,多くの技法を,どのような目的でどのように利用すると効果的なのかを解説していきます。

 詳細な説明を省き,概要を説明することに特化したおかげで,重要なノウハウやテクニックだけに絞って学ぶことができます。プログラミング書籍にしては,珍しく165ページと薄い本ですが,読後感はしっかりあります。うまくエッセンスを抽出できているからかもしれません。オブジェクト指向設計の経験がまったくない人が読むと,ちょっと難しいと感じるかもしれませんが,分析,設計するときの視点の持ち方と考え方を気づかせてくれます。

 これまで,最近注目されてオブジェクト指向分析/設計の本を2冊紹介してきました。オブジェクト指向とはしばらく縁がなさそうだな,と思っている人でも,設計のセンスを磨ける書籍があります。「構造化分析とシステム仕様」です。もちろんオブジェクト指向設計を手掛けている方でも,まだ読んだことがないなら一読をお勧めします。

 原著の「Structured Analysis and System Specification」は初版1979年と20年以上前で,どちらかというと“古典”に分類されるべき本かもしれませんが,本書が解き明かす分析と設計の概念は,今でも価値を失っていません。本書はデータフロー図と呼ぶ図を利用しながら,構造化分析という分析手法から,設計までの考え方を,解説しています。

 分析手法がすでに過去のものである感じは多少しますが,本書は今でも,よい設計とはなにかを考えるときに基本的で重要なポイントを示してくれます。たとえばデシジョン・テーブルという分析手法です。「ある飛行機のチャーター便の乗客が,定員の半分を超えていて,しかも料金が1人350ドルを超えている場合は,国内線を除いて,カクテル・サービスは無料になります(カクテルは乗客の半分を超えないと出しません)」という例を挙げます。国内線ではなく,定員の半分以下の乗客で,料金が1人350ドルを超える場合は,カクテル・サービスはあるのかないのか,カクテル・サービスは無料なのかどうか,すぐにわかりますか?

 デシジョン・テーブルを使えば,最初の説明に不備があることをすぐに判断できます。本書はこのような分析と設計の基本,何を明確にすべきかを教えてくれます。プログラマが受け取った仕様書に不備があるかもしれないと思うとき,なにがまずいのかをすぐに気がつくようになるはずです。

ユースケース実践ガイド
アリスター・コーバーン 著
山岸 耕二,矢崎 博英,
水谷 雅宏,篠原 明子 訳
ウルシステムズ 監訳
翔泳社 発行
2001年11月 331ページ
3800円(本体)
bk1で購入する

分析/設計の世界へ
旅立つ人へ贈る1冊

 最後の1冊は,すでにシステムの分析や設計を始めている人に読んで欲しい「ユースケース実践ガイド」です。ユースケースという,システムとユーザーの関係を記述する方法を用いて,システムへの要求を分析する作業を解説していきます。

 すでにオブジェクト指向設計を始めているなら,ユースケースの有用性はある程度理解できるのではないでしょうか。しかしユースケースは簡単に自由に書ける半面,数が多くなりすぎてしまう,ユースケースの粒度がそろわずに次の工程に進むのが難しい,といった問題に遭遇しがちです。

 本書は,うまくユースケースを書く方法を,体系立てて教えてくれます。問題に遭遇したときに回避する方法についても触れます。ユースケースを使ってみたけれど,どうもうまくいかないという方はぜひ手に取ってみてください。