今回は、業務システムを構築していくうえでの、システム開発手法をお話したいと思います。
システム開発未経験者の方でも、チームで”何かを作る”作業の手助けになれば幸いです。
初めに、タイトル説明から…
- システム開発手法
業務システムの開発工程を構造化し、計画・制御するための枠組み。 - ウォーターフォール開発
昔からあるシステム開発手法の1つ。 汎用系のシステム構築に多く見られる。 - アジャイル開発
比較的新しいシステム開発手法の1つ。 オープン系のシステム構築に多く見られる。
※汎用系とは、「汎用機」と呼ばれるホストコンピュータを使ってシステム開発すること。
オープン系とは、パソコンベースでシステム開発をすること。
業務システムを構築する為の工程には、主に下記の工程があり、段階を踏むことで業務システムが完成していきます。
- 要件定義
システム開発などのプロジェクトを始める前の段階で、必要な機能や要求をわかりやすくまとめていく工程。 - 基本設計
要件定義において出された要件を機能単位に分割し、それぞれの機能が「何を実現するのか」を決める工程。 - 詳細設計
基本設計で決められた機能の仕様や動作の詳細を定義する工程。 - 開発(プログラミング)
詳細設計を基にプログラムを作成し、コンピュータに実行してほしい作業の指令を作る工程。 - 単体テスト
開発より作成されたプログラムを、構成する比較的小さな単位(ユニット)が個々の機能を正しく果たしているかどうかを検証する工程。 - 結合テスト
複数のプログラムやモジュールを組み合わせて行う動作確認の工程。 - システムテスト
プログラム全体が設計通りにできているか、求められている機能や性能が満たされているかを確認し、システムの品質を確保するための工程。
ここでは、様々なシステム開発手法の中で、主流とされる”ウォーターフォール開発”、”アジャイル開発”について、お話したいと思います。
目次
ウォーターフォール開発とアジャイル開発の違いとは
大きな違いは、その開発工程の進め方にあります。
- ウォーターフォール開発
上から下に各工程を後戻りしない前提で進めていく手法。 - アジャイル開発
機能単位で小さくすばやく開発を繰り返していく手法。
ウォーターフォール開発は、仕様が決まっていて、変更が起きづらいシステムの開発に適しており、
アジャイル開発は、仕様や要件が固まっておらず、変更が起きやすいシステム開発に適しています。
これまでのシステム開発は、何を作るかの全体像を決め、全体を設計してから開発するといウォーターフォール開発が主流でした。
ですが近年、時代の変化のスピードが加速するにつれ、すばやい仕様変更が求められるようになり、アジャイル開発の普及が進むようになりました。
以下は、ウォーターフォール開発とアジャイル開発それぞれの開発手順、メリット・デメリット、最適な開発業務、不向きな開発業務をまとめ、それぞれの違いを説明します。
ウォーターフォール開発とは
ウォーターフォール開発が誕生した背景
1968年、NATO後援の国際会議にてソフトウェア開発を職人芸的な作成方法から工業製品としての作成方法に変える方法として、ウォーターフォール型開発の原形が誕生しました。
ウォーターフォール開発の開発手順
業務システムの構築には、前記の通り、沢山の工程があります。
要件定義で、開発を始める前に、ユーザーの要求を実現するための機能や性能などを定めて、具体的にどのように進めるかを決定し、設計、開発、テストと工程を進めていきます。
すべての工程が完了すると、ようやくシステムが完成できる仕組みです。大きな特徴として前工程が完了しないと次の工程に進めないことがあります。
上流から下流へ「水が流れ落ちる」様に工程が進むことから、ウォーターフォール(滝)開発と呼ばれます。
ウォーターフォール開発のメリット
- 何を作るかが明確で、やるべき事項をあらかじめ決定しているため完成品の品質を確保できる。
- プロジェクト開始時に必要なエンジニアの数や作業量が把握できるため、予算の見積もりやスケジュール管理が容易になる。
- 工程ごとに成果物が定められているため、経験が若いエンジニアも開発に参加しやすく、経験を積みやすい。
ウォーターフォール開発のデメリット
- 最初にユーザーの要求を実現するために、実装する機能や性能などを定めて進めていくため、途中で仕様の見直しをすると大きなコストの増加と納期の遅延が起こる。
- 品質を重視した開発手法となるため、開発期間は長期化しやすく、市場の変化に合わせて新しい機能の提供が求められるシステム開発には向いていない。
ウォーターフォール開発に最適な開発業務
- 仕様変更を前提としないシステム。
※基幹システム構築…等、仕様変更は基本的には起こらない前提で行うシステム構築
ウォーターフォール開発が不向きな開発業務
- 仕様変更が後々起きてしまう可能性があるシステム。
※ユーザビリティを常に意識しなければならないWebサービス
(変化する要件があると仕様変更が頻繁に起こる)
アジャイル開発とは
アジャイル開発が誕生した背景
2001年に、当時軽量のソフトウェア開発を提唱していた17名の技術者やプログラマーが米国ユタ州に集まり、開発手法の重要な部分について統合することを議論しました。
その際に、不具合が発覚した際に戻る工数が多くなってしまうウォーターフォール型のデメリットを克服するためにアジャイル開発が誕生しました。
アジャイル開発の開発手順
アジャイル開発では、チームを組み、要件定義・設計・開発・テスト・リリースといった開発工程を一つひとつの小さな機能単位で繰り返し行い、文字通り素早く(Agile:アジャイル)、ユーザーを巻き込みつつ、機能をブラッシュアップしながらプロダクトを完成させていくという手順を踏みます。
全機能を横断的に進めるウォーターフォール開発と異なり、軽量な開発手法となっています。
アジャイル開発のメリット
- 小さな単位で計画、設計、実装、テストを繰り返して開発を進めるため、段階的に機能をリリースすることができる。
- 計画段階で綿密な仕様を決めずに、開発途中でユーザーとコミュニケーションを取りながらフィードバックを行うことができるため、顧客ニーズを反映したシステム開発ができる。
- 不具合が発生した場合も、1つのイテレーション内の見直しだけで済む。
※イテレーション:開発サイクルの単位を表す
アジャイル開発のデメリット
- 最初の方針を定期的に確認しないと、メリットであるはずの柔軟性が災いして開発の方向性がブレやすくなる。
- 上記の結果、プロジェクトの長期化やコストの増加、最悪の場合はプロジェクトが中止になる可能性もある。
- 方針を変更するたびにスケジュールや進捗を修正しなければならないので高い管理スキルが求められる。
アジャイル開発に最適な開発業務
- ユーザーニーズにマッチした商品・サービスをいち早くリリースしてブラッシュアップしていくような企画・開発が求められるシステム。
- クラウドビジネスの拡大、顧客に継続して利用いただくための製品開発においてはアジャイル開発が最適。
※クラウドビジネス:クラウドサービスを提供対象としたビジネス
アジャイル開発が不向きな開発業務
- 情報を正しく記録するために正確性や安全性が求められるシステム。
- 開発の方向性がブレやすいことやスケジュールや進捗管理がしにくい。
ウォーターフォール開発とアジャイル開発の使い分け
使い分けを考えるうえで重要なキーワードは「仕様変更」です。
- 仕様変更がないシステムであれば、ウォーターフォール開発が向いています。
- 予見性が低く、仕様変更が考えられるシステムであれば、アジャイル開発が向いています。
それぞれのメリットを活かした手法としてハイブリッド開発という開発手法もあります。
両者のハイブリット開発について
- 要件定義や基本設計、総合テストなどウォーターフォール開発が得意とする上流工程や下流工程はウォーターフォール開発で行う。
- 詳細設計や製造、単体テストなど、アジャイル開発が得意とする中流工程はアジャイルで開発する。
という開発手法のことです。
ウォーターフォール開発の、
- 仕様や計画の変更がしにくい。
- 手戻り工数が大きくなり、開発期間が長期化してしまう。
といったデメリットや、
アジャイル開発の、
- 柔軟性があるあまりに、最初の方針を定期的に確認しないと開発の方向性がブレやすい。
- スケジュールや進捗管理がしにくい。
といったデメリットをカバーし、それぞれのメリットを活かした開発を行えるのがハイブリット開発の特徴です。
まとめ
ウォーターフォール開発、アジャイル開発、それぞれの特徴を述べさせて頂きました。
汎用系(ウォーターフォール開発)で育った人達(私自身もそうですが)には、アジャイル開発は一見、容易に見えるかも知れません。
しかし、アジャイル開発は、各要員の高いスキルが要求され、各要員が全工程(設計、開発、テスト等)を理解していないと成功には至らないでしょう。
ウォーターフォール開発で開始したが、”要求仕様が固まらない”、”設計書等の成果物が作成できない”等の事から、アジャイル開発に切り替えるプロジェクトを見てきましたが、これでは「言葉だけのアジャイル開発」になってしまいます。
それぞれのメリット、デメリットをきちんと理解した上で、開発方式を選ぶ必要があると感じます。