摘要:本文先介紹了使用傳統項目管理技術管理軟件開發項目的方法,然后介紹了使用敏捷項目管理的初步實踐,通過兩者比較,提出了使用敏捷項目管理進行軟件開發的方法。
關鍵詞:敏捷開發、極限編程、XP、項目管理
一、使用傳統項目管理技術管理軟件開發項目的方法
按照《人月神話》的說法,軟件開發是個焦油坑,書店里關于軟件開發管理的書籍林良滿目,各個軟件開發組織也在嘗試和應用不同的軟件開發管理辦法,希望尋找到“軟件開發的銀彈”。
在軟件開發管理中,引入項目管理的辦法,已經得到廣大軟件開發管理人員的一致認同,但對于具體實施何種項目管理辦法,各個軟件開發組織都有不同的答案,更多的迷茫,因為引入的項目管理辦法不能從根本上解決軟件開發項目面臨的進度拖后、費用超支等問題,軟件開發的銀彈到底在哪里?
以下是筆者對國內軟件開發組織不同項目管理成熟度的歸納和總結,大概可以分如下幾類;1)小作坊、混沌形的,這樣的組織還處在接單求生存的階段,管理者還根本沒有項目的意識,以滿足客戶需求、定制開發和回款為第一要務;2)嘗試按照項目管理的思路與方法管理軟件開發項目,但發現推行困難,不得要領,目前很多中小型的軟件開發組織都處于這個階段;3)大型的軟件企業,已經通過CMM|ISO認證、有足夠的資源做保障,實行規范的項目管理做法,如一些軟件外包工廠。
本文主要講述處于第二個層次的軟件開發組織的項目管理問題。軟件開發項目管理涉及非常多的內容,從軟件開發本身的業務出發,有需求管理、變更控制、配置管理、測試管理、系統分析與設計等;從項目管理的知識領域角度,有范圍管理、時間管理、溝通管理、人力資源管理等內容。
按照傳統的經典項目管理方法,通過一定的項目管理模板與IT工具,總結多個項目的經驗,筆者總結有如下經典步驟來完成項目管理的計劃編制與進度控制過程:
計劃編制的經典步驟:
①建立企業和項目資源庫:這個是進行項目管理的基礎工作。
②設置項目日歷、資源日歷。
③設置項目的主要里程碑點。
④在WBS(工作包)下列出工作清單(Task,Activity)。工作分解結構(WBS)和作業是進行項目范圍管理的好途徑。
⑤對每個Task估計工期。
⑥連接每個Task間的邏輯關系(SS,FS,FS,FF,延時)。
⑦加載完成每個Task所需要的資源和資源數量。
⑧進度計算后,看開完工里程碑是否符合合同或業主要求,看資源負荷是否過大。
⑨看進度計劃是否需要調整。
⑩調整的方法為:壓縮關鍵路徑上Task的工期,多投入資源以縮短工期,分解較長工期的作業。
⑾看調整后的進度計劃是否合適。合適的話,則把第一份計劃,保存為目標計劃(Baseline)。
⑿張榜發布第一版本計劃,通知項目干系人。
進度控制的經典步驟:
①確定進度報告的周期,以周計還是以月計。
②下發第一個報告周期內所有成員的Task清單(例如內容、質量要求、時間要求)。
③第一個報告周期結束時,各個成員反饋自己負責的Task實際進展(例如實際開始時間、實際結束時間、完成百分比、尚需工期、本期的資源消耗數量、工作結果的提交)
④匯總各個成員的進度報告,產生實際進度計劃。
⑤把實際進度計劃與目標計劃(Baseline)做對比,監控主要的里程碑點是否還符合業主或合同的要求,周例會上針對每個員工的任務完成情況作對比。
⑥如果不符合,則調整計劃,并存儲為新的目標計劃。
⑦下發下一報告周期項目成員工作內容清單(Task)。
⑧……循環往復,直到項目結束。
計劃編制的其他技巧:
①團隊成員依據責任分工,協同完成計劃編制工作。
②編制多層計劃(適用于大型的項目,項目群管理)。
③編制滾動計劃(適用于工期很長的項目)。
上述方法對于任何傳統項目或IT實施服務項目,都是適用的,而且可以達到很好的項目,也是實施項目管理的必由之路。筆者對于本事業部所有的IT服務項目,都是使用這個方法進行管理,達到了項目進度控制的目的。
但對于軟件開發活動,由于其與傳統項目如工程建設項目的顯著區別,在應用上述方法與步驟時,往往達不到理想的效果,很多軟件開發組織在推行這套管理思路與方法的時候,也遇到了很多困難。主要表現在:
1)傳統項目的時間估算可能存在歷史或經驗數據,而軟件開發的活動工期估算卻是因人而異;
2)軟件開發包含大量創新性活動,而這些創新性活動很難確定合適的工期;
3)經典的計劃編制方法中,強調作業間的依賴性(邏輯關系),以作業間邏輯關系來推算和安排項目進度,而在實際的軟件開發活動中,意義不大;
4)新型的軟件開發方法,如迭代開發,很難單個作業(功能點)反饋進度,因為某個功能開發在周期內是反復進行的,進度反饋可操作性差。
5)我們需要反思這樣一個問題:“項目管理如何為一個項目增加價值”,因為很多開發人員把項目管理活動如工時填報、進度反饋做為額外的負擔,認為項目管理師日常行政管理活動,不為項目增加價值;