基本設計(外部設計)と詳細設計(内部設計)にはどんな違いがある?システム設計について詳しく解説
記事の監修
代表取締役村越 聖人
2006年からエンジニアよりデジタル業界でのキャリアをスタート。
大小様々なWebシステム開発およびシステム運用保守を経験。
フルスタックエンジニアとして上流から下流工程まで一連の業務を担当するとともに、サーバー設計、構築、運用設計などのサーバー管理者業務も兼任。
近年は、顧客折衝を含む提案型営業からDMP絡みのデータ分析業務をはじめ、プロジェクトの全体統括・SEなど業務要件に合わせたポジショニングで顧客ニーズの最大化を図るサービス提案を実施。
新規事業で立ち上げた自社サービスにて、発明者として特許取得。
2019年5月 株式会社glorious future 設立。
2006年からエンジニアよりデジタル業界でのキャリアをスタート。
大小様々なWebシステム開発およびシステム運用保守を経験。
フルスタックエンジニアとして上流から下流工程まで一連の業務を担当するとともに、サーバー設計、構築、運用設計などのサーバー管理者業務も兼任。
近年は、顧客折衝を含む提案型営業からDMP絡みのデータ分析業務をはじめ、プロジェクトの全体統括・SEなど業務要件に合わせたポジショニングで顧客ニーズの最大化を図るサービス提案を実施。
新規事業で立ち上げた自社サービスにて、発明者として特許取得。
2019年5月 株式会社glorious future 設立。
システム設計には、基本設計(外部設計)と詳細設計(内部設計)があります。両者には、どのような差異があるのでしょうか。
この記事では、外部設計と内部設計の違いや特色、そして効率的なシステム設計に繋がるポイントについて解説します。
- システム設計について知りたい人
- 外部設計と内部設計の違いを理解したい人
- 効率的なシステム設計を行いたい人
システム設計とは
システム設計とは、どのような業務なのでしょうか。まずは、システム設計について解説します。
要件定義で決まった機能や性能を設計に落とし込む作業
システム設計では、要件定義で決まった機能や性能を具体的な設計に落とし込みます。要件定義は、クライアントがシステムに求めるものを細かくヒアリングし、システムの仕様や範囲、性能、機能などを決める作業です。
そして、要件定義で決まった仕様に基づいてシステムの具体的な設計を行うのがシステム設計という作業です。要件定義の精度が高ければ高いほど後工程がスムーズになるため、まずは要件定義をしっかりと行うのが大事でしょう。
一般的に要件定義の後に行われる
システム設計は、一般的に要件定義の後に行われます。要件定義で決まった仕様等に基づいてシステム設計を行い、その後に開発(プログラミング)に入る流れが一般的です。
基本設計(外部設計)と詳細設計(内部設計)に分かれている
システム設計は、一般的に基本設計(外部設計)と詳細設計(内部設計)に分かれています。両者の違いは後述しますが、何故工程を分ける必要があるのでしょうか。
理由の一つに、クライアントの関与の有無が挙げられます。外部設計では主にユーザーの目に見える部分を設計する形になるため、場合によってはクライアントの了承を得る必要があるでしょう。
内部設計は主に内部処理の設計を行うため、必ずしもクライアントの了承を必要としません。外部設計と内部設計を一緒くたにしてしまうと、クライアントの関与が最適化されない=クライアントに無駄に手間をとらせてしまう可能性があるわけです。
システム設計とは要件定義の内容を具体化する作業
- 要件定義でクライアントのニーズをヒアリングする
- 一般的に要件定義→システム設計の流れになる
- 基本設計(外部設計)と詳細設計(内部設計)に分かれている
基本設計(外部設計)と詳細設計(内部設計)の違い
では次に、外部設計と内部設計の違いについて細かく解説します。両者はどのような点が異なり、どのように分けられているのでしょうか。
基本設計(外部設計)は主にユーザーが触れる部分の設計
基本設計(外部設計)は、主にユーザーの目から見える部分を設計する作業です。要件定義で決まった仕様をベースに、画面や操作方法、データの主力、その他ユーザーインターフェースに相当する部分を設計します。
また、セキュリティや規定、開発スケジュール、費用等を設計するのもこのフェーズです。内部設計と比較するとかなり大まかかつ広範な設計を行うのが特徴として挙げられます。
外部設計をしっかりと行うことにより、システム開発の根幹が安定するわけです。外部設計ではユーザーの目に触れる部分を設計するため、逐一クライアントの確認を得る必要があるのも前述の通りです。
詳細設計(内部設計)は外部設計で定めた要素をどのように組み込むかを決める
詳細設計(内部設計)は、外部設計で決めた要素をどのように組み込むかを決める作業です。主にユーザーの目に触れない内部処理や機能等の細かい部分の設計を行います。
内部設計の品質により、開発効率に差異が生まれるでしょう。適切な内部設計を行えば後の開発(プログラミング)の効率化が見込めます。
逆に内部設計が上手くいかなかった場合、開発工程でそのつじつまを合わせる羽目になるかもしれません。そうならないためにも、仕様上の問題は可能な限り設計段階で潰しておくのが無難です。
どちらもシステム設計には欠かせない作業
以上が、外部設計および内部設計の特徴です。どちらもシステム設計および開発には欠かせない作業であり、省略するのは難しいでしょう。
システム設計を行わない場合、開発段階で細かな仕様を決めつつその都度実装していく形になります。そういったやり方も考えられなくはないのですが、クライアントのニーズがある程度固まっている場合は悪手でしょう。
手を動かしながら同時に意思決定を行うと、軸がブレてしまう可能性があるからです。システムは何らかのニーズを満たすのが主目的であるため、そこからズレてしまうと開発費用や労力が無駄になってしまいます。
クライアントの要求をしっかりとヒアリングした後にシステム設計を行うことで、主目的に沿ったシステム開発に繋がるわけです。
システム開発は外部設計と内部設計に分かれている
- 外部設計ではユーザーの目に触れる部分を設計する
- 内部設計ではユーザーの目に触れない内部的な部分を設計する
- どちらもシステム設計および開発には欠かせない工程
システム設計の流れ
では次に、システム設計の流れについて解説します。
要件定義で顧客のニーズを細かくヒアリングする
システム設計の前段に、要件定義が存在します。要件定義ではクライアントがシステムに何を求めるかを細かくヒアリングし、システムの要件を決めます。
システムは何らかのニーズや課題がベースとなり開発されるものなので、まずはそれを拾い上げるのが大事です。
基本設計(外部設計)を行う
要件定義が完了したら、次は基本設計(外部設計)を行います。外部設計では主にユーザーの目に触れるUIや操作方法、アウトプット等を設計します。
設計したものを逐一クライアントにチェックしてもらい、問題がなければ次の内部設計に進みます。
基本設計(外部設計)に基づき詳細設計(内部設計)を行う
詳細設計(内部設計)では、外部設計をベースにユーザーの目に触れない部分を設計します。内部処理やデータの取り扱い、機能といった項目が挙げられるでしょう。
内部設計は外部設計とは異なり、クライアントのチェックを要しません。しかし、内部設計の品質によりプログラミングのしやすさが変わってくるため、適切に行う必要があります。
要件定義→外部設計→内部設計の順に行われる
- 要件定義でクライアントのニーズを細かくヒアリングする
- 外部設計でユーザーの目に触れる部分の設計を行う
- 内部設計でユーザーの目に触れない部分の設計を行う
クライアント視点からシステム設計をスムーズに行うポイント
では次に、クライアント視点からシステム設計をスムーズに行うポイントについて解説します。効率的なシステム設計を行うために、委託する側には何ができるのでしょうか。
要件定義でしっかりと要望を伝える
まず挙げられるのは、要件定義でしっかりと要望を伝えることです。システム設計は要件定義に基づいて行われるため、基盤となる部分が安定していないと後段に悪影響が生じるからです。
もちろん、システムやITの専門的な部分にまで言及する必要はありません。大事なのは「システムに何を期待するか」を明確にして伝えることです。
基本設計(外部設計)でニーズが反映されていることをチェックする
基本設計(外部設計)では、主にユーザーの目に触れる部分が設計されます。クライアントは、外部設計で定義されたものに自身のニーズや要望がしっかりと反映されているかをチェックする必要があります。
外部設計を完全に開発業者に委ねてしまうのも一つの選択肢ですが、推奨はできません。実装や納品が終わった後に外部設計で定義される部分を修正するのは困難だからです。
そうなるよりは、必要な段階で適宜チェックした方が開発の効率化に繋がるでしょう。
適切なコミュニケーションを行う
システム設計に限った話ではありませんが、適切なコミュニケーションを心がけることが業務の上で重要です。コミュニケーションに齟齬が生じ、伝えるべきことが伝わらないまま進行してしまうとさまざまな支障が生じるからです。
開発を委託する上で業者の責任負担はありますが、適切なシステムが得られないことによる負債はクライアント側が負うことも少なくありません。金銭的な問題だけでなく、使いにくいシステムを無理やり使うことによる生産性の低下等も考えられます。
クライアント視点でシステム設計を効率的に進めるには?
- システムに求めるものを明確化する
- 外部設計にニーズが反映されているかしっかりとチェックする
- 適切なコミュニケーションを心がける
どのような視点で開発業者を選ぶべきか
では、適切なシステム開発のためにどのような視点で開発業者を選べばいいのでしょうか。続いて、開発業者を見極めるポイントについて解説します。
自社が作りたい分野の実績が豊富かどうか
まずチェックしたいのは、自社が求める分野の開発実績です。一般的に、開発実績が豊富であればあるほどその分野における知見が豊かであるという見方になります。
顧客管理システムの実績が豊富な開発業者に同種システムの開発を依頼すれば、間違いが起きる可能性は少ないでしょう。もしかしたら、他事例で生じた運用トラブルや落とし穴等を教えてくれるかもしれません。
意思疎通に問題はないか
意思疎通やコミュニケーションに問題がないかどうかも重要です。開発技術力が高くともクライアントのニーズをヒアリングする能力に欠けている場合は、顧客の要望を反映したシステム開発が難しくなってしまうからです。
問い合わせの段階で、気になる点をいくつか質問してみるのも良いでしょう。もちろん依頼することが前提になりますし、あまりにしつこすぎるのはNGです。
納品後の対応
システム納品後にどのような対応を行ってくれるかもあらかじめチェックしたいところです。システム納品後は本番運用する形になりますが、その後もメンテナンスや保守といった作業が必要になるからです。
そこまで手広くカバーしてくれる開発業者は有り難いのですが、その分費用が高額になることが考えられます。費用対効果を考慮し、どこまでのサービスが必要になるかをあらかじめ明確化することが大事でしょう。
相性の良い開発業者を見つけられれば開発効率の向上が見込める
- 自社が欲する分野の開発実績をチェックしよう
- 意思疎通やコミュニケーションに大きな問題はないか
- 納品・運用後はどこまでカバーしてくれるか
システム設計の後工程
システム設計が完了したら、その後は何をするのでしょうか。続いて、システム設計の後工程を簡単に解説します。
開発〜テスト
システム設計が完了したら、実際の開発(プログラミング)に入ります。外部設計や内部設計で決まった仕様に基づき、機能等を実装します。
開発が完了したらテストを行い、バグを修正します。バグを完全に除去するのは難しいところですが、可能な限りチェックし修正しておく必要があります。
納品〜運用
テストが終わったらシステムをクライアントに納品し、運用に入ります。あらかじめ決めておいた運用方法や規定に基づき、スムーズに行いましょう。
事前に納品運用シミュレーションを行っておくことで、問題発生を最小限に抑えられるかもしれません。
レビュー〜改善
運用開始後は定期的にレビューを行い、システム運用の手法を改善します。適切なレビューを行うためにも、運用による成果を定量的に記録しておくのが大事です。
また、システムの運用時には定期的に保守やメンテナンスを行う必要があります。それらを開発業者に行ってもらうのか、あるいは自前でリソースを調達するのかをあらかじめ決めておくといいでしょう。
システム設計の後には下記のような工程がある
- 開発(プログラミング)しテストする
- クライアントに完成品を納入して運用する
- 定期的にレビューおよび改善を行う
まとめ
システム設計は、基本設計(外部設計)と詳細設計(内部設計)に分かれています。両者の違いや特色を理解し、効率的なシステム設計を目指しましょう。
システム設計は基本設計(外部設計)と詳細設計(内部設計)に分かれている
- 外部設計では主にユーザーの目に触れる部分を設計する
- 内部設計では主にユーザーの目に触れない部分を設計する
- 両者ともシステム設計において重要なフェーズである