反復的かつ漸進的な開発とは、反復的な設計(または反復的な方法)と開発のための漸進的な構築モデルの両方を組み合わせたものです。
この用語の使用はソフトウェア開発で始まり、大規模な開発作業には反復的と漸進的という2つの用語の組み合わせ[ 1 ]が長年にわたり広く提案されてきました。たとえば、1985年のDOD-STD-2167 [ 2 ] では、(セクション4.1.2で)「ソフトウェア開発中は、ソフトウェア開発サイクルの複数の反復が同時に進行している可能性があります。」および「このプロセスは、『進化的取得』または『漸進的構築』アプローチとして説明できます。」ソフトウェアでは、反復と増分の関係は、ソフトウェア開発プロセス全体によって決定されます。


この方法の基本的な考え方は、システムを繰り返しサイクル(反復的)し、一度に小さな部分(増分的)ずつ開発することで、ソフトウェア開発者がシステムの以前の部分やバージョンの開発中に学んだことを活用できるようにすることです。学習はシステムの開発と使用の両方から得られ、可能な限りプロセスの重要なステップは、ソフトウェア要件のサブセットの単純な実装から始まり、進化するバージョンを反復的に強化して、完全なシステムが実装されるまで続きます。各反復で、設計変更が行われ、新しい機能が追加されます。[ 3 ]
手順自体は、初期化ステップ、反復ステップ、およびプロジェクト管理リストで構成されます。初期化ステップでは、システムの基本バージョンを作成します。この初期実装の目標は、ユーザーが反応できる製品を作成することです。問題の主要な側面をサンプリングし、理解しやすく実装しやすいシンプルなソリューションを提供する必要があります。反復プロセスをガイドするために、実行する必要のあるすべてのタスクの記録を含むプロジェクト管理リストが作成されます。これには、実装する新機能や既存ソリューションの再設計領域などの項目が含まれます。管理リストは、分析フェーズの結果として常に改訂されます。
イテレーションでは、再設計と実装が行われます。これは、シンプルで分かりやすく、モジュール化されていることを前提としており、その段階での再設計、またはプロジェクト管理リストに追加される将来のタスクとしての再設計をサポートします。設計の詳細レベルは、イテレーションのアプローチによって規定されるものではありません。軽量なイテレーションプロジェクトでは、コードがシステムの主要なドキュメントソースとなる場合がありますが、重要なイテレーションプロジェクトでは、正式なソフトウェア設計ドキュメントが使用される場合があります。イテレーションの分析は、ユーザーからのフィードバックと利用可能なプログラム分析機能に基づいて行われます。これには、構造、モジュール性、ユーザビリティ、信頼性、効率性、および目標達成度の分析が含まれます。プロジェクト管理リストは、分析結果に基づいて修正されます。

