2022年3月19日

敏捷式還是瀑布式?其實敏捷式軟體開發不一定比較快

在軟體工程管理的領域中,有兩種常見的開發方法,分別是敏捷式 Agile 和瀑布式 Waterfall。

早年大型專案多半是瀑布式的開發,但近十年來,許多成長型的公司開始採用敏捷,敏捷開發漸漸成為討論的主流。

而說起這兩者的差別,大家最想知道的問題通常是:「使用敏捷開發後,開發的速度會變快嗎?」

而這個問題的答案是不一定。

為什麼不一定?敏捷聽起來不是很快的意思嗎?是有這樣的意思,但也有一些誤解。我們先來簡單帶大家認識一下傳統的瀑布流,再來討論為什麼敏捷的開發速度不一定會比較快。

瀑布式開發

瀑布式開發是經典的開發方式,其實我認為也比較符合一般人的直覺。主要的核心概念就是,一口氣完成整個專案。

一口氣完成整個專案,不是理所當然地嗎?對,所以才說這比較符合普通人的直覺。因為敏捷不是這樣的。

總之,整個瀑布式的開發流程大致上可以分成幾個大階段,也就是經典的軟體開發生命週期(SDLC),以下稍微簡述:

  1. 需求訪談與定義

    需求端提出對於系統的需求後,再歷經完整的需求訪談後會產生出規格文件,也會讓設計師進行介面的設計。

  2. 軟體系統分析設計

    架構師或系統分析師根據前面規劃好的規格文件,進行系統的細部規劃,例如決定要使用什麼技術,程式架構的設計等等。

  3. 功能實作及單元測試

    工程師根據系統分析的結果進行實際的程式撰寫,並測試其撰寫的程式是否正常運作。

  4. 整合測試及驗收

    針對完成的功能進行整體性的測試,並讓需求端或利害關係人進行驗收。

  5. 安裝部屬及維運

    實際將系統部屬到使用環境,並維持系統正常且持續運作。

這樣的流程,應該很符合大眾的邏輯,先有需求,然後規劃,然後設計開發、測試、上線。

而之所以被稱為瀑布式開發,就是因為這五個階段會一氣呵成,就像瀑布一樣一路往下衝,通常不會,也很難回頭調整。

敏捷式開發

敏捷式開發是近十年來,討論度很高的開發方式,有許多組織或團隊已經採用或是正在嘗試這樣的方法。

但我們可以先思考一個問題,那就是敏捷式開發方法為什麼會出現?它的出現解決了怎麼樣的問題?

過去採用傳統瀑布流開發的專案,從開始到結束,走完整流程,可能要歷經一年、兩年,甚至更久,才終於完成、然後上線。

但在網路的時代,軟體的需求變化非常快速,在瀑布式開發難以在中途改變需求跟設計的情況下,如果專案中期或完成後才發現這個產品不是市場所需要的,那就只能認賠,白白浪費已經投入大量的資金跟人力成本。

為了解決這個問題,也縮短產品發想到實際上市的時間,敏捷開發方法出現了。

漸進式思維

敏捷開發的哲學是漸進式 (incremental) 的,為了讓產品早點面對市場,將產品中比較核心的概念先萃取出來,針對這個部分先進行開發,先到市場試水溫,如果沒問題的話再繼續往下開發新功能,如果不對,則即時調整開發方向。

因此原本可能一個需要一年才能開發完成的專案,會被切換成四個為期一季的專案、或是六個為期兩個月的專案、或是十二個為期一個月的專案,甚至更短到兩個星期為一期。

在每一期的開發中,一樣會經歷需求、規劃、實作、測試、驗收的過程,但相對於瀑布式,因為大專案被切分成數個規模較小的專案,所以在每一期中,是有比較機會退回上一個階段再做討論的。

敏捷的每一期結束後,團隊成員會討論決定是否繼續,還是需要調整方向?這麼一來,除了可以避免資源的浪費,也可以讓團隊把資源放在最重要的地方。

敏捷開發甚至經常是沒有開發期限的,會不斷地進行每一期的開發循環,只要專案可以繼續發展下去,直到有人喊停為止。

使用敏捷開發後,開發的速度能變快嗎?

敏捷這兩個字本身很容易讓人誤以為是快速的意思,但其實敏捷比較主要的概念是:彈性

傳統瀑布流是比較沒彈性的,因為在瀑布流的作法之下,一個大專案會一氣呵成,一旦開始後就很難進行需求的變更,就像一台正在高速前進的火車,如果轉彎幅度過大的話是會出軌的。

但是敏捷式開發是漸進式的,不會一次做到位,每完成一點點後,都有調整及討論的空間,讓團隊有辦法修正方向。只是我們必須了解的事情是,具備這樣的可調整性,並不意味著開發速度會變快。

相反地,瀑布流開發說不定還會比較快。如果說今天這個需求是不容易變更的,例如複雜且法律規定嚴謹的金融系統,那麼一開始就進行完整的規劃,接著大家分工合作各司其職,其實運作起來更有效率。

另外說一句比較刺耳的,會覺得敏捷式開發比較快,說不定只是那間公司雇用的工程師程度比較好而已。

小結

敏捷開發適用於需求不明確、需求容易變更的場合,像是還在摸索商業模式可能性的新創公司,敏捷團隊對於團隊成員的參與度跟能力要求也比較高,彼此間的溝通順暢度相當重要;

而瀑布流開發則是用於大型、需求明確或是規範嚴謹的系統,可能會需要跨部門甚至跨公司合作合作,溝通成本相當高,因此難以做到反覆確認。

瀑布流的優缺點探討可以參考這篇

最後,敏捷開發法經常遭人誤解,以為使用敏捷開發速度就會變快,其實不然。這兩種主要的開發方法,皆有其適用的情境,根據專案的性質、大小等,來做出適當的選擇,會是比較好的方式。

延伸

團隊成員竟然是敏捷導入容易失敗的原因?具備敏捷心態是敏捷團隊的必要條件。

參考

【書籍】 軟體工程-軟體開發技術與軟體專案管理

【書籍】 人月神話:軟體專案管理之道