迭代型軟件項(xiàng)目開發(fā)計(jì)劃的編制
林鎮(zhèn)鋒(深圳市康拓普電力自動(dòng)化有限公司,PMP)
摘要
項(xiàng)目計(jì)劃的編制對(duì)一個(gè)項(xiàng)目的成功執(zhí)行起著非常重要的作用,而在軟件開發(fā)領(lǐng)域,面對(duì)不確定的用戶需求,瀑布型的項(xiàng)目計(jì)劃往往成了一紙空文,迭代型的項(xiàng)目計(jì)劃又無章可循。本文針對(duì)這種現(xiàn)象提出一種適用于迭代型軟件項(xiàng)目開發(fā)計(jì)劃的編制方法。
引言
我們知道對(duì)于軟件開發(fā)來說,變化的需求才是不變的道理,在制定計(jì)劃時(shí)期望事情的一切都按照計(jì)劃進(jìn)行,是不切實(shí)際的。如果我們拿計(jì)劃來評(píng)估績(jī)效,人們將會(huì)說一切都很好,一切都按部就班,即便已經(jīng)出現(xiàn)了某些危險(xiǎn)的征兆。這幾年在軟件工程領(lǐng)域有越來越多的有識(shí)之士提出,現(xiàn)實(shí)中存在兩種生產(chǎn)方式:可預(yù)測(cè)的生產(chǎn)和不可預(yù)測(cè)的生產(chǎn),而軟件開發(fā)就屬于不可預(yù)測(cè)的生產(chǎn)方式,因此軟件開發(fā)項(xiàng)目不適宜采用可預(yù)測(cè)的計(jì)劃方式。
正文
經(jīng)過幾十年的發(fā)展,軟件工程領(lǐng)域出現(xiàn)了很多種軟件生命周期模型,有瀑布型,迭代型,增量型等等。軟件項(xiàng)目的開發(fā)計(jì)劃的編制要取決于軟件項(xiàng)目的生命周期模型,換句話說,就是瀑布型項(xiàng)目和迭代式項(xiàng)目的開發(fā)計(jì)劃的編制方法并不相同。而瀑布模型來源于建筑行業(yè)、制造行業(yè)等可預(yù)測(cè)的生產(chǎn),本來就無法適應(yīng)需求不穩(wěn)定的軟件項(xiàng)目。因此許多項(xiàng)目盡管在一開始就規(guī)定采用瀑布型,卻在實(shí)踐中慢慢變成了迭代型。許多采用了瀑布型的項(xiàng)目計(jì)劃與現(xiàn)實(shí)差距太大,最終變成了無法落實(shí)的一紙空文。
其實(shí)迭代不是什么新的發(fā)明,其中思想與PDCA的思想也是一致的,都是通過一個(gè)螺旋上升的過程不斷逼近目標(biāo)或者期望。這個(gè)道理很樸素,現(xiàn)實(shí)世界中俯拾皆是,客戶的頭腦中也有這樣的模型,難怪他們動(dòng)輒說:“剛才提到的這些需求,你們先開發(fā)出來,我們?cè)囉靡幌拢词欠窈线m,再來改進(jìn)?!?BR>
又例如我還發(fā)現(xiàn)在編程領(lǐng)域的重構(gòu)就是迭代思想一種體現(xiàn)。所謂重構(gòu)是這樣一個(gè)過程:「在不改變代碼外在行為的前提下,對(duì)代碼做出修改,以改進(jìn)程序的內(nèi)部結(jié)構(gòu)」。重構(gòu)是一種有紀(jì)律的、經(jīng)過訓(xùn)練的、有條不紊的程序整理方法,可以將整理過程中不小心引入錯(cuò)誤的機(jī)率降到最低。本質(zhì)上說,重構(gòu)就是「在代碼寫好之后改進(jìn)它的設(shè)計(jì)」。我們可以打個(gè)比方,重構(gòu)就是編碼過程的迭代,通過一次次重構(gòu)的迭代達(dá)到更佳的設(shè)計(jì),每次重構(gòu)的迭代都保證了程序的正常運(yùn)行,這意味著每次迭代的結(jié)果都是可以觀察到的。
圖一
瀑布和迭代
瀑布型的軟件開發(fā)進(jìn)度計(jì)劃一般按照階段劃分,即分為策劃與估計(jì),需求調(diào)研與分析,概要設(shè)計(jì),詳細(xì)設(shè)計(jì),編碼與單元測(cè)試,集成測(cè)試,系統(tǒng)測(cè)試,實(shí)施交付,項(xiàng)目收尾。
迭代型的開發(fā)進(jìn)度計(jì)劃可以分為兩個(gè)層次,第一個(gè)層次是總體的計(jì)劃,可能歷時(shí)幾年或者幾個(gè)月,如XP的發(fā)布計(jì)劃,RUP的階段計(jì)劃。第二個(gè)層次是短期的詳細(xì)計(jì)劃,歷時(shí)從一周到2、3個(gè)月不等??傮w計(jì)劃劃分整個(gè)項(xiàng)目的工作到各個(gè)迭代周期中,并不關(guān)注執(zhí)行細(xì)節(jié),時(shí)間跨度較大可能會(huì)因?yàn)樾枨蟮淖兓抻啠欢唐谟?jì)劃是一個(gè)迭代周期的計(jì)劃,關(guān)注執(zhí)行細(xì)節(jié),將具體的任務(wù)落實(shí)到人,并且由于時(shí)間跨度小相對(duì)穩(wěn)定。
制定總體計(jì)劃
項(xiàng)目總是存在約束條件,例如客戶方要求某年某月完成系統(tǒng)一個(gè)版本,這個(gè)版本應(yīng)該包含若干功能?;蛘哌@個(gè)項(xiàng)目與類似項(xiàng)目相比,可以得到一個(gè)大致的完成日期。這些都是制定總體計(jì)劃時(shí)關(guān)鍵信息。
總體計(jì)劃為團(tuán)隊(duì)的工作指出了方向。在總體計(jì)劃中主要關(guān)注里程碑,每個(gè)里程碑要完成的目標(biāo)或者功能項(xiàng)。因此總體計(jì)劃也可以被稱為里程碑計(jì)劃。不要為各個(gè)活動(dòng)設(shè)定一個(gè)完成時(shí)間點(diǎn),例如設(shè)定詳細(xì)設(shè)計(jì)的完成日期,編碼與單元測(cè)試的完成日期都是沒有意義的。因?yàn)檫@些活動(dòng)在整個(gè)項(xiàng)目進(jìn)行中都是不斷重復(fù)進(jìn)行的,即便進(jìn)行了系統(tǒng)測(cè)試也回過來進(jìn)行詳細(xì)設(shè)計(jì)和編碼。
有了總的完成日期和各個(gè)