システム開発工程の流れ|ウォーターフォール型とアジャイル型の違い

2021年8月23日

システム開発を無計画に進めるのは非効率であり、好ましくありません。また、手戻りが多くなると、発注側が望むシステムにならず、品質が下がってしまうこともあります。プロジェクトを成功に導くためには、正しい工程でシステム開発を行うことが重要です。

多くの開発現場では、スムーズかつトラブルの少ない定型的なシステム開発工程が採用され、段階的に開発が進められています。こちらでは、システム開発工程の一般的な流れと、主流となっている「ウォーターフォール型」「アジャイル型」についてご紹介します。

システム開発工程の流れ

以下では一般的なシステム開発プロセス、また、開発工程の代表的な種類である「ウォーターフォール型」「アジャイル型」についてご紹介します。

STEP1:要件定義(要求定義)

システム開発における最初のステップとして、開発側と発注側でシステムに必要な条件をすり合わせて整理します。発注側がシステムに求めている要素を開発側がヒアリングし、要件定義書としてまとめるのが一般的です。要件定義書には、システムを開発する目的、開発期間、実装する機能、導入・運用方法などが、記載されます。発注側が要件定義書に要望が反映されているか確認し、合意した場合は、記載内容に基づいて、開発が始められます。

STEP2:外部設計(基本設計)

要件定義書の内容を基に、インターフェースの外部設計が行われます。具体的には操作画面や操作方法などの設計であり、ユーザビリティに大きく関わる部分のため配慮が必要です。

システムの全体像、実装方針、使用するソフトウェアを決める方針設計、各モジュールにおけるデータ処理の仕様、ユーザーインターフェースを決める機能設計、方針設計と機能設計で決めた内容を実現するための方針を決定するその他の設計に分けられます。また、ここまでの工程は、現場において「上流工程」と呼ばれます。

STEP3:内部設計(詳細設計)

外部設計で決められた内容を基に、内部設計を行っていきます。内部設計はユーザーに見えない部分の設計であり、後述するプログラミングができる状態にするため、「設計書」を作成することが目的です。

各モジュールに実装する機能やデータ処理のフローを設計する「機能分割」、ファイル・データ処理の流れを設計する「物理データ設計」、初期値の定義や表示メッセージの決定などを行う「詳細設計」に分けられます。これ以降のフェーズは、現場において「下流工程」と呼ばれます。

STEP4:プログラミング

内部設計に基づき、プログラムを作成します。作業を担当するのは、コーディングの知識を有しているプログラマーやシステムエンジニアです。要件を満たすためにどのようなプログラミングを行うかは、一般的にプログラマーに委ねられています。

作業で使用されるのは、外部設計、内部設計時に決定されたプログラミング言語です。既に1,000以上にプログラミング言語があるといわれており、開発するシステムに応じて最適なものが選ばれます。

STEP5:単体テスト

作成したプログラムをモジュールごとにテストします。内部設計で決めたことが正しく実装されているかを確認します。判定基準は、モジュールの担う機能が果たせているかどうかです。

例えば、数値を2つ受け取り、合計を返すモジュールを実装したとします。単体テストでは、1と2を渡し、3が返ってくることを確認するようなテストを行います。そして不具合が見つかった場合は、修正が行われます。テスト自体は単純作業になりがちですが、要件を満たすシステムを開発するために不可欠な工程です。

STEP6:結合テスト

単体テストを通過した各モジュールを組み合わせて、問題なく機能するかどうかテストを行います。外部設計で決めたことが正しく実装されているかを確認します。

主なテスト対象は、モジュール間のデータの受け渡しができるか、連携が正常に行われているか、といった点です。単体テストで確認された点については同じことの繰り返しになってしまうため、テストを実施しない、もしくは最小限のテストにとどめられます。

STEP7:システムテスト(総合テスト)

単体テスト、結合テストを通過したプログラムが、要件定義の内容どおりに機能するか、最終的なテストが行われます。性能や機能を含めた、全体的な動きを確認する、ベンダー(開発者)側の最終テストです。

STEP8:運用テスト

システムテストの通過したシステムに対し、実際の運用想定した環境下でのテストを行います。発注側が想定していた業務でシステムが動作するか調べるのが大きな目的です。これまでのテストのなかでは、最も実用性にフォーカスしたテストが行われます。

STEP9:リリース(システム移行)

全てのテストが終了後に納品し、旧システムから新システムへの切り替えが行われます。全社的に切り替える場合や、部署ごとに切り替える場合など、切り替えるペースについては発注側の意向や状況次第です。移行が完了するまではシステムが使えないため、なるべく短い時間で移行を終わらせるのが好ましいと考えられています。

STEP10:運用・保守

システムを継続的に使用し続けるためには、常に監視が必要です。メモリの利用状況などを確認しながら、システムが正常に稼働しているかどうか常にチェックします。

