どのようなお仕事でも設計は重要です。
「すべてのものは2度作られる、1度目は頭の中に」という言葉があります。
システム開発においては、 「すべてのシステムは3度作られる、1度目は頭の中に、2度めは紙の上で、3度めはメモリ上で」といったところでしょうか?
ここでは、基本設計と詳細設計、さらには設計で使われるUMLのツールを解説します。特に弊社新人エンジニア研修のシステム開発演習で実際に使用するオブジェクト指向開発のツールを紹介します。なお、基本設計のかわりに外部設計、書斎設計のかわりに内部設計という言葉が使われることがあります。
家造りに例えると、基本設計は家全体の形や大きさ、部屋の配置や機能などを大まかに決める段階です。
一方、詳細設計は家の設計図のようなものです。どの部屋にどんな大きさのどんな素材の窓やドアがあるか、電気や水道の配管はどのように通っているかなど、建物を実際に建てるための設計段階に例えることができます。
基本設計
基本設計の主な目的は、要件定義で決定された要件を基に、システムの全体像を設計することです。
具体的には以下のようなことをします。
- システムの構造やモジュールの関係を設計
- データベースの設計概要(どのようなテーブルやデータが必要か)の設計
- インターフェイスの大まかな設計(システム間やユーザーとのやり取りの方法)
- エラー処理やセキュリティなどの非機能要件に関する考慮事項を決める
基本設計の結果として「基本設計書」が作成されます。この文書には上記の内容が詳細に記述され、後の詳細設計や実装の基盤となります。
基本設計は、後の開発工程の方向性を定める非常に重要な段階です
詳細設計
詳細設計の目的は、基本設計で策定されたシステムの大枠を具体的な形に落とし込むことです。プログラマがコードを書く際の指針となるような詳細な情報を提供することが求められます。
具体的には以下のようなことをします。
- モジュールやクラスの具体的な機能とそのインターフェイスの設計
- データベースの詳細なテーブル設計
- 画面やレポートの詳細設計
- 具体的なアルゴリズムや処理フローの設計
- エラーメッセージやログの内容を決める
詳細設計の結果として「詳細設計書」が作成されます。この文書には上記の内容が詳細に記述され、プログラマはこの文書を参照しながらコーディングを行います。
詳細設計の重要性: 詳細設計が適切に行われていないと、実装段階での不具合や誤解が生じやすく、また後のテストや保守が難しくなる可能性があります。
基本設計と詳細設計の違い
基本設計はシステム全体の大枠を捉えるもので、詳細設計はその大枠の中の具体的な実装方法やデータ構造、アルゴリズムなどを詳しく定義します。
UMLの基本
1.1 UMLとは何か?
UML(Unified Modeling Language:統一モデリング言語)は、ソフトウェアエンジニアリングの分野で広く用いられる視覚化の一手段です。システムやソフトウェアの設計、構造、行動を視覚的に表現し、コミュニケーションの手段として使用します。UMLは主にシステムの設計フェーズで使用され、システムの各部分がどのように連携するかを明確にします。
1.2 UMLの歴史とその重要性
UMLは1990年代中盤に、複数の既存のモデリング言語を統一する目的で開発されました。Grady Booch, Ivar Jacobson, そしてJames Rumbaughという3人の著名なソフトウェア工学者(通称 "三人のアミーゴ")によって設計されました。現在では、UMLはOMG(Object Management Group)によって標準化され、メンテナンスされています。
UMLの重要性はその普遍性と汎用性にあります。異なるチーム、異なるプロジェクトで共通の言語として使用されますから、コミュニケーションを促進します。また、システムを視覚的に理解することで、複雑なシステムをシンプルに理解することができます。
1.3 UMLの基本概念
UMLにはいくつかの基本的な要素があります。
- オブジェクトは、システム内のエンティティを表します。これらは、実世界の物体や概念を表すことができます。
- クラスは、オブジェクトの設計図を表します。同じ種類のオブジェクトに共通する属性や操作を定義します。
- リレーションシップは、クラスやオブジェクト間の接続を表します。これらは、関連性、依存性、一般化など、さまざまな形で現れます。
- ダイアグラムは、システムの異なる視点を視覚的に表現します。UMLには構造ダイアグラム、振る舞いダイアグラムなど、様々な種類のダイアグラムがあります。
1.4 UMLを使用するメリット
UMLには以下のような利点があります。
- UMLを使用すると、複雑なシステムの設計と動作を視覚的に理解することができます。
- UMLは共通の言語として機能し、エンジニア、プロジェクトマネージャー、ステークホルダー間のコミュニケーションを助けます。
- UMLダイアグラムは、システムの設計と動作を詳細に記録し、将来のために保存する手段を提供します。
- UMLを使用すると、システムの設計プロセスを効率化し、問題や欠陥を早期に特定することが可能になります。
以上がUMLの基本的な紹介になります。次からはより具体的なUMLの要素と使い方について学んでいきましょう。
例題
基本情報処理技術者試験 平成28年春期 午前問64 UMLを採用した場合の活用シーンの問題にチャレンジしてみましょう。
UMLの基本要素
2.1 クラスとオブジェクト
UMLでは、クラスとオブジェクトは基本的な概念です。クラスはオブジェクトを生成するための設計図と見なすことができます。それは特定のタイプのオブジェクトが持つべき属性(状態)と操作(振る舞い)を定義します。例えば、カジノの「Player」クラスは属性として残高「balance」を、操作として引き出す「withdraw」を持つように設計できます。
以下は色々なPlayerクラスの記述方法です。

