變更控制的目的并不是控制變更的發(fā)生,而是對(duì)變更進(jìn)行管理,確保變更有序進(jìn)行。對(duì)于軟件開(kāi)發(fā)項(xiàng)目來(lái)說(shuō),發(fā)生變更的環(huán)節(jié)比較多,因此變更控制顯得格外重要。
IT項(xiàng)目中引起變更的因素有兩個(gè):一是來(lái)自外部的變更要求,如客戶(hù)要求修改工作范圍和需求等;二是開(kāi)發(fā)過(guò)程內(nèi)部的變更要求,如為解決測(cè)試中發(fā)現(xiàn)的一些錯(cuò)誤而修改源碼甚至設(shè)計(jì)。比較而言,最難處理的是來(lái)自外部的需求變更,因?yàn)镮T項(xiàng)目需求變更的概率大,引發(fā)的工作量也大(特別是到項(xiàng)目的后期)。
變更控制不能僅在過(guò)程中靠流程控制,有效的方法是在事前明確定義。事前控制的一種方法是在項(xiàng)目開(kāi)始前明確定義,否則“變化”也無(wú)從談起。工作范圍(以前章節(jié)談過(guò));另一種方法是評(píng)審,特別是對(duì)需求進(jìn)行評(píng)審,這往往是項(xiàng)目成敗的關(guān)鍵。需求評(píng)審的目的不僅是“確認(rèn)”,更重要的是找出不正確的地方并進(jìn)行修改,使其盡量接近“真實(shí)”需求。另外,需求通過(guò)正式評(píng)審后應(yīng)作為重要基線(xiàn),從此之后即開(kāi)始對(duì)需求變更進(jìn)行控制。
雖然可以事前定義好變更控制流程,但在各種壓力下真正“控制”起來(lái)其實(shí)非常困難。下面給大家分析一個(gè)變更失控的項(xiàng)目案例:
王先生剛出任項(xiàng)目經(jīng)理,并承接了一個(gè)中型軟件項(xiàng)目。上任時(shí)公司高層再三叮嚀他一定要尊重客戶(hù),充分滿(mǎn)足客戶(hù)需求。項(xiàng)目開(kāi)始比較順利,但進(jìn)入到后期,客戶(hù)頻繁的需求變更帶來(lái)很多額外工作。王先生動(dòng)員大家加班,保持了項(xiàng)目的正常進(jìn)度,客戶(hù)相當(dāng)滿(mǎn)意。
但需求變更卻越來(lái)越多。為了節(jié)省時(shí)間,客戶(hù)的業(yè)務(wù)人員不再向王先生申請(qǐng)變更,而是直接找程序員商量。程序員疲于應(yīng)付,往往直接改程序而不做任何記錄,很多相關(guān)文檔也忘記修改。很快王先生就發(fā)現(xiàn):需求、設(shè)計(jì)和代碼無(wú)法保持一致,甚至沒(méi)有人能說(shuō)清楚現(xiàn)在系統(tǒng)“到底改成什么樣了”。版本管理也出現(xiàn)了混亂,很多人違反配置管理規(guī)定,直接在測(cè)試環(huán)境中修改和編譯程序。但在進(jìn)度壓力下,他也只能佯裝不知此事。但因頻繁出現(xiàn)“改好的錯(cuò)誤又重新出現(xiàn)”的問(wèn)題,客戶(hù)已經(jīng)明確表示“失去了耐心”。
而這還只是噩夢(mèng)的開(kāi)始。一個(gè)程序員未經(jīng)許可擅自修改了核心模塊,造成系統(tǒng)運(yùn)行異常緩慢,大量應(yīng)用程序超時(shí)退出。雖然最終花費(fèi)了整整3天的時(shí)間解決了這個(gè)問(wèn)題,但客戶(hù)卻投訴了,表示“無(wú)法容忍這種低下的項(xiàng)目管理水平”。更糟糕的是,因?yàn)閾?dān)心系統(tǒng)中還隱含著其他類(lèi)似的錯(cuò)誤,客戶(hù)高層對(duì)項(xiàng)目的質(zhì)量也疑慮重重。
隨后發(fā)生的事情讓王先生更加為難:客戶(hù)的兩個(gè)負(fù)責(zé)人對(duì)界面風(fēng)格的看法不一致,并為此發(fā)生了激烈爭(zhēng)執(zhí)。王先生知道如果發(fā)表意見(jiàn)可能會(huì)得罪其中一方,于是保持了沉默。最終客戶(hù)決定調(diào)整所有界面,王先生只好立刻動(dòng)員大家抓緊時(shí)間修改??珊髞?lái)當(dāng)聽(tīng)說(shuō)因修改界面而造成了項(xiàng)目一周的延誤后,客戶(hù)方原來(lái)發(fā)生爭(zhēng)執(zhí)的兩人這次卻非常一致,同時(shí)氣憤地質(zhì)問(wèn)王先生:“為什么你不早點(diǎn)告訴我們要延期!早知這樣才不會(huì)讓你改呢!”王先生委屈極了,疑惑自己到底錯(cuò)在哪里了。
從上面的案例中可以看到各種變更失控的現(xiàn)象和造成的后果,王先生主要犯了幾個(gè)錯(cuò)誤:
(1) 沒(méi)有明確的授權(quán)。
事先應(yīng)該明確客戶(hù)方有權(quán)提出變更申請(qǐng)的人員和實(shí)施方有權(quán)受理變更的人員,并要控制雙方人數(shù)。這樣做才可以對(duì)變更有整體的控制。絕不能進(jìn)行“私下交易”,而沒(méi)有人能完整地知道到底改了些什么。另外,授權(quán)雙方接口人的好處是可以屏蔽客戶(hù)內(nèi)部的矛盾,如果只有一個(gè)接口人,內(nèi)部尚未達(dá)成一致時(shí)變更是無(wú)法提出來(lái)的。從實(shí)際經(jīng)驗(yàn)看,授權(quán)可以顯著減少變更,特別是那些因內(nèi)部看法不同而導(dǎo)致的反復(fù)變更。
(2) 對(duì)變更沒(méi)有進(jìn)行必要的審核。
并不是所有的變更都要修改,也不是所有變更都要立刻修改,審核的目的就是為了決定是否需要修改和什么時(shí)候修改。比如案例中提到的界面風(fēng)格問(wèn)題,就可以先