UML

UMLから遠ざかって結構時間が経ちました。いや遠ざかっちゃいないっすね、なんだかんだ言ってクラス図やシーケンス図、アクティビティ図、コンポーネント図とか機会がある度書いているから。ただ数年前に僕が勝手に抱いていたUMLに対する万能感、UMLこそがコミュニケーションの根幹をなすもので、本当に伝えたいものはコードに表せないという思い込みもあって、とにかくUMLでモデルを書くべきだ、みんなUMLで表現したらいいのに、という能天気な思いを失ってから2〜3年が経ったと思います。


今ではモデルがないことに危機感なんて感じません。コードの方が雄弁に語ってくれると(これまた勝手に)思っているからですが、UMLを過剰に信じていた頃は、世の中が見えてなかったというか、分析モデルと設計モデルと実装のモデルがあれば、システムに関係するすべてのモデルを網羅できるなんて恥ずかしいことを真剣に思っていたわけでです。ああ、恥ずかしい。


いま僕がUMLによるモデルをあまり必要としないのは、おそらく大規模開発から遠ざかっているからだと思います。それほど大量のデータや複雑な仕組みを必要としなくても済むなら、他のドキュメントと同様、余計な設計書を書くことは、DRYに反します。ただしドキュメントとして利用するのではなく、短いスパンでの設計ツールとしてはUMLは非常に有効だとは今でも思っています。


UMLに限らず、ドキュメントは設計者が実装者一人一人に設計のコンセプトを伝えるための道具として存在するべきだと思うのですが、UMLを使わなくても設計の肝を伝えられるなら、それに頼らなくても全然かまわないわけです。UMLを使わないで設計の肝を伝えるっていうのが難しいから僕も未だにUMLを使って設計書っぽいものをかくわけですが。


プログラミングの解説書などでは、いきなり大規模開発向けの抽象化や再利用を推進するテクニックを紹介したりしますが、それを小規模開発に適用するのは無駄が多いように感じます。もちろん小規模開発でも有用なもの沢山あると思いますが。コードやドキュメントの書き方もチームの規模やスキルの差、顧客との関係などでも大きく変わるでしょう。これこそが正しい!と思うことの多くは結構間違いだった経験からそんな風に思うようになりました。


ついでに言うと、テストを書くようになってUMLで設計する作業が減りました。これは、UMLがすごく流行ってた時代(といってもまだ数年前ですが)、まだまだテスト、特に自動テストはそれほど注目されていなかったっていう背景もあると思います。