一方、オブジェクトはクラスから具体的に生成された実体(インスタンス)を表します。つまり、「自動車」クラスから生成された「私の車」や「Aさんの車」というオブジェクトがあるとします。このオブジェクトは、「自動車」クラスで定義された属性と操作を持ちます。
2.2 リレーションシップとその種類
リレーションシップは、UMLの要素(クラス、オブジェクトなど)間の関係を表現します。主な種類には以下のものがあります。
関連(Association)は、二つのクラス間に一定の関係が存在することを示します。例えば、「学生」と「大学」の間には「所属する」という関連が存在します。なお、以下の集約、依存、一般化/特化も一種の関連といえます。

集約(Aggregation)は、「全体-部分」関係を示します。部分が全体から分離してもその存在は継続します。例えば、「車」(全体)と「タイヤ」(部分)の関係です。

依存(Dependency)は、ある要素が他の要素に依存している関係を示します。つまり、一方の要素が変更されると、他方にも影響が出ます。集約との違いは一時的な関係であることです。例えば、「パソコン」は「マウス」に依存しています。

一般化(Generalization)/特化(Specialization)は、「親-子」関係を示します。「子」クラスは「親」クラスの特性を継承します。例えば、「乗用車」は「車」の特化型と言えます。

2.3 属性と操作
クラスには主に二つの要素、属性と操作があります。
属性はクラスまたはそのインスタンス(オブジェクト)が持つ状態を表現します。これはクラスの特性(例えば、車の色やブランド)を表します。
一方、操作はクラスが持つべき振る舞いや機能を表現します。これはクラスが何をするか(例えば、車が走る、停止する)を表します。
これらがUMLの基本要素についての説明です。次の章では、これらの要素がどのようにしてUMLダイアグラムを形成するかを詳しく見ていきましょう。
重要なUMLダイアグラムの詳細と使用方法
ユースケース図
ユースケース図はシステムが提供する機能(ユースケース)とその機能を利用するアクターを示します。システムの「何をするか」を視覚的に表現します。
- ユースケースは、システムが提供する特定の機能を表し、通常は楕円で示されます。例えば、「商品を購入する」や「在庫を確認する」など。
- アクターは、ユースケースを利用するエンティティを表し、人や他のシステムが該当します。アクターは「棒人間」のアイコンで示されます。
- 関連性は、アクターとユースケース間の関連を示す線です。これはアクターがそのユースケースを利用することを示します。
<ユースケース図の例>

例題
基本情報処理技術者試験 令和3年免除試験 午前問45 ユースケース図の問題にチャレンジしてみましょう。
クラス図
クラス図はシステムの静的な構造を表現する主要なダイアグラムで、クラス、その属性と操作、そしてクラス間の関係を示します。
- クラスは、システム内のオブジェクトのタイプを表し、一般的には長方形で表示されます。長方形は通常3部分に分かれており、上部にはクラス名、中部には属性、下部には操作が記載されます。
- 属性は、クラスが持つ特性を表します。例えば、「車」クラスなら「色」や「車種」が属性となります。
- 操作は、クラスが何をするかを表す振る舞いまたは機能です。例えば、「車」クラスなら「加速する」や「ブレーキをかける」が操作となります。
- 関係は、クラス間の関係を表す線です。関係にはいくつかのタイプがあり、それぞれ異なる矢印や線で示されます(依存、関連、一般化/特化、集約、コンポジションなど)。
<クラス図の例>

例題
基本情報処理技術者試験 平成19年秋期 午前問45 クラス図の問題にチャレンジしてみましょう。
シーケンス図
シーケンス図はシステム内のオブジェクト間のメッセージの流れを時間の経過とともに示します。システムの動的な振る舞いを表す主要なダイアグラムの一つです。
- オブジェクトは、システム内のエンティティを表し、ダイアグラムの上部に配置されます。
- ライフラインは、オブジェクトが存在する時間を表し、ダッシュラインで表示されます。ライフラインはオブジェクトからダイアグラムの下部まで続きます。
- アクティベーションバーは、オブジェクトがメッセージを処理している時間を表します。
- メッセージは、オブジェクト間の通信を表す矢印です。これは一方のオブジェクトから他方のオブジェクトへ向かいます。
<シーケンス図の例>

以上がUMLの主要な3つのダイアグラム、ユースケース図、クラス図、シーケンス図の詳細な説明です。これらを理解し使いこなせるようになると、システム設計の過程が明確化し、効率化するでしょう。
次回は、「プログラミングの基本を身につける」を学びます。