システム設計とは?基本設計・詳細設計・方式設計の工程を解説
記事の監修
代表取締役村越 聖人
2006年からエンジニアよりデジタル業界でのキャリアをスタート。
大小様々なWebシステム開発およびシステム運用保守を経験。
フルスタックエンジニアとして上流から下流工程まで一連の業務を担当するとともに、サーバー設計、構築、運用設計などのサーバー管理者業務も兼任。
近年は、顧客折衝を含む提案型営業からDMP絡みのデータ分析業務をはじめ、プロジェクトの全体統括・SEなど業務要件に合わせたポジショニングで顧客ニーズの最大化を図るサービス提案を実施。
新規事業で立ち上げた自社サービスにて、発明者として特許取得。
2019年5月 株式会社glorious future 設立。
2006年からエンジニアよりデジタル業界でのキャリアをスタート。
大小様々なWebシステム開発およびシステム運用保守を経験。
フルスタックエンジニアとして上流から下流工程まで一連の業務を担当するとともに、サーバー設計、構築、運用設計などのサーバー管理者業務も兼任。
近年は、顧客折衝を含む提案型営業からDMP絡みのデータ分析業務をはじめ、プロジェクトの全体統括・SEなど業務要件に合わせたポジショニングで顧客ニーズの最大化を図るサービス提案を実施。
新規事業で立ち上げた自社サービスにて、発明者として特許取得。
2019年5月 株式会社glorious future 設立。
システム設計は、システム開発における多くの工程の中でも、重要な工程に位置します。誤った設計はプロジェクトの遅延や予算超過に繋がるため、システム設計の正確性は開発の成否を大きく左右します。
そこで今回は、システム設計の概要や、システム設計の主要な工程(基本設計・詳細設計・方式設計)の流れ、システム設計で成功させるためのポイントなどについて解説します。
- これからシステム設計に取り組む若手エンジニアの方
- 上流工程を目指しているプログラマーの方
- システム開発に興味があるIT業界未経験の方
システム設計とは?
システム設計は、システムの機能や使用を詳細に決定するため、システム開発において成功を左右する重要な工程です。
実際にシステム開発が始まると、これらの機能や仕様の変更は困難になるため、システム設計の前の準備が大切です。
開発前に機能や仕様を組む作業
システム設計は、事前に作成した「要件定義」をもとにして、システム開発前に具体的な機能や仕様を設計する作業です。
機能や仕様を決めるためには、クライアントから現在の状況や業務の流れをヒアリングして、業務上の課題を洗い出す必要があります。
そして、課題を要件定義としてまとめ、画面のレイアウトやデータベースの構成を行う流れになります。 そのほか、ハードウェアやネットワークなど、システムに関連する要素を設計する際にも必要な作業です。
要件定義の詳しい進め方については、「▶要件定義の進め方は?効率的に進めるポイントを解説」をご覧ください
システム設計前の準備が重要
先述のとおり、システムの詳細は設計段階で決定され、その後の開発段階での変更は難しいです。変更が可能であっても、修正作業には時間やコストがかかり、スケジュールの遅れや予算超過の原因になります。このため、事前の詳細な設計が非常に重要です。 開発中にプログラマーの判断に任せる部分が多いほど、システムの品質は不安定になりがちです。 そのため、プログラマーに全てを任せるのではなく、設計段階で細部まで定義することで、システムの品質を高めることができます。
システム設計工程は3段階
システム設計工程は、大きく3つの段階に分けられます。最初は基本設計で、ここではシステムの機能を具体的に定義します。
次に、基本設計をもとにより細部にわたって機能を詳細化する詳細設計が行われます。そして、システムのハードウェア部分を設計する方式設計があります。以下では、これらの3段階のシステム設計工程について解説します。
方式設計:必要なハードウェアを定義する工程
方式設計とは、要件定義で決められた要件を達成するために、システムに必要なハードウェアやソフトウェア、外部インターフェース、ネットワーク構成などを詳細に定義する工程です。 この工程では、技術的なリスクを特定することが重要で、これにより後の開発工程での問題を予防することができます。
さらに、パフォーマンスやセキュリティなどの非機能要件の考慮も重視されます。 方式設計でのミスは、後の開発段階でパフォーマンスの低下や機能不全など大きな問題を引き起こすリスクがあるため、重要性が高い工程とされています。
基本設計:システムの機能を具体化する工程
基本設計とは、要件定義で決定したクライアントの要望を実現するために、システムに組み込む機能を具体的に明確化する工程です。
この段階では、開発予定のシステムの機能や構成などの基本的な仕様を、クライアントに理解しやすい形で決定します。
要件定義での大まかなシステム概要や、ユーザーインターフェースなどの具体的な機能は、ここで詳細に設計されます。
基本設計では、設計内容をクライアントに評価してもらい、合意を得ることが重要です。 要件定義と基本設計の違いについて、
詳しくは「▶要件定義と基本設計の違いは?作業内容を明確化しプロジェクト成功に繋がるカギを解説」をご覧ください。
詳細設計:基本設計から詳細化する工程
詳細設計は、基本設計の内容をベースにして、プログラミングを担当するエンジニアに対し、具体的にどのように機能を実装するかを決定する工程です。 次の工程である詳細設計では、基本設計で定義された内容を細分化し、プログラマーやエンジニアが自分の担当部分を明確に理解した上で、効率的にプログラミングできるように進めます。
基本設計で行うこと
基本設計では、主に「要件定義書を確認してクライアントの要望を把握」→「画面設計・帳票設計・データベース設計の設計作業」の順番で進めていきます。 これらの工程はシステム開発の中心的な部分で、設計が不十分だとクライアントのニーズを満たすシステムを開発することができません。 クライアントのニーズを満たすシステム開発を目指すためにも、これらの工程は重要です。
要件定義書の内容確認
基本設計を始める際には、まず要件定義書を詳しく確認します。この段階では、クライアントの要望を満たしているかどうかをクライアントの視点で検討することが重要です。
その理由は、設計過程でシステムの観点に集中しすぎて、実際のクライアントのニーズから外れてしまうリスクがあるためです。
仮に設計にもとづいたプログラムが完成しても、それがクライアントの要件を満たしていなければ意味がありません。
また、複数人で基本設計を進める場合、チーム内で意見を擦り合わせることも非常に重要です。これにより、全員が同じ目的を共有し、効果的な設計を進めることができます。 要件定義の進め方について詳しくは「▶要件定義の進め方は?効率的に進めるポイントを解説」をご覧ください。
画面設計
画面設計は、基本設計において、システムの操作性に関わる重要な工程です。通常、システムを開発するプログラマーはシステムの運用には関わりません。 そのため、システムを運用する人々と開発者の間には、感覚の違いが生じることがあります。
画面設計では、要件定義書をもとにして、ユーザーが使用する画面のデザインや操作する内容を整理します。そして、具体的な画面の一覧やレイアウトを決め、要件定義でのイメージを明確にします。 システムの操作性によって業務効率も変わるため、ユーザー目線で画面設計を行うことが大切です。
帳票設計
帳票設計では、システムから出力される帳票のレイアウトや内容を設計する工程です。これには、出力するデータの詳細な項目一覧や、帳票の編集方法に関する設計書の作成が含まれます。
また、帳票に表示されるデータの配置や取得する部分なども決めます。適切に設計された帳票は、データの入力や整理がしやすく効率的な管理も可能です。 さらに、帳票がシンプルで理解しやすい設計であれば、データ入力時のミスを防ぐ効果もあります。
データベース設計
データベース設計は、システムで使用するデータをテーブルや項目ごとに整理する工程です。 この工程では、データがデータベース内でどのように格納されるかを示すテーブル関連図(ER図)や、テーブルごとの機能を示すCRUD図などを作成します。
データベースの設計は、業務の効率に大きな影響を及ぼします。 適切なデータベース設計は、データ検索にかかる時間を減らし、業務効率の向上が可能になります。
詳細設計で行うこと
基本設計が完了した後、次のステップとして詳細設計に進みます。この工程ではまず、基本設計書の内容を確認し、その上でプログラムの構造を設計します。 次に、プログラムを部品と見なして構成されるモジュールの機能を具体的に定めます。これらのモジュールはプログラムの基本的な部品として機能します。 以下では、これらの詳細設計で行うことについて詳しく解説していきます。
基本設計書の内容確認
詳細設計の段階では、基本設計で決定されたシステムの全体構造をさらに具体的にします。
このためには、基本設計書の内容を十分に理解し、開発メンバー全員が同じ認識を共有することが重要です。
詳細設計は、基本設計と異なり、ユーザーには直接見えない部分を扱うため、クライアントとの合意は必要ありません。
ここで重要なのは、プログラミングに必要な情報を適切に開発メンバーに伝えることです。
プログラムの構造化を設計
プログラムを構造化する工程では、開発する機能を個別のモジュールとして整理します。モジュールとは、プログラムをまとめた部品のことです。モジュール化により、共通の機能を簡単に再利用できるメリットがあります。 また、プログラムの修正もモジュール単位で行うことができ、作業の効率化とコスト削減に繋がります。
構造化の設計段階での作業には、クラス図やシーケンス図などの詳細な資料作成が含まれます。 これらは、プログラミング時の指針やシステム内部の処理の詳細を記したドキュメントとして機能し、開発の効率化のために重要です。
モジュールの機能を明確に決定
プログラムの構造化を設計したら、次にモジュールの機能を明確にする工程に移ります。各機能に必要な処理をモジュール別に定義した後、モジュール構成図を用いてこれらの構造を視覚的に表現します。
一般的には、モジュールが互いに独立しているほど、品質が高いプログラム設計とされています。モジュールの独立性を高めるためには、ひとつの機能をひとつのモジュールとすることが有効です。
方式設計で行うこと
基本設計と詳細設計の完了後、次のステップとして方式設計に進みます。この段階では、システムを構成するハードウェアやソフトウェア、ネットワークの構成要素を選定します。 また、システム開発に使用するプログラミング言語など、アプリケーションアーキテクチャの設計も行います。 さらに、外部システムとの連携を定める外部インターフェース設計も重要な要素です。以下では、これらの方式設計における具体的な工程について解説します。
ハードウェア構成設計
ハードウェア構成設計の段階では、システム構築に必要なサーバーなどのハードウェアとハードウェアに必要なスペックを決めます。
そのためには、想定される利用者数やデータの保管量、利用環境など要件定義で定めた内容をもとに、CUPやメモリ、記憶容量などのハードウェアスペックを決定します。さらに、機器の故障時にもシステムが停止しないよう、「冗長性を持たせる」「処理速度の向上のために分散処理の導入の検討をする」といったことも重要です。
ソフトウェア構成設計
ソフトウェア構成設計の工程では、ソフトウェア(プログラム)の開発方法と実装の仕方を決めます。この段階で、開発対象となるシステムに最適なOSやアプリケーションサーバー、データベースなどを選定します。 同時に、システムの監視やバックアップ、セキュリティ対策に関わるソフトウェアも考慮に入れます。さらに、想定されるユーザー数にもとづいて、必要なライセンス数も検討します。
ネットワーク構成設計
ネットワーク構成設計では、システム構築に必要なネットワークの構成とスペックを決定します。複数の拠点を持つシステムの場合、これらの拠点間の接続には適切なネットワークが必要です。 その際には、想定される利用者数やデータ転送量にもとづいて、適切な回線スペックを選定します。また、システムがデータセンターで運用される場合、データセンターからシステムの使用場所までの通信方法についても検討が求められます。なお、ネットワーク設計はできるだけシンプルな設計が推奨されます。 シンプルな設計は、トラブル発生時に原因を特定しやすく、対応しやすいという利点があります。
アプリケーションアーキテクチャ設計
アプリケーションアーキテクチャの設計では、システム開発で使用するプログラミング言語やフレームワークの選択が行われます。 システムの特徴や開発メンバーの能力に合わせて、JAVAやC言語、PHP、Rubyなどの言語の中から適したプログラミング言語を選びます。 さらに、コーディングと評価のガイドラインを設定し、品質のばらつきを防ぎます。これにより、開発工程の効率性とプログラムの品質が向上します。
外部インターフェース設計
外部インターフェース設計では、他のシステムとのデータをやり取りする方法や失敗時のリカバリー方法などについて検討します。 他のシステムは他社が開発しているケースが一般的なため、間違えた認識を防ぐために綿密な調整と文書化が重要です。 この設計段階で明確にする内容には、システム間のデータ連携の回数や時間、データの項目、使用するプロトコルなどが含まれます。
システム設計で成功させるためのポイント
効果的なシステム設計を行うためには、いくつかのポイントを押さえることが重要です。まず、設計書が要件を適切に満たしているかを確認します。次に、設計書の内容が標準化されているかもチェックします。 また、プログラミングに必要な情報を適切に表現することも大切です。さらに、発注者と開発者間での定期的なレビューも欠かせません。以下では、これらのシステム設計で成功させるためのポイントについて解説します。
設計書が要件を満たしているか確認する
システム設計では、作成された設計書がユーザーの要件を適切に反映しているか確認することが重要です。設計内容を確認することで、要件から逸脱しないシステム開発が可能になります。 要件と設計の間にズレがあると、後の開発段階での修正が困難になるため、早い段階の確認が不可欠です。これにより、スムーズなシステム開発ができるようになります。
設計書の内容が標準化されているか確認する
設計書の内容が標準化されているかを確認することも、システム設計では重要なポイントです。設計書はプログラミングの際のガイドラインとして機能するため、その内容は明確で統一されている必要があります。 標準化されたフォーマットや設計ツールを使用してテンプレート化することで、誰もが理解しやすく、一貫性のある設計書を作成することが可能になります。
プログラミングに必要な情報を適切に表現する
設計書がエンジニアにとって理解しやすいことも、システム設計では大切なポイントになります。そのためには、エンジニアやプログラマーが理解しやすいように、曖昧な表現を避けるようにしましょう。 また、設計書の説明文をシンプルにして、図や表を効果的に使用することも大切です。これらの工夫は、設計書の明確さを保ち、効率的な開発を支援するために役立ちます。
発注者と開発者間でレビューを適宜実施する
システム開発において、各工程へ進む前にレビューを行うようにしましょう。その理由は、プログラムの不備や漏れを次の工程に持ち越してしまうと、それが後にトラブルの原因となる可能性があるためです。 レビューでのフィードバックは設計書にしっかりと反映させ、発注者と開発側との認識のズレを最小限に抑えるようにします。それにより、システム開発がスムーズになります。
まとめ
本記事では、システム設計の概要やシステム設計の主要な工程(基本設計・詳細設計・方式設計)の流れ、システム設計で成功させるためのポイントなどについて解説してきました。
システム設計は、システム開発のために重要な工程で、基本設計、詳細設計、方式設計の流れで進めます。システム設計を成功させるには、設計書の内容確認やエンジニアに伝わりやすい表現で作ること、発注者と開発者間でレビューを実施することなどが必要です。
システム設計に関心がある方は、この記事を参考にして、効果的なシステム設計に挑戦してみてください。
- システム設計とは、要件定義をもとにして、システム開発前に具体的な機能や仕様を設計する作業のこと
- システム設計では、基本的に3つの段階(基本設計・詳細設計・方式設計)で進めていく
- システム設計を誤ると開発段階で変更が起きてしまい、スケジュールの遅れや予算超過の原因になるため事前準備が重要になる
- システム設計を効果的に行うためには、設計書の内容を精査し、明瞭な表現を使用すること、そして発注者と開発者の間で定期的なレビューを行うことが欠かせない