あなたは、ハイブリッド開発という単語は聞いたことがあるが、具体的にどういう意味なのか、詳しく知りたいと考えているところではないでしょうか?
そんなハイブリッド開発について、ウォーターフォール開発やアジャイル開発との違いを含めて本記事では紹介したいと思います。ハイブリッド開発は言葉からもこの2つの開発の組み合わせであることが何となく想像できるかもしれません。2つの良いところ取りで本当にうまく開発できるのか。
本記事を読んでいただき、そんな疑問を解決に導ける材料になれると幸いです。
1.ハイブリッド開発とは?
1章ではハイブリッド開発について解説いたします。
1-1.アジャイル開発×ウォーターフォール開発のこと
ハイブリッド開発とは、アジャイル開発とウォーターフォール開発を組み合わせて開発することです。それぞれのメリットを組み合わせて開発を進めます。
まず、それぞれの開発手法について簡単に紹介します。
<アジャイル開発>
システム開発のサイクルである、「企画」→「設計」→「実装」→「テスト」を機能単位で回すことを呼びます。システム開発は様々な機能の集合体からなっています。その様々な機能を機能単位に分解して開発を進めていくことです。
例えば、1つのシステムが機能A、機能B、機能C、機能Dの集合体から成るとした場合、以下のようなサイクルで開発を進めることになります。
<ウォーターフォール開発>
ウォーターフォール開発とは、システム開発のサイクルである、「企画」→「設計」→「実装」→「テスト」を一気通貫で開発することを指しています。
システム開発は様々な機能の集合体からなっています。その様々な機能をフェーズ単位で組み立てて開発を進めていきます。事前に仕様要件がガッチリと決まっている開発案件であればウォーターフォール開発は最適です。
ハイブリッド開発は、一部分をアジャイル開発、もう一部分をウォーターフォール開発することです。その中でも、上流・下流工程をウォーターフォール開発、中流工程をアジャイル開発で開発していく手法がケースとしては多いです。
1-2.ハイブリッド開発には2種類ある
1-1では、良くあるハイブリッド開発の形を例示しましたが、アジャイル開発を先に取り入れる形も存在しています。ただ、基本的には上図で示したように上流・下流工程がウォーターフォール開発向き、中流工程がアジャイル開発向きと言われています。逆転の発想で進めることはケースとしては少ないように思います。では、それぞれの特徴を見てみましょう。
<ウォーターフォール開発先行型>
開発すべきシステムの形がある程度見えているが、細かい機能の追加や変更、予想外の事態に備えるために詳細設計→実装部分をアジャイル開発にする手法です。前述の通り、ある程度仕様が固まっている状態であれば採用しやすいでしょう。ハイブリッド開発と言ったら、一般的にはこちらを指します。
<アジャイル開発先行型>
一方、アジャイル開発先行型は、序盤から機能を小さい単位で分けて少しずつ開発を進め、形が見えてきたところでウォーターフォール開発に切り替える手法です。システムの形が漠然としているが、形で見えてきたら仕様を固めます。ウォーターフォール開発の方がスケジュール管理しやすいので、このような形を取ることがあります。
1-3.ハイブリッド開発が必要な背景
近年は昔に比べてシステムは無くてはならないものになってきました。
例えば、社内基幹システムであれば社員の使いやすさ(ユーザーの意見)も念頭に置いて開発する必要が出てきました。システムの使い勝手が悪いと社員の不満も爆発するためです。それだけいろんな人がシステムを触るような時代になってきました。という背景もあり、ある程度骨格は決まっているがユーザーの意見も取り入れながら開発することが多くなってきました。
2.ハイブリッド開発のメリットとデメリット
2章ではそんなハイブリッド開発のメリットとデメリットを紹介します。
2-1.ハイブリッド開発のメリット
ある程度仕様が固まっている状態でも、開発工程をアジャイル開発にすることで、「レビュー」の工程を組み込みます。「レビュー」でクライアントの確認を入れることになるので、クライアントが想像していたモノから逸脱するリスクは減るでしょう。「レビュー」は1週間~2週間に1回程度、開発者とクライアントで実施されるケースが多いです。
2-2.ハイブリッド開発のデメリット
当初決めた仕様から大きく逸脱することの変更対応が困難です。逸脱する可能性が高い場合は当初からアジャイル開発を取り入れるようにしましょう。また、チームビルディングに時間が掛かりやすいです。ウォーターフォール開発できるチーム、アジャイル開発できるチーム、それぞれのチームを作る必要が生じます。
3.ハイブリッド開発の適正があるシステム開発
3章では具体的にどんなシステム開発でハイブリッド開発を取り入れると良いか解説いたします。
3-1.仕様がある程度明確だが、詳細が確定していない
大枠が決まっていて、仕様もある程度決まっているが、ユーザーインターフェースのレイアウトのUI/UXが決まっていない等、細かいところが決まっていないときはハイブリッド開発がマッチすると考えられます。
3-2.開発の進捗に合わせて軽微な機能の追加・変更に対応したい
実際に開発を進めていって、追加で欲しくなる機能や少し変更したい機能等が出てきます。ハイブリッド開発を取り入れることでそのような追加や変更にも対応できるようになります。ただ、アジャイル開発のように大元の仕様まで遡ることはしないので、軽微な追加・修正までとなります。
4.ハイブリッド開発を進めるために必要なこと
ハイブリッド開発を進めるために必要なことを4章では紹介します。ここではよく使われるウォーターフォール開発先行型を代表例として紹介したいと思います。
4-1.上流工程はウォーターフォール開発
ハイブリッド開発の上流工程はウォーターフォール開発で進めます。
<要件定義>
最上流工程です。クライアントに開発して欲しい機能や性能を明確にしてもらい、受注者はヒアリングしたことをドキュメント化して、クライアントに認識齟齬がないか確認をしてドキュメントの精度を上げていくことになります。
全ての開発手法において、最も重要なフェーズで一番時間が掛かる部分になります。ここが曖昧なママ進めると、後々苦労するかもしれません。
<基本設計>
要件定義書ができたら、どのような機能を実装しないといけないか、クライアントにヒアリングして基本設計書を作成します。どのようなハードウェアやミドルウェアを組み合わせて機能が実装できるか明確にしていきます。
4-2.中流工程はアジャイル開発
詳細設計からはアジャイル開発での開発になります。
<詳細設計>
詳細設計は、外部というよりは内部用になります。開発者に向けて詳細設計書を作成して、プログラマー目線でドキュメント化していきます。ここからはアジャイル開発になるので、機能ごとに詳細設計書を作成することになります。開発者はこれを見ながら開発を進めていくことになります。
<実装>
詳細設計書を確認しながら機能ごとに実装していきます。
<レビュー>
実装できた段階で画面を見ながら、実際に触ってもらいレビューをもらうことになります。
<単体テスト>
プログラミングして完成した機能がエラー無く動作するかテストするフェーズになります。万が一、エラーが発生した場合は、詳細設計書に記載されているフローの通り解決していくことになります。簡単なテストであれば、自動化すると効率的です。
レビューと単体テストした結果に基づいて不具合や改善点をまとめて詳細設計のフェーズに戻ります。クリアするまでこのサイクルを繰り返していくことになります。
4-3.下流工程はウォーターフォール開発
単体テストまでクリアしたら結合テスト以降はウォーターフォール開発に戻ります。
<結合テスト>
単体テストをクリアしたら、続いて結合テストを実施します。機能同士を連結させ、エラー無く動作するかテストするフェーズになります。
<システムテスト>
結合テストをクリアしたら、続いてシステムテストを実施します。全体を連結させて、エラー無く動作するかテストするフェーズになります。万が一、エラーが発生した場合は、前の結合テストのフェーズに戻り、エラー箇所を確認します。
<受入テスト>
システムテストをクリアしたら、続いて受入テストを実施します。本番環境下でテストするフェーズになります。ここで仕様変更が生じたらエンジニアの人たちは泡を吹くので気を付けましょう。万が一、エラーが発生した場合は、前の総合テストのフェーズに戻り、エラー箇所を確認します。
これらのテストを無事にすべて通過して、ようやくリリースにたどり着きます。
4-4.開発後にやるべきこと
リリース後は、保守・運用のフェーズになります。
<保守・運用>
開発後はシステムの運用・保守を行う必要があります。
実際にシステムを使用し、不具合があった場合は速やかに修正を行います。
またクライアントより新しい機能要求が挙がる可能性もあります。その場合は追加開発などを行ってシステム保守を行います。
5.まとめ
この記事ではハイブリッド開発の紹介をしてきましたが、弊社のオフショア開発ではアジャイル開発を得意としています。
オフショア開発でのアジャイル開発について以下の記事で詳細を記載しています。
具体的にどのように進めているのか、アジャイル開発×オフショア開発について、詳しく知りたい方はどんな些細なことでもお問い合わせください。いつでもご連絡お待ちしております。