ソフトウェアアーキテクチャ博物館AtMuseum
FAQ


第1話 ソフトウェアの設計について考える

設計について考える

皆さんは、ソフトウェアの設計と聞くと何を思い浮かべられるでしょうか。筆者の経験で恐縮ですが、開発現場ではコーディングが重視され、既存資産への追加・修正が仕事になっていることと相まって、設計で何をすればよいのか分かっていない方が多いように思います。そのような仕事に追われているときこそ、ちょっと考えてみてください。自分が、新しいシステムを1から開発することにった場合、どのようにしたらよいのか想像できるでしょうか?

設計とは、ソフトウェアに限らず、どのような分野の仕事でも必要・不可欠な工程で、やることは、全体を俯瞰し、構成要素に分割し、その要素間の関係を決めることです。そして、構成要素とその関係を図示したものが構造となります。建築では建物の倒壊を防ぐという意味から構造設計が不可欠という認識がありますが、ソフトウェアではこの工程が不明確になりがちです。

ソフトウェアの代表的な構造として、機能の構造があります。具体的には、関数やクラス、あるいはその集合体であるコンポーネントの利用関係を示したもので「静的構造」と呼ばれます。そして、この利用関係は、基本的に関数の呼び出し関係に変換されます。よくモジュール間のインタフェースを決めることが重要だと言われますが、これはこの利用関係を明確にすることの実装に近い表現です。また、動作したときの関係もあります。これは、「動的構造」と言い、並行処理の実行単位であるタスク(或いはスレッド)と、それらの間のメッセージ通信から構成されます。後、組込みソフトウェアでは「状態遷移」も重要な設計要素です。これは、状態とそれらの遷移関係を示したものです。これはイベントに対する応答を考えるとき必ず必要になります。 このように、ソフトウェアの設計は、様々な視点から考え、それらを統合して実現する必要があります。具体的に、どのような手法を用いて設計を行うのかについては、弊社のセミナーに網羅してありますので、見て頂ければと思います。