システム設計とソフトウェア設計は、開発工程における対象範囲が大きく異なります。システム設計は、システム要件を実現するために必要な構成品目を識別し、ハードウェア、ソフトウェア、ネットワークなどシステム全体の構造を決定する工程です。一方、ソフトウェア設計は要件定義書をもとにソフトウェアの仕様を決める工程であり、システム設計の一部として位置づけられます。
参考)基本設計・詳細設計とは?仕様書との違いは?企業の設計課題を解…
車のシステムに例えると、システム設計はエンジン・トランスミッション・電子制御装置・車体構造など車全体の設計に相当し、ソフトウェア設計はエンジン制御プログラムやナビゲーションシステムのプログラム部分の設計に該当します。システム開発においては、まずユーザー要件からシステム要件を導き出し、それを実現するためのシステム設計を行い、その中でソフトウェア部分の詳細を詰めていきます。
参考)ソフトウェア開発とシステム開発の違いとは?開発の流れや種類を…
システム構築とシステム開発という用語も混同されがちですが、システム構築はシステム開発を含むより広い概念です。システム開発がプログラムの設計・実装・テストまでを指すのに対し、システム構築は開発後の実際の運用環境への展開までを含みます。
参考)システム開発と構築の違いを解説|工程や4種類の手法も紹介|S…
システム設計における基本設計は「What(何を作るか)」を定義する工程です。基本設計は外部設計とも呼ばれ、ソフトウェアの動きを外から見た際にどういう動きをするのかを決定します。この工程ではクライアントも一緒になって確認することが多く、ユーザーの視点で観察可能な振る舞いを明確にします。
基本設計では以下の項目を設計します。業務フローでは業務の流れを理解し機能を洗い出し、機能一覧表では開発範囲となる機能を一覧化します。ネットワーク構成図ではシステム全体のネットワーク構成を決定し、テーブル定義やER図ではデータベースの基本構造を設計します。画面レイアウトや帳票レイアウトでは、ユーザーが実際に目にする画面や出力帳票のイメージを作成します。
参考)システム設計の基本設計・詳細設計とは?それぞれの違いや進め方…
要件定義との違いは、要件定義が「なぜシステムを開発するのか」という目的を定めるのに対し、基本設計は「そのシステムはどんな機能を持ったものなのか」を具体化する点です。要件定義で決められた内容を基に、基本設計で機能を実装するための具体的な仕様を決めていきます。
参考)ソフトウェア設計とは?設計のポイントや設計書の書き方を解説
詳細設計は基本設計で決められた動きを「How(どうやって実現するか)」を決める工程です。この工程は内部設計とも呼ばれ、ソフトウェアの内部に注目し、外部仕様を実現するのに必要なソフトウェアコンポーネントの洗い出しやコンポーネント間の相互作用を設計します。
詳細設計ではクライアントを意識せず、社内開発者が開発向けに設計書を作成します。具体的には機能設計書で機能ごとの処理を記述し、フローチャートで処理の流れを表現します。画面の詳細項目や帳票の詳細項目の説明、データベースの物理設計書なども詳細設計で作成されます。
参考)基本設計と詳細設計の違いとは?システム開発の主な工程について…
プログラミングを実際に行うプログラマーにとって、詳細設計書は実装の設計図となります。基本設計で指定された内容を、どのようなプログラム構造やデータ構造で実現するかを具体的に定めるため、開発スピードや出来上がったプログラムの性能は詳細設計の品質に大きく依存します。
参考)システム設計と開発の違いとは?仕事内容や求められる能力などを…
システム開発の工程は、一般的に要件定義、設計(基本設計・詳細設計)、開発(実装)、テストの順に進行します。要件定義は開発工程における設計図を作る最上流工程であり、もっとも重要なフェーズです。企画の工程で立てたシステム化計画をもとに、システム利用者のニーズや要望を分析し、システムに関係するステークホルダーと合意して要件としてまとめます。
参考)要件定義とは? 今さら聞けないDX関連用語をわかりやすく解説…
設計フェーズは要件定義と実装の間のギャップを埋めるための活動です。ソフトウェアの要求仕様と実装されるプログラムの間の差を、基本設計と詳細設計という2段階で段階的に詰めていきます。基本設計では要件定義の内容をもとに、システムに実装する機能を具体化し、各機能の見え方や動き方などシステムの輪郭を明確にします。
詳細設計では基本設計で決定された全体の構造や主要な機能をさらに細分化し、各機能の具体的な実装方法を設計します。ウォーターフォール開発では各工程を1つずつ確実に進めますが、アジャイル開発では設計・開発・テストを短期間に何度も繰り返します。どちらの開発手法でも設計工程は必ず実施され、前工程の要件定義で決められた内容を基に開発するソフトウェアの仕様を決める重要な工程となります。
参考)システム開発の工程・流れを図解。知っておきたい略語も解説。
要件定義とシステム設計は、システム開発の上流工程として密接に関連していますが、その目的と成果物が異なります。要件定義はシステム開発の工程の1つであり、プロジェクトの初期に実施される工程です。企画の工程で立てたシステム化計画をもとに、システム利用者のニーズや要望、課題を分析し、利用者が必要とする機能やサービスに対する「要求」を抽出します。
参考)要件定義とは?作成手順や前後の流れをわかりやすく解説!| ソ…
システム設計は要件定義の後に行われる工程で、対象のシステムの仕様・機能・構造などを決定します。要件定義でまとめた要件を具体化し、業務フローを明確にし、必要な機能やソフトウェア構成を決めていきます。設計工程のアウトプットが製造工程のインプットとなるため、システム開発を成功させるカギを握る重要な工程です。
参考)システム設計とは|システム設計の流れを解説
要件定義と設計の関係を車の開発に例えると、要件定義は「燃費性能〇〇km/L、最高速度〇〇km/h、乗車定員〇名」といった要求仕様を決める段階です。一方、システム設計はその要求を満たすために「どのようなエンジン構造にするか、どのような駆動方式を採用するか」といった具体的な設計を行う段階に相当します。上流工程の取り組みが完成するシステムの品質に大きく影響するため、要件定義からシステム設計への移行を適切に管理することが重要です。
参考)https://hnavi.co.jp/knowledge/blog/requirements-definition/
アーキテクチャ設計はシステム全体の構造や構成要素の関係性を定義する設計工程です。建築におけるアーキテクチャと同様に、システムの「骨格」や「設計思想」を決定する重要な活動であり、後工程の設計方針や実装、さらには運用や保守の効率性にまで大きな影響を与えます。
参考)アーキテクチャ設計とは?進め方やポイントについて徹底解説!
システムアーキテクチャ設計プロセスは、要件定義からアーキテクチャスタイルの選定、コンポーネント分割、技術選定まで一連の流れで行われます。具体的には要件定義でシステムに求められる機能要件と非機能要件を明確にし、システムの特性に適したアーキテクチャスタイル(レイヤードアーキテクチャ、マイクロサービスアーキテクチャなど)を選択します。その後、システムを複数のコンポーネントに分割し、各コンポーネントの役割と責任を定義し、コンポーネント間の連携方法を設計します。
参考)システムアーキテクチャ設計の基礎と実践: 堅牢でスケーラブル…
基本設計との違いは、アーキテクチャ設計がシステム全体の構造と機能を計画するのに対し、基本設計は具体的なコンポーネントやモジュールの詳細設計に入る点です。アーキテクチャ設計書や方式設計書では、非機能要件に基づくシステム全体の構成、ソフトウェアモジュールの配置構成、アプリケーションアーキテクチャの概要、利用するテクノロジースタックといったアーキテクチャに関わる決定事項をまとめます。また、トランザクション制御方式、バッチ処理方式、権限制御方式といったテーマ単位にハイレベルな設計を行う方式設計も、アーキテクチャ設計の一部です。
参考)アーキテクチャ設計で成功させるポイントとは?種類や進め方を紹…
システムアーキテクチャ設計は一度行えば終わりではなく、システムの運用開始後も必要に応じてアーキテクチャを見直し、改善していくことが重要です。自動車のプラットフォーム戦略のように、複数の製品で共通のアーキテクチャを活用することで、開発効率や保守性を高めることができます。
参考)全体最適の観点で構築するシステムアーキテクチャの設計方法|コ…
参考リンク:システムアーキテクチャ設計の基礎知識と実践方法について詳しく解説されています。
システムアーキテクチャ設計の基礎と実践: 堅牢で...
参考リンク:IPAによる要件定義の公式解説で、システム開発における要件定義の位置づけが分かります。
要件定義とは? 今さら聞けないDX関連用語をわかりやすく解説
参考リンク:ソフトウェア設計の本質について、外部設計と内部設計の違いから詳しく説明されています。