Design Evolution in Software
ソフトウェアにおける設計の進化とは何か? なぜ設計の進化を考えることが重要なのか?
「誰のためのデザイン?」では、デザインの進化の例として、電話機をあげている。良いデザインと悪いデザインの例として、電話機を床に落としてしまった時に、電話が切れないようにデザインされているかどうかを挙げている。
この場合、デザインとは、使いやすさやユーザインタフェースにおけることを言っているように見える。
ソフトウェアにおけるデザインとは? たとえば、デザインパターンにおけるデザインをデザインと呼ぶ場合、デザインの進化とは何か。何が進化するのか。
デザインとは、アクティビティである。
「マルチパラダイムデザイン」によれば、設計とは:
設計とは、ある問題に対して解決策となるような構造を与えるアクティビティのことである。
「Modern C++ Design」によれば、設計とは:
ソフトウェアシステムの設計とは、各々の解決領域を組み合わせて解決策を選択することなのです。
ソフトウェアにおけるデザインは、結果としてユーザインタフェースや機能におけるデザインに関係するかもしれない。あるソフトウェアの使いやすさを考慮することは、具体的な解決策としての実装(コード)に影響を与える。
設計の進化とは、設計の改善のことか。では、リファクタリングは設計の進化についてのアクティビティなのか。
少なくとも、デザインパターンのレベルでデザインを語るとき、そのデザインのアウトプットはコードである。設計が解決策を選択することであるなら、解決策は常に具体的なコードを表す。
では、コードの変化(進化)を観察することが設計の進化を観察することになるのか。
設計のトレーサビリティは難しい。実装から、設計が取り扱う問題、コンテキスト、選択の対象となった解決策の集合を読み取るのは困難である。
そのため、単なるコードの変化から、設計の変化を抽出することは難しい。
将棋の棋士が棋譜から学ぶのと同じようにして、ソフトウェア設計者が設計を学ぶのは(恐らく)困難である。プログラミングについては学べるかもしれない。設計については難しい。たとえば、デザインパターンを学ぶといった場合、少なくとも、問題の文脈、解決策、フォース(トレードオフ)といった情報が必要である。
ソフトウェアにおける設計の進化とは何か? 何が 進化すれば設計の進化なのか? 何が どう 進化すれば、設計の進化なのか?
関連:
ドナルド・A. ノーマン
誰のためのデザイン?―認知科学者のデザイン原論
http://www.amazon.co.jp/gp/product/478850362X/
Carliss Y. Baldwin, Kim B. Clark
Design Rules, Vol. 1: The Power of Modularity
http://www.amazon.com/gp/product/0262024667/
C. Jason Woodard.
Architectural Strategy and Design Evolution in Complex Engineered Systems.
PhD thesis, Harvard University and Singapore Management University, 2006.
http://kuala.smu.edu.sg/~jason/diss.html