ひとりでのアプリ開発 - fineの備忘録 -

ひとりでアプリ開発をするなかで起こったことや学んだことを書き溜めていきます

システム開発の工程について

初めに

 本記事は、システム開発の工程についてまとめます。開発工程に沿って作業する目的は、計画通りに開発をすることができます。また、一連の開発プロセスを工程に分割することで、進捗や品質を管理しやすくなります。

システム開発の工程

 システム開発は、次のような工程があります。

要件定義

 顧客や利害関係者とのコミュニケーションを通じて、システムが満たすべき要件を明確にします。要件は機能や性能など、システムに求められる特性を指します。

 具体的には、発注側の業務要件(解決すべき業務課題)をもとに、システムに求める以下の条件を定義(明確に決める)し、要件定義書へと落とし込んでいきます。

要件 説明
システム要件 システム化すること、しないことを決める
機能要件 システムに必要な機能を決める
非機能要件 パフォーマンス・拡張性など機能以外に必要な要素を決める
技術要件 開発に使用するプログラミング言語ミドルウェアなどを決める

基本設計

 要件定義をもとに、システムの基本的な構造やアーキテクチャを設計します。具体的には、

  • 要件を満たすソフトウェア(ミドルウェア)・ハードウェアを明確にする
  • システムに必要なすべての機能を洗い出し、それぞれの役割を明確にする
  • 機能間の関連性、データの種類・流れ、全体的な業務の処理方法を明確にする
  • 取り扱う情報をどのように管理するか?データベースの形式・項目を決定する
  • 既存システムとの連携が必要な場合、データやり取りの方法・連携画面などを決定する

 また、画面遷移図を作り、画面のイメージや画面操作で表示される画面の流れを説明します。

(画面遷移図のイメージが分かるリンク先)
www.work-school.com

 これらを基本設計書にまとめていきます。

詳細設計

 詳細設計では、基本設計書をもとに、システムエンジニアプログラマがどのようにつくるのか、より詳細に設計していきます。

 詳細設計では、プログラマーへの指示書ともいえる詳細設計書を機能ごとに作成。詳細設計書をもとに、多数のプログラマーが作業にあたるため、クラス設計書、コード設計書、コーディング規約、単体テスト仕様書なども作成されます。

開発(プログラミング)

 完成した詳細設計書をもとに、実際のシステムを開発(プログラミング)する工程に移ります。プログラミング言語を含め、作業に必要な設計書・情報はすべて揃っている状態であるため、それぞれの機能ごとにひたすら作業(プログラミング)を進めていきます。開発作業からテストまでは、プログラマーが作業することになります。

単体テスト結合テストシステムテスト

 テストは単体テスト結合テストシステムテストがあります。

テスト 説明
単体テスト 開発の完了した機能ごとに実施されるテスト
結合テスト テストの完了した機能同士を結合し、画面遷移やデータの受け渡しがキチンと行われているかどうか、システム間の連携を確認するテスト
システムテスト 完成したシステム全体が要件を満たし、顧客の期待に応えるかを確認するテスト

リリース(導入)

 完成したシステムを顧客や利用者に提供し、実際の運用に移行します。

 リリースの仕方を一斉移行にするのか、順次移行にするのか、旧システムがあればデータの移行をするなど考慮が必要なものがあります。

保守・運用

 システムが稼働し続けるように、定期的なメンテナンスやバグ修正、必要な場合の機能追加などを行います。システムのライフサイクル全般を管理します。

開発のモデル

ウォーターフォールモデル

 ウォーターフォールモデルでは、この一つひとつの工程を順番に進めていきます。段階ごとに開発を完了させるので前の工程に後戻りはできません。より確実に開発を進めるために、工程ごとにレビュー(成果物の確認)を行うのが特徴です。しかし、要件定義が甘く「開発したかった成果と全く異なっていた」ということも起こり得ます。

 ウォーターフォールモデルの良さは、プロジェクト全体の計画が立てやすいことです。人員や予算など想定がしやすいため、大規模案件に向いています。また、進捗管理がしやすいことも特徴です。

V字モデル

 V字モデルは、システム開発の開始から終了までの流れを表したモデルです。ウォーターフォールが上流から下流へ流れるようなモデルに対し、V字モデルは開発から後の作業を折り返したV字型をしています。V字モデルは、ウォーターフォールの進化版ともいえます。

 詳細設計のテストを単体テストで、基本設計のテストを結合テストで、要件定義のテストをシステムテストで確認するため、テスト内容が明確になります。そのため、不具合の検出がしやすくなり手戻りのリスクを低減できます。また、進捗が分かりやすいこともメリットの一つです。

アジャイル

 アジャイル(俊敏な)型開発とは、仕様や設計の変更が当然あるという前提に立ち、初めから厳密な仕様は決めず、おおよその仕様だけで細かいイテレーション(反復)開発を開始し、小単位での「実装→テスト実行」を繰り返し、徐々に開発を進めていく手法です。

 アジャイル型のメリットは、小単位で「実装→テスト実行」を繰り返し組み上げていくため、不具合が発覚しても手戻り工数を最小限に抑えることができます。また、仕様変更や追加にも柔軟に対応できます。