発注ラウンジは、システム開発の発注に必要な様々なノウハウや発注ナビで実際に開発された発注者様のインタビューなど、発注担当者様のための情報発信サイトです。

「外部設計」と「内部設計」とは?それぞれの違いと作業内容を解説

外部設計と内部設計は、どちらもシステム開発の工程の一つです。
システムに限らず、何を製作する場合でも、設計は完成度を左右する重要な工程です。
設計がずさんなままでは、質の良い製作物をつくることができません。
ソフトウェアにおける設計は、「外部設計」と「内部設計」の二つに大別できます。
今回は、システム開発を行う際の大まかな流れと、外部設計と内部設計、それぞれの違いについてご紹介します。

StrategicArchitecture2-min

 

目次

 

システム設計の流れ

システム開発をするためには、まず設計が必要です。基本的にシステム設計では、最初に要件定義を行い、次に外部設計を行います。外部設計を基にして内部設計を行ったあと、内部設計を基にしてプログラミングを行います。

1.要件定義

要件定義とは、クライアントがシステムに求めている機能をまとめて、システムの仕様や範囲を決めることです。例えば、必要な機能や性能、要求される信頼性や保守性、そのほか実現すべき業務モデルや業務フローなどについて、クライアントの要望を詳しくヒアリングし、要件定義書を作成します。要件定義の精度が高いほど外部設計を行いやすく、その後の仕様変更を減らすことができます。
要件定義で確定しなかった項目は、次の外部要件の段階で再度検討され、仕様が決定されます。

2.外部設計(External Design)

外部設計は、基本設計や外部設計とも呼ばれ、一般的に外部設計までが上流工程に含まれます。
要件定義で決定した機能や性能、制約条件などを基にしてシステムの基本となる設計を行います。操作画面や操作方法、データ出力など、ユーザーから見えるインターフェース部分の仕様を決定したり、セキュリティや運用規定、システム開発のスケジュールや費用などを設計したりと、基本的にユーザーに向けた仕様を設計するのが外部設計です。

3.内部設計(Internal Design)

内部設計では外部設計を基に、システム内部の動作や機能、物理データなど、ユーザーから見えにくい詳細な部分の設計を行います。外部設計とその後に行われる詳細設計の間の工程ですが、内部システムに特化しているため、詳細設計と同じ工程として扱われることもあります。
プログラム機能を単体に分割し、そこで使用する物理データや入出力を設計します。外部設計の結果をプログラミングしやすくするのが内部設計の役割です。

 

外部設計とは?

外部設計は、実際にシステムの仕様を決定する段階です。要件定義で決定したシステムの機能要件や非機能要件、制約条件、外部とのやり取りなどをより具体的な仕様にすることで、実際にプログラム可能な形にします。
ここでは、外部設計の主な項目を「方式設計」「機能設計」「そのほかの設計」の三つに分けて解説します。

●方式設計

方式設計では、システムの実装方針やプラットフォームの方針を設計します。システムがどのようなハードウェアで構成されるか、ハードウェアやソフトウェアの機能や構造をどうするか、プラットフォームは何か、開発言語をどうするかなどを決めます。アプリケーション全体の構造もここで設計されるため、アーキテクチャ設計とも呼ばれています。

●機能設計

機能設計では、システムをモジュール単位で分割し、各モジュールや使用するデータベースの設計を行います。具体的には、データの入出力、データベース同士のデータの受け渡し、ユーザーによる操作、帳票の出力などです。
また、画面のレイアウト、操作方法、帳票類の書式など、システムの使いやすさやユーザー満足度につながるインターフェース部分の仕様を決めるのも機能設計の役割です。

●そのほかの設計

そのほかの設計では、クライアントに求められている機能やセキュリティ、運用規定、納期、開発費用など、業務として運用するために必要な部分を決定します。

外部設計では、「外部設計書」「画面仕様書」「帳票仕様書」「インターフェース仕様書」などが作成されます。これらの内容は、クライアントに確認して合意を取ることが必要です。

 

内部設計とは?

内部設計では、外部設計の結果を実際にプログラミングできるように、システム内部に特化した詳細な設計を行います。
ここでは、内部設計の主な項目を「機能分割」「物理データ設計」「入出力の詳細設計」の三つに分けて解説します。

●機能分割

機能分割では、プログラミングやシステムのメンテナンスをしやすくするために、機能をモジュールごとに分割し、各モジュールの機能を明確化します。また、機能間でデータが処理される際の流れ(データフロー)を設計します。データが処理される流れを明確にすることで、設計バグを洗い出せます。

●物理データ設計

物理データ設計では、ユーザーには見えないシステム内部で使うファイルやデータのやり取りに関する部分の設計を行います。

●入出力の詳細設計

入出力の詳細設計では、外部設計で決めたインターフェースをプログラミングでどのように実装し、表現するかをさらに細かく設計します。例えば、エラー処理や初期値・デフォルト値の定義、入力データのチェック方法、表示するメッセージなどについても検討します。

内部設計では、「機能仕様書」「データフロー図」「データベース物理設計書」などが作成されます。内容はプログラミング作業を行うメンバーに共有されますが、内部設計でクライアントとの調整を行うことはほとんどありません。

 

外部設計と内部設計の違い

外部設計と内部設計の大きな違いは、クライアントから見える部分を設計するか、見えない部分を設計するかという点です。

●外部設計

外部設計は、システムの外側でユーザーやクライアントの目に触れる部分(インターフェース)、システム全体の概要、主な機能を設計します。システムがユーザーにとって使いやすいかどうかを左右する部分になるため、クライアントのビジネスの結果に直接影響することもあります。そのため、基本的に外部設計の内容は、クライアントの了解を得る必要があります。
また、クライアントの目に触れるハードウェア構成やシステム開発のスケジュール、費用などの管理も外部設計で決定します。

●内部設計

システムを開発するときに必要な部分やシステムの裏側(内部)でデータがどのように処理されているのかなど、ユーザーにもクライアントにも見えない部分を設計します。そのため、内部設計の結果にクライアントの了解を得る必要はほとんどなく、主にシステム開発の担当者やプログラミングを行うメンバー向けのものです。プログラミングに必要な情報を設計し、メンバーが外部設計で決めた仕様を実装しやすいように表現する必要があります。

 

製作物の品質の高さは、良い設計があってこそ

StrategicArchitecture1-min

システム開発とは、要件定義でクライアントの求めている機能を引き出し、それを外部設計で形にして、内部設計でシステムの作り方を考えることを意味します。
設計段階で十分に時間をかけることは、その後のプログラミング作業を素早く正確に行うために重要です。
しかし、実際のシステム開発における外部設計と内部設計の境目はあいまいで、工程によってはどちらに属するのかわからない場合もあります。
基本的には外部設計のあとに内部設計を行いますが、システム開発を行う会社によっては、さらに細かく工程を区切って詳細な設計を行うため、外部設計と内部設計の範囲が異なることもあります。
どちらの範囲に含まれるかということよりも、一つ一つの項目の目的を理解し、質の良い製作物をつくるために良い設計をすることが大切です。

 img02

 

発注先選びにお困りの方はこちら

具体的に『システム開発』が得意な会社を探す

システム開発の発注先を「専門スタッフ」に相談する

関連する記事

PAGETOP