制定軟件項(xiàng)目進(jìn)度表有兩種途徑:其一是軟件開發(fā)小組根據(jù)提供軟件產(chǎn)品的后期限從后往前安排時(shí)間;其二是軟件項(xiàng)目開發(fā)組織根據(jù)項(xiàng)目和情況制定軟件項(xiàng)目開發(fā)的初步計(jì)劃和交付軟件產(chǎn)品的日期。多數(shù)軟件開發(fā)組織當(dāng)然希望按照第二種方式安排自己的工作進(jìn)度。然而遺憾的是,大多數(shù)場合遇到的都是比較被動(dòng)的第一種方式。
在軟件項(xiàng)目管理工作中,對(duì)軟件項(xiàng)目的進(jìn)度安排有時(shí)比對(duì)軟件成本的估算要求更高。成本的增加可以通過提高產(chǎn)品定價(jià)或通過大批量銷售得到補(bǔ)償,而項(xiàng)目進(jìn)度安排不當(dāng)會(huì)引起顧客不滿,影響市場銷售。軟件項(xiàng)目的進(jìn)度安排必須妥善處理以下幾個(gè)問題:
1、任務(wù)分配、分配、時(shí)間分配要與工程進(jìn)度相協(xié)調(diào)
在小型軟件開發(fā)項(xiàng)目中,一個(gè)能夠完成從需求分析、設(shè)計(jì)、編碼,到測試的全部工作。隨著軟件項(xiàng)目規(guī)模的擴(kuò)大,人們無法容忍一個(gè)人花十年時(shí)間去完成一個(gè)需要十幾個(gè)人年才能完成的軟件項(xiàng)目。大型軟件的開發(fā)方式必然是程序員們的集體勞動(dòng)。由于軟件開發(fā)是一項(xiàng)復(fù)雜的智力勞動(dòng),在軟件開發(fā)過程中加入新的程序員往往會(huì)對(duì)項(xiàng)目產(chǎn)生不良影響。因?yàn)橐獜牧私膺@個(gè)系統(tǒng)和以前的工作做起,當(dāng)前正在從事這項(xiàng)工作的“專家”不得不停下手中的工作,抽出時(shí)間對(duì)他們進(jìn)行。于是,在一段時(shí)間內(nèi),工作進(jìn)度便拖后了。軟件開發(fā)人數(shù)的增加將導(dǎo)致信息交流路徑和復(fù)雜性的增加,項(xiàng)目進(jìn)行中盲目增加人員可能造成事倍功半的效果。適用于大型項(xiàng)目的Rayleigh-Norden曲線[4]表明,完成軟件項(xiàng)目的成本與時(shí)間的關(guān)系不是線性的,使用較少的人員,在可能的情況下,相對(duì)延長一些工作時(shí)間可以取得較大的經(jīng)濟(jì)效益。然而值得指出的是,程序員小組的正常技術(shù)交流能改進(jìn)軟件質(zhì)量,提高軟件的可維護(hù)性,減少軟件錯(cuò)誤,降低和正確性維護(hù)的開銷。任務(wù)、人力、時(shí)間三者之間存在佳組合,必須引起項(xiàng)目負(fù)責(zé)人的足夠重視。
2、任務(wù)分解與并行化
項(xiàng)目既然需要軟件開發(fā)人員集體的勞動(dòng),需要采取一定的組織形式,將軟件開發(fā)人員組織起來。軟件人員的組織與分工是與軟件項(xiàng)目的任務(wù)分解分不開的。為了縮短工程進(jìn)度,充分發(fā)揮軟件開發(fā)人員的潛力,軟件項(xiàng)目的任務(wù)分解應(yīng)盡力挖掘并行成分,以便軟件施工時(shí)采用并行處理方式。
3、工作量分布
用前幾節(jié)介紹的軟件估算技術(shù)可以估算出軟件開發(fā)各個(gè)階段所需要的工作量,通常用人月或人年表示。軟件在需求分析和設(shè)計(jì)階段占用的工作量達(dá)到總工作量的40%~50%,說明軟件開發(fā)前期的活動(dòng)多么重要。當(dāng)然這也包括分階段開發(fā)原型的開銷。大家熟悉的編碼工作只占全部工作量的10%~20%,而軟件測試和調(diào)試的工作量占到總工作量的30%~40%。這對(duì)于保證軟件產(chǎn)品質(zhì)量是十分必要的,實(shí)時(shí)系統(tǒng)軟件的測試和調(diào)試工作量所占的比例還要大些。
4、工程進(jìn)度安排
軟件項(xiàng)目的工作安排與其他工程項(xiàng)目的進(jìn)度安排十分相似,通常的項(xiàng)目進(jìn)度安排方法和工具稍加改造可以用于軟件項(xiàng)目的進(jìn)度安排。目前,程序評(píng)估與審查技術(shù)(PERT)和關(guān)鍵路徑方法(CPM)是兩種比較常用的項(xiàng)目進(jìn)度安排方法。兩種方法都生成描述項(xiàng)目進(jìn)展?fàn)顟B(tài)的任務(wù)網(wǎng)絡(luò)圖。網(wǎng)絡(luò)圖中按一定的次序列出所有的子任務(wù)和任務(wù)進(jìn)展的里程碑,它表示各子任務(wù)之間的依賴關(guān)系。網(wǎng)絡(luò)圖也是作業(yè)分解結(jié)構(gòu)(WBS)的發(fā)展。20世紀(jì)70年代,作業(yè)分解結(jié)構(gòu)已廣泛應(yīng)用于航天、航空、航海、雷達(dá)、通信、火控系統(tǒng)等領(lǐng)域的基于計(jì)算機(jī)項(xiàng)目的分解,并用以命名各項(xiàng)子任務(wù),這些子任務(wù)不僅可以用網(wǎng)絡(luò)圖的形式表示,還可以用樹型或?qū)哟谓Y(jié)構(gòu)圖表示。PERT和CPM方法為軟件規(guī)劃人員提供了定量描述工具,包括:
①關(guān)鍵路徑。完成關(guān)鍵路徑上所有任務(wù)時(shí)間的總和,是項(xiàng)目開發(fā)所需要的短時(shí)間。
②用統(tǒng)計(jì)模型估算開發(fā)每個(gè)子任務(wù)需要的工作量和時(shí)間。
③計(jì)算各子任務(wù)的早啟動(dòng)時(shí)間和遲啟動(dòng)時(shí)間,即確定啟動(dòng)子任務(wù)的時(shí)間窗口邊界。
某個(gè)子任務(wù)的早啟動(dòng)時(shí)間被定義為該子任務(wù)的所有前導(dǎo)任務(wù)完成的早時(shí)間。反之,某個(gè)子任務(wù)的遲啟動(dòng)時(shí)間被定義為在保證項(xiàng)目按時(shí)完成的前提下,遲啟動(dòng)該子任務(wù)的時(shí)間。與早啟動(dòng)時(shí)間和遲啟動(dòng)時(shí)間對(duì)應(yīng)的概念是早結(jié)束時(shí)間和遲結(jié)束時(shí)間。它們分別是早啟動(dòng)時(shí)間和遲啟動(dòng)時(shí)間與完成該子任務(wù)所需要時(shí)間的和:在任務(wù)進(jìn)度安排過程中,應(yīng)先尋求關(guān)鍵路徑并在關(guān)鍵路徑上安排一定的機(jī)動(dòng)時(shí)間和節(jié)假日,以便應(yīng)付意想不到的困難和問題。采用這些工具可以大大減輕軟件項(xiàng)目管理人員在制定軟件項(xiàng)目進(jìn)度表方面的工作量,并可提高工作質(zhì)量。