見出し画像

IT基礎#9 システム設計とITプロジェクトの基礎

システム開発の流れ(要件定義、設計、実装、運用)

システム開発の流れは、主に要件定義、設計、実装、運用の4つの段階に分けられます。

要件定義は、システム開発の初期段階で、開発するシステムの目的や機能を明確にします。

例えば、製造業向けのシステム開発では「原料や製品の在庫数をリアルタイムに把握し、経営を安定させたい」といった目標を具体化します。

この段階では、機能要件と非機能要件を定義し、要件定義書にまとめます。

設計段階は、基本設計と詳細設計に分かれます。

基本設計では、システムの大まかな構造やユーザーインターフェース、データの保存・取得方法などを設計します。

例えば、在庫管理システムの画面レイアウトや主要な機能の配置を決定します。

詳細設計では、基本設計を基にプログラムの具体的な動作を設計します。

在庫数の計算アルゴリズムやデータベースの構造などを詳細に定義します。

実装段階では、設計書に基づいて実際のプログラムコードを書きます。

例えば、在庫管理システムの各機能をJavaやPythonなどのプログラミング言語で実装します。

この段階では、単体テスト、結合テスト、システムテストなど、様々なテストを行い、バグの修正や機能の改善を行います。

運用段階では、完成したシステムを実際の業務環境に導入し、日々の運用とメンテナンスを行います。

例えば、在庫管理システムを使用しながら、ユーザーからのフィードバックを基に機能の追加や改善を行います。

また、セキュリティアップデートやパフォーマンス最適化なども継続的に実施します。

この一連の流れは、システムの規模や開発手法によって多少の違いがありますが、基本的な構造は同じです。

例えば、アジャイル開発では、これらの段階を短いサイクルで繰り返し、迅速にフィードバックを取り入れながら開発を進めます。

システム開発の成功には、各段階での綿密な計画と関係者間のコミュニケーションが不可欠です。

特に要件定義と設計段階での精度が、その後の開発の効率と品質に大きく影響します。

アジャイル開発とウォーターフォール開発の違い

アジャイル開発とウォーターフォール開発は、システム開発における2つの主要なアプローチです。

ウォーターフォール開発は、要件定義、設計、実装、テスト、運用という段階を順序立てて進める手法です。

各段階が完了してから次の段階に進むため、プロジェクトの全体像を把握しやすいという利点があります。

例えば、銀行のコアシステム開発など、要件が明確で変更が少ないプロジェクトに適しています。

一方、アジャイル開発は、小さな開発サイクル(スプリント)を繰り返し、機能単位で開発を進める手法です。

各スプリントで要件定義から運用までを行うため、市場の変化や顧客のニーズに柔軟に対応できます。

例えば、スタートアップ企業のWebサービス開発など、要件が流動的で迅速な開発が求められるプロジェクトに適しています。

開発期間については、ウォーターフォール開発は長期的になりがちですが、アジャイル開発は短期間で利用可能な機能をリリースできます。

例えば、ECサイトの開発では、アジャイル開発を採用することで、基本的な商品表示機能を早期にリリースし、その後支払い機能や在庫管理機能を順次追加していくことができます。

柔軟性の面では、アジャイル開発が優れています。

要件の変更や新機能の追加に迅速に対応できるため、顧客のフィードバックを反映しやすいです。

一方、ウォーターフォール開発は、一度決定した要件の変更が難しく、後戻りのコストが高くなります。

テストの頻度も異なり、アジャイル開発では各スプリントでテストを行うため、早期にバグを発見し修正できます。

ウォーターフォール開発では、開発の最終段階でまとめてテストを行うため、バグの発見が遅れる可能性があります。

プロジェクト管理の観点では、ウォーターフォール開発は進捗管理が容易ですが、アジャイル開発は全体の進捗把握が難しいという特徴があります。

これらの違いを踏まえ、プロジェクトの性質や要件、市場環境に応じて適切な開発手法を選択することが重要です。

近年では、両手法のメリットを活かしたハイブリッド型の開発も行われており、例えば要件定義と全体設計はウォーターフォール的に行い、実装はアジャイル的に進めるといったアプローチも採用されています。

ITプロジェクトでの役割(プロジェクトマネージャー、開発者など)

ITプロジェクトでは、様々な役割が存在し、それぞれが重要な責務を担っています。

主な役割として、プロジェクトマネージャー(PM)、開発者、システムエンジニア(SE)、テスターなどがあります。

プロジェクトマネージャー(PM)は、プロジェクト全体の責任者として中心的な役割を果たします。

PMの主な業務には、プロジェクト計画の立案、予算管理、人員調達、進捗管理などがあります。

例えば、大規模なECサイト開発プロジェクトでは、PMがクライアントとの要件定義から始まり、開発チームの編成、スケジュール管理、品質管理まで一貫して責任を持ちます。

開発者は、実際にシステムやソフトウェアのコーディングを行う役割です。

言語やフレームワークの専門知識を活かし、設計書に基づいてプログラムを作成します。

例えば、モバイルアプリ開発プロジェクトでは、iOS開発者やAndroid開発者がそれぞれのプラットフォーム向けにアプリケーションを構築します。

システムエンジニア(SE)は、システム全体の設計や構築を担当します。クライアントの要望を技術的に実現可能な形に落とし込み、開発者に指示を出します。

