瀑布式開發與敏捷開發的差異:進行方式、計畫、因應變更、測試與適合的開發比較

瀑布式模型是把需求定義、設計、程式撰寫、測試等流程由上游依序進行,原則上在前一個流程的產出物確定後,才進入下一個流程的開發模型。由於一開始就擬定整體計畫,進度與費用容易管理;但在後面的流程才發現需求錯誤時,返工會很大。敏捷開發是反覆進行數週左右的短期迭代,每次都做出可運作的軟體並採納使用者的意見,配合變化的需求修正計畫之進行方式的總稱,代表性的方法有Scrum與極限編程(XP)。需求明確且不易變動時適合瀑布式,需求容易變動、想及早提供可用功能時適合敏捷。

項目瀑布式模型敏捷開發
流程的進行方式需求定義 → 設計 → 程式撰寫 → 測試,由上游依序各進行1次反覆進行多次包含規劃、設計、實作、測試的短期迭代(Scrum中稱為衝刺)
計畫的擬定方式一開始就決定整體的範圍、時程與費用,依該計畫進行決定大致的方向,每次迭代時從優先順序高者開始修正計畫
對需求變更的因應前一流程的產出物確定後的變更,返工很大。需經過變更管理的程序進行以變更為前提,容易納入下一次迭代的計畫
可運作軟體完成的時期主要在開發的後期。完成測試後一次交付每次迭代都會完成可運作的軟體(Scrum中稱為增量)
測試的時期程式撰寫之後,依序進行單元測試、整合測試、系統測試、驗收測試(以V模型與設計流程對應)每次迭代都進行。多以自動化測試與持續整合,在每次變更時確認
文件每個流程都撰寫需求規格書、設計書等,並以審查確定重視可運作的軟體,文件多半只寫必要的部分
使用者(委託方)的參與方式主要在一開始的需求定義與最後的驗收測試每次迭代都檢視成果並提供意見。Scrum中由產品負責人決定要做之事物的優先順序
進度管理以流程的完成與產出物衡量。容易以工作分解結構(WBS)或甘特圖管理每次迭代以已完成且可運作的功能衡量
適合的開發需求明確且不易變動的開發、需要與硬體一起及早確定規格的開發、需要以合約事先決定範圍與費用的開發需求容易變動的開發,或想一邊開發一邊確認使用者反應的新服務開發

數值為具代表性的大致參考值,會因世代或產品而異。

適用於什麼情況

瀑布式模型
需求從一開始就明確且不易變動時、許多組織參與而各流程都需要核准與文件時,或像嵌入式裝置這樣需要配合硬體規格及早確定時。
敏捷開發
一開始還不清楚做出什麼才對使用者有幫助時、想配合市場與需求的變化調整優先順序時,或想即使一點一點也要及早提供可用功能時。前提是使用者或委託方持續參與開發。

常見問題

敏捷開發不擬定計畫、不寫設計書嗎?

會。敏捷開發並非不做計畫,而是不在一開始就決定所有細節,而在每次迭代時修正計畫的進行方式。在Scrum中,也會在衝刺開始時以衝刺規劃決定該衝刺要做什麼。必要的文件也會撰寫。

什麼是敏捷軟體開發宣言?

是2001年由一群軟體開發者整理、表達敏捷開發理念的宣言。其中揭示四項價值:個人與互動重於流程與工具,可用的軟體重於詳盡的文件,與客戶合作重於合約協商,回應變化重於遵循計畫。其寫法是在承認右側項目也有價值的前提下,更重視左側的項目。

Scrum與敏捷開發有什麼不同?

敏捷開發是以短期迭代、一邊因應變化一邊開發之理念與進行方式的總稱。Scrum是實踐它的代表性框架之一,規定了產品負責人、Scrum Master、開發者3種角色,以及在1個月以內固定長度的衝刺中進行的活動。

瀑布式與敏捷會組合使用嗎?

會。例如先決定整體需求與大致的設計,之後的實作與測試再以短期迭代進行。此外,在瀑布式的做法中,也一直使用以原型確認需求的原型法,以及多次重複流程的螺旋模型等,來減少返工的手法。

理解度檢測

關於軟體開發的瀑布式模型,下列何者是其特徵?

  1. A將需求定義、設計、實作、測試等工程由上游依序進行,原則上在前一工程的產出物確定後才進入下一工程
  2. B反覆進行短期間的迭代,每次都做出可運作的軟體並納入使用者的意見
  3. C先製作原型(prototype)給使用者看,確認需求後再正式開發
查看答案與解析

