お客様から要件を聞き、見積もりを出し、その次に取り掛かるのがシステム設計の工程です。この記事ではシステム設計とはどのようなものなのか、システム設計の流れ、システム設計を行う上で重要なポイントをまとめました。この記事がお役に立ちましたら幸いです。
実際の開発費用・期間をまとめた資料を無料で差し上げます。資料請求はこちら>>
システム設計とは
システム設計とは、開発するソフトウェアの設計を行うための工程を指します。システム設計はさらに「基本設計(外部設計)」と「詳細設計(内部設計)」の2つの工程に分かれます。
基本設計(外部設計)では何をするか
基本設計では、画面の仕様を設計していきます。
基本設計の流れ
1.画面遷移図
画面遷移を図式化した資料を作成します。例えば、会員登録フォームの入力画面に入力をすると登録確認画面に遷移し、確認が取れたら登録完了画面へと遷移するという図を作成します。
2.画面のレイアウトと処理概要
画面のレイアウトと、画面を構成する構成要素を記載していきます。実際の画面イメージに近いモック画面を作成することもあれば、Excelの図で作成することもあります。処理概要は、初期表示するデータの取得仕様や、ボタンやリンクをクリックした際に行われるシステムの処理の概要を記載します。
3.項目定義書
データモデル(システムで管理するデータのまとまり)ごとにシステムに必要とされる項目を洗い出し定義していきます。例えば「顧客データ」「受注データ」などが挙げられます。
ここでは、項目ごとの入力仕様(必須入力か否か、入力形式の制限、入力するデータの上限)を定義します。またアクター(システムを利用するユーザーの種類のこと。例えば「管理者」「会員」など)によって表示する項目、非表示にする項目があるため、アクターごとにアクセスできる項目を定義していきます。
詳細設計(内部設計)では何をするか
詳細設計では、具体的なプログラムの仕様を設計していきます。
詳細設計の流れ
1.データベース設計
システムで保存するデータをどのように整理して保管するかを設計します。最低限作成が必要な、内部設計の重要設計仕様となります。
データベース設計では、リレーショナルデータベース(RDB)を使用する場合がほとんどです。リレーショナルデータベースを利用する場合は、ER図というデータベースの設計書を作成して、データベース内にデータがどのように保存されるかを可視化していきます。
最近では、実際に使用するプログラムにER図を表現するために必要となる情報を埋め込んでおくことで、ER図を自動生成するツールもあります。
2.コード定義設計
システムで使用する選択肢など、データを定義してコード番号を定義します。例えば、性別の場合だと「1:男性」「2:女性」などのような形です。
3.API設計
近年の開発では、システムをフロントエンド(画面側)とバックエンド(裏側で動く処理)に分けて開発する手法がポピュラーとなっています。
フロントエンドからはイベント発生時(ボタンを押す、など)に、バックエンドの処理を呼び出します。このバックエンドの処理は目的別に提供されるため、フロントエンドを開発する際にはどのボタンを押したら、どのバックエンドを呼び出せばよいかを把握している必要があります。
バックエンドが提供する機能のひとつひとつを「API(Application Programming Interface)」と呼びます。例えば顧客検索画面で検索条件を入力し、検索ボタンを押した際には、バックエンドの顧客検索APIに画面で入力された情報を渡して呼び出します。その際に顧客名、顧客住所など、どのような項目を渡すことができるのかを定義します。渡すことができる項目のひとつひとつを「パラメーター」と呼びます。
バックエンドはパラメーターを受け取り、そのパラメーターに沿って処理した結果をレスポンスとしてフロントエンドに返します。フロントエンドはレスポンスを読み取り、画面に反映します。例えば顧客検索を例に挙げると、検索条件に合致した顧客データがレスポンスで返ってくるため、そのデータを表形式に見やすく加工して画面に表示します。
これらのバックエンドのAPIがどれくらい必要なのかと、それぞれのパラメーターとレスポンスの仕様をAPI設計に定義します。API設計書は実際に開発するプログラムに、ルールに沿って説明を記載しておくと自動的に生成できるツールもあります。
4.バッチ処理設計
画面に表示されない、裏側での自動処理を設計します。例えば、夜間にデータの集計を行なったり、リマインドメールを指定の時間を迎えたら送信したり、自動的に裏で動く処理を設計します。
5.外部システム連携設計
クレジットカード決済やSNSとの連携など、外部システムとのデータ連携が発生する場合、外部システムの連携をどのように実現するかを設計します。APIが提供されている場合はAPI連携方式、ファイルを受け渡しすることで連携する場合はファイルの連携方式やファイルの仕様を定義します。
実際の開発費用・期間をまとめた資料を無料で差し上げます。資料請求はこちら>>
基本設計と詳細設計の違い
基本設計
主に目に見える部分の設計をします。発注者が積極的に参加する必要がある工程です。具体的には、Webブラウザの表示する項目や入力項目を発注者と受注者がやりとりして決めるなどです。
詳細設計
目に見えない裏側の設計をします。システムの保守性、性能を左右する工程です。発注者にエンジニアが在籍していて運用は自社で行う場合、積極的に参加することが望ましいです。
具体的には、データベースの全体像を一緒に見てどこをいじれば変えられるのかを共有する、システムで具体的にどのようにデータが格納され管理されてゆくのかを把握するなどです。またはエンジニアが在籍している場合は保守性、パフォーマンス面で適切な設計になっているかのチェックも一緒に行います。
設計を行う上で重要なポイント
システム設計を行う上で重要なポイントを、受注者側と発注者側に分けて紹介します。
受注者側
受注者側で重要なのは、発注者側の言っていることの真相を探ることです。例えば、発注者側から入力項目の追加の要望が出てくることがありますが、そのような場合なぜそのような要求が出たのか、なぜ必要でどのように活用するのかを踏み込んでヒアリングする必要があります。
シンプルな例を挙げると、「顧客名のカナを入力してほしい」という要望があった際に、
- 読み間違いを防ぐ目的で入力するのか
- 50音順で並べ替えたい要望があるのか
まで踏み込んで、要望の背景まで共有してもらう習慣をつけることが重要です。
また、ユーザーが重要視しているポイントを探ることも重要です。例えば、検索処理の使い勝手を重要視している顧客に対して、データ入力画面に過剰な機能を実装するといった的外れなことをしてしまうと、投じた予算に対する満足度が低くなってしまいます。要件定義の段階と関連してきますが、システム開発で何を開発したいかを明確にしておくと重点的に力を入れて設計すべき機能が明確になります。
このようなコアな機能については、しっかりと検討時間をとりシステム面で解決できる方法を複数提示し、ベストな設計に落とし込んでゆく提案の引き出しの多さが求められます。また、守秘義務を守った上で他業種・他システムでの解決事例を紹介することも、顧客に対して安心感を与える材料にもなります。
発注者側
自社の関係部署を巻き込んで、実際にシステムを使用するユーザーの声をできるだけ設計段階で引き出すことがポイントとなってきます。
また、素人なのでわからないといって受注者におまかせ状態にすることはやめましょう。特に基本設計に関しては、実際に使用する自分たちの立場で意見をいうようにすることが重要となってきます。
実際の開発費用・期間をまとめた資料を無料で差し上げます。資料請求はこちら>>
システム設計とは?まとめ
- システム設計とは、開発するソフトウェアの設計を行うための工程を指す。「基本設計(外部設計)」と「詳細設計(内部設計)」の2つの工程に分かれる
- 基本設計では画面の仕様を設計する。画面遷移図、画面レイアウトと処理概要、項目定義書を作成する
- 詳細設計では具体的なプログラムの仕様を設計する。データベース設計、コード定義設計、API設計、バッチ処理設計、外部システム連携設計を作成する
- 設計を行う上で、受注者側は発注者の重要視しているポイントや発言の真相を探るようにすることが重要
- 設計を行う上で、発注者側は実際にシステムを使用するユーザーの声をできるだけ設計段階で引き出すことが重要。受注側におまかせ状態にしないようにしましょう。
システム設計は、受注者側だけではなく発注者側の参加も必要となる工程です。特に実際に使う画面でどんな機能が欲しいのか、具体的に要望を出すことが重要となってきます。
この記事によって、システム開発成功のお手伝いができましたら幸いです。最後までお読みいただき、ありがとうございました。