例えば、企業の基幹システム刷新プロジェクトでは、SEがシステムアーキテクチャの設計やデータベース設計を行います。

テスターは、開発されたシステムの品質を確保する役割を担います。

テスト計画の立案、テストケースの作成、実際のテスト実施、バグの報告などを行います。

例えば、金融系システムの開発では、セキュリティや正確性が極めて重要なため、専門のテスターチームが綿密なテストを実施します。

これらの役割に加えて、プロジェクトの規模や性質に応じて、ビジネスアナリスト、UX/UIデザイナー、データベース管理者などの専門家が加わることもあります。

効果的なプロジェクト運営のためには、これらの役割間のコミュニケーションと協力が不可欠です。

例えば、アジャイル開発を採用したプロジェクトでは、PMがスクラムマスターとして機能し、開発者やSEと密接に連携しながら、短いスプリントサイクルで機能を実装していきます。

また、クラウドサービスの普及により、クラウドアーキテクトやDevOpsエンジニアなど、新しい役割も登場しています。これらの専門家は、従来の役割を横断しながら、効率的なシステム構築と運用を実現します。

ITプロジェクトの成功は、これらの役割が適切に機能し、チームとして協働できるかどうかにかかっています。

PMのリーダーシップのもと、各役割が専門性を発揮しながら、共通の目標に向かって取り組むことが重要です。

簡単なシステム設計の実践

簡単なシステム設計の実践について、「建築企業における資料のDX化」プロジェクトを例に説明します。

まず、要件定義から始めます。

ビジネス側からの要望として、資料整理の迅速化や情報のナレッジ化、バージョン管理システムの導入などが挙げられます。

これらの要望を基に、具体的な機能要件を定義します。例えば、資料のデジタル化、検索機能の実装、資料の分類・タグ付け機能などが考えられます。

次に、基本設計に移ります。ここでは、システムの全体構成を決定します。

例えば、Webアプリケーションとして開発し、クラウドサービスを利用してデータを保存する構成を選択します。

画面設計では、資料一覧画面、資料詳細画面、検索画面などの主要な画面のレイアウトを決定します。

データ設計では、資料テーブル、ユーザーテーブル、タグテーブルなどの必要なデータ構造を定義します。

これらのテーブル間の関連性をER図で表現します。

機能設計では、各機能の詳細を決定します。例えば、資料のアップロード機能、OCRによるテキスト抽出機能、全文検索機能などの仕様を決めます。

基本設計が完了したら、詳細設計に進みます。

ここでは、各機能の具体的な実装方法を決定します。

例えば、資料のアップロード機能では、ファイルサイズの制限、許可するファイル形式、保存先のディレクトリ構造などを細かく設計します。

また、セキュリティ設計も重要です。ユーザー認証の方法、アクセス権限の設定、データの暗号化などを検討します。

設計が完了したら、プロトタイプを作成してビジネス側に提示し、フィードバックを得ます。

必要に応じて設計を修正し、最終的な設計書を作成します。

この過程を通じて、ビジネス要求を技術的に実現可能な形に落とし込み、開発チームが実装に取り掛かれるレベルまで具体化します。

設計の各段階でビジネス側と密にコミュニケーションを取り、要求との齟齬がないよう注意することが重要です。

[課題] 小規模なシステムの要件を考え、設計図を作成

小規模な図書館管理システムの要件を考え、簡単な設計図を作成してください。

以下の点を含めて設計を行ってください:

  1. 主な機能の列挙

  2. システム構成図

  3. データベース設計(ER図)

  4. 主要な画面のワイヤーフレーム(1〜2画面)

回答例

  1. 主な機能

  • 書籍の登録・編集・削除

  • 書籍の検索(タイトル、著者、ISBN)

  • 貸出・返却処理

  • 利用者の登録・編集・削除

  • 貸出履歴の管理

  1. システム構成図

[クライアント端末] <---> [Webサーバー] <---> [アプリケーションサーバー] <---> [データベースサーバー]
  1. データベース設計(ER図)

[書籍]
- 書籍ID (PK)
- タイトル
- 著者
- ISBN
- 出版年
- 状態(貸出中/利用可能)

[利用者]
- 利用者ID (PK)
- 氏名
- 連絡先
- 登録日

[貸出]
- 貸出ID (PK)
- 書籍ID (FK)
- 利用者ID (FK)
- 貸出日
- 返却予定日
- 返却日
  1. 主要な画面のワイヤーフレーム

書籍検索・貸出画面:

+----------------------------------+
|   図書館管理システム             |
+----------------------------------+
| 検索: [                    ] [検索]
+----------------------------------+
| 検索結果:                        |
| タイトル | 著者 | 状態 | 貸出    |
| -------- | ---- | ---- | ------  |
|1      | 著者A| 可能 | [貸出]  |
| 本2      | 著者B| 貸出中| ---    |
+----------------------------------+
| [新規書籍登録] [利用者管理]      |
+----------------------------------+

この設計例は基本的な機能を含んでおり、小規模な図書館管理システムの開始点として適しています。

実際の開発では、これらの設計をさらに詳細化し、セキュリティ要件やユーザビリティの考慮も必要です。

いいなと思ったら応援しよう!

K
サポートもお待ちしております! 頂いたサポートは今後の創作活動費用として、noteとYouTubeに活用させていただければと考えております!