正確答案:A. 將需求定義、設計、實作、測試等工程由上游依序進行,原則上在前一工程的產出物確定後才進入下一工程

瀑布式模型如同水由上往下流,依需求定義、設計、程式撰寫、測試的順序進行各工程的開發模型。每個工程都以審查確定產出物,因此容易擬定計畫與管理進度;但若在後面的工程才發現需求錯誤,重工的範圍就會很大。它適用於需求明確且不易變動的開發,或必須與硬體一起及早確定規格的開發。透過迭代納入使用者意見是敏捷開發等迭代式開發的特徵,以原型確認需求則是原型模型的特徵。

在軟體開發的 V 模型中,與需求定義工程相對應、確認是否滿足該工程所決定內容的測試為下列何者?

  1. A單元測試
  2. B整合測試
  3. C驗收測試
查看答案與解析

正確答案:C. 驗收測試

V 模型是在左側排列從需求定義往下經設計到實作的工程,在右側排列往上進行的測試工程,並將左右相對應的工程連結起來的開發模型。與需求定義相對應的是驗收測試(運作測試),隨著設計工程越來越細,依序對應系統測試、整合測試、單元測試。中間工程的對應方式依組織或文獻而略有不同,有時也會讓系統測試對應需求定義,但站在委託方、使用者的立場確認需求的驗收測試對應需求定義,這一點是共通的。此模型的重點在於:在對應的設計工程階段,就先擬定測試計畫與合格標準。

在 Scrum 中,負責產品待辦清單(Product Backlog)項目的內容與排序(優先順序),並使產品價值最大化的角色為下列何者?

  1. AScrum Master
  2. B產品負責人(Product Owner)
  3. C開發人員(Developers)
查看答案與解析

正確答案:B. 產品負責人(Product Owner)

Scrum 團隊由產品負責人、Scrum Master、開發人員三種角色組成。產品負責人管理記載應開發項目的產品待辦清單,決定哪些項目先做,並負責使產品的價值最大化。Scrum Master 是在團隊與組織中推廣 Scrum 的思維、協助排除進行障礙的支援角色。開發人員則是在每個衝刺(Sprint)中做出可運作增量(Increment)的人。

  1. 在 Scrum 中,於衝刺(Sprint)結束時,將完成的增量(可運作的產出物)展示給利害關係人並取得回饋,以重新檢視今後方向與產品待辦清單的事件為下列何者?
  2. 在極限程式設計(XP)等敏捷開發中進行的,不改變程式從外部看到的行為,將內部結構整理得容易理解且容易修改的作業為下列何者?
  3. 關於持續整合(CI)的說明,下列何者適當?

前往軟體開發與專案管理的練習題

相關名詞的解說

瀑布式模型
將需求定義、設計、程式撰寫、測試等工程由上游依序進行,原則上在前一工程的產出物確定後才進入下一工程的軟體開發模型。容易管理計畫與進度,但若在後面的工程才發現需求錯誤,重工的範圍會很大。
敏捷開發
反覆進行數週左右的短期迭代,每次都做出可運作的軟體、納入使用者的意見,並配合變化的需求重新檢視計畫之開發方式的總稱。代表性的方法有 Scrum 與極限程式設計(XP)。
Scrum
敏捷開發的代表性框架。以產品負責人、Scrum Master、開發人員這3種角色,以及在1個月以內固定長度的衝刺(Sprint)中進行的 Sprint 規劃、每日 Scrum、Sprint 審查、Sprint 回顧等事件,一點一點地做出可運作的產出物。
V 模型
將從需求定義往下經設計到實作的工程,與從單元測試往上到驗收測試的測試工程排成 V 字形,並讓需求定義與驗收測試、設計與整合測試及系統測試、模組設計與單元測試等左右工程相對應的開發模型。哪個設計工程對應哪種測試,依組織或文獻而略有不同。
測試驅動開發(TDD)
以「先撰寫要開發功能的測試,再撰寫讓測試通過的最少程式碼,然後在維持測試通過的狀態下重構」的短循環反覆推進開發的方法。作為極限程式設計(XP)的實踐而普及。
CI/CD(持續整合與持續交付)
將開發人員的變更頻繁整合到共用分支、每次都進行建置與自動測試的持續整合(CI),與讓測試過的變更保持隨時可發布到正式環境之狀態的持續交付(CD)合起來的稱呼。連發布都自動進行時,稱為持續部署。
工作分解結構(WBS)
將專案要產出的產出物與為此所需的工作,由上層往下層分解成樹狀的結構(Work Breakdown Structure)。最下層的要素稱為工作包,作為估算、排程、指派負責人與管理進度的單位。

相關的比較