システム開発方法論 [プロジェクトマネージャ]
ソフトウェアの開発手法をモデル化したもので、ソフトウェアプロセスモデルともいわれています。ソフトウェアプロセスモデルには様々なモデルが存在していますが、ここでは代表的な八つの開発モデルを紹介していきます。
ウォータフォールモデル
抽象的な設計から、より具体的な設計へと落とし込んでいく開発モデルです。手順は以下の8工程で、各工程にはインプットとアウトプットがあり、アウトプットを成果物といいます。成果物はドキュメントやプログラム、モジュールなどで、これらを次工程のインプットとして引き継いでいきます。
また、次のような特徴があります。
プロトタイプモデル
簡単な試作品(プロトタイプ)を足掛かりに、本格的な製品を作りこんでいくという開発モデルです。新規性が高い場合やユーザ要件が曖昧な場合によく利用されます。ウォータフォールモデルでの開発をベースに部分的にプロトタイプを使うこともあり、ユーザの要件と開発者側の認識相違を早期に発見し易く、開発が本格化する前に修正することができるというメリットがあります。目的を達成した後は、プロトタイプを破棄してしまう場合や、それをベースに開発を進めていく場合があります。
スパイラルモデル
システムの部分単位に要件定義~テストを繰り返しながら(小規模なウォータフォールを繰り返すイメージで)行なわれる開発モデルです。全体を独立性の高いサブシステムに分割し、分割した単位で開発を進めていきます。リスクが最小となるプロセスを選択しながら、少しずつ開発を進めるようなPJに最適で、未経験分野のシステム開発に向いています。
インクリメンタルモデル
最初にシステム全体の要件定義を行ったうえで、要求された機能を幾つかに分割して、設計~テスト段階的なリリースをしていく開発モデルです。性質上、全ての機能が出揃っていない場合でも、最初のリリースからシステムの動作を確認することができます。スパイラルモデルとの違いは、繰り返す工程の範囲で、スパイラルモデルが要件定義も含めて繰り返されるのに対し、インクリメンタルモデルは要件定義は初期段階で全体に対して行い、設計以降を繰り返す点になります。
エボリューショナルモデル(成長モデル)
システムの要素をとりあえず完成させ、段階的に他の要素を追加していく開発モデルです。プロセス管理などのように、どんなモジュールからも呼び出すカーネルを先に開発しておき、完成したカーネルのモジュールを実行環境として利用しながら、シェルを追加していくというOSの開発に向いています。インクリメンタルモデルとの差別化が難しいところですが、一つ一つのサブシステムの完成度を高めていき、システムが成長していくようなイメージです。
ラウンドトリップ
オブジェクト指向開発に於いて、分析と設計、プログラミングを何度か往復しながら、トライアンドエラーで完成させていく開発モデルです。管理人が個人的に業務支援ツールを作成するときは、この開発モデルに近いんだろうと思っています。実際に動かしながら作っていくので、やってる感が高く、バグも発見時に即対応していくので、とりあえず動くものを作るのには最適です。
RAD(Rapid Application Development)
短期間で行うシステム開発モデルです。予め開発期間を数ヶ月間と限定し、少数のグループメンバで常にユーザを巻き込みながら、効率よくシステム開発を行うことができます。生産性向上のため、CASEツールを使用することが多く、短期間で行うためにユーザと一体化したワークショップ(双方向的な学びと創造のスタイル)と呼ばれるものを用います。
また、要件定義・プロトタイプ作成・ユーザ確認(この一連をライフサイクルという)を短期間で繰り返していきます。
また、短期間で開発を行っていくため、次のような特徴があります。
XP(エクストリーム・プログラミング)
10人程度の小チームで、小~中規模のソフトウェア開発に向いた開発モデルです。開発チーム内では、コミュニケーション、シンプルさ、フィードバック、勇気の四つの価値を共有し、経験に基づいた具体的な12~14個の実践項目(プラクティス)を持ちます。代表的なものは次の通りです。
ウォータフォールモデル
抽象的な設計から、より具体的な設計へと落とし込んでいく開発モデルです。手順は以下の8工程で、各工程にはインプットとアウトプットがあり、アウトプットを成果物といいます。成果物はドキュメントやプログラム、モジュールなどで、これらを次工程のインプットとして引き継いでいきます。
- システム分析・要件定義(基本設計書の作成)
- 外部(概要)設計(外部設計書を作成)
- 内部(詳細)設計(内部設計書を作成)
- プログラム作成
- 単体テスト(単体テスト結果報告書など)
- 結合テスト(ソフトウェアテスト?)
- 総合テスト(システムテスト?)
- 運用テスト(受入れテスト)
また、次のような特徴があります。
- 大規模システムの開発に向いている
- 設計ミスは下流工程ほど影響が大きい
プロトタイプモデル
簡単な試作品(プロトタイプ)を足掛かりに、本格的な製品を作りこんでいくという開発モデルです。新規性が高い場合やユーザ要件が曖昧な場合によく利用されます。ウォータフォールモデルでの開発をベースに部分的にプロトタイプを使うこともあり、ユーザの要件と開発者側の認識相違を早期に発見し易く、開発が本格化する前に修正することができるというメリットがあります。目的を達成した後は、プロトタイプを破棄してしまう場合や、それをベースに開発を進めていく場合があります。
スパイラルモデル
システムの部分単位に要件定義~テストを繰り返しながら(小規模なウォータフォールを繰り返すイメージで)行なわれる開発モデルです。全体を独立性の高いサブシステムに分割し、分割した単位で開発を進めていきます。リスクが最小となるプロセスを選択しながら、少しずつ開発を進めるようなPJに最適で、未経験分野のシステム開発に向いています。
インクリメンタルモデル
最初にシステム全体の要件定義を行ったうえで、要求された機能を幾つかに分割して、設計~テスト段階的なリリースをしていく開発モデルです。性質上、全ての機能が出揃っていない場合でも、最初のリリースからシステムの動作を確認することができます。スパイラルモデルとの違いは、繰り返す工程の範囲で、スパイラルモデルが要件定義も含めて繰り返されるのに対し、インクリメンタルモデルは要件定義は初期段階で全体に対して行い、設計以降を繰り返す点になります。
エボリューショナルモデル(成長モデル)
システムの要素をとりあえず完成させ、段階的に他の要素を追加していく開発モデルです。プロセス管理などのように、どんなモジュールからも呼び出すカーネルを先に開発しておき、完成したカーネルのモジュールを実行環境として利用しながら、シェルを追加していくというOSの開発に向いています。インクリメンタルモデルとの差別化が難しいところですが、一つ一つのサブシステムの完成度を高めていき、システムが成長していくようなイメージです。
ラウンドトリップ
オブジェクト指向開発に於いて、分析と設計、プログラミングを何度か往復しながら、トライアンドエラーで完成させていく開発モデルです。管理人が個人的に業務支援ツールを作成するときは、この開発モデルに近いんだろうと思っています。実際に動かしながら作っていくので、やってる感が高く、バグも発見時に即対応していくので、とりあえず動くものを作るのには最適です。
RAD(Rapid Application Development)
短期間で行うシステム開発モデルです。予め開発期間を数ヶ月間と限定し、少数のグループメンバで常にユーザを巻き込みながら、効率よくシステム開発を行うことができます。生産性向上のため、CASEツールを使用することが多く、短期間で行うためにユーザと一体化したワークショップ(双方向的な学びと創造のスタイル)と呼ばれるものを用います。
また、要件定義・プロトタイプ作成・ユーザ確認(この一連をライフサイクルという)を短期間で繰り返していきます。
また、短期間で開発を行っていくため、次のような特徴があります。
- ユーザと一体化した開発
- 設計と製造などでそれぞれのスペシャリストに分けない
- 計画・開発・テストなど工程毎に分けない
XP(エクストリーム・プログラミング)
10人程度の小チームで、小~中規模のソフトウェア開発に向いた開発モデルです。開発チーム内では、コミュニケーション、シンプルさ、フィードバック、勇気の四つの価値を共有し、経験に基づいた具体的な12~14個の実践項目(プラクティス)を持ちます。代表的なものは次の通りです。
- 顧客を含めた全員が開発チームを構成する(チーム全体)
- 余計な複雑さを排除する(シンプルデザイン)
- 1台の開発マシンを二人で共有して常に共同でコードを書く(ペアプログラミング)
- 小規模な改良を頻繁に行う(スモールリリース)
- まずテストを追加し、次にそれを動かすという非常に短いサイクルを繰り返す(テストファスト)
- いつでも、どのペアでも、コードのあらゆる箇所を変更することができる(コードの共有)
情報処理教科書 プロジェクトマネージャ 2014年版 (EXAMPRESS)
- 作者: ITのプロ46
- 出版社/メーカー: 翔泳社
- 発売日: 2013/09/18
- メディア: 単行本(ソフトカバー)