Help us understand the problem. What is going on with this article?

【🔰エンジニア対象】第1回未経験エンジニアによる業界用語説明(上流工程)

はじめに

こんにちは、Morley@仮免エンジニアです。

未経験エンジニアが来月から客先常駐案件にジョインするに際し、理解が曖昧だったワードを表層的ではあるものの、理解することで用語から生じるハードルを少しでも下げることを目的に記事を書くことにしました。(不定期更新)

対象者

IT業界未経験者
未経験エンジニア
新人エンジニア

そもそも、システム開発工程とはなんぞや?

システム開発工程とは、コンピュータを用いた機能(自社サイトや業務システム、アプリケーション等)を開発する際に必要なプロセスのことです。

開発モデル(ウォーターフォール型やアジャイル型など)によって、開発工程は異なるものの、開発工程を構成する要素にはある程度の共通点があります。具体的には、顧客の要望を整理することや、システムの設計・プログラミングなどの要素がシステム開発工程には必要になってきます。

開発モデルごとに異なる開発工程

システム開発の開発モデルには、いくつかの種類があります。
主な開発モデルは以下のとおりです。(※今回は紹介のみです)

・ウォーターフォール型
・プロトタイプ型
・スパイラル型
・アジャイル型
※その他多くの開発モデル(手法)が存在します

今回はそのなかでも代表的な開発モデルである「ウォーターフォール型」について、モデルの説明とシステム開発工程について簡単に紹介します。

ウォーターフォール型の開発工程

ウォーターフォール型は、システム開発に要する工程を順番に進めていく手法です。あらかじめ定めた工程計画を順番にこなすイメージで、高いところから水が流れ落ちる滝を模して「ウォーターフォール型」と呼ばれています。原則として前工程が完了しないと、次工程に進まないことで前工程の成果物の品質を確保し、前工程への手戻りを最小限にします。大規模開発で採用される、最もポピュラーな開発モデルです。

waterfall.png

ウォーターフォール型では、上図のような流れで開発工程を進めていきます。
システム開発するためには、まず設計が必要です。基本的にシステム設計では、最初に要件定義を行い、次に外部設計を行います。外部設計を基にして内部設計を行ったあと、内部設計を基にして実装(プログラミング)を行います。

【1】要件定義(RD : Requirements Definition)

ウォーターフォール型におけるシステム開発は、要件定義という工程から始まります。

要件定義とは、クライアントがシステムに求めている機能をまとめて、システムの仕様や範囲を決めることです。例えば、必要な機能や性能、要求される信頼性や保守性、そのほか実現すべき業務モデルや業務フローなどについて、クライアントの要望を詳しくヒアリングし、齟齬が生じないように要件定義書を作成します。要件定義の精度が高いほど外部設計を行いやすく、その後の仕様変更を減らすことができます。要件定義で確定しなかった項目は、次の外部要件の段階で再度検討され、仕様が決定されます。

【2】外部設計(ED : External Design)

要件定義が終わったら、次は外部設計です。
外部設計は、基本設計(BD)とも呼ばれ、一般的に外部設計までが上流工程に含まれます。要件定義で決定した機能や性能、制約条件などを基にしてシステムの基本となる設計を行います。操作画面や操作方法、データ出力など、ユーザーから見えるインターフェース部分の仕様を決定したり、セキュリティや運用規定、システム開発のスケジュールや費用などを設計したりと、基本的にユーザーに向けた仕様を設計するのが外部設計です。
ここでは、外部設計の主な項目を「方式設計」「機能設計」「その他の設計」の三つに分けて解説します。

(1)方式設計

方式設計では、システムの実装方針やプラットフォームの方針を設計します。システムがどのようなハードウェアで構成されるか、ハードウェアやソフトウェアの機能や構造をどうするか、プラットフォームは何か、開発言語をどうするかなどを決めます。アプリケーション全体の構造もここで設計されるため、アーキテクチャ設計とも呼ばれています。

(2)機能設計

機能設計では、システムをモジュール単位で分割し、各モジュールや使用するデータベースの設計を行います。具体的には、データの入出力、データベース同士のデータの受け渡し、ユーザーによる操作、帳票の出力などです。また、画面のレイアウト、操作方法、帳票類の書式など、システムの使いやすさやユーザー満足度につながるインターフェース部分の仕様を決めるのも機能設計の役割です。

(3)その他の設計

そのほかの設計では、クライアントに求められている機能やセキュリティ、運用規定、納期、開発費用など、業務として運用するために必要な部分を決定します。

外部設計では、「外部設計書」「画面仕様書」「帳票仕様書」「インターフェース仕様書」などが作成されます。これらの内容は、クライアントに確認して合意を取ることが必要です。

【3】内部設計(ID : Internal Design)

内部設計では外部設計を基に、システム内部の動作や機能、物理データなどユーザーから見えにくい詳細な部分の設計を行います。外部設計とその後に行われる詳細設計の間の工程ですが、内部システムに特化しているため、詳細設計と同じ工程として扱われることもあります。プログラム機能を単体に分割し、そこで使用する物理データや入出力を設計します。外部設計の結果をプログラミングしやすくするのが内部設計の役割です。

次に外部設計で決定した事項を基にコンピュータでの実装を想定したうえで、より詳細にシステムを設計します。
外部設計がユーザー視点からの設計である一方で、内部設計の工程ではコードやプログラムの設計など、開発者側からの視点でシステムを設計します。ここでは、内部設計の主な項目を「機能分割」「物理データ設計」「入出力の詳細設計」の三つに分けて解説します。

(1)機能分割

機能分割では、プログラミングやシステムのメンテナンスをしやすくするために、機能をモジュールごとに分割し、各モジュールの機能を明確化します。また、機能間でデータが処理される際の流れ(データフロー)を設計します。データが処理される流れを明確にすることで、設計バグを洗い出せます。

(2)物理データ設計

物理データ設計では、ユーザーには見えないシステム内部で使うファイルやデータのやり取りに関する部分の設計を行います。

(3)入出力の詳細設計

入出力の詳細設計では、外部設計で決めたインターフェースをプログラミングでどのように実装し、表現するかをさらに細かく設計します。例えば、エラー処理や初期値・デフォルト値の定義、入力データのチェック方法、表示するメッセージなどについても検討します。

内部設計では、「機能仕様書」「データフロー図」「データベース物理設計書」などが作成されます。内容はプログラミング作業を行うメンバーに共有されますが、内部設計でクライアントとの調整を行うことはほとんどありません。

【4】実装

ここでようやく実装工程です。実装工程では、内部設計での決定事項を基に実際にプログラミング言語を用いて、システムを構築する工程になります。家の建築で例えると、先ほどまでの工程が設計図の作成であった一方で、この工程以降は家を実際に建てる流れになります。

最後に

今回はシステム開発工程のうち、ウォーターフォール型に焦点をあてて紹介しました。要件定義~実装までの開発工程の概略についてを取り扱いましたが、私自身が未経験であるがうえ、調べたものを解釈しているため、内容に相違がある場合がありましたら、ご容赦ください。その際はコメントや編集リクエストいただけると幸いです。

次回記事

【🔰エンジニア対象】第2回未経験エンジニアによる業界用語説明(下流工程①)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした