基本情報技術者試験など情報処理技術者試験を受験する方にとっては必須の,ソフトウェア開発モデルについてシンプルにまとめています。ウォーターフォールモデル,プロトタイプモデル,スパイラルモデル,インクリメンタルモデル,アジャイル開発(反復(イテレーション),XP(ペアプログラミング,計画ゲーム,テスト駆動開発,オンサイト顧客,継続的インテグレーション,リファクタリング,小規模リリース,コーディング規約,コードの共同所有,シンプル設計,比喩,持続可能なペース),スクラム(スプリント,スプリントプランニング,デイリースクラム,スプリントレビュー,スプリントレトロスペクティブ)),開発プロセスの評価(CMMI(能力成熟度モデル統合),CMM)について説明します。各内容について,確実に理解できるよう努めましょう。
ソフトウェア開発モデル
ウォーターフォールモデル
ウォーターフォールモデルは,ソフトウェアの開発を,上流から下流に向かって滝が流れるように行う開発モデルです。
※ 共通フレームのソフトウェア実装プロセスを,「ソフトウェア要件定義 ⇒ ソフトウェア方式設計 ⇒ ソフトウェア詳細設計 ⇒ ソフトウェア構築 ⇒ ソフトウェア結合テスト ⇒ ソフトウェア適格性確認テスト」というように,順に進める感じ(基本的には,前の工程に戻れない)
- 全体の把握が容易なので,スケジュールや人員,工数などを明確にできる
- 並行作業ができない
- 仕様変更による後戻りに弱い
プロトタイプモデル
プロトタイプモデルは,開発の早い段階でシステムの試作品(プロトタイプ)を利用者に試用・評価してもらい,利用者の要求を満たすように修正を繰り返しながら仕様を確定していく開発モデルです。
※ 「要求分析・定義 ⇒ ソフトウェア要件の設定 ⇒ プロトタイプ作成 ⇒ プロトタイプ試用・評価 ⇒ 仕様を再検討する場合は要求分析・定義へ,確定する場合は内部設計に進む」という感じ
- 設計者が気づかないことを早期に発見できる
- スケジュールや規模を予測しやすい
- 利用者とのスケジュール調整がうまくいかない場合は,開発の遅延が発生することがある
- 開発者と利用者の意見の食い違いで,開発期間やコストが膨らむことがある
スパイラルモデル
スパイラルモデルは,システムを独立性の高い部分(サブシステム)に分割し,部分ごとに一連の開発工程を繰り返しながら徐々に完成度を高めていく開発モデルです。
※ 「サブシステムに分割 ⇒ 要求分析・定義 ⇒ 設計 ⇒ プログラミング ⇒ テスト ⇒ 次のサブシステムを開発する場合は要求分析・定義へ,そうでない場合は運用する」という感じ
- 仕様の変更に対応しやすい
- スケジュールや規模を予測しやすい
- 開発規模を抑え,開発要員を減らすことができる
- 機能分割できない場合には適さない
インクリメンタルモデル
インクリメンタルモデルは,最初にシステムのコア部分を作成し,その後,段階的に機能を追加していくというな場合に適した開発モデルです。
※ 開発の順番は決められている。複数の部分を並行して開発することもできる
アジャイル開発
アジャイル開発とは,業務の変化やソフトウェアへの要求の変化などに迅速に対応するための開発手法をいいます。システムを複数の小さな機能に分割し,優先度の高い部分から一連の開発工程(要求分析・定義 ⇒ 設計 ⇒ プログラミング ⇒ テスト)を短い期間(1週間から1カ月程度)で反復(イテレーション)し,段階的・継続的にリリースしていきます。
XP(エクストリームプログラミング)
XPは,アジャイル開発における開発手法や経験則をまとめたものです。開発者が行うべき実践や守るべき原則を4つの領域に12のプラクティスとしてまとめています。
細かいフィードバック | |
---|---|
ペアプログラミング | 2人のプログラマーが,相談やレビューをしながら1つのプログラムを開発する。品質の向上や知識の共有が図れる |
計画ゲーム | ストーリーカードに基づいて作業計画を策定する |
テスト駆動開発 | 先にテストケースを設計し,そのテストをパスするようにソースコードを書く |
オンサイト顧客 | 顧客と密にコミュニケーションをとる |
継続的なプロセス | |
継続的インテグレーション | コードの結合とテストを頻繁に繰り返す。問題点を早期に発見できる |
リファクタリング | 既存のコードでも随時改善し,保守性が高く内部構造の分かりやすいコードに書き直す ※ 外部から見た動作は変更しない ※ 改良後は想定外の影響が起きていないかを検証するために回帰テストを行う |
小規模リリース | 不完全でも迅速に完成させ,段階的に改良する |
共通理解 | |
コーディング規約 | コードの書き方などの標準を定め,開発者全員が従うようにする |
コードの共同所有 | すべてのコードを開発者全員が改善,再利用できるようにする |
シンプル設計 | 設計をシンプルにする |
比喩 | システムの構造や動作のイメージなどを例えを通じて共有する |
プログラマーの厚生 | |
持続可能なペース | 開発者の労働負荷を一定に保つ(労働時間は週40時間までに制限するべき) |
スクラム
スクラムは,開発チームが仕事に取り組むためのフレームワークです。スプリントと呼ばれる短い期間(1週間から1カ月程度)の開発作業を繰り返し行います。スプリントで実施されるアクティビティは,次のとおりです。
スプリントプランニング | 取り組むべき作業の中から,スプリントで開発する機能などを決定する |
デイリースクラム | 毎日行う15分程度のミーティング。進行状況や問題点などを共有したり,その日の計画を確認したりする |
スプリントレビュー | スプリントの最後に行うレビュー |
スプリントレトロスペクティブ | スプリントレビュー終了後に行うスプリントの振り返り。次のスプリントの改善計画などを作る |
開発プロセスの評価
CMMI(Capability Maturity Model Integration;能力成熟度モデル統合)
CMMIは,組織が業務プロセスなどをどのように管理・改善できているかを5段階の成熟度レベルで評価する評価モデルです。
※ CMM…ソフトウェア開発プロセスの成熟度を評価する。CMMIの元になった手法
まとめ
今回は,ソフトウェア開発モデルついて,シンプルにまとめてみました。基本情報技術者試験や応用情報技術者試験で問われるところですので,しっかり頑張りましょう。