システム開発の流れと開発モデル
【システム開発の手順】
分析 → 設計 → プログラミング → テスト
【代表的な開発モデル】
・ウォータフォールモデル(大規模システムの開発に適する)
・プロトタイプモデル(中・小規模システムに適する)
・スパイラルモデル(仕様変更が多いシステムに適する)
ウォータフォールモデル
①基本設計 → ②外部設計 → ③内部設計 → ④プログラミング設計 → ⑤プログラミング → ⑥テスト → ⑦運用・保守
ウォータフォールモデルでは、原則として各工程を後戻りをすることはありません。つまり、滝(ウォータフォール)の流れのように、逆流することなく進められます。
ウォータフォールモデルの利点と欠点
ウォータフォールモデルは、工程を後戻りすることなく進めるため、開発者とユーザ双方にとって理解がしやすく、スケジュールや資源配分の計画を立てやすくなります。
ウォータフォールモデルは、開発の初期段階(基本設計)でシステムに対する要求を明確にしなければなりませんが、初期段階ではシステム像は曖昧で、明らかにすることは困難です。つまりユーザ要求に不明確さを残しやすいです。また、仕様変更など後戻りが発生した場合、柔軟に対処できないという欠点もあります。
プロトタイピング
システムの曖昧さを取り除くことが、システム開発を成功するカギとなります。そのために試作品(プロトタイプ)を作成してユーザに提供し、その評価をフィードバックする手法が考え出されました。これをプロトタイピングといいます。
プロトタイピングにより、ユーザと開発者の認識のずれ(齟齬)を早期に取り除くことが期待できます。
プロトタイプモデル
プロトタイプモデルは、プロトタイピングを利用した開発手法になります。
要求のプロトタイプ、設計のプロトタイプ、システムのプロトタイプといったように評価と修正を繰り返し行うことによりユーザの満足するシステムを開発します。
スパイラルモデル
スパイラルモデルは、ある開発工程を何回か反復することでシステム開発を進めるモデルです。次のフェーズを繰り返します。
(1)目標・代替案・制約の決定
(2)代替案とリスクの評価
(3)開発とテスト
(4)次フェーズの計画

アジャイル開発
アジャイル(agile)とは直訳すると「素早い」「機敏な」「頭の回転が早い」という意味です。
アジャイル開発(アジャイルソフトウェア開発)は、現在主流になっているシステムやソフトウェアの開発手法の1つで、『計画→設計→実装→テスト』といった開発工程を機能単位の小さいサイクルで繰り返すのが最大の特徴です。
優先度の高い要件から順に開発を進めていき、開発した各機能の集合体として1つの大きなシステムを形成。「プロジェクトに変化はつきもの」という前提で進められるので仕様変更に強く、プロダクトの価値を最大化することに重点を置いた開発手法です。
アジャイル開発のプラクティス
一般のアジャイル開発でよく実践されるプラクティクス(実践規範)としては、次のようなものがあります。
タスクボード | 各タスク(作業)を表すカードをボードに貼り付け、可視化する |
バーンダウンチャート | 実施すべき作業がどのくらい残っているかを線グラフ化する |
ブランニングポーカー | カードゲームのような論理形式で作業規範を見積もる |
ユーザストーリ | 「ユーザーにとって価値があること」(意図・要求)を簡潔にまとめた文章 |
XP(エクストリームプログラミング)
XP(Extreme Programming)は、技術面に重きを置いたプログラマー中心の開発手法。
事前の計画よりも仕様・要件の途中変更への柔軟な対応を重視した手法で、4つの価値(コミュニケーション/シンプル/フィードバック/勇気)をチーム内で共有することが特徴です。
①コミュニケーション
ステークホルダー間のコミュニケーションを重視する
②シンプル
設計は必要最低限に止める
③フィードバック
頻繁にテストを行い、フィードバックを重視する
④勇気
仕様変更や設計変更に立ち向かう勇気を持つ
関連用語
・ペアプログラミング
プログラミングを2人1組で行い、相互にチェックする
・反復
短い期間(イテレーション)ごとにリリースを繰り返す
・テスト駆動
まずテストを作成し、そのテストに合格するように実装を進める
・リファクタリング
バグがなくとも、コードの効率や保守のつどテストを実施する
・継続的インテグラーション
コードの完成・修正のつどテストを実施する
・ふりかえり(レトロスペクティブ)
イテレーションの終わりにそれまでの活動を振り返り、良かった点や改善点などを論じること。
スクラム
スクラム開発は最も有名なアジャイル開発の手法で、チームで効率的に開発を進めることができるフレームワークです。チーム一体となってプロジェクトを遂行して行くことに重点を置くことから、ラグビーのスクラムが語源になっています。
スクラムでは、スプリントと呼ばれる短い周期で機能の実装と評価(ふりかえり)を繰り返しながら、開発をすすめます。開発メンバーは、デイリースクラム(朝会)と呼ばれるミーティングで、毎日、進捗確認や情報共有をします。
スプリント内で行うべきことをスプリントバックログといい管理します。開発全体で実現すべきことはプロダクトバックログといいます。
その他の開発モデル/手法
インクリメンタルモデル
インクリメンタルモデルでは、システム全体を一度に開発するのではなく、機能ごとに分割し(インクリメント)、順次開発・テスト・実装を行う手法です。 各インクリメントは、独立して動作する部分的なシステムであり、随時既存のシステムに追加していきます。
リーンソフトウェア開発
リーンソフトウェア開発とは、トヨタ生産方式を源流とする、ソフトウェア開発における「ムダ・ムリ・ムラ(無駄・無理・斑)」を徹底的に排除し、迅速かつ高品質な製品を開発する手法です。
DepOps
DevOpsとは、ソフトウェア開発(Development)とIT運用(Operations)を連携させ、人、プロセス、テクノロジを統合することで、より迅速かつ安定的に価値ある製品を顧客に提供するための文化、手法、ツール、そしてプラクティスの総称です。
ハッカソン
ハッカソンは、「ハック(hack)」と「マラソン(marathon)」を組み合わせた造語で、エンジニア、デザイナー、プログラマーなどの参加者が短期間で集中的に開発を行い、アイデアや成果を競い合うイベントです。企業が有能な人材や斬新なアイディアなどを求める際の手法として、最近注目を集めています。