<< ドメインモデル駆動開発の実践 | main | 続・システムのデッサン >>

システムのデッサン(素描)力

とりあえず描いてみる


年末に、ちょっとした設計を済ませたかったが、いろいろ立て込んで、どうにも時間が足りなくなった。

しょうがないので、「一枚5分くらいでいいから、画面のラフスケッチ、ユースケースモデル、概念モデルの三つを、ざっと描いてみて」と頼んだら、要点がはっきりとわかる、かなり良いモデルがでてきた。
(さすがに、1モデル5分ではなく、10分とか20分はかけたようだけど)

描いた本人は、粗が目立って、あまり、納得していない様子。

私からみると、彼の設計意図、こだわりポイント、切り捨てたポイントが明確で、とてもよい設計ドキュメントになっていると思った。

最近は、モデリングツール( Enterprise Architect ) を使ったモデリングが多かったけど、こういう手書きのラフスケッチの良さを、再発見。

この再発見をブログで書こうと思って、ネットで関連ワードを漁っていたら、見つけたのが「デッサン (素描)」という言葉。

ソフトウェア設計でも、「デッサン(素描)」は、基本スキルだし、とても、役に立つ技法。もっと、デッサンをやるべきだし、デッサン力を身につけることが大切。

油絵で、絵の具を使うのが、コーディングだとしたら、その前に、木炭とか、やわらかめの鉛筆で、デッサン(素描)したり、下絵を描くのが、基本。(だと思う。絵の専門家じゃないので確かじゃないけど)

デッサン(素描)で視覚的な特徴をつかむ


デッサン(素描)は、モノトーンで、輪郭線の強弱や、濃淡による陰影で、表現する技法。

細部の精密表現には向かないけど、全体の構図とか、視覚的な特徴とかを、表現するには、きわめて有効な技法というわけだ。

ソフトェアで、細部を精密に表現するには、コードを書くのが一番。APIの使い方などは、サンプルコードが、もっとも、わかりやすい表現手段だと思う。

ただ、ソフトウェアの全体の構造とか、特徴とかを、関係者で、共有するには、コードは適切な手段ではない。

1枚の視覚的な表現、つまり、デッサン(素描)が、もっとも役に立つ。

デッサン(素描)は、試作方法


ルネサンス時代には、絵画や彫刻、建築の試作方法として大いに用いられるようになったのだそうだ。( from wikipedia )

ソフトウェア開発、システム構築は、「建築」との類似性が高いと思う。

デッサン(素描)が便利な試作方法である、という点も、まさにその通り。

描かないのが、腕の見せ所


デッサン(素描)のツボは、細部を「描きこまない」ことでしょう。

ごちゃごちゃ描きこみすぎると、全体が真っ黒になって、線の強弱や、濃淡による陰影の表現が、わかりにくくなってくる。

強弱や陰影をはっきりさせるには、何も描いてない部分とのコントラスト(対比)がポイントになるはず。

ソフトウェアシステムのデッサン(素描)の勘所も、まさにそこにある。

いろいろ描きこみすぎると、全体の輪郭や、特徴が、どんどん、あいまいになってくる。

全体の輪郭と、システムの特徴を、うまく表現するには、いかに、詳細を描かないか、ということが重要になる。

A4一枚(たぶん裏紙)に、輪郭と特徴を、描きだすデッサン力が、ソフトウェアの設計の、必須の基礎スキルだと思う。

デッサン(素描)のアンチパターン


どういうデッサン(素描)が、よい設計かを、書くのは難しい。
こういう場合は、「アンチパターン」(ありがちなまずいパターン)を挙げることで、よいデッサンを表現してみる。

全体が真っ黒


描き込みすぎ。
強調すべき線や陰影が、全体の中に埋没しちゃって、全体の輪郭や特徴がわからなくなっちゃている。
設計ドキュメントで、よくみかけるアンチパターン。詳細な記述が役に立つシーンもあるが、全体の輪郭や特徴(要点)をつかむには、描き込みすぎては、ダメ。

一般化


誤った抽象化。(単純化)
たとえば、○を三つほど描いて、線でつないで、おしまいにするパターン。
MVC の図とかですね。
「デザインパターン」とか「アナリシスパターン」とかもそうですね。

論理的に正しいし、細部を切りすて、全体の構図、特徴をみごとに表現している。

ただし、こういうのは、一般モデルとして、意味があっても、個別のシステムの設計には、そのままでは、役に立たない。

開発すべきソフトウェアは、ある文脈の中で、特定の関係者にとって、(特殊な)価値があること。
そういう価値のあるソフトウェアの全体の輪郭はなんで、どこが要点かを表現するには、一般モデルではなく、もっと特殊なモデルを描かなくちゃいけない。

デザインパターンは、一般モデルとして、興味深いし、設計の参考になることは、まちがいない。

ただし、一般モデルは、個々のシステム固有の特徴を、捨象することで、成り立っている。

