はじめに
最近、チーム開発で機能の追加提案の一環で基本設計をする機会がありました。
今までは要件や仕様が決まっている中で実装をすることが多かったので、改めて基本設計の重要性を感じました。
そこで今回はその基本設計についてまとめてみました。
基本設計とは
基本設計は、要件定義で明確化されたシステムの目的や機能を、具体的な形にするためのプロセスです。この段階で、システムの全体像や外観(操作画面の見た目など)、技術的な実現方法などが決定されます。
主に以下のような成果物を作成します。
- 基本設計書
- テーブル定義書
- 画面設計書
- ER図
- 画面遷移図
- API設計書
- エンドポイント設計書
システム開発の工程と基本設計の位置付け
一般的に、システム開発は以下の工程で進められます。
- 要件定義: 顧客の要望や課題を明確にし、システムに求められる機能や性能を定義します
- 基本設計: 要件定義で定義された内容に基づき、システムの全体像や主要機能、技術的な実現方法などを具体的に設計します
- 詳細な設計: 基本設計で決定された内容をさらに詳細化し、具体的な機能や画面、データベースなどを設計します
- 開発: 詳細設計に基づいて、プログラムを作成します
- テスト: 作成されたプログラムが正しく動作するかを検証します
- 運用・保守: リリースした後のシステムを運用し、保守を行います
基本設計が不十分だと何が起こる??
もし基本設計が不十分なまま開発工程に進んでしまうと、手戻りや仕様変更が頻繁に発生し、スケジュール遅延やコスト超過につながる可能性が高まります。
基本設計の重要性
プロジェクトの方向性を定める
基本設計は、開発チーム全体が共通認識を持つための基盤となります。システムの目的や機能、技術的な制約などを明確にすることで、開発チームは迷うことなく作業を進めることができます。
手戻りを防ぐ
基本設計をしっかりと行うことで、開発段階での手戻りを大幅に減らすことができます。開発工程が進んでから仕様変更が発生すると、時間もコストもかかってしまいます。
品質の確保
基本設計では、システムの品質を確保するための様々な検討が行われます。性能、セキュリティ、保守性などを考慮することで、安定したシステムを開発することができます。
関係者間のコミュニケーションを円滑にする
基本設計の成果物である設計書は、開発者だけでなく、顧客や運用担当者など、様々な関係者間のコミュニケーションを円滑にするためのツールとして活用できます。
テーブル定義の事例から学んだこと
基本設計の中でも特に重要なのが、テーブル定義(データベース設計)。
これを曖昧にして進めてしまうとどのような問題が起こりうるのでしょうか??
テーブル定義あるある3選を独断と偏見でまとめました。
-
データ構造の不明確さ
テーブル定義が曖昧だと、どのようなデータがどのテーブルに格納されるのか、各項目の意味は何かが明確になりません。
その結果、開発者はテーブル構造を理解するのに時間がかかり、実装作業が遅延する可能性があります。 -
データ型の不一致
テーブル定義でデータ型が明確に定義されていない場合、実装時に適切なデータ型を選択する必要があります。
しかし、データ型が曖昧だと、開発者によって解釈が異なり、データ型が不一致になる可能性があります。
データ型が不一致になると、データの入力や処理でエラーが発生したり、データの整合性が失われたりする可能性があります。 -
制約の欠如
テーブル定義で主キーや外部キーなどの制約が明確に定義されていない場合、実装時にデータの整合性を保つための制約を別途実装する必要があります。
しかし、制約が曖昧だと、制約の実装漏れや誤った制約の実装が発生する可能性があります。
制約の欠如は、データの重複や矛盾、参照整合性エラーなどを引き起こす可能性があります。
関係者へのメリット
基本設計以外の担当者が関心を持つことは、様々なメリットをもたらします。
実装者
- 設計者の意図を理解しやすくなり、実装作業がスムーズに進められるようになります
- 設計の問題点にいち早く気付き、手戻りなどを減らせるようになります
テスト担当者
- テストケースの作成やテスト計画の策定がより効果的になります
運用・保守担当者
- 設計段階からシステムの構造や動作を理解しておくことで、トラブル発生時に原因を特定しやすくなり、迅速な対応が可能になります
- 設計段階で運用保守に必要な情報を把握し、考慮した設計にすることで、運用保守作業の効率化を図ることができます
営業担当者
- 業務知識の理解が深まり、顧客への提案や説明がより的確になります
詳細設計との違い
基本設計
目的: システムの全体像を把握し、主要な機能や構成要素を決定すること
対象: ユーザーの要求に基づき、システムが満たすべき要件を明確にする
詳細設計
目的: 基本設計で決定された内容を具体的に落とし込み、開発者が実際に開発作業を行えるようにすること
対象: 基本設計で定義された機能を、具体的なモジュールやプログラムに分割する
項目 | 基本設計 | 詳細設計 |
---|---|---|
目的 | システムの全体像の把握 | 開発者が作業できるレベルまで具体化 |
対象 | ユーザーの要求 | 基本設計の内容 |
内容 | 機能・非機能要件、構成、画面、データベース、API | モジュール、インターフェース、物理設計、プログラム、テスト |
成果物 | 外部設計書 | 内部設計書 |
要約すると、
基本設計は、ユーザーや関係者にシステムの全体像を理解してもらうための設計です。
詳細設計は、開発者が実際に開発作業を行うための設計です。
まとめ
基本設計は、プロジェクトの方向性を決定づける重要な工程です。基本設計がしっかりしていれば、プロジェクトの目標達成がスムーズに進み、成功に近づきます。