[Fowlerと軽量UML]
written by
(株)プライド 矢崎博英
INDEX 1. UML適用の問題点 - 大きさと複雑さ 2. UML適用の心構え(1) - 軽量UML 3. UML適用の心構え(2) - より儀式的なやり方 4. さて、最後に... 5. 参考文献とURL
1. UML適用の問題点 - 大きさと複雑さ
皆さん、UMLを描いていますか?かくいう私も、実際の開発の現場でUMLを使用しだしたのはつい最近のことです。幸いにもUML関係の情報は、いろいろなところから手にいれることができて、とても助かります。日本語で書かれた本(書き下ろしや翻訳)は多数出版されていますし、英語のできる方であれば、UMLの公式なドキュメントを米Rational社のWebページから、無料でダウンロードすることもできます。また、日本のいろいろなコンピュータ関係の雑誌にもUMLの特集記事や関連記事が載るようになりました。さらに、「オブジェクトの広場」のメーリングリストを始め、良質のメーリングリストも多数あり、その中から自分の興味にあうものを選び、そこで議論しながら考えを深めていくこともできます。
このようにUMLに関する情報には事欠かないと思えるのですが、それでも、ふと手が止まる時があります。特に、実プロジェクトでUMLを使う場合に大きな問題となるのが、大きさや複雑さという問題です。
教科書的にいえば、ユースケースを識別し、そのシナリオがわかれば、それをそのまま、インタラクション図で描くことができます。
しかし少なくとも私たちのプロジェクトでは、ユースケースのシナリオのシーケンス図を描こうとすると、それはあっという間に、縦にも横にも大きくなりました。つまり、オブジェクトの数と、処理の流れの長さの両方で大きくなったというわけです。
シーケンス図は確かに物理的には描けるかもしれません。しかし、それは見ていて、あまりわかりやすいといえるような物ではないようです。描いた本人にしか理解ができないような、そんな感じがします。
デザインパターンや、アナリシスパターンにシーケンス図が出てくると、一挙に理解が容易になったのに、ユースケースのシーケンス図は、どうしてこうもわかりにくくなるのだろう?これが私が抱いた悩みでした。
2. UML適用の心構え(1) - 軽量UML
マーティン・ファウラー氏は、この私の悩みに対して、1つの回答を与えてくれました。といっても、何かわかりやすくなるような特別な描き方を教えてくれたわけではありません。彼が教えてくれたのは、UMLを使うときの心構えというようなものです。それが本当の解決なのかどうかは、もう少し考えてみないとわかりません。しかし、それは私にとっては、ある種のパラダイムシフトをもたらしました。
先日行われた、彼の日本での講演から、興味深い発言をいくつか拾いあげてみましょう。
このように、彼のUMLの使い方は、非常にLightweightです。正式な設計ドキュメントの中心というよりは、文章を補足するために描かれるもの、そんな軽い感じをうけます。
事実、「UML Distilled」(日本語訳「UMLモデリングのエッセンス」)には、以下のような刺激的な言葉があちこちに書かれています。
(134ページ)
「これらの図
まるで、手を動かすと脳に刺激が与えられ、いいアイディアが浮かぶので、メモとか紙切れに気楽にシーケンス図を描いています、そんな軽さがあります。
(143ページ)
「クラス図と相互作用図を使って大まかな設計をすれば、考えをまとめるのに役立ち、コードを書くのが簡単になります。これらの図は初期段階のプロトタイプと考えています。後々までこれらの図を保存しておく必要はありませんが、保存していれば自分もあるいは他の人々にもコードが理解しやすくなります。」
(29ページ)
「UMLダイアグラムはシステムの全体的な理解を深めるのに役立つと思います。ただし、システム全体の詳細図を作成すべきだとは思っていないということを強調しておきます。Ward Cunningham氏(1996)の言葉を引用します。
私たちはメモとか殴り書きの効用というものを軽視しすぎなのかもしれません。ファウラーやカニンガムが言うことには、簡単に否定できない説得力があります。
(139ページ)
「これを実行するのに協調して働くいくつかのメソッドが存在します。これを示す図を描くこともできますが、わざわざ描くこともないでしょう。私がメソッドを分解する際にとる方法は、あらかじめ設計において考えるというよりもリファクタリングにもとづくことが多いように思います。」
XP のファウラーの本領発揮といったところでしょうか。しかし、XP でなくとも、プログラムを書きながら思考をまとめたりロジックを変えたりするプログラマは結構いるのでは?
3. UML適用の心構え(2) - より儀式的なやり方
さて、このままだと、あまりにもとりとめがないかもしれません。幸い(?)にも、ファウラーは「Distributed Computing」という雑誌の連載コラムで、もう少し儀式的(?)なやり方を説明しています。( https://www.martinfowler.com/articles/index.html )
「The Almighty Thud」と名づけられたコラムの主題は、全てのことをドキュメント化するのではなく、重要な部分に光を当ててドキュメンテーションすべしというものですが、その中で、彼のやり方を次のように披露しています。
上の説明によれば、ファウラーはパッケージ内部の重要なコラボレーションについて、インタラクション図を描くそうです。実は「UML Distilled」の第二版(残念ながら翻訳は出版されていません)では、Chapter7が「PACKAGE AND COLLABORATIONS」となっています。第一版とちがい、パッケージ図が独立して説明されなくなり、コラボレーション(コラボレーション図ではありません。念のため)といっしょの章で説明されています。
(原著第二版113ページ)
「パッケージはクラスを含むのと同じように、コラボレーションを含むことができる。」
(同書114ページ)
「どのオペレーションがそれを呼び出すかを決める前に、コラボレーションをモデル化することができる。」
また、ユースケースについて全てをインタラクション図で描く必要はないとしている点も目をひきます。
4. さて、最後に...
ファウラーの説くLightweightなUMLの使用方法は、彼がおそらく実践していることでしょうし、結構上手くいきそうです。今は、コードからリバースでクラス図を作成することもできるので、開発途中の設計ドキュメントを大事に保管しておく必要もないのではないでしょうか?必要なときにコードからリバースすればいいかもしれません。
それに、あたかもメモを描くかのように、設計を進める方法は、案外頭にもよさそうです。私も何か考えるときは、シャープペンシルで紙に落書きをしながら、考えをまとめるのですが、これはPCのキーボードを叩くことでは得られない感覚です。
しかし、どちらかといえばドキュメント至上主義の中で育ってきた私としては、やはり多少の違和感を覚えるのも事実です。この違和感を払拭するには、ファウラー流のやり方で徹底的に開発してみるのが一番かもしれませんが、そういうプロジェクトに参画する日はやってくるのでしょうか?
5. 参考文献とURL
© 2000 OGIS-RI Co., Ltd. |
|