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