インクリメンタル開発では、システムの機能をインクリメント(部分)に分割します。各インクリメントでは、要件定義から展開まで、複数の分野にわたる作業を通じて機能の一部が提供されます。統一プロセスでは、インクリメント/イテレーションを、構想、詳細化、構築、移行の各フェーズにグループ化します。
各フェーズは1つ以上のイテレーションに分割される場合があり、通常は機能単位ではなく時間単位で区切られます。アーキテクトとアナリストは、開発者やテスターよりも1イテレーション先で作業を進め、作業成果物のバックログを常に満たしておきます。
初期の使用例は、クレイグ・ラーマンとビクター・バシリの論文「反復的および漸進的開発:簡単な歴史」[ 4 ]に多数掲載されており、最も初期のものの1つはNASAの1960年代のマーキュリー計画である。
マーキュリー計画のエンジニアの一部は後にIBM内に新しい部門を設立し、「IIDの大きな成功の初期の顕著な例として、NASAのスペースシャトルソフトウェアの中核、つまり1977年から1980年にかけて構築された主要な航空電子機器ソフトウェアシステムが挙げられます。チームは31か月にわたって17回の反復でIIDを適用し、1回の反復あたり平均約8週間でした。ウォーターフォールライフサイクルを避けた動機は、ソフトウェア開発プロセス中にシャトルプログラムの要件が変更されたことでした。」[ 4 ]
米国国防総省などの一部の組織は、反復的な手法を好んでおり、MIL-STD-498は「進化的な取得とIIDを明確に推奨している」。
2000年に発行された国防総省指令5000.2では、IIDに対する明確な優先順位が示されていた。
完全な機能を実現するには、進化型アプローチと単一ステップ型(ウォーターフォール型)アプローチの2つの方法があります。進化型アプローチが推奨されます。…[この]アプローチでは、ユーザーに提供される最終的な機能は、機能が段階的に増加する2つ以上のブロックに分割されます。…ソフトウェア開発は、以前の開発から得られた学習に基づいてソフトウェアのバージョンを継続的に拡張していく反復的なスパイラル開発プロセスに従う必要があります。段階的に行うことも可能です。
DoDI 5000.02 の最近の改訂では「スパイラル開発」という表現は使われなくなりましたが、ソフトウェア集約型の開発/調達プログラムのベースラインとして一般的なアプローチを推奨しています。[ 5 ]さらに、米国国際開発庁(USAID) も、反復的かつ漸進的な開発アプローチをプログラミングサイクルに採用し、国際開発プロジェクトを設計、監視、評価、学習、適応させています。このプロジェクト管理アプローチは、コラボレーション、学習、適応戦略を取り入れてプログラミングを反復および適応させることに重点を置いています。[ 6 ]
反復的かつ漸進的な開発という用語はソフトウェア業界で生まれたものですが、多くのハードウェアおよび組み込みソフトウェア開発においても、反復的かつ漸進的な手法が用いられています。
この例は多くの産業で見られます。最近、この考え方の変化によって大きく影響を受けた分野の一つが宇宙打ち上げ産業です。宇宙打ち上げを目指す民間企業の設立によってもたらされた、より速く、より広範な技術革新によって、新たな競争要因が大きく作用しています。SpaceX [ 7 ]やRocket Lab [ 8 ]などの企業は、過去 10 年間で商業軌道打ち上げサービスを提供しており、これは 10 年前までは 6 か国しか行っていなかったことです [ 9 ]。技術開発のアプローチ、価格設定、サービス提供における新たな革新、特に2016年以降に初めて可能になった、以前に飛行した (再利用可能な) ブースター段で宇宙へ飛行できる能力は、宇宙へのアクセスを得るためのコストをさらに低下させています。[ 10 ] [ 7 ]
SpaceXは、反復設計手法を宇宙産業に導入する取り組みを明確に表明しており、宇宙船、打ち上げロケット、電子機器および航空電子機器、運用飛行ハードウェア運用にこの技術を使用している。[ 11 ]
業界が変化し始めたことで、他の打ち上げ競合他社も政府機関との長期開発慣行を変え始めている。例えば、米国の大手打ち上げサービスプロバイダーであるユナイテッド・ローンチ・アライアンス(ULA)は、2015年に打ち上げ事業を再構築する10年がかりのプロジェクトを開始した。これは、2つの打ち上げロケットを1つに減らし、反復的かつ漸進的なアプローチを用いて、今後10年間で部分的に再利用可能で、はるかに低コストの打ち上げシステムを実現するというものである。[ 12 ]
私たちは 1957 年という早い時期に、ロサンゼルスでバーニー・ディムズデール [IBM のサービス ビューロー コーポレーション] の指導の下、漸進的開発を行っていました。彼は
ジョン・フォン・ノイマン
の同僚だったので、おそらくそこでそれを学んだか、あるいはごく自然なことだと考えていたのでしょう。ハーブ・ジェイコブス (主に彼ですが、私たち全員が参加しました) がモトローラのために大規模なシミュレーションを開発していたのを覚えています。そこで使われた手法は、私の知る限りでは...'
民間開発の液体燃料ロケットとして初めて軌道到達に成功した。
SpaceXのファルコン9ロケットのような低コストの代替手段が急速に台頭したことで、プロトンロケットの年間打ち上げ回数は8回程度から1回か2回にまで減少した。
しかし SpaceX は常に自らをテクノロジー企業と考えており、NASA との衝突は、コンピュータ開発者、あるいは healthcare.gov の困難な展開を知っている人なら誰でも世代的なものだと認識できるような形をとることが多かった。SpaceX は反復的な設計プロセスに従い、テストに応じてプロトタイプを継続的に改良した。従来の製品管理では、完了まで実行される堅牢な計画が求められるが、これはコスト超過のレシピとなる。
ULAは4月13日、段階的なアプローチを用いてVulcanと呼ばれるロケットを開発すると発表した。その最初のバージョンは基本的に新しい第1段を備えたAtlas 5である。