こんにちは!今日は、システム開発の手法についてお話しします。たとえば、スマホアプリを作るときや企業のシステムを開発するとき、「どんな順番で、どんなやり方で進めるのか?」がとても重要です。この方法論が「開発手法」と呼ばれるものです。
実は、開発手法には歴史があり、技術の進化や現場のニーズに応じて進化してきました。ウォーターフォール型、アジャイル型、**エクストリームプログラミング(XP)**が代表的ですが、それぞれどんな背景で生まれ、どんな特徴があるのか、図や表を交えて解説します!
1. ウォーターフォール型開発:整然と流れる滝のように
歴史の背景
ウォーターフォール型は、1970年代にアメリカの軍事や航空宇宙のプロジェクトから生まれました。大規模かつ複雑なシステムを作るため、工程を順序立てて明確に管理する必要があったのです。
関連書籍
- 『ソフトウェア工学の基礎』(著:Ian Sommerville)
ソフトウェア開発における基本原則が解説されており、ウォーターフォール型の成り立ちも理解できます。
特徴と流れ
ウォーターフォール型は、上流工程から下流工程へとアウトプットを受け渡していく方式のまさしく滝の流れのように一方向なプロジェクトの進め方です。最も古典的ではありますが、今でも最も一般的なプロジェクトの進め方として有用な場面が多く見られるように思います。
ウォーターフォール型の流れ(図)
要件定義
「どんなシステムが必要か?」をお客様と相談して決定する重要な上流工程です。
システムの機能要件・非機能要件・制約条件・バジェット(予算)など、プロジェクトの土台となる情報を集め、具体的にどのようにプロジェクトを進めていくのかを大まかに決定するフェーズです。
受注者・発注者それぞれが明確な妥結ラインを見いだせていない場合、受け入れテストの段階で納品拒否や最悪訴訟に発展するケースも見られるので、明朗・明確な合意を引き出せると良いでしょう。
想定される成果物:
・システム化対象の業務フローの洗い出し
・機能要件(システムの主なユースケース・シナリオ)の策定
・非機能要件の合意を得る(セキュリティ・ピーク時想定アクセス・サーバー負荷)
・実行計画(ヒト・モノ・カネなどのリソースの洗い出し)
・ステイクホルダーの担当工程の洗い出し
基本設計
エンジニアが要件を実現するための実際のシステムに落とした場合の青写真を描くための工程です。
「クラウドは何を使うのか?(AWS/GCP/Azure…)」「技術選定はどうするのか?」「メール送信はどのサービスを利用するのか?」など、要件定義されたシナリオ・ユースケースに合致する技術を集めて、後続の詳細設計に落とせるように、技術的な全体像を描くフェーズです。
想定される成果物:
・アーキテクチャ設計/システム構成図
・機能一覧
・画面遷移図
・APIドキュメント
詳細設計
個々の画面やユースケースをそれぞれ具体的に実装可能な粒度に落とし込む工程です。
このフェーズでは、システムをどのように実装するのかを詳細に定義します。「画面のレイアウトがどうなるのか?」「クラス設計はどうするのか?」「処理の流れはどのようになるのか?」このような極めて実装のHOWに近い情報を定義していきます。
想定される成果物:
・画面遷移図
・クラス図
・ワイヤーフレーム
・状態遷移図
・データベース物理設計
・バッチ処理詳細定義
・画面設計書
実装
設計に沿って実際にプログラム・コードを作成する工程です。
このフェーズでは、実際にシステムを開発していきます。基本的には設計書や開発バックログチケットなどにそって開発を実施しますが、得てして設計書では考慮しきれていなかった部分が出てきがちですので、ここがウォーターフォールを実施する上でのボトルネックとなることも多いでしょう。
想定される成果物:
ソースコード
実際にデプロイされたシステム
テスト
実装された成果物が、本当に設計および合意された仕様と合致しているのか、システムが予期しないバグによって動作不全を引き起こしていないかを確認するための工程です。
単体テスト・結合テスト・総合テストなど詳細に別れている場面が多いです。
想定される成果物:
テスト仕様書
バグ報告
バグ修正のされたソースコード
運用
実際にシステムを稼働させ、業務を代替させていく段階です。
運用フェーズでは、ここまで開発してきたシステムを実践導入し、実際の業務に組み込んでいきます。場合によっては、初期運用段階で追加の機能開発が必要になることや、利用方法によっては思いもしない挙動が確認されることがあり、運用フェーズもプロジェクトの中でフォローされることが理想です。
想定される成果物:
システム概要/ドキュメント/操作方法
デプロイ済みの動作するシステム
メリットとデメリット
メリット | デメリット |
---|---|
計画が立てやすい(予算やスケジュール管理が簡単) | 柔軟性が低い。要件変更が困難。 |
大規模プロジェクトに向いている | 動くシステムが完成するまで時間がかかる。 |
各フェーズが明確で進捗が追いやすい | 初期のミスが後半の工程で大きな問題に発展する可能性がある |
2. アジャイル型開発:柔軟性とスピードの時代
歴史の背景
1990年代後半、ウォーターフォール型の硬直性が問題視され始めました。特にWebの普及で、短期間で市場に出す必要があるソフトウェアが増えたことがきっかけです。2001年、アジャイル型の考え方を整理した**「アジャイル宣言」**が公開され、現在の基盤が確立しました。
関連書籍
アジャイルソフトウェア開発の奥義 第2版 オブジェクト指向開発の神髄と匠の技
SCRUM BOOT CAMP THE BOOK【増補改訂版】 スクラムチームではじめるアジャイル開発
- 『アジャイルソフトウェア開発の奥義』(著:Alistair Cockburn)
アジャイル開発の原則を詳細に説明。実践の参考になる一冊です。 - 『SCRUM BOOT CAMP THE BOOK』(著:永瀬美穂ほか)
スクラムについて日本語で分かりやすく解説された入門書。
特徴と流れ
アジャイル型は、全体を小さな単位(スプリントやイテレーション)に分けて繰り返す手法です。計画→実装→テスト→フィードバックを短期間で何度も繰り返します。
計画
それぞれのスプリントの開始時に、スプリントバックログを確認し、チームのベロシティ(進捗度合い)に応じたタスク配分を計画します。
開発者・スクラムマスター・プロダクトオーナーといったスクラムに関連している人は所定の会議に参加し、計画への参加が求められます。
実装
テスト
フィードバック
レトロスペクティブとして、プロセスを見直していきます
主に、チームの生産性を向上するための方策を考えます。KEPTのような形でうまくいったこと・うまくいかなかったことの視点でパフォーマンスや作業工程全般の改善案を考えます。
代表的なフレームワーク:スクラム
スクラムはアジャイルの一種で、次のような役割があります。
- プロダクトオーナー: ビジネス的な意思決定を行う人。
- スクラムマスター: チームが効率的に動けるよう支援。
- 開発チーム: 実際にシステムを作るメンバー。
毎日短いミーティング(デイリースクラム)を行い、進捗を確認しながら柔軟に対応します。
メリットとデメリット
メリット | デメリット |
---|---|
要件変更に柔軟に対応できる | 全体像が見えにくい。 |
お客様と密接に連携しながら進められる | チームに高い自律性が求められる。 |
初期段階で成果物が見える | 計画通りに進みにくい場合がある。 |
3. エクストリームプログラミング(XP):高品質への挑戦
歴史の背景
1990年代末、アメリカで開発者ケント・ベックが考案しました。XPはアジャイル型の一種ですが、特にプログラムの品質向上に重点を置いています。
関連書籍
エクストリームプログラミング
テスト駆動開発
- 『エクストリームプログラミング入門』(著:Kent Beck)
XPの提唱者による書籍で、価値観や実践方法を深く理解できます。 - 『テスト駆動開発』(著:Kent Beck)
TDDの具体的な手法と利点を詳しく説明しています。
特徴とプラクティス
XPには独自の開発手法(プラクティス)がいくつもあります。
- ペアプログラミング: 2人1組で1つのコードを書く。
- テスト駆動開発(TDD): まずテストを書いてから、そのテストを満たすコードを実装。
- リファクタリング: 常にコードを改善し続ける。
XPの価値観(図)
ドキュメントを書いて共有するよりも、30分のミーティングでコミュニケーションを取ればプロジェクトが円滑にまわるなら積極的にコミュニケーションを実施するというスタンスです。
エンジニアは時に過度な実装(オーバーエンジニアリング)してしまうことがありますが、大抵の場合後で必要になることは少ないです。あくまで、本当にニーズが出てきた時に実装すればいいということで、必要最低限のシンプルな実装がよいということです。
ソフトウェア開発において、開発された機能の殆どは使われないという調査もあるようです。私たちも、実際にXやYouTubeなどを使うときにもいつも同じ機能をつかっていたりすることはよくあるでしょう。
こういった、本当に市場から求められている機能を迅速に開発するためのフィードバックを頻繁に得るべきだという考え方をXPではとっています。
XPではこれらを実現するための勇気が求められるといえます。
プロジェクトをうまく成り立たせるものはお互いの尊敬です。一方的に力関係が働いてしまうと、社内受託のようになってしまい、また部門間でのコミュニケーションに壁ができてしまいます。尊敬こそがプロジェクトの潤滑油です。
メリットとデメリット
メリット | デメリット |
---|---|
高品質なコードが得られる | 手間とコストがかかる。 |
継続的に改善できる | チーム全体のスキルが高くないと難しい。 |
チームの結束が強まる | 長時間の集中が求められる場合がある。 |
4. 手法の比較
手法 | 特徴 | 得意なプロジェクト | 主な課題 |
---|---|---|---|
ウォーターフォール型 | 計画通りに進む | 大規模・長期プロジェクト | 柔軟性の欠如 |
アジャイル型 | 短期間で成果を出す | 中小規模、要件が不確定なプロジェクト | 計画が曖昧になりがち |
XP | 高品質なコードに特化 | 小規模、技術的に挑戦が多い開発 | コストが高く、スキルが必要 |
5. まとめ:適材適所で選ぶべし!
システム開発の手法は、プロジェクトの目的や規模、チームのスキルに合わせて選ぶべきです。
- 予算やスケジュールが厳しい大規模プロジェクトにはウォーターフォール型。
- 柔軟でスピーディに進めたいならアジャイル型。
- 高品質なコードが必須ならXPが適しています。
一言アドバイス
手法はあくまで道具! 適切に選び、チーム全員が理解して進めることが成功のカギです。
「もっと詳しく知りたい!」や「私のプロジェクトではどれが向いてる?」などあれば、ぜひコメントで教えてくださいね!