迭代開發(Iterative development)是一種產品開發的生命周期模型,它和單次遍歷串行(single-pass sequential)的、文檔驅動的(document-driven)的瀑布模型(waterfall mode)相對應。在迭代模型中,軟件生命周期被分成多個迭代,漸增的開發需求。每個迭代由若干活動組成,如需求分析、設計、編碼和測試,但這些活動不是串行的,而是并行的開展,迭代不是若干個小瀑布的迭加。每次迭代之后將產生一個迭代版本(iteration release),這是一個部分完成的系統,但它是穩定的、完整的和被測試過的。最終的迭代版本是全部完成的產品,可以向市場或者客戶進行發布。因為每次迭代總有新功能的增加,也就是遞增開發(Incremental development),所以,通過迭代使系統增長的方式稱為迭代遞增開發(Iterative and Incremental development,IID),通常簡稱為迭代開發。

IID是所有敏捷方法的核心,但作為一個不同的軟件過程概念,IID比敏捷要早很多。早期的IID的蹤影可見于1930s Walter Shewhart的質量改進PDSA(plan-do-study-act)循環,并在1950s的X15(超音速噴氣式飛機)項目上得到成功應用。雖然這不是一個軟件項目,但這個項目的成員構成了NASA(美國國家航空和宇宙航行局)的Mercury軟件項目(1961~1963)的種子隊伍,這個項目在軟件開發上應用了IID。在1970s和1980s,IID非常普遍,使用IID方法的項目成百上千。

為什么瀑布型后來被廣泛倡導?這始于Winston Royce 1970年的文章《管理大型軟件系統的開發》。雖然論文中,作者建議的也不是單遍流程,而是做“兩遍”,但誤解從此產生。由于瀑布型易于解釋和記憶,管理上也很簡單,所以很快傳播起來。美國軍方1985年6月推出的2167標準采納了瀑布模型,而沒有采納IID模型,一部分原因是受到了1521B標準的影響。很快2167標準成為了其他標準的母版,并且影響了其他政府的標準。雖然美國軍方意識到了問題的所在,在1988年2月發布了親IID的2167A標準,在1994年12月發布了基于IID模型498標準,但其他政府和標準化組織的動作要慢的多。

所以并不是XP和Scrum(XP和Scrum是當前最流行的敏捷開發實踐)創造了迭代方法。早期的IID方法(如Evo和UP)并不具有很強的敏捷性(agility)。雖然可以創造一個非敏捷的迭代模型的開發流程,但實踐中沒有人這么做,所以現在的迭代開發方法都是敏捷的開發方法,只是其敏捷的程度可能有所不同。基于此,敏捷&迭代有時候會連到一起用,有時候會混用。(“迭代”有兩個含義,一個是迭代遞增開發方法IID(又分為古老的方法和現代的方法),一個是迭代生命周期模型,這是容易導致人們迷惑的原因)