改善点が見つかった場合は、アップデートを行うのも一般的です。その都度お客様と要件をすり合わせ、次のリリースへ向けて設計・実装・テスト・リリースを繰り返し、よりよいシステムを目指して開発を進めていきます。

システム開発工程の主な種類

システム開発工程には、主に二つの種類があります。

  • ウォーターフォール型
  • アジャイル型

以下では、ウォーターフォール型とアジャイル型の特徴、それぞれのメリット・デメリットについて解説します。

ウォーターフォール型システム開発の特徴とメリット・デメリット

ウォーターフォール型は代表的なシステム開発工程の種類です。以下では、ウォーターフォール型の基本的な特徴や、メリット・デメリットについてお話しします。

工程の特徴

ウォーターフォール型は、決められた工程を順に遂行していく開発モデルです。滝のように水が上流から下流に流れていく様子から名付けられました。

メリット・デメリット

  • メリット

ウォーターフォール型のメリットとして、多くの人数で開発できる点が挙げられます。これは、工程がシンプルでスケジュールを管理しやすいためです。多くのマンパワーが必要になる大規模プロジェクトのシステムに向いています。また、標準的な開発モデルのため、ほぼすべてのシステム開発会社で対応できる点もメリットです。発注側としてはウォーターフォール型で進める場合、ベンダー選びの制限はありません。

  • デメリット

ウォーターフォール型は、あらかじめ決められた順番に沿って工程が進められます。そのため、工程途中での修正・仕様変更は困難です。どうしても修正や仕様変更が必要な場合、前の工程に戻って作業が必要になるため、多くの時間とコストがかかります。修正が多発した場合、開発期間が長期化してしまう恐れがあります。

アジャイル型システム開発の特徴とメリット・デメリット

ウォーターフォール型とならび、一般的な開発工程の種類といえるのがアジャイル型です。以下では、アジャイル型の特徴と、メリット・デメリットについて解説します。

アジャイル型は、開発するシステムを機能ごとに細かく分割して、重要なものなどから開発を進めていく手法です。分割した機能ごとに「要件定義」から「リリース」までの工程を進めます。分割された各開発単位を「イテレーション」と呼びます。1つのイテレーションは、プロジェクトによって様々ですが、1~4週間が多いです。

メリット・デメリット

  • メリット

アジャイル型は、重要な機能から、短期間で実装できます。スピーディーに展開したい新規事業のシステム開発に最適です。なお、アジャイル(agile)は「俊敏な」という意味の英単語です。また、機能ごとに分割して開発するため、修正や仕様変更に対応しやすい点もメリットです。改修を加えていくことが比較的簡単にできるため、理想のシステムに近づけやすい方式といえます。

  • デメリット

アジャイル型のデメリットとして、プロジェクト全体の管理が難しい点が挙げられます。システム全体の厳密な計画を立てない開発モデルのためスケジュールがあいまいになりがちです。また、顧客のからの要求が不明瞭な、場当たり的な開発になってしまうケースがあります。

システム開発工程で用いられる主な略語

システム開発の現場では専門用語が使われます。実際には、正式名称ではなく、略語が使われるケースが一般的です。現場において一般的な略語をご紹介します。

意味略語
要求分析SA
要件定義RD
基本設計BD
ユーザーインターフェースUI
機能設計FD
詳細設計DD、PS
プログラム設計PD
コーディングCD
プログラミングPG
単体テストUT
結合テストIT
システムテストST
運用テストOT

開発現場では、こうした略語が日常的に飛び交います。そのため、あらかじめ覚えておくと、プロジェクトチーム内で意思疎通しやすいでしょう。略語は基本的に、英語表記での単語の頭文字2文字で構成されています。正式な名称より短いため、文章でのコミュニケーションで時間がかかりにくい点がメリットです。

システム開発ではウォーターフォール型・アジャイル型それぞれの工程を理解することが大切

システム開発は、今回ご紹介したような工程で進められます。また、全システムを順に沿って開発するウォーターフォール型、複数のイテレーションに分割していくアジャイル型の2種類が一般的です。ウォーターフォール型は予め決められた工程をスケジュール通りに進める強みがあり、アジャイル型は細かく分割した開発単位でスピーディーに進めることを強みとしています。それぞれの特徴を理解した上で、ニーズに合った開発工程を選択することが大切です。

ベンダーを選ぶ際は、希望する開発工程に対応しているかどうかがひとつの判断基準といえます。ウォーターフォール型・アジャイル型の両方に対応しているベンダーであれば、柔軟な対応が可能です。システム開発を依頼する際は、システム開発工程を選べて開発コストがお得なYAZをぜひご検討ください。

この記事を書いた人

ITコラム部YAZ

YAZ ITコラム部

IT業界に関心がある方へ向けて、専門用語を分かりやすく発信しています!

関連記事

おすすめの記事