開発プロセス・手法の基礎まとめ【ウォーターフォール・アジャイル・XP・スクラムを解説】

開発プロセス・手法に関するブログのアイキャッチ画像 システム開発技術
広告

 開発プロセス・手法は,基本情報技術者試験をはじめとする情報処理技術者試験で頻出となる重要分野です。特に,「ウォーターフォール」,「アジャイル」,「スクラム」などの違いや特徴は,正しく整理できていますか?

開発モデル=「開発の進め方の型」/開発手法=「実践方法やルール」

 ソフトウェア開発には,工程を順番に進めるものや,繰り返しながら改良していくものなど,さまざまな進め方があります。それぞれの手法には得意/不得意があり,開発対象や要求の変化の大きさに応じて適切に選択することが重要です。

 このページでは,ウォーターフォールモデルやスパイラルモデルといった代表的な開発モデルから,アジャイル開発,XP,スクラムなどの実践的な開発手法までをシンプルにまとめています。「どの手法がどのような特徴を持ち,どんな場面に適しているのか」という観点で比較しながら,試験で問われやすいポイントを効率よく理解していきましょう。

広告

ソフトウェア開発モデルとは(目的と種類)

ウォーターフォールモデルとは(工程順序と特徴)

 ウォーターフォールモデルは,ソフトウェアの開発を,上流から下流に向かって滝が流れるように行う開発モデルです。

※ 共通フレームのソフトウェア実装プロセスを,「ソフトウェア要件定義 ⇒ ソフトウェア方式設計 ⇒ ソフトウェア詳細設計 ⇒ ソフトウェア構築 ⇒ ソフトウェア結合テスト ⇒ ソフトウェア適格性確認テスト」というように,順に進める感じ(基本的には,前の工程に戻れない)

  • 全体の把握が容易なので,スケジュールや人員,工数などを明確にできる
  • 並行作業ができない
  • 仕様変更による後戻りに弱い

プロトタイプモデルとは(早期評価/要求確定)

 プロトタイプモデルは,開発の早い段階でシステムの試作品(プロトタイプ)を利用者に試用・評価してもらい,利用者の要求を満たすように修正を繰り返しながら仕様を確定していく開発モデルです。

※ 「要求分析・定義 ⇒ ソフトウェア要件の設定 ⇒ プロトタイプ作成 ⇒ プロトタイプ試用・評価 ⇒ 仕様を再検討する場合は要求分析・定義へ,確定する場合は内部設計に進む」という感じ

  • 設計者が気づかないことを早期に発見できる
  • スケジュールや規模を予測しやすい
  • 利用者とのスケジュール調整がうまくいかない場合は,開発の遅延が発生することがある
  • 開発者と利用者の意見の食い違いで,開発期間やコストが膨らむことがある

スパイラルモデルとは(繰返しと段階完成)

 スパイラルモデルは,システムを独立性の高い部分(サブシステム)に分割し,部分ごとに一連の開発工程を繰り返しながら徐々に完成度を高めていく開発モデルです。

※ 「サブシステムに分割 ⇒ 要求分析・定義 ⇒ 設計 ⇒ プログラミング ⇒ テスト ⇒ 次のサブシステムを開発する場合は要求分析・定義へ,そうでない場合は運用する」という感じ

  • 仕様の変更に対応しやすい
  • スケジュールや規模を予測しやすい
  • 開発規模を抑え,開発要員を減らすことができる
  • 機能分割できない場合には適さない

インクリメンタルモデルとは(段階的機能追加)

 インクリメンタルモデルは,最初にシステムのコア部分を作成し,その後,段階的に機能を追加していくというような場合に適した開発モデルです。

※ 開発の順番は決められている。複数の部分を並行して開発することもできる

広告

アジャイル開発とは(反復・迅速対応)

 アジャイル開発とは,業務の変化やソフトウェアへの要求の変化などに迅速に対応するための開発手法をいいます。システムを複数の小さな機能に分割し,優先度の高い部分から一連の開発工程(要求分析・定義 ⇒ 設計 ⇒ プログラミング ⇒ テスト)を短い期間(1週間から1カ月程度)で反復(イテレーション)し,段階的・継続的にリリースしていきます。

XP(エクストリームプログラミング)とは

 XPは,アジャイル開発における開発手法や経験則をまとめたものです。開発者が行うべき実践や守るべき原則を4つの領域に12のプラクティスとしてまとめています。

細かいフィードバック
ペアプログラミング2人のプログラマーが,相談やレビューをしながら1つのプログラムを開発する。品質の向上や知識の共有が図れる
計画ゲームストーリーカードに基づいて作業計画を策定する
テスト駆動開発先にテストケースを設計し,そのテストをパスするようにソースコードを書く
オンサイト顧客顧客と密にコミュニケーションをとる
継続的なプロセス
継続的インテグレーションコードの結合とテストを頻繁に繰り返す。問題点を早期に発見できる
リファクタリング既存のコードでも随時改善し,保守性が高く内部構造の分かりやすいコードに書き直す

※ 外部から見た動作は変更しない

※ 改良後は想定外の影響が起きていないかを検証するために回帰テストを行う

小規模リリース不完全でも迅速に完成させ,段階的に改良する
共通理解
コーディング規約コードの書き方などの標準を定め,開発者全員が従うようにする
コードの共同所有すべてのコードを開発者全員が改善,再利用できるようにする
シンプル設計設計をシンプルにする
比喩システムの構造や動作のイメージなどを例えを通じて共有する
プログラマーの厚生
持続可能なペース開発者の労働負荷を一定に保つ(労働時間は週40時間までに制限するべき)

スクラムとは(フレームワークと活動)

 スクラムは,開発チームが仕事に取り組むためのフレームワークです。スプリントと呼ばれる短い期間(1週間から1カ月程度)の開発作業を繰り返し行います。スプリントで実施されるアクティビティは,次のとおりです。

スプリントプランニング取り組むべき作業の中から,スプリントで開発する機能などを決定する
デイリースクラム毎日行う15分程度のミーティング。進行状況や問題点などを共有したり,その日の計画を確認したりする
スプリントレビュースプリントの最後に行うレビュー
スプリントレトロスペクティブスプリントレビュー終了後に行うスプリントの振り返り。次のスプリントの改善計画などを作る

広告

開発プロセスの評価

CMMI(Capability Maturity Model Integration;能力成熟度モデル統合)とは

 CMMIは,組織が業務プロセスなどをどのように管理・改善できているかを5段階の成熟度レベルで評価する評価モデルです。

※ CMM…ソフトウェア開発プロセスの成熟度を評価する。CMMIの元になった手法

CMMIに関する説明画像

その他の関連手法

リバースエンジニアリングとは(モデル化と解析)

 リバースエンジニアリングとは,入手したハードウェアやソフトウェアを分解・解析し,その仕様や構成要素,技術などを取り出す手法をいいます。

まとめ

 今回は,開発プロセス・手法について,代表的な開発モデルとアジャイル手法を中心にシンプルにまとめてみました。ウォーターフォールモデルのように工程を順に進める手法と,スパイラルモデルやインクリメンタルモデルのように繰り返しながら完成度を高める手法,さらにアジャイル開発のように変化に柔軟に対応する手法といった違いを理解することが重要です。

 理解が進んだら,基本情報技術者試験の過去問題等にもチャレンジしてみてください。

広告