第一章 簡介
1.1 研究背景
我之前曾在廈門一家中等規(guī)模(合計開發(fā)人員50人)的軟件公司擔(dān)任項目經(jīng)理,開始由于對軟件工程的不怎么重視,一些失敗的軟件項目給我留下了極深的映象。在失敗和困惑中,我們開始反思,也總結(jié)了一些經(jīng)驗教訓(xùn)。后來,我們在開發(fā)過程中引入了MSF(Microsoft Solutions Framework)軟件開發(fā)模型,并結(jié)合公司的具體情況進(jìn)行了裁減。實踐證明,我們的軟件工程過程管理能力大為提高,軟件的質(zhì)量也有較大程度的提高,軟件的交付期也得到了基本保證,已經(jīng)沒有再發(fā)生那種“永遠(yuǎn)也完不成項目”的情況。
1.2 研究動機(jī)
在這篇文章中,主要談?wù)摿嗽诋a(chǎn)品開發(fā)中的項目管理問題,此處的“產(chǎn)品開發(fā)”是指做一個通用的軟件產(chǎn)品或者一些具體的領(lǐng)域性系統(tǒng)集成項目。下面我主要結(jié)合我們公司實施MSF的情況,談?wù)勛约簩浖こ痰囊恍┏醪娇捶ā?br>
第二章 MSF概要介紹
MSF主要由幾個模型構(gòu)成,其中包括:組隊模型、開發(fā)過程模型、應(yīng)用模型、風(fēng)險管理模型。下面只對組隊模型進(jìn)行較詳細(xì)的介紹,其他模型則簡要說明,更詳細(xì)的資料請查閱[2]。
2.1組隊模型
MSF把軟件開發(fā)分成了六個小組,分別是:程序管理組、產(chǎn)品管理組、開發(fā)組、用戶培訓(xùn)組、測試組、安裝管理組。組隊的原則是小隊(一般3-8人)、多側(cè)面;角色交叉、目標(biāo)一致;人員技術(shù)、業(yè)務(wù)精;關(guān)注能力和交貨期;對項目的前景認(rèn)識一致;人人參與設(shè)計;善于總結(jié)經(jīng)驗;共同管理、共同決策,項目人員同地工作等。
程序管理組的工作是: ①推動開發(fā)過程;②負(fù)責(zé)產(chǎn)品規(guī)范說明;③溝通和協(xié)調(diào)各組關(guān)系;④管理項目進(jìn)度,報告項目狀態(tài);⑤把握總體決策。
產(chǎn)品管理組的工作是: ①代表客戶(customer);②描述項目產(chǎn)品輪廓;③負(fù)責(zé)需求定義;④平衡功能和進(jìn)度要求;⑤負(fù)責(zé)市場、宣傳、公共關(guān)系等。
開發(fā)組的工作是: ①概要、詳細(xì)設(shè)計;②完成產(chǎn)品開發(fā);③準(zhǔn)備安裝的產(chǎn)品。
測試組的工作是: ①制定測試策略和計劃;②盡可能發(fā)現(xiàn)問題。
用戶培訓(xùn)組工作是: ①代表終端用戶(end user);②負(fù)責(zé)用戶需求定義;③把握可用性和用戶性能指標(biāo)。
安裝管理組工作是: ①負(fù)責(zé)產(chǎn)品安裝;②把握可管理性和可支持性。
各組的地位同等,非領(lǐng)導(dǎo)關(guān)系,并充分授權(quán),保證目標(biāo)清晰一致,由各組的負(fù)責(zé)人共同管理項目。
2.2過程模型
MSF過程模型主要確立了四個重要的里程碑:前景范圍確認(rèn)、項目規(guī)劃確認(rèn)、開發(fā)完成、對外發(fā)布,通過控制這四個里程碑來分解管理項目過程。
2.3應(yīng)用模型
MSF應(yīng)用模型是分層次的應(yīng)用模型,大體可分為三層,用戶層、業(yè)務(wù)層和數(shù)據(jù)層,各層次通過標(biāo)準(zhǔn)組件進(jìn)行封裝,互相通訊調(diào)用來完成系統(tǒng)任務(wù)。
2.4風(fēng)險模型
MSF風(fēng)險管理過程主要包括:風(fēng)險識別、風(fēng)險表述,通過分析、計劃、跟蹤和控制過程,最終解除風(fēng)險。
第三章 MSF在項目中的具體應(yīng)用
3.1組隊模型裁減
在中小軟件企業(yè)中,一般項目的規(guī)模不會太大,通常是十幾個人,少的只有幾個人,所以必須對MSF的組隊模型進(jìn)行簡化。通常的做法是劃分成三個組,程序管理組:一般對應(yīng)于原來的項目經(jīng)理,通常就項目經(jīng)理一個人,如果需要還可以給他配個組手,通常稱為“項目秘書”;產(chǎn)品管理和測試組:一般包括MSF中的產(chǎn)品管理組,測試組、用戶培訓(xùn)和安裝管理,主要代表用戶確定軟件需求并測試產(chǎn)品是否滿足需求;開發(fā)組:和MSF的開發(fā)組相同。這樣的組隊,比較符合中小項目的需要,在實踐中也證明是比較合理的。
首先,確立項目經(jīng)理角色,符合一般公司的管理模式,比較容易被接受。如果有多人同時負(fù)責(zé)的話,容易產(chǎn)生責(zé)權(quán)理不清楚,互相扯皮的現(xiàn)象。有一個項目經(jīng)理對項目完全負(fù)責(zé),遇到問題容易很快得到解決;他作為項目組代表,負(fù)責(zé)向上級匯報工作,能使其他人全力投入到項目中,而不至于在日常的事務(wù)中耽誤太多時間,從而在某種程度上也提高了工作效率。
在原來的很多項目中,大多都沒有設(shè)置產(chǎn)品管理角色,他的工作一般由項目經(jīng)理兼任。這樣的做法已證明存在很多問題,會使項目經(jīng)理精力分散,而且產(chǎn)品管理的任務(wù)和項目的日常管理工作也不大相同,如果叫一個人負(fù)責(zé),怕兩頭都顧不上搞不好。在產(chǎn)品管理組中,根據(jù)項目的大小,可以設(shè)置兩個負(fù)責(zé)人,一個代表用戶確定需求,另一個主要負(fù)責(zé)測試,但由前一個負(fù)總責(zé)。因為只有用戶代表認(rèn)可了的產(chǎn)品品質(zhì),才是真正可以交付的品質(zhì)。
產(chǎn)品管理經(jīng)理(以下簡稱產(chǎn)品經(jīng)理)是項目中非常重要的角色,他可以對技術(shù)不是很精通,但是必須對產(chǎn)品所服務(wù)的領(lǐng)域非常熟悉,最好是領(lǐng)域?qū)<?,在他的帶領(lǐng)下,項目才不至于偏離預(yù)先設(shè)定的前景范圍。他必須對產(chǎn)品的需求能作出很好的把握,在適當(dāng)?shù)臅r候能進(jìn)行流程重組,對產(chǎn)品的可用性和易用性有最終決定權(quán)。根據(jù)我們的經(jīng)驗,通過設(shè)定產(chǎn)品經(jīng)理,主要的感覺是產(chǎn)品受用戶的歡迎程度增加了,無用的特性少了,因而也更容易成功。
開發(fā)組主要負(fù)責(zé)產(chǎn)品的概要設(shè)計,詳細(xì)設(shè)計及代碼實現(xiàn),這和一般項目中的開發(fā)人員差不多,就不再贅述了。
根據(jù)我們的經(jīng)驗,這樣組建的開發(fā)團(tuán)隊既有助于提高工作效率,又能保證有良好的產(chǎn)品質(zhì)量。沒有設(shè)置產(chǎn)品管理角色的團(tuán)隊最容易產(chǎn)生的問題是開發(fā)人員往往喜歡憑他們的主觀臆想來設(shè)定產(chǎn)品的某些功能,最終導(dǎo)致產(chǎn)品易用性極差,不容易為用戶所接受。
3.2軟件過程管理
MSF開發(fā)過程總的來說是一個基于里程碑的,迭代的,風(fēng)險驅(qū)動的過程。一般遵循如下原則:①進(jìn)度計劃留有余地;②通過風(fēng)險管理減少不確定性因素;③通過快速原型法盡可能使產(chǎn)品穩(wěn)定和可預(yù)測;④縮短生命周期;⑤重視創(chuàng)新使資源和性能效率最大化;⑥拆分大項目等。
在過程模型上,主要包括四個重要里程碑:①前景/范圍確認(rèn);②項目規(guī)劃確認(rèn);③開發(fā)完成;④對外發(fā)布。
我們把MSF的各個階段對應(yīng)到傳統(tǒng)的項目開發(fā)各階段,目的是使公司所有人員便于理解和使用。其中“前景范圍確認(rèn)”對應(yīng)傳統(tǒng)的“可行性分析”;“項目規(guī)劃確認(rèn)”對應(yīng)“需求分析”和“項目計劃”;“首次運行”對應(yīng)“開發(fā)完成”,“發(fā)布”的意思和傳統(tǒng)基本相同。同時,我們也根據(jù)公司的具體情況對流程進(jìn)行了相應(yīng)調(diào)整,把整個流程分為可行性分析、需求分析、開發(fā)計劃、開發(fā)過程和結(jié)項總結(jié)五個階段,下面分別進(jìn)行說明。
3.2.1可行性分析
按照ISO9001的要求,在軟件開發(fā)前有一個可行性分析報告,討論項目的可行性和風(fēng)險,一般公司項目也都會經(jīng)歷這一階段。做可行性分析一般由未來的項目經(jīng)理和產(chǎn)品經(jīng)理共同完成,討論該項目的技術(shù)、經(jīng)濟(jì)可行性和潛在的風(fēng)險等。很多小公司在做項目前都沒有這個過程,往往是不管自己的實際情況,匆忙上馬,遇到項目就接,結(jié)果是做一個死一個,成功的很少。
在做可行性分析的時候,要充分考慮公司以前的各種技術(shù)和市場積累,還有目前的資源可用性情況,特別是要做好風(fēng)險分析。我以前就碰到過這種情況,一個項目的領(lǐng)域和公司以前的領(lǐng)域不盡相同,在立項前沒有充分考慮各種情況,認(rèn)為這個項目比較簡單,應(yīng)該沒什么問題,結(jié)果是沒有做得很成功,進(jìn)度上也拖了一段時間。在后來結(jié)項分析的時候,認(rèn)為主要的問題就是領(lǐng)域的區(qū)別造成了公司內(nèi)部沒有人對該領(lǐng)域特別熟悉,缺乏領(lǐng)域?qū)<遥ι鲜鲲L(fēng)險估計不足,也沒有對風(fēng)險進(jìn)行較好的管理,所以造成了項目的不成功。
上面提到,可行性分析一般是由未來的項目經(jīng)理和產(chǎn)品經(jīng)理完成,必要時還需要市場人員的參與,項目經(jīng)理主要考慮技術(shù)可行性,包括項目最初估計的進(jìn)度表和資源需求情況;產(chǎn)品經(jīng)理主要考慮市場和經(jīng)濟(jì)上的可行性(主要是針對軟件產(chǎn)品而言)。只有預(yù)先對各種問題進(jìn)行完備的分析后,才能得出正確的決策。不要到后來因為那些事先沒考慮到的,但應(yīng)該想到的各種原因造成項目失??;或者雖然完成了,但是沒有取得預(yù)期的效果,不能給公司帶來較好的收益。
只有在可行性分析通過評審,公司高層領(lǐng)導(dǎo)者認(rèn)可的情況下才能付諸實施。通過可行性分析,揭示了即將面臨的各種問題及風(fēng)險,使得公司內(nèi)部對該項目有了一致的認(rèn)識,在后來的資源申請上也更容易得到高層支持,更易于導(dǎo)致項目成功。那種只有一個想法,就開始實施的做法是絕對不可取的,可以是單兵做戰(zhàn),但決不是公司行為。
3.2.2需求分析
需求管理是軟件開發(fā)中非常重要的部分,在一般的MIS型項目中,準(zhǔn)確的把握需求往往是項目成功的關(guān)鍵。但需求管理也是個困難的過程,據(jù)我所知,太多項目的需求都沒有良好的管理過程,往往導(dǎo)致項目后期的大量修改或者直接使項目失敗。
需求的管理主要由產(chǎn)品經(jīng)理負(fù)責(zé),其中最終用戶(end user)的實時參與是一個非常重要的因素。在需求采集階段,我們主要采用了原型法,使用VB或者FrontPage建立最終產(chǎn)品的界面,然后把功能實現(xiàn)和界面一一對應(yīng)起來,和用戶進(jìn)行討論,并不斷的修改界面。最終在基本達(dá)成一致后,對應(yīng)原型寫出需求規(guī)格說明書,在評審后納入基線管理。
在后面的開發(fā)中,我們必須保證最終產(chǎn)品界面和原型基本一致,如有變更,則必須提交項目組和客戶討論。根據(jù)我們的經(jīng)驗,優(yōu)秀的產(chǎn)品經(jīng)理+用戶參與+原型法=良好的需求說明。
在需求的制定過程中,產(chǎn)品經(jīng)理必須和項目經(jīng)理、開發(fā)人員、測試人員進(jìn)行良好的溝通,使項目組全體都參與到需求分析中來,并共同確定需求的關(guān)鍵特性:
1.項目的范圍:在需求分析中,首先必須明確項目的范圍,去掉那些看似屬于該項目其實不該在項目中的需求特性。特別是在一些MIS項目中,客戶往往把一些屬于他們的日常工作但不屬于該項目的需求提交給項目組,這時就必須分清項目的范圍,不要在項目中加入太多不應(yīng)該做的東西,否則往往會導(dǎo)致項目范圍無限擴(kuò)大,最終只能是使項目失敗。
2.需求的優(yōu)先級:需求的優(yōu)先級是非常重要的特性,只有在準(zhǔn)確把握的需求優(yōu)先級的基礎(chǔ)上我們才可能規(guī)劃外部里程碑(產(chǎn)品版本)和內(nèi)部里程碑(開發(fā)的階段性,后面會講到)。通常是用戶最關(guān)心,使用最頻繁的功能應(yīng)該屬于高優(yōu)先級,而那些不怎么重要或很少用到的功能應(yīng)該屬于低優(yōu)先級。我們必須在產(chǎn)品的開始版本和項目的開始就把重點放在高優(yōu)先級的需求上,而對于低優(yōu)先級的功能可以在項目后期根據(jù)需要進(jìn)行裁減或納入下一個版本規(guī)劃。
3.產(chǎn)品的易用性:產(chǎn)品的易用性反映在原型中,是原型法的一個非常重要的作用。很多產(chǎn)品的失敗其一個重要原因就是易用性比較差,雖然它在功能上滿足了用戶需求,甚至可以說功能很強大。通過原型法,能讓用戶看到并模擬使用最終的產(chǎn)品界面,能在需求階段通過修正軟件界面來適應(yīng)用戶的偏好,從而在很大程度上提高了產(chǎn)品的易用性,使項目更容易成功。
4.其他需求特性:如性能要求、健壯性等。這些特性是產(chǎn)品的非功能性需求,也是項目成功的關(guān)鍵因素,特別是在一些大型的涉及重要領(lǐng)域的管理信息系統(tǒng)中。
需求分析是整個項目活動中的非常關(guān)鍵的部分,它的好壞往往決定了項目的成敗。根據(jù)經(jīng)驗,需求分析所需的時間往往占整個項目時間的12%[1]。在需求分析中,需要防止的一個錯誤做法是太依靠一些所謂的分析方法,而使整個需求分析過程非常復(fù)雜,過多的圖表往往使人眼花繚亂,而不能準(zhǔn)確抓住問題的本質(zhì)。一些分析人員往往對自己熟悉的簡單的業(yè)務(wù)花大力氣,而對不熟悉的則一筆帶過,也是本末倒置的錯誤行為。在分析過程中,我們必須始終把握需求分析的目的是把模糊的流程搞清晰,把復(fù)雜的業(yè)務(wù)盡量簡化,而不是相反。
需求的管理也是非常重要的方面。對需求分析完后的形成的規(guī)格說明需要進(jìn)行專門的評審,并且需要客戶和最終用戶的參與,在達(dá)成一致后形成最初的需求基線。以后對需求的更改都必須在基線的基礎(chǔ)上進(jìn)行,并需要項目組各成員的一致確認(rèn),對需求進(jìn)行嚴(yán)格規(guī)劃評審的目的也在于在項目的后期能盡量減少對需求的更改,提高開發(fā)的效率。
需求分析完成后,項目組需要對項目的初步計劃進(jìn)行重新審定,一般都需要變更項目時間表和資源需求。需求分析的完成也意味著項目其他部分可以齊頭并進(jìn),如概要設(shè)計、測試計劃、用戶說明書,這也在某個方面證明了需求分析的重要性-它是下面所有活動的基礎(chǔ)和準(zhǔn)繩。
3.2.3開發(fā)計劃
軟件開發(fā)中的計劃性是非常重要的,一個沒有良好計劃的開發(fā)項目能夠成功的機(jī)會非常小,除非有天才的程序員再加上好運氣。開發(fā)計劃的主要內(nèi)容包括:項目進(jìn)度安排、人力資源安排,風(fēng)險管理策略等。
項目的進(jìn)度安排和人力資源安排可能是開發(fā)計劃中最重要的部分,也是最難以估計的部分。一般國內(nèi)的中小軟件公司對項目工作量和開發(fā)人員能力的量化程度不高,所以導(dǎo)致進(jìn)度和資源安排不確切,有時候甚至是相差很遠(yuǎn)。目前一個最實際的辦法就是根據(jù)以往項目的積累,但必須要求是同一領(lǐng)域的類似項目,這樣才有較強的可比性。由于這些計劃安排是預(yù)估粗略的,所以還必須在以后的項目各階段完成后進(jìn)行合理的變更,反應(yīng)項目的實際需求。微軟的辦法是把進(jìn)度估計的權(quán)限交給開發(fā)人員,由開發(fā)人員根據(jù)自己的經(jīng)驗進(jìn)行估計,由于一般開發(fā)人員往往會高估自己的能力,估計的進(jìn)度也會相應(yīng)偏短,最后再做適當(dāng)?shù)难娱L[2]。這種辦法有它合理的地方,在中國還需進(jìn)行實踐摸索。
對于進(jìn)度的估計,我們有個經(jīng)驗公式,即您最初預(yù)估的時間再乘以2.5,可能是最后的完成時間。因為許多人在估計進(jìn)度的時候,往往忽略了很多非開發(fā)時間,如與客戶溝通的時間、項目組溝通時間、公司培訓(xùn)時間、假期等,所以我們在估計進(jìn)度的時候,一定要全方位周全考慮,在盡可能的情況下寧愿把進(jìn)度估計的長一點,免得在項目后期導(dǎo)致非常被動的局面。后面我們將具體講到我們采取的階段性的開發(fā)方法,這種方法的運用反映在進(jìn)度估計時必須在各階段間預(yù)留緩沖時間,以解決那些我們事先沒有預(yù)料到的活動。如果進(jìn)度表和要求的出貨時間有沖突,寧愿砍掉一些不重要的功能,也不要盲目增加人手,這種做法可能會導(dǎo)致產(chǎn)品質(zhì)量下降,最終得不償失,詳細(xì)說明請參考[4]。
風(fēng)險管理是項目管理中非常重要的部分,并且要貫穿項目的始終。一些軟件企業(yè)往往不是很重視風(fēng)險管理,導(dǎo)致在項目的后期出現(xiàn)了很多預(yù)料之外的事情,使項目進(jìn)度一拖再拖,往往質(zhì)量也達(dá)不到預(yù)期要求。因此我們要特別重視風(fēng)險的管理,具體方法留待后面專門詳述。
3.2.4開發(fā)過程
在項目的開發(fā)過程中,我們采用了階段式的開發(fā)過程,這也是微軟公司所推薦的開發(fā)過程。在開發(fā)過程的初期,首要的活動是概要設(shè)計。概要設(shè)計的目標(biāo)是簡單、適用、能夠覆蓋所有的需求并能支持后面的階段式開發(fā)。微軟的應(yīng)用方案解決模型是基于服務(wù)的三層(多層)架構(gòu),包括用戶層,業(yè)務(wù)層和數(shù)據(jù)層,各層之間采用標(biāo)準(zhǔn)的接口進(jìn)行通訊,至于該方法的具體使用,請參看相關(guān)書籍,在此就不在贅述了。
階段開發(fā)過程不是傳統(tǒng)的根據(jù)模塊劃分來依次完成各模塊,最后再進(jìn)行項目的整合,而是在每個階段完成后,項目都可以推出產(chǎn)品,只不過該產(chǎn)品的功能比最終產(chǎn)品的功能弱一些。
階段性完成項目比傳統(tǒng)的開發(fā)方法最明顯的優(yōu)點是不必到項目的末期才開始整合產(chǎn)品,使產(chǎn)品模塊之間協(xié)作產(chǎn)生的問題及早產(chǎn)生,也及早修正,從而項目的風(fēng)險也大大減小。傳統(tǒng)的開發(fā)總是在項目的后期才開始整合各模塊,使產(chǎn)生的問題改正起來極為困難,成本也大大增加;前面累計的所有問題全部都拖到了后面來解決,也使后面剩下的工作量大大增加。項目往往看起來已完成了90%——大部分的功能模塊都已完成,但剩下的10%總是完不成,項目進(jìn)度一拖再拖,很可能還要再花90%的時間來完成剩下的10%。當(dāng)然采用階段性開發(fā)方法也有相應(yīng)的代價,最大的代價可能是反復(fù)的整合、測試已經(jīng)完成的模塊,但采用相應(yīng)的一些自動化工具可以減小這個代價。
一般在開始的階段進(jìn)行的是系統(tǒng)架構(gòu)和最重要的功能,后面的階段是相對不怎么重要的功能。這樣的分配有利于最終用戶在早期就能看到系統(tǒng)的大致模樣,便于他們及早的對產(chǎn)品提出意見,并對相應(yīng)的錯誤進(jìn)行修改;也有利于項目組在項目后期時間很緊的情況下,去掉一些不重要的功能,把它們納入下一個版本處理,確保產(chǎn)品的推出時間。迭代的順利進(jìn)行依賴于良好的架構(gòu)設(shè)計,前面階段的設(shè)計應(yīng)該給后面要加入的功能預(yù)留出各種接口,并能使后面的工作在前面的基礎(chǔ)上繼續(xù)進(jìn)行下去。
這種在開發(fā)階段的迭代方式不同于整個項目的完全迭代開發(fā),后者是項目的需求、概要設(shè)計、開發(fā)等全部是迭代進(jìn)行,一次迭代要進(jìn)行所有的項目活動。至于誰優(yōu)誰劣可能在不同的情況下有不同的說法,需要根據(jù)項目和自身的情況合理采用。
還有就是迭代的次數(shù)也要根據(jù)項目的具體情況而定。不能太多,導(dǎo)致重復(fù)的工作量過大;也不能太少,使得該方法退化到傳統(tǒng)方法。我們的項目(項目小組在10人左右,開發(fā)時間在5個月左右)一般分了四個階段:架構(gòu)完成、主要功能完成、其他功能完成、整合發(fā)行。實踐證明,這樣的實施比傳統(tǒng)方法確實在很大程度上減小了項目失敗的風(fēng)險,再沒有產(chǎn)生那種“似乎永遠(yuǎn)也做不完的感覺”。
這里舉一個具體例子來更形象的說明該方法的運用。一個一般的MIS程序,第一階段可以構(gòu)建數(shù)據(jù)庫結(jié)構(gòu)和基于特定領(lǐng)域的核心平臺服務(wù)(包括一些基本服務(wù)類),并進(jìn)行初步整合;第二階段可并行同時開發(fā)系統(tǒng)各大模塊的基本功能,并進(jìn)行第二次整合;第三階段可開發(fā)其他增強功能,也需要相應(yīng)的功能整合;第四階段進(jìn)行整個系統(tǒng)的最后整合,并可進(jìn)行相應(yīng)的性能改進(jìn),使產(chǎn)品進(jìn)入可發(fā)行狀態(tài)。
3.2.5結(jié)項總結(jié)
很多公司在項目完成后往往忽視了最后的總結(jié),沒有把在上個項目中得到的經(jīng)驗教訓(xùn)進(jìn)行分析,轉(zhuǎn)化成公司的巨大財富。我們認(rèn)為,項目的總結(jié)是整個項目的不可缺少的重要組成部分,只有通過詳盡的充分的項目總結(jié),才能使項目組的所有成員對項目的歷程有一個清楚的了解,提高他們對軟件項目的認(rèn)識;才能真正地把以往的項目納入公司的資源庫,轉(zhuǎn)化成巨大的財富。
我們的做法是在項目完成后首先由各個項目成員寫出各自的總結(jié)報告,包括所從事的工作、任務(wù)的完成情況、遇到的問題及解決方案、對項目過程的意見和自己的想法等內(nèi)容。項目負(fù)責(zé)人需要把整個的項目歷程整理成一份文件,其中包括項目的介紹、項目進(jìn)行的具體資料(如實際花費時間、源代碼數(shù)、功能模塊數(shù)量等)、項目計劃與實際的比較等。
在上述完成后,全體項目參與人員舉行項目結(jié)項工作會議,對各人所列舉的問題及想法進(jìn)行討論,目的是得出好的經(jīng)驗教訓(xùn),從而指導(dǎo)后面項目過程。會議可由分別針對的問題分為幾個部分,如項目過程方面的、質(zhì)量管理方面的、技術(shù)方面的等,整合后形成結(jié)項會議報告。
項目負(fù)責(zé)人最后把項目歷程、資料、在結(jié)項會議中總結(jié)的經(jīng)驗教訓(xùn)等整理成一份總的項目過程文件,歸檔并分發(fā)到各成員和上層領(lǐng)導(dǎo),并由項目經(jīng)理向上層領(lǐng)導(dǎo)匯報,這時,一個完整的項目才真正告一段落。這些項目資料給以后的項目提供很好的模板和借鑒意義,并可以作為以后項目預(yù)估的依據(jù)。
3.3風(fēng)險管理
微軟公司認(rèn)為,軟件開發(fā)是一個風(fēng)險驅(qū)動的過程,由此可看出風(fēng)險管理在軟件項目中的重要性。一個項目的風(fēng)險有許多來源,如客戶、進(jìn)度、開發(fā)過程、人力資源等,忽視風(fēng)險的后果可能是成本超支、進(jìn)度推后,最嚴(yán)重導(dǎo)致項目失敗。
MSF的風(fēng)險管理原則是:
1.風(fēng)險應(yīng)該在整個項目的進(jìn)程中一直被估計,并且作為項目決策的依據(jù)之一。
2.有效的風(fēng)險管理過程覆蓋了所有關(guān)鍵的人力、過程、商務(wù)及技術(shù)領(lǐng)域。
3.風(fēng)險在納入管理前必須被清晰的表述。
4.重要的風(fēng)險必須優(yōu)先被處理。
MSF風(fēng)險管理過程包括以下階段:風(fēng)險識別、風(fēng)險陳述、風(fēng)險分析、處理計劃、風(fēng)險跟蹤、風(fēng)險控制、風(fēng)險解除。
在中小企業(yè)的風(fēng)險管理過程中,一般項目經(jīng)理擔(dān)任風(fēng)險管理員的角色,但同時需要另外的資深開發(fā)人員輔助,一起完成風(fēng)險管理的任務(wù)。他們負(fù)責(zé)維護(hù)十大風(fēng)險清單(不一定非要列出十個),并在項目進(jìn)程中隨時對風(fēng)險清單進(jìn)行更新。對風(fēng)險的評級MSF采用的方式是:風(fēng)險影響程度=風(fēng)險的可能性×風(fēng)險發(fā)生造成的損失,根據(jù)風(fēng)險影響程度的大小對風(fēng)險進(jìn)行評級。
在項目實施中,我們總結(jié)的一些高風(fēng)險事件主要有:需求的不準(zhǔn)確、項目時間表過于短促、開發(fā)一個從前沒進(jìn)入的領(lǐng)域軟件、開發(fā)人員對工具的不熟悉、人員流動頻繁、使用了外部軟件中間件等。如果對這些風(fēng)險不提前作出計劃,可能會對項目的順利進(jìn)行造成極大的破壞,甚至直接導(dǎo)致項目失敗。針對每一個風(fēng)險,我們需要列出who, when, how, how much等事項,并對風(fēng)險處理的結(jié)果進(jìn)行追蹤,最后決定是否已經(jīng)解除風(fēng)險或再進(jìn)入風(fēng)險處理循環(huán)。
一般國內(nèi)公司的風(fēng)險意識不強,沒有很好的去規(guī)劃處理風(fēng)險。我們當(dāng)時也是這樣,往往要等到風(fēng)險已經(jīng)發(fā)生了,才意識到原來沒有注意到這些問題。在風(fēng)險的管理上,還需要更多的實踐探索,首先應(yīng)該從加強風(fēng)險意識開始。
3.4質(zhì)量管理
關(guān)于軟件質(zhì)量管理,現(xiàn)在已經(jīng)得到了很多公司的重視,這里我想針對性地強調(diào)幾個問題:
1.質(zhì)量管理不單單是測試。一個容易犯的錯誤是把質(zhì)量管理和測試等同起來,如果軟件有問題就是測試沒做好。其實質(zhì)量管理包括很多內(nèi)容,如技術(shù)檢查、缺陷追蹤、源代碼追蹤、單元測試、系統(tǒng)測試等。
2.質(zhì)量管理不是在代碼完成后才開始,質(zhì)量管理應(yīng)該貫穿整個項目始終,從需求、設(shè)計到編碼、測試。我們往往只重視了后期對代碼的測試,而忽略了對需求、設(shè)計的質(zhì)量管理,而前者比較起來可能更為重要。因為處理一個在后期才發(fā)現(xiàn)的錯誤比處理一個前期發(fā)現(xiàn)的錯誤的成本要高幾十倍。
3.使用缺陷追蹤管理工具。我們的實踐證明:使用缺陷追蹤管理工具比以前單純的使用文檔傳送方式的效率提高幾倍,并在管理諸如優(yōu)先級、防止遺漏等方面有更大的優(yōu)勢。
3.5其他
這里談一些沒有包括在上述內(nèi)容里的經(jīng)驗教訓(xùn),供大家參考:
1.項目管理工具。我們使用的是MS Project來管理項目過程,Project一個很好的優(yōu)點是能把項目管理的內(nèi)容自動發(fā)布到網(wǎng)站上去,這極大地方便了各階層人員對項目狀態(tài)的了解,有助于及時發(fā)現(xiàn)問題解決問題,對項目組成員也是個很好的激勵方法。
2.項目團(tuán)隊中需要資深開發(fā)人員。我曾經(jīng)經(jīng)歷過一個項目,項目負(fù)責(zé)人堅持用C++ Builder開發(fā)(可能是為了學(xué)習(xí)的原因),但是公司沒有任何一個人對這個工具非常熟悉,也沒有進(jìn)行相應(yīng)的風(fēng)險管理。結(jié)果在項目的過程中出了太多問題,使項目一直延期,在交付的時候都還存在很多問題。所以在項目團(tuán)隊中一定需要資深開發(fā)人員,特別是在項目的前期更是如此。
3.再次強調(diào)產(chǎn)品經(jīng)理角色。必須牢牢記?。阂粋€不管使用了什么先進(jìn)技術(shù)、開發(fā)方法的產(chǎn)品,如果不能滿足用戶的需要,就是一個失敗的產(chǎn)品。而產(chǎn)品經(jīng)理角色的設(shè)立能較好滿足這一要求。
4.在領(lǐng)域性較強的項目中,最好在基本的軟件架構(gòu)上(如COM或J2EE)實現(xiàn)一個該領(lǐng)域的基礎(chǔ)開發(fā)平臺,這樣在以后的擴(kuò)展上,在具體項目的實施上,都會極大的節(jié)省成本,軟件的質(zhì)量也有良好的保證。
第四章 結(jié)束語
上述簡單介紹了我們項目管理的經(jīng)驗教訓(xùn),在引入MSF管理思想后,項目的成功率比原來增大了很多。我們碰到最棘手的問題就是項目的度量(Metrics),怎么更合理估算項目的大小,估算軟件開發(fā)人員的生產(chǎn)率,更合理的項目計劃等,這也是CMM4所要求的內(nèi)容。需要在不斷項目積累的同時,逐步細(xì)化量化指標(biāo),在實踐中不斷學(xué)習(xí)、提高。
【?發(fā)表評論?0條?】