瀑布模型已經(jīng)被實踐證明是不適用于絕大部分軟件開發(fā)項目的,如果說還有項目“可以”采用瀑布模型的話,它也完全可以采用更加先進(jìn)的開發(fā)模型獲得更好的效果。事實上,還是有很多項目采用瀑布模型開發(fā),與此對應(yīng)的事實是,一半的軟件開發(fā)項目都可以稱之為“失敗”。
最近看了本書叫Manage Project with Growth,從理論上解釋了為什么瀑布式模型不適用于軟件開發(fā),以及為什么這樣的模式還在大量被采用。
瀑布模型,也就是先計劃然后收集需求、然后分析、然后設(shè)計、然后編碼、然后測試的開發(fā)模式,這起源于其他類別的工程學(xué),如建筑和機(jī)械生產(chǎn),軟件工程出現(xiàn)的比這些硬件工程晚的多,沒有辦法,一開始只有學(xué)習(xí)其他工程的份,但是到了二十一世紀(jì),還是對這種生產(chǎn)方式執(zhí)迷不悟,就太不應(yīng)該了。
二十世紀(jì)初一個Taylor的美國人對生產(chǎn)過程做了細(xì)致的研究,這哥們出生貴族,他認(rèn)為原有的生產(chǎn)方式很大的弊端是manager不是管理,只是在監(jiān)督,工人完全按照自己的方式生產(chǎn),Taylor認(rèn)為manager有責(zé)任了解工作性質(zhì),指定出嚴(yán)格的process,工人不能自己想怎么干就怎么干,需要按照統(tǒng)一的process來工作,簡而言之,即使manager動腦,工人出力。Taylor的觀點被稱為Talyorism,通過實踐證明這種觀點在生產(chǎn)性的工業(yè)中是正確的,軟件工程的前輩們自然而然的就將Talyorism應(yīng)用到軟件開發(fā)中了。
Talyorsim對可以預(yù)見結(jié)果的生產(chǎn)是適用的,之可惜軟件生產(chǎn)有其不同于其他工業(yè)的特點。軟件生產(chǎn)不是簡單的,如果硬件能夠達(dá)到軟件的復(fù)雜性的話,還需要軟件干什么;軟件生產(chǎn)不是可重復(fù)的,漢堡包可以被用同樣的方式生產(chǎn)無數(shù)次,但是每一次軟件開發(fā)幾乎有不同的問題需要解決......
傳統(tǒng)的工程學(xué)基于這樣的假設(shè),生產(chǎn)過程是線性的,即有這樣的特點
1) 結(jié)果是輸入之和;
2) 小的改變只產(chǎn)生小的影響;
3) 結(jié)果是可以預(yù)測的。
但是軟件開發(fā)不是簡單系統(tǒng),不是線性的。根據(jù)混沌理論,非線性的過程結(jié)果是無法預(yù)料的,因為一點點的輸入改變可能產(chǎn)生巨大的結(jié)果改變(此書作者一定是一個工程師出生,引經(jīng)據(jù)點都是工程師的經(jīng)歷和口吻,提到1986年MIT一個氣象研究者最早發(fā)現(xiàn)混沌現(xiàn)象)。
既然軟件開發(fā)是一個混沌過程,那么一開始所謂周詳?shù)挠媱?,再到周詳?shù)男枨蠓治?,還有周詳?shù)脑O(shè)計文檔,都價值不大,因為一個小小的改變就讓大量的人力投入變成白費勁。還好混沌的過程不是完全失去控制的,有的情況下開始的工作多少還是有點作用,但是某些時候(不幸的是這樣的時候很多)會產(chǎn)生重創(chuàng)。
但是很多軟件項目的manager為什么還是用老式的工程方法來管理項目呢?此書通過心理學(xué)分析,引文manager需要心理上的安慰,通過制定不切實際的計劃,獲得“項目在可控制之中”的心理暗示,如果實際項目沒有按照計劃進(jìn)行,出現(xiàn)延誤現(xiàn)象,可以說“沒有做好計劃“,于是陷入尋找一種指定”好計劃“的陷阱,殊不知,絕大多數(shù)情況下,更本不可能一開始就指定出”好計劃“,隨機(jī)應(yīng)變才是最好的計劃。
項目失敗的時候,manager可以說,我已經(jīng)指定了計劃,只不過計劃沒有切實得到執(zhí)行;如果項目成功哦你了或者勉強(qiáng)成功了,mananger又會說,計劃發(fā)生功效了。似乎這樣的生產(chǎn)方式永遠(yuǎn)能夠存活下去,這種方式能夠存活是因為在一定范圍內(nèi)普遍還是采用這種方式,敵我都有傷亡,如果有一支力量能夠打破這種局面,采用先進(jìn)的方式,獲得更高的生產(chǎn)力,整個行業(yè)的生產(chǎn)方式就有可能得到改變。
至于什么是先進(jìn)的方式,莫衷一是。個人認(rèn)為對絕大多數(shù)軟件開發(fā),迭代式(iterative)開發(fā)是正途。不完全拋棄計劃,但是不要一開始指定死板不切實際的計劃,制定just enough的計劃,然后隨著項目的推進(jìn)不斷的完善計劃。迭代式開發(fā)也不是銀彈,也有陷阱,再說了。
【?發(fā)表評論?0條?】