「アジャイル」と異なる反復型開発「スパイラル」とは
前回の記事で非ウォーターフォール型開発「アジャイル」について取り上げたが、「アジャイル」以外にも非ウォーターフォール型の開発モデルは複数存在する。今回は、その一つである「スパイラル」について紹介する。
スパイラル型開発とは
スパイラルモデルとは、設計、実装、テストの一通りの工程を繰り返してシステムの質を高めていく開発手法の事を指す。ウォーターフォール型開発では、最初から完成品を目指して必要な機能すべてを分析してから次に設計に移る流れであるが、工程の後戻りはできない。しかし、大規模なシステムでは工程を後戻りせざるをえない事がある。そのため、スパイラル型開発ではソフトウェアのプロトタイプ(未完成のものであるが、一通りの動作の流れを確認できる状態のもの)となる品質が高くない状態のものを顧客・ユーザに見せ、ソフトウェアがどのように動くかのイメージをプロジェクトの早い段階から共有し、設計とプロトタイプ作成を繰り返していくことでさらにソフトウェアの品質を上げていくという手法である。
スパイラル型開発のメリット
1.開発スケジュール変更に対応しやすい
ウォーターフォール型開発では、詳細に計画してスケジュール通りに進めることを重視している。それに対してスパイラル型開発では、一気に詳細な計画を立てずに分割した機能単位で計画をしていく。そのため、計画や仕様の変更に柔軟に対応していくことができる。長期的な計画は変更されることが常なので、綿密な計画は役に立たないためである。
2.仕様変更に対応しやすい
ウォーターフォール型開発では、設計、仕様について主に上流SEが決める。設計、仕様が確定した後、PGが仕様書通りにコーディングする流れである。工程ごとに作業が進んでいくため、現時点でまだ必要のないものも作る。それに対してスパイラル型開発では、開発チーム内で分割した機能単位に分けて設計を進めていく。第1フェーズはここまで作る、第2フェーズはここまで作るといったように作業を進めるため、必要な部分に絞って作業を行うことができる。現時点で必要なものだけを作ることができることから、無駄の発生を最小限に抑えることができることに加え、繰り返しの中で新しい機能の追加しながら設計を行うことが可能となるため、仕様変更による再設計の無駄を避けることができる。
3.設計工程の延長によって実装等の後工程に影響が発生しにくい
ウォーターフォール型開発では、プロジェクトの最終局面まで顧客が動くソフトウェアを見ることがないことから、要求とのズレの発生による設計の手戻り工数が大きくなるという欠点がある。それに対してスパイラル型開発では、プロトタイプではあるが、早い段階から顧客・ユーザにソフトウェアを見せ、どのように動くかのイメージを共有できる。挙動のイメージが想定していたものと大きく異なれば、顧客はその旨を開発チームにフィードバックすることができるため、早期にズレを修正し、手戻り工数を最小限に抑えることができる。そのため、設計手戻りによって発生する後工程の期間、コストの削減等の影響を防ぐことができる。
スパイラル型開発のデメリット
上記ではウォーターフォール型開発と比較した場合のスパイラル型開発の利点を挙げてきたが、逆にスパイラル型開発にはどのようなデメリットがあるのかについて以下に挙げる。
1.開発の初期段階でプロジェクトの全体像を把握しづらい
従来のウォーターフォール型開発の場合は、全体の設計を済ませてから実装していくため、開発の初期段階でプロジェクトの全体像を把握しやすい。それに対しスパイラル型開発では、設計とプロトタイプを反復して開発を進めていくため、開発の初期段階でプロジェクト全体を見極めないうちに作業が進んでしまい、プロジェクトの方向性を誤る可能性がある。そのため、初期の想定よりシステムの仕様が肥大化し、コストがかかってしまう可能性があるため、予め反復回数や反復毎の進展を予測・定義を行い、進捗管理を行う必要がある。
2.顧客・ユーザレビューでの問題に目途がつかず期間内に機能が出来上がらない
スパイラル型開発では、期間内になかなか機能が出来上がらないという事態に陥ることが多い。顧客・ユーザの評価毎に様々な問題が浮上した場合、その度にシステムの改変が行わなければならなくなることや、当初の予定よりも仕様が膨らむことにより開発に時間が延びる可能性ある。そのため、最初に予定した機能が終了時になっても完成しない場合が少なくない。その結果、結果的にソフトウェアのリリースの目途が立たなくなることがある。
スパイラル型開発の現状
スパイラル型開発はウォーターフォールと比較して仕様変更やスケジュールの対応のし易さなどメリットがあるが、普及率は未だに低いのが現状である。主な原因は多大なコストであると考えられる。
スパイラル型開発では、設計とプロトタイプの反復を繰り返すことによりソフトウェアの品質を高めていくが、プロトタイプといえども,最終的に必要とされる機能をすべて備えている必要がある。そうしないと完全なレビューが行えず,プロトタイプを作成する意味がなくなってしまう。したがってコストが非常にかかる手法であるため,実際に採用されるケースは少ない。さらにプロジェクトの早い段階から早期に顧客・ユーザとイメージを共有するため、顧客・ユーザの評価毎に様々な問題や要望が浮上していった場合、初期の想定よりシステムの仕様が肥大化し、コストがかかってしまう可能性がある。論理的・合理的に経営層まで理解されれば追加予算を獲得できるが実際はそうはいかない。結局はユーザの要望に合ったものを予算内で作れと言われて終わることが多い。こういった政治的駆け引きの難しさが大きな利点を有しながらもスパイラルモデルが流行らない原因の一つであると考えられる。
アジャイル型開発との違い
スパイラル型開発はアジャイル型開発と同様に反復型開発であることから、アジャイル型開発と混同されることも多い。具体的どういった違いがあるのか以下に記載する。
アジャイル型開発では、開発対象となるシステムを機能毎の小さな単位に分割し、「計画」「要件定義」「設計」「実装」「テスト」といった工程を、分割した機能単位毎に反復的に行い、小さな機能を1つずつ追加開発していくことで、最終的にシステム全体の開発を行う。そのため、顧客・ユーザに見せる段階では機能単位レベルでの品質は常に保証されている。
それに対してスパイラル型開発では、開発対象となるシステムを機能毎の小さな単位に分割する。反復的に行う点ではアジャイル型開発と同様であるが、品質が保証されていない状態であるプロトタイプに顧客・ユーザからの評価を貰い、それに対して工学的分析を行って、設計とプロトタイプの反復を繰り返しながら品質を高めていくのがスパイラル型開発の手法である。
まとめ
スパイラル型開発は、アジャイル型開発との共通点が多く、上記のスパイラル型開発のメリット・デメリットにあるように、アジャイル型開発で問題となった点がスパイラル型開発でも問題となるケースは非常に多い。また、スパイラル型開発をすれば品質の良いソフトウェアが出来るが、設計とプロトタイプの開発サイクルを何度も繰り返すことをあらかじめ取り決めておかないと、当初予定していた期間とコストで収まらなくなってしまう。そのため、コスト、開発サイクルを天秤にかけて、何回開発サイクル を繰り返せばいいかを考えることが重要である。
テクバンの品質ソリューション事業部 特設サイトでは、「ソフトウェアテスト」や「テスト自動化」に関するサービスのご紹介をしております。
「プロダクトやサービスの品質がなかなか上がらない…」
「テスト自動化の導入/運用をしたいがどう進めたらよいか分からない…」
などのお悩みをお持ちの方は、以下のリンクからぜひお気軽にご相談ください。
また、「ソフトウェアテスト」や「テスト自動化」のお役立ち資料も掲載しておりますので、こちらも合わせてご利用ください!