個々のソフトウェア設計で重要なのは、そのシステム固有の特徴であり、固有のこだわりポイントこそが大切。

似顔絵でも同じですね。

ある特定の人物の、特徴を描く出そうとする似顔絵と、一般的な「人の顔」を表現した絵とは、目的がまったく違う。

ソフトウェア開発で大切なのは、そのシステム固有の特徴(要点)を、生き生きと描き出すための、デッサン力なんです。

もちろん、一般モデルの勉強はとても大切。
一般モデルを参考にしながら、自分たちは、特殊モデルを創る、というのが、設計なんだと思う。

幼児の絵


稚拙。
コードしか書いたことがない技術者に、設計してもらうと、多いのが、このアンチパターン。

遠近感や大小の対比、位置関係が、かなり崩れている。

幼児の絵は、実は、ほんとうにそう見えているらしい。見たままを素直に描いているらしい。
子供たちには、絵は自由にのびのびと描かせるべきで、遠近感や大小関係を大人の目線・価値観で、いろいろ言うべきではない。

ただし、仕事としてソフトウェア開発をやるには、そうはいかない。
システムの設計(デッサン)が、幼児の絵では、困るわけです。

きちんとした遠近感、大小表現、位置表現ができる基礎の技量があって、はじめて、特徴を強調することができるようになる。

デッサンの基本


絵画の分野であれば、デッサンの基本とか、練習方法とかが、ある程度の確立しているのかもしれない。

ソフトウェアシステムの設計で、私がデッサン(素描)を学ぶのに、おすすすめしたいものを、ざっとあげてみる。

【道具】モデリングツール
フリーハンドでよいデッサンができるようになるには、ある程度の技量が必要。

入門編としては、モデリングツールを使って、UML 風のダイアグラムを描くのが良いと思う。

おすすめ(私たちが使って、よいと思っているもの)は、Enterprise Architect(EA)

ツールの機能もそうだけど、ヘルプとか、入門編のマニュアルとかに、UML の基礎知識を勉強するのに、よい情報がたくさん提供されている。

関係の表現には、アソシエーション(関連)、継承、依存、実現など、いろいろな種類がある。それらを意味や使い分け、そのサンプルなど、EAのヘルプやドキュメントは、情報の宝庫です。

【勉強のネタ】
システムのデッサン(素描)にも、いろいろな流派があると思いますが、私たちが、愛用しているものを紹介しておきます。

リレーションシップ駆動要件分析(RDRA)

RDRA は、要件定義という、システム全体がまだはっきりしない段階で、どうやって、システム全体像を関係者で創っていくかという、実践的な手法です。

ソフトウェアシステム設計のデッサン(素描)の技法として、一押しです。

ICONIX(ユースケース駆動開発実践ガイド)

ICONIX は、RDRA で定義した要件を、ユースケースモデルやクラスモデルから初めて、実際のコードにするまでの、アジャイルで、実践的な手法です。

デッサン力という観点でいうと、「描き込みすぎない」ことを学ぶには、とても参考になる考え方です。

予備設計の段階で描くべきこと、そうでないこと。
詳細設計の段階で描くべきこと、そうでないこと。

こういうメリハリのつけ方のヒントが満載の開発手法です。

システムアーキテクチャ構築の原理

「システムアーキテクチャ構築の原理」は、システム全体の構図を狂わせないために、システム全体像の描き方のポイントを教えてくれます。

6つのビューポイント(視点)と、4つの主要なパースペクティブ(観点)を使って、システムの全体の構造を、体系的かつ要点を押さえた描き方を勉強するには、最適な書籍だと思います。

----
というわけで(?)、今年は、システムのデッサン力をアップするぞ!

コメント
コメントする









この記事のトラックバックURL
トラックバック
calendar
     12
3456789
10111213141516
17181920212223
24252627282930
<< September 2017 >>
システム設計日記を検索
プロフィール
リンク
システム開発日記(実装編)
有限会社 システム設計
twitter @masuda220
selected entries
recent comment
  • 番号より名前。 ニーモニックコードより名前。 【パターン】
    師子乃 (03/10)
  • Smart UI が優れている?
    masuda220 (03/10)
  • Smart UI が優れている?
    kagehiens (03/09)
  • オブジェクト指向プログラミングの教え方?
    masuda220 (12/05)
  • オブジェクト指向プログラミングの教え方?
    ZACKY (12/04)
  • 「オブジェクトの設計力」 スキルアップ講座やります
    masuda220 (08/14)
  • 「オブジェクトの設計力」 スキルアップ講座やります
    kompiro (08/14)
  • 「オブジェクトの設計力」 スキルアップ講座やります
    masuda220 (06/13)
  • 「オブジェクトの設計力」 スキルアップ講座やります
    JHashimoto (06/13)
  • 「オブジェクトの設計力」 スキルアップ講座やります
    masuda220 (02/28)
recent trackback
categories
archives
others
mobile
qrcode
powered
無料ブログ作成サービス JUGEM