天天看點

《靈活疊代開發:管理者指南》—第1章1.1節軟體是新産品開發

本節書摘來自異步社群《靈活疊代開發:管理者指南》一書中的第1章1.1節軟體是新産品開發,作者【美】craig larman,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

第1章 概述

靈活疊代開發:管理者指南

邏輯是一種用信心面對錯誤的藝術。

{--:}—約瑟夫·伍德·克魯奇(joseph wood krutch)

概述

本書中有哪些内容?

預見性開發與新産品開發。

本書介紹了疊代(iterative)和靈活(agile)方法,你能從中獲得哪些有用的知識呢?

第一,你會知道4種著名方法的關鍵實踐:scrum、極限程式設計(extreme programming,xp)、統一過程(unified process,up)和evo(一種早期的疊代方法)。本書提供了一些軟體開發方法的思路和實踐的總結,對于使用開發方法的管理人員、開發人員以及學生來說,每一章都會有一些有用的内容。(scrum參見第7章,極限程式設計參見第8章,統一過程參見第9章,evo參見第10章)。

第二,因為本書能夠提供很好的幫助,是以可以縮短你的學習曲線。闡述這4種方法的章節都具有相同的結構,便于快速了解與比較。此外,還有一章faq(見第12章)和一章常見的實踐技巧(見第11章)。

第三,你将了解到靈活與疊代開發的動機(見第5章)和證據(見第6章)。有些組織重視疊代開發的價值,但是有一些組織則不以為然。如果你需要為一次疊代項目實驗找到充分的理由,那麼你會發現本書提供了疊代開發的關鍵原因、研究成果、大型項目示例、标準團體認可、商業案例,以及著名程式設計思想領袖們幾十年以來的推動曆程。研究成果與曆史闡述部分也适合學習軟體工程方法的學生進行研讀。

注意

靈活方法是疊代方法的子集,本書涵蓋這兩種類型。

閱讀本書可以不按章節順序,本書的大緻内容是下面這樣的。

第1章:介紹,以及預見性開發和創新性開發。

第2章:基本疊代和漸進方法實踐。

第3章:總結靈活原則和方法。

第4章:通過一個靈活項目的故事,闡述一些理念。

第5~6章:疊代和靈活方法的動機和證據,對某些人非常有用。

第7~10章:總結scrum、xp、up和evo等4種方法。注意,實踐中可能會混合使用。

第11章:技巧,擴充了某些方法實踐,還加入了其他方法實踐。

第12章:常問的問題(faq)。

最後,人終究勝于過程。每一種介紹過程的書籍可能都包括這樣的标準免責聲明:

過程的影響隻是第二位的1。隻有人、人的情感、品質和溝通能力才更有影響力。

有些問題真的很難,有些人真的很固執。方法不是救世主。

1引自靈活方法學家alistair cockburn。

1.1 軟體是新産品開發

考慮在一個裝配線上生産行動電話:在這種情況下,可以毫無二義性地定義規範和構造步驟。在生産一批電話之後,做一些相關的測量,就能夠可靠地估算和規劃未來電話的生産過程。

下面考慮另一個問題:建造一個定制的房屋。業主想要采用新型的環保材料和方法,但他們的實際需求并不明确,當他們看到房屋、成本以及工期時,還會逐漸改變或者澄清他們的決策。

開發領域的一種極端的情況類似于生産電話,在整個過程中幾乎沒有創新或變動,隻是大量地重複創造或者近乎雷同地創造—批量制造(mass manufacturing)或者預見性制造(predictable manufacturing)。

另一種極端的情況是變化頻率很快、創新性很強。在這種情況下,沒有以前的類似案例可供借鑒,無法進行估算或者計劃。這就屬于新産品開發(new product development)或者創新項目(inventive project)的範疇。

這兩個領域極端的開發過程、管理理念、計劃和估算模型是截然不同的(參見表1-1)。

《靈活疊代開發:管理者指南》—第1章1.1節軟體是新産品開發

當然,關鍵在于:

大多數軟體都不是預見性制造或者批量制造,軟體開發屬于新産品開發範疇。

此外,許多工程采用新的帶有bug的技術,這加劇了新穎性和不可預見性。同時還要注意,對于沒有經驗的人來說,它就是新産品,即使以前也有過這樣的産品。

對于軟體而言,預見性制造是錯誤的範例,是以基于這方面的實踐和理念沒有什麼指導意義。

這種錯誤的比對往往是許多難題的症結所在,而這些問題總是與運作軟體項目的傳統方式有關。

“瀑布型”的生命周期、大的前期規格說明、估算、推測性計劃等适用于預見性制造,卻無法套用在軟體項目上,因為後者屬于發明性質的、高度可變的、高度創新的工作。

拒絕采用那些“可靠的”前期規格說明的理由[cp86]包括:

客戶或者使用者不确定他們想要什麼;

他們很難陳述所有的需求和所知道的;

他們想要的許多細節隻能在開發過程中逐漸展現;

細節對于他們來講過于複雜;

當他們看到産品開發時,會改變想法;

外部壓力(例如,競争者的産品或者服務)導緻需求變更或者增強。

更深入的認識—建構軟體是複雜的新産品開發,修改頻度很高,不是預見性制造—這就是靈活和疊代方法動機的核心。

當然,另一種采用疊代和靈活方法的動力是提高競争力,成為競争中的赢家。疊代和靈活方法促進了靈活性和機動性—競争優勢。在agile competitors and virtual organizations[gnp97]中,作者檢讨了批量制造模型(mass manufacturing model)的局限性,以及靈活必要性:

靈活……意味着成功與收益:成功是指在競争的對手中脫穎而出;收益是指在許多公司望而生畏的競争風暴中,獲得利潤、市場佔有率和客戶。

本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。