四、軟件開(kāi)發(fā)項(xiàng)目計(jì)劃的常見(jiàn)問(wèn)題分析
有人說(shuō):“做項(xiàng)目計(jì)劃,如同給一個(gè)待出生的嬰兒寫(xiě)傳記那樣困難。如果允許項(xiàng)目結(jié)束后再寫(xiě)計(jì)劃,那輕松多了,并且可以 地準(zhǔn)確”。確實(shí)是這樣,為什么項(xiàng)目的計(jì)劃這么難呢?
在軟件開(kāi)發(fā)項(xiàng)目實(shí)踐中,關(guān)于計(jì)劃主要有以下一些常見(jiàn)問(wèn)題:
1、項(xiàng)目目標(biāo)不夠清晰明確
這實(shí)際上在軟件開(kāi)發(fā)項(xiàng)目中是一個(gè)普遍的現(xiàn)象。缺乏詳細(xì)的工作目標(biāo)以便在項(xiàng)目結(jié)束時(shí)驗(yàn)證是否取得了預(yù)期的成果。對(duì)于軟件開(kāi)發(fā)項(xiàng)目而言,在進(jìn)度、任務(wù)范圍、質(zhì)量、成本等項(xiàng)目目標(biāo)中,進(jìn)度是容易清晰明確的,也是用戶為關(guān)心的。不管是獻(xiàn)禮工程或一把手工程,進(jìn)度都是項(xiàng)目目標(biāo)諸多方面中先制定的,并且能夠很快在招標(biāo)文件或合同中訂下來(lái)。當(dāng)然,這種進(jìn)度的合理性未必是經(jīng)得起考驗(yàn)的。而統(tǒng)計(jì)數(shù)字事實(shí)說(shuō)明,大部分的軟件開(kāi)發(fā)項(xiàng)目的進(jìn)度是不合理的。無(wú)論是急于求成的客戶還是缺乏軟件開(kāi)發(fā)經(jīng)驗(yàn)和軟件工程知識(shí)的項(xiàng)目經(jīng)理都存在對(duì)進(jìn)度過(guò)于樂(lè)觀的問(wèn)題,其原因較多是因?yàn)樗麄儗?duì)項(xiàng)目范圍的認(rèn)識(shí)是在一種比較粗的顆粒度基礎(chǔ)之上。大多數(shù)的軟件開(kāi)發(fā)項(xiàng)目在開(kāi)始階段可能存在項(xiàng)目范圍不夠清晰的問(wèn)題,需要經(jīng)過(guò)需求調(diào)研之后才可以清晰。質(zhì)量目標(biāo)是不容易清晰和明確的,這主要是因?yàn)檐浖到y(tǒng)的質(zhì)量量化比較難。由于質(zhì)量目標(biāo)的不確定性,它在進(jìn)度、成本、范圍等目標(biāo)的壓力之下很容易被忽視。這似乎說(shuō)明了,質(zhì)量目標(biāo)是這些目標(biāo)中不重要的一個(gè),有可能被犧牲的一個(gè)。成本目標(biāo)可能用戶方面不太關(guān)心,確實(shí)軟件開(kāi)發(fā)組織為關(guān)心的,軟件開(kāi)發(fā)的成本主要是人力資源的成本,其他的設(shè)備基礎(chǔ)設(shè)施都是可以重復(fù)使用的。所以,在進(jìn)度、任務(wù)范圍、質(zhì)量明確以后,人力資源的成本可以經(jīng)過(guò)經(jīng)驗(yàn)等方式估算出來(lái)。
2、對(duì)編寫(xiě)計(jì)劃的過(guò)程在思想意識(shí)上重視不夠
實(shí)際上是對(duì)項(xiàng)目計(jì)劃的重要性認(rèn)識(shí)還不夠充分,雖然大家都知道知道“作計(jì)劃”很重要,是項(xiàng)目成功的關(guān)鍵,但又認(rèn)為計(jì)劃是寫(xiě)文檔,也許是因?yàn)橐恍┤松朴趯?xiě)程序但不善于寫(xiě)文檔,所以有些項(xiàng)目經(jīng)理會(huì)認(rèn)為寫(xiě)文檔是一種走形式,或?qū)Ψ爆嵉奈臋n有一種排斥心理。其實(shí)不能把計(jì)劃當(dāng)成僅僅是寫(xiě)一個(gè)計(jì)劃文檔的問(wèn)題,而是要通過(guò)編寫(xiě)計(jì)劃文檔的過(guò)程,理清項(xiàng)目目標(biāo)、項(xiàng)目范圍、項(xiàng)目所需資源、制定合理的項(xiàng)目進(jìn)度、制定完成項(xiàng)目所需的各種約定(溝通、變更)、制定應(yīng)對(duì)風(fēng)險(xiǎn)的有效對(duì)策。對(duì)于這一問(wèn)題的解決,首先應(yīng)當(dāng)提高項(xiàng)目經(jīng)理的計(jì)劃意識(shí),采用項(xiàng)目計(jì)劃制定相關(guān)各種知識(shí)、技術(shù)、工具,加強(qiáng)對(duì)開(kāi)發(fā)計(jì)劃、階段計(jì)劃的有效性進(jìn)行事前事后的評(píng)估與評(píng)審工作。
3、制訂計(jì)劃時(shí)沒(méi)有進(jìn)行充分的溝通
項(xiàng)目經(jīng)理制訂計(jì)劃時(shí)沒(méi)有和項(xiàng)目主要成員和主要項(xiàng)目干系人共同討論協(xié)商,達(dá)成共識(shí);或者終計(jì)劃沒(méi)有發(fā)布到所有相關(guān)的項(xiàng)目干系人,取得他們的認(rèn)同、理解,重要的是對(duì)計(jì)劃中共同責(zé)任、目標(biāo)和各自責(zé)任、目標(biāo)的承諾;由此而造成的后果是:項(xiàng)目計(jì)劃缺乏項(xiàng)目組成員的支持,沒(méi)有成為項(xiàng)目組成員的共識(shí),沒(méi)有使每個(gè)項(xiàng)目組成員努力實(shí)現(xiàn)在項(xiàng)目計(jì)劃中所作的承諾。因此項(xiàng)目經(jīng)理制訂計(jì)劃時(shí)首先要分清或確定主要項(xiàng)目成員和主要項(xiàng)目干系人,然后與他們進(jìn)行充分的溝通協(xié)商,使項(xiàng)目計(jì)劃是一個(gè)大家都認(rèn)同的,形成共識(shí)的有效文件。
一種更為嚴(yán)重的情況是遺漏了重要的項(xiàng)目干系人。在制定計(jì)劃時(shí)沒(méi)有考慮到所有項(xiàng)目干系人,特別是那些對(duì)于項(xiàng)目的成敗有重要影響的項(xiàng)目干系人,在制定計(jì)劃時(shí)要和他們進(jìn)行充分溝通取得對(duì)項(xiàng)目進(jìn)度、資源、驗(yàn)收標(biāo)準(zhǔn)等計(jì)劃的共識(shí)和保證。
4、對(duì)總體計(jì)劃、階段計(jì)劃的作用認(rèn)識(shí)不足
項(xiàng)目經(jīng)理認(rèn)為計(jì)劃不如變化快,項(xiàng)目中也有很多不確定的因素,做計(jì)劃是走過(guò)場(chǎng),因此制定總體計(jì)劃時(shí)比較隨意,不少事情沒(méi)有仔細(xì)考慮,或者是有一種等一下再說(shuō)的想法;階段計(jì)劃因工作忙等理由經(jīng)常拖延,造成計(jì)劃與控制管理脫節(jié),無(wú)法進(jìn)行有效的進(jìn)度控制管理。那些號(hào)稱“所見(jiàn)即所得”的OA,邊做、邊提需求、邊改、邊完善的“四邊形”的所謂“快速”軟件開(kāi)發(fā)也可能竟然是本企業(yè)周期延續(xù)長(zhǎng)的項(xiàng)目,因?yàn)闊o(wú)休無(wú)止的需求變更而永無(wú)止境。從項(xiàng)目的計(jì)劃階段來(lái)看,因?yàn)檫呑、邊提需求、邊改、邊完善,所以他們首先?duì)計(jì)劃沒(méi)有信心,基本上計(jì)劃對(duì)他們來(lái)說(shuō)只是應(yīng)付,久而久之,對(duì)計(jì)劃方面的鍛煉意識(shí)不如其他項(xiàng)目,甚至養(yǎng)成不容易改掉的習(xí)慣。
5、任務(wù)和職責(zé)劃分不夠清晰或有遺漏
目標(biāo)、任務(wù)的分解不夠清晰、工作有遺漏,沒(méi)有確定項(xiàng)目組成員職責(zé)的差別,如程序員的職責(zé)都籠統(tǒng)地寫(xiě)成“編碼”。其主要原因是一些新任的項(xiàng)目經(jīng)理是由程序員提拔起來(lái)的,不太熟悉軟件工程各階段工作職責(zé)中某些具體工作的分配,無(wú)法按任務(wù)分清每個(gè)人的責(zé)任。如應(yīng)該分清楚需求人員該做什么、設(shè)計(jì)人員該做什么、編碼人員該做什么、測(cè)試人員該做什么。責(zé)任似乎很容易分清,但大家卻經(jīng)常聽(tīng)到“這是需求的事”、“這是設(shè)計(jì)的事”這樣的爭(zhēng)論,嚴(yán)重的造成項(xiàng)目組內(nèi)部的糾紛扯皮。是因?yàn)檫@些新的項(xiàng)目經(jīng)理對(duì)一項(xiàng)具體工作,如界面設(shè)計(jì)、數(shù)據(jù)規(guī)格等應(yīng)該由需求分析人員來(lái)做,還是設(shè)計(jì)人員來(lái)做分不清楚,還有是做到什么程度算概要設(shè)計(jì),什么程度算詳細(xì)設(shè)計(jì),職責(zé)上也要搞清楚。建議新上任的項(xiàng)目經(jīng)理應(yīng)該多學(xué)習(xí)軟件工程的相關(guān)知識(shí)。
6、項(xiàng)目任務(wù)分工或進(jìn)度計(jì)劃表的顆粒度太大
常見(jiàn)的現(xiàn)象有對(duì)任務(wù)持續(xù)時(shí)間進(jìn)行不切實(shí)際的估計(jì);或未考慮到任務(wù)的相互依賴關(guān)系而造成遺漏工作。其主要原因是軟件工程的分析與設(shè)計(jì)經(jīng)驗(yàn)的不足,無(wú)法細(xì)化系統(tǒng)需求,并從需求推導(dǎo)出設(shè)計(jì),根據(jù)設(shè)計(jì)去分配任務(wù)。根據(jù)細(xì)化的需求也可以分配任務(wù),但是由于需求中的功能點(diǎn)和設(shè)計(jì)中的模塊往往不是一一對(duì)應(yīng)的,如一個(gè)需求功能點(diǎn)需要一系列的模塊來(lái)實(shí)現(xiàn),多個(gè)需求功能點(diǎn)也可以共用同一組模塊加上不同的設(shè)置參數(shù)來(lái)實(shí)現(xiàn)。所以根據(jù)設(shè)計(jì)來(lái)確定程序代碼階段的任務(wù)分配比較合理。需求是整個(gè)項(xiàng)目的基礎(chǔ)、需求的清晰顆粒度對(duì)后面的工作及工作計(jì)劃的準(zhǔn)確性至關(guān)重要。項(xiàng)目計(jì)劃的準(zhǔn)確度是以一開(kāi)始以需求(包括設(shè)計(jì)層需求)為基礎(chǔ)得出的工作結(jié)構(gòu)分解的完整性、清晰性為基礎(chǔ)的。如果沒(méi)有這個(gè)基礎(chǔ),項(xiàng)目計(jì)劃不可能做得很準(zhǔn)確。在無(wú)法準(zhǔn)確制定項(xiàng)目計(jì)劃的情況下,對(duì)其風(fēng)險(xiǎn)要足夠重視,并制定出具體可行的對(duì)策。如果對(duì)整體的需求或工作結(jié)構(gòu)分解無(wú)法一次完整的清晰,應(yīng)當(dāng)把它先分解為幾個(gè)大塊,分塊進(jìn)行,已經(jīng)清晰的先制定本塊(階段)計(jì)劃,下一環(huán)節(jié)的工作也可以開(kāi)始(分塊)進(jìn)行。再項(xiàng)目開(kāi)始階段往往還沒(méi)有得到詳細(xì)的需求成果,因此根據(jù)項(xiàng)目計(jì)劃漸進(jìn)明晰的特點(diǎn),在需求調(diào)研分析階段過(guò)后,需求成果清晰是,應(yīng)當(dāng)及時(shí)細(xì)化項(xiàng)目計(jì)劃,在概要設(shè)計(jì)完成時(shí),要更進(jìn)一步地細(xì)化后面編碼測(cè)試階段的詳細(xì)計(jì)劃。
7、與上一種情況相反的是計(jì)劃表的顆粒度太細(xì)
是說(shuō)軟件開(kāi)發(fā)的工作雖然可以被劃分為若干階段,但是這些階段不應(yīng)該是整齊劃一的。雖然每個(gè)環(huán)節(jié)階段成果是下一環(huán)節(jié)階段成果的基礎(chǔ),但即使在階段成果通過(guò)評(píng)審之后下一環(huán)節(jié)對(duì)上一環(huán)節(jié)也應(yīng)當(dāng)隨時(shí)進(jìn)行檢查驗(yàn)證,上一環(huán)節(jié)根據(jù)下一環(huán)節(jié)的驗(yàn)證檢查情況進(jìn)行調(diào)整。在上一環(huán)節(jié)沒(méi)有得出可以供下一環(huán)節(jié)開(kāi)展工作的基本成果時(shí),下一階段的投入可能是浪費(fèi)時(shí)間。“按任務(wù)分清每個(gè)人的責(zé)任”并不是說(shuō)上一環(huán)節(jié)的人員在初次完成本環(huán)節(jié)后交給下一環(huán)節(jié)了事了,而應(yīng)該繼續(xù)與下一環(huán)節(jié)的人員共同作戰(zhàn)、相互影響、不斷進(jìn)行同步完善,及時(shí)地解釋和調(diào)整上一階段的成果。如果上一階段與下一階段的負(fù)責(zé)人是同一個(gè)人,沒(méi)有這方面的問(wèn)題,但是在實(shí)際工作匯報(bào)時(shí)要考慮到在某個(gè)階段可能進(jìn)行著前一個(gè)階段或后一個(gè)階段的工作。
8、資源需求沒(méi)有經(jīng)過(guò)較為周密的估算
軟件開(kāi)發(fā)項(xiàng)目的資源因?yàn)橐驗(yàn)槠渥陨淼奶攸c(diǎn)和受到各種因素的影響,很難做到“精確”。盡管如此,還是應(yīng)該盡可能地做到“周密”。需要重點(diǎn)考慮的軟件開(kāi)發(fā)項(xiàng)目的資源主要是人力資源,沒(méi)有盡可能足夠詳細(xì)精確地估計(jì)整個(gè)項(xiàng)目的每個(gè)階段所需要的人時(shí)(或人日、人月)數(shù);這是因?yàn)閷?duì)軟件開(kāi)發(fā)的工作量沒(méi)有進(jìn)行精確的估算。為了估算軟件開(kāi)發(fā)項(xiàng)目的工作量和完成期限,首先需要根據(jù)較為完整的需求來(lái)預(yù)測(cè)軟件規(guī)模。度量軟件規(guī)模的常用方法有、代碼行估算法和功能點(diǎn)估算法。這兩種方法各有優(yōu)缺點(diǎn),應(yīng)該根據(jù)軟件項(xiàng)目的特點(diǎn)選擇適用的軟件規(guī)模度量方法。根據(jù)項(xiàng)目的規(guī)?梢怨浪愠鐾瓿身(xiàng)目所需的工作量,我們可以使用一種或多種技術(shù)進(jìn)行估算,這些技術(shù)主要分為兩大類:分解和經(jīng)驗(yàn)建模。分解技術(shù)需要?jiǎng)澐殖鲋饕能浖δ,接著估算?shí)現(xiàn)每一個(gè)功能所需的程序規(guī)模或人月數(shù)。經(jīng)驗(yàn)技術(shù)的使用是根據(jù)經(jīng)驗(yàn)導(dǎo)出的公式來(lái)預(yù)測(cè)工作量和時(shí)間?梢允褂米詣(dòng)工具來(lái)實(shí)現(xiàn)某一特定的經(jīng)驗(yàn)?zāi)P。精確的項(xiàng)目估算一般至少會(huì)用到上述技術(shù)中的兩種。通過(guò)比較和協(xié)調(diào)使用不同技術(shù)導(dǎo)出的估算值,我們可能得到更精確的估算。軟件項(xiàng)目估算永遠(yuǎn)不會(huì)是一門(mén)精確的科學(xué),但將良好的歷史數(shù)據(jù)與系統(tǒng)化的技術(shù)結(jié)合起來(lái)能夠提高估算的精確度。
9、遺漏重要的假設(shè)或約束條件
如一些政府機(jī)關(guān)的管理信息系統(tǒng)軟件開(kāi)發(fā)項(xiàng)目隱含的需求是必須遵守一系列的和行業(yè)標(biāo)準(zhǔn),但由于沒(méi)有考慮到這些要求,致使項(xiàng)目計(jì)劃失敗,開(kāi)發(fā)出某些功能、性能或數(shù)據(jù)不符合和行業(yè)標(biāo)準(zhǔn)的軟件,造成返工。所以應(yīng)當(dāng)盡可能地將將任何設(shè)想和約束編入文檔。做項(xiàng)目計(jì)劃時(shí)應(yīng)該盡可能地把假設(shè)條件和約束條件考慮清楚,這些假設(shè)和約束可以是樂(lè)觀的、悲觀的或者是可能的估計(jì)。例如,可以假設(shè)能夠及時(shí)獲得應(yīng)用程序服務(wù)器的新發(fā)行版,或可以得到熟悉項(xiàng)目正在采用的技術(shù)和技巧的開(kāi)發(fā)人員;還可以假設(shè),項(xiàng)目能在一些約束下工作,如影響計(jì)劃的強(qiáng)制截止期限或資源限制等等。應(yīng)該把這些假設(shè)和約束條件編入計(jì)劃文檔中,在項(xiàng)目的實(shí)施過(guò)程中,當(dāng)項(xiàng)目計(jì)劃需要細(xì)化和調(diào)整時(shí),應(yīng)該考慮到這些約束條件,而不是以一種“無(wú)限資源”的方式做計(jì)劃。一般來(lái)說(shuō),假設(shè)、約束和風(fēng)險(xiǎn)的區(qū)別是:假設(shè)、約束是一些比較明顯、明確、已經(jīng)發(fā)生或肯定會(huì)發(fā)生的情況,而風(fēng)險(xiǎn)這是不一定會(huì)發(fā)生的,具有不確定性。
10、項(xiàng)目計(jì)劃沒(méi)有突出重點(diǎn)
軟件開(kāi)發(fā)涉及到方方面面的工作,有些是主要的,有些是次要的,項(xiàng)目計(jì)劃應(yīng)當(dāng)反映有價(jià)值的工作任務(wù)、環(huán)境條件。項(xiàng)目計(jì)劃不能寫(xiě)成一個(gè)大雜燴,也不能寫(xiě)成一個(gè)包羅萬(wàn)象的百科全書(shū)。在項(xiàng)目計(jì)劃中要簡(jiǎn)潔精確地反映對(duì)項(xiàng)目有價(jià)值的事情、任務(wù)和活動(dòng),避免羅嗦。項(xiàng)目管理的理論方法、成功的項(xiàng)目管理經(jīng)驗(yàn)都是在實(shí)施項(xiàng)目時(shí)應(yīng)該參考的。但是,每個(gè)項(xiàng)目是特殊的,具有“性”的,一次需要為每個(gè)項(xiàng)目做專門(mén)的計(jì)劃,選擇適合的項(xiàng)目,適合的團(tuán)隊(duì)的方式和方法。
11、忽視次要工作任務(wù)對(duì)項(xiàng)目的影響
軟件開(kāi)發(fā)項(xiàng)目計(jì)劃不僅要安排需求分析、概要設(shè)計(jì)、必要時(shí)的詳細(xì)設(shè)計(jì)、系統(tǒng)實(shí)施和測(cè)試與維護(hù)等實(shí)際的重要工作,而且還應(yīng)該安排項(xiàng)目中的支持性輔助活動(dòng),這些支持性輔助活動(dòng)雖然不能成為關(guān)鍵活動(dòng),但是它們卻對(duì)項(xiàng)目的進(jìn)展又作重大的影響。這些輔助活動(dòng)包括:體系結(jié)構(gòu)定義、文檔評(píng)審后文檔編寫(xiě)的返工甚至是需求調(diào)研的返工,測(cè)試之后的編碼返工、系統(tǒng)交付、與軟件復(fù)用相關(guān)的活動(dòng)、項(xiàng)目組內(nèi)溝通交流、休假和法定假日、培訓(xùn)和教育、團(tuán)隊(duì)成員的生活(如飲食、住宿、交通等)、項(xiàng)目規(guī)劃、人員管理等管理活動(dòng)、會(huì)議和回復(fù)電子郵件,等等。做項(xiàng)目計(jì)劃時(shí)應(yīng)當(dāng)盡可能完整地列出這些影響項(xiàng)目的活動(dòng),或者按照固定的模板進(jìn)行計(jì)劃的制訂,免得遺漏必要的計(jì)劃內(nèi)容。有時(shí)候,小的疏忽會(huì)帶來(lái)大的問(wèn)題,次要矛盾會(huì)成為或引發(fā)主要矛盾。例如,加班安排不當(dāng),會(huì)引起員工的厭倦甚至離職,造成軟件項(xiàng)目的人力資源問(wèn)題,從而影響項(xiàng)目的進(jìn)度,甚至導(dǎo)致項(xiàng)目失敗。
12、工作任務(wù)的分解不便于人員分工
在確定了系統(tǒng)構(gòu)架之前應(yīng)該考慮在編寫(xiě)文檔的同時(shí)是否有些其他基礎(chǔ)性的工作可以先做,如是否在需求分析的同時(shí)進(jìn)行部分的系統(tǒng)概要設(shè)計(jì);是否可以先進(jìn)性技術(shù)預(yù)研,環(huán)境架構(gòu)搭建、后臺(tái)數(shù)據(jù)庫(kù)框架搭建、軟件系統(tǒng)框架搭建等等。迭代法使得在上一階段的部分任務(wù)完成后,下一階段的對(duì)應(yīng)工作可以投入進(jìn)行。在確定了系統(tǒng)構(gòu)架之前之后工作任務(wù)的分解都要考慮模塊編碼獨(dú)立性、開(kāi)發(fā)編碼工作的負(fù)載均衡、編碼進(jìn)度安排優(yōu)化、預(yù)防人員流動(dòng)(如生病、其他更緊急的任務(wù)、離職等)對(duì)開(kāi)發(fā)的影響:一個(gè)好的項(xiàng)目計(jì)劃同時(shí)應(yīng)有助于減少項(xiàng)目組的壓力和緊張,提高軟件開(kāi)發(fā)效率。
13、不了解項(xiàng)目成員的工作能力
項(xiàng)目成員的工作能力多種多樣,需要根據(jù)項(xiàng)目的崗位角色來(lái)分配。如軟件開(kāi)發(fā)的編碼人員至少需要編寫(xiě)代碼的能力、單元測(cè)試的能力、跟蹤查找問(wèn)題的能力、解決問(wèn)題的能力。而需求分析人員至少要有業(yè)務(wù)理解學(xué)習(xí)能力、業(yè)務(wù)分析能力、溝通表達(dá)能力、建模及文檔能力等等。這些能力很難量化,不過(guò)項(xiàng)目經(jīng)理好是心里大致有數(shù),能夠大致估算出每個(gè)項(xiàng)目成員在正常情況下完成不同目標(biāo)要求的各項(xiàng)任務(wù)所需要花費(fèi)的時(shí)間。