70年代基本上一個軟件在項目規模上比較小,一兩個人基本可以勝任一個軟件的開發,這樣的人被稱為hero,認為是英雄主導著一個軟件項目的進度,但隨著業界對軟件依賴的增加,軟件在規模、復雜度上都有較大的增加,一兩個人已經無法勝任工作的需要,而且,開發人員一旦離開公司,那么整個項目甚至整個公司可能會陷入癱瘓的地步。所以,在80年代初,軟件公司開始重視軟件開發的項目管理,把其他行業成功的軟件項目管理經驗開始引入軟件開發領域。
美國PMI,Project Management Institute(項目管理研究所)在軟件工程項目管理方面起到了很大的推動作用,每年發行一本PM book。微軟在軟件開發管理上也是基本參照傳統的軟件開發模式來做的。
除企業對軟件開發項目管理的推動作用外,學術界也推出了有關的管理模式,如CMM(軟件成熟度模型)。CMM在部分軟件企業得到了推崇,但是并不是所有的軟件企業都采用CMM,微軟本身就沒有采用。盡管如此,微軟本身的管理方法與CMM也有異曲同工的地方。
業界也在推行自己的管理模式,RUP,Six Sigma,ISO,etc.關鍵是軟件開發管理中的關鍵的部份要掌握好。
傳統模式在美國很多公司都使用過,對這些開發模式不能盲目崇拜。
--------------------------------------------------------------------------------------------------
傳統的和其他的管理模式受到挑戰
被認為太死板和官僚
效率高低受到質疑
太重規章制度項被認為是開發的枷鎖
在執行起來太過于繁重
可能違背需要智力高度集中的軟件開發工程管理的特性
因此這幾年來開始有人唱反調
軟件開發具有自己的特點
*********************************************************
傳統的項目管理模式
根據PMI觀點,傳統的項目管理通常具有幾個固定的階段:
第一項目啟動階段,第二計劃階段,項目的規模、項目的需求、項目的估算,第三階段設計規范書(軟件開發的藍圖),第四項目時間表(schedule)。樣品的試開發。第五執行階段,編程開發。同時fix bugs.第六控制階段,對發現的錯誤進行回車重新開發。第七結束階段。
啟動、計劃、執行、控制、結束
這五個階段的傳統的項目管理模式在業界使用的比較普遍。
靈活性模式的概念和實踐
1、輕型的計劃(Light Weight Planning)
信奉改變(Embrace Change):從整個的項目的開始起就期望計劃、需求、和設計都會改變。
整個開發過程有客戶的經常參與,甚至邀請客戶來到開發團隊的工作處,對正在進行開發的半成品使用、審核、提意見。
客戶直接參加項目的計劃的修改
整個開發計劃是個不斷更新的過程
輕型計劃的象征:沒有事先的計劃
加州大學俄凡分校在校園的時候,他們只蓋了大樓,鋪了墓地,卻不建筑人走路的路邊人行道。第二年,建校的人回來,在草地上由人們走出來的路徑上,修建了讓走路的人行道。Perl語言就是這樣一類的語言,它并沒有事先全設定好的規則,Perl語言就是那些在墓地上由人們走出來的人行道。
計劃是一個連續性的過程,而不是一個一次性的過程。
2、經常性的發行(Rrequent Releases)
短期的重復開發周期
采取所謂的“時間盒”方法--將預定的周期鎖定為一個發行周期
保持產品接近發行的狀態
好處是:
第一為團隊提供一種完成任務的快樂和成就感;
第二給用戶提供了在開發早期進行回饋的機會。
3、簡化的設計(Simple Design)
先對那些已經確定了的功能進行設計
使用YAGNI(You aren't going to need it)
意識到任何多余的功能,一旦加入到軟件產品中,會增加修改和維護的費用。
好處是便于返車重新設計和開發。每次改動都可能會影響其他部分的功能組件。
4、以測試為驅動的開發(Testing Driven Development--TDD)
編寫產品的程序前先寫測試的程序
單元測試(Unit Test)應該全部自動化
單元測試的運行應該成為開發的日常工作
好處是:
第一保證測試部分能保質保量完成
第二以這種方法寫出的程序質量較高
5、重新組合(Refactoring)
重組:在不改變功能和行為的前提下,對軟件的內部結構為更容易理解和更方便修改而進行設計和編程上的改動。
采用漸進式的設計方式來逐漸完善程序
好處是:
第一幫助推動漸進式的設計方式,使得軟件的避免一次性做完,卻又帶有費用昂貴的必需的改動
第二常常重組,再加上利用TDD,改動的費用會降低
何時進行重組?
Martin Fowler:
當你發現你必須在一個軟件程序里加一個新的功能、但現有的程序的結構卻無法讓你奶方便地加入這個新的功能的時候,你應該先重新組合現有的程序,使得經能夠讓你方便地加任何新的功能,然后再加入你想加的新功能。
6、連續性的整合(Continuous Integration)
將開發團隊多人開發的各功能組件進行整合,最后生成完整的軟件系統或產品,應該是一個經常進行的、連續不斷的過程。
每天或每幾個小時進行總匯編和產品建造(Daily Build)
好處:
第一幫助開發團隊及時發現Build Breaker并采取糾正措施
第二對任何由于設計差錯無法完善地與整個系統進行整合的功能組件能及時進行設計改動
7、及時文件編輯(Just-In-Time Documentation)
將產品或系統的使用手冊、維護條例、使用參考等等一系列文檔根據各功能開發的進展進行編輯
趁著概念新鮮明確,將它們寫入文檔
好處是:
第一避免編輯多余的不必要的文檔或不必要的內容
第二,但是也要注意不要將文檔工作放到最后,而造成文件內容缺乏或遺漏。
軟件開發管理模式的簡單介紹和比較
文章來源于領測軟件測試網 http://www.kjueaiud.com/