發(fā)表在《程序員》雜志2005年第9期52~67頁(yè)的原文
編者按:在上期的文章中,我們分享了http://133.newsky.cn項目的實(shí)施過(guò)程,然而,一些在時(shí)間之外的內容卻被忽略掉,如項目范圍、人才、資金、進(jìn)度、精神因素以及制度(尤其是文檔制度)等各個(gè)方面,本文試圖用一種“橫切面”的方式來(lái)關(guān)注項目實(shí)施,也為項目經(jīng)理在管理項目時(shí),提供一些有效的思路。
網(wǎng)站項目成功管理實(shí)踐(下)
記者/孟巖 歐陽(yáng)璟
背景說(shuō)明è四個(gè)人的角色分工:
劉振飛:項目經(jīng)理,負責整個(gè)項目的規劃、協(xié)調工作。
蔡志宏:需求定義,從頭參與規劃。
朱偉波:開(kāi)發(fā)組長(cháng),并參與規劃和后臺管理的需求定義。
張春艷:測試組長(cháng),負責北京分公司所有業(yè)務(wù)的測試工作。
《程序員》:劉振飛,你好。對于任何一個(gè)項目來(lái)說(shuō),項目經(jīng)理所面臨的責任都是最大的。這尤其表現在整個(gè)項目是否有明確的目標。請你談?wù)勀惝敃r(shí)對http://133.newsky.cn這個(gè)項目的看法,而當時(shí)明確的項目目標是怎樣一步步制定出來(lái)的?
劉振飛:明確的目標是整個(gè)項目組齊心協(xié)力努力的“指南針”。作為項目組長(cháng),首先要把Stakeholder們對項目的要求吃透、并從技術(shù)上把握可行;然后要讓整個(gè)團隊理解這個(gè)目標:做什么、為什么、怎么做、如何分工、何時(shí)做出來(lái)、分階段到達什么狀態(tài)。
我是分三步確定目標的。首先是了解舊網(wǎng)站的情況。經(jīng)過(guò)和原來(lái)負責舊網(wǎng)站研發(fā)的蔡志宏以及開(kāi)發(fā)和美工人員深入溝通后,我發(fā)現舊網(wǎng)站是個(gè)“爛泥灘”,所以把實(shí)際情況解釋給管理層,說(shuō)服他們另起爐灶,推倒重做一個(gè)全新的網(wǎng)站。
第二步是吸取舊網(wǎng)站的教訓,確定新網(wǎng)站的總體構想、設計原則、新版“圖紙”。我、蔡志宏、朱偉波還有當時(shí)的美工形成一個(gè)“核心小組”,反復開(kāi)會(huì )討論,結合公司現有的業(yè)務(wù)及人力資源情況,逐步明確圖片、鈴聲、文字這三類(lèi)主要的WAP內容如何在網(wǎng)站上有效展示。
第三步是把“核心小組”的整體思路報告給管理層和項目組成員,聽(tīng)取大家的反饋意見(jiàn),逐步明確這個(gè)網(wǎng)站的目標和設計方案。我分別在
示意圖:整體規劃統一整個(gè)項目組的前進(jìn)方向
其實(shí)我還跟項目組內部講過(guò)另外兩個(gè)“非正式”但更長(cháng)遠的目標:
(1)把整個(gè)項目流程管理好,給公司樹(shù)立一個(gè)“樣板工程”:項目應該這么做;
(2)通過(guò)這個(gè)項目打造有良好素養的團隊,逐步培養大家正規的項目研發(fā)意識。
示意圖:用了1個(gè)月的時(shí)間來(lái)進(jìn)行規劃,確定目標、統一思想
《程序員》:定義需求的時(shí)候統一的指導思想是什么?在項目進(jìn)行中,需求的變更是怎樣管理的?你是否曾經(jīng)面對來(lái)自上層的壓力,怎樣面對?需求工程師是否能理解,并按照預期的規劃工作?
蔡志宏:我們一開(kāi)始就意識到網(wǎng)站的核心功能并不是諸如導航條擺在左邊還是右邊的問(wèn)題,而是要讓公司產(chǎn)品能夠得到最好的展示,為此確定我們要做展示的幾個(gè)核心部分。我們犧牲掉部分美觀(guān)來(lái)?yè)Q取一種整齊劃一的思路。這就像大型超市一樣,也許每一個(gè)貨物區都有自己的的貨架擺放形式會(huì )更好,但是同一個(gè)形式也有它自己的優(yōu)勢。
對于SP的網(wǎng)站來(lái)說(shuō),關(guān)鍵是你有一張好圖吸引用戶(hù),不是花哨的頁(yè)面來(lái)蠱惑他,蠱惑用戶(hù)將付出超出產(chǎn)品制作本身的很大的精力,這是實(shí)戰經(jīng)驗?;ㄉ诘捻?yè)面布局形式能夠在最初上線(xiàn)的時(shí)候讓所有人滿(mǎn)意,但是在運作的過(guò)程中會(huì )發(fā)生很多的問(wèn)題,因為為了花哨,長(cháng)期下來(lái)是要付出技術(shù)、美工等很多精力的。
核心的展示模塊確定之后,我們也面臨了這個(gè)圖標放到右邊好看,那個(gè)文字放到左邊好看等一些需求變更建議,有些建議來(lái)自于高層,但是這都沒(méi)有影響到需求的最終定義。當然,一些細節上的建議仍然被采納,這個(gè)隊伍雖然是“武斷”的,但還是個(gè)開(kāi)放的隊伍。
盡管在初期的規劃非常完善,然而限于時(shí)間要求,有些想法在該目前的項目中仍然沒(méi)能實(shí)現。
示意圖:把網(wǎng)站各頁(yè)面分成模塊,分塊定義,形成需求Spec文檔
朱偉波:以前在別的公司做項目時(shí)就是因為需求不斷變更問(wèn)題,遇到過(guò)很大的麻煩,所以這個(gè)項目一開(kāi)始時(shí)我就再三強調需求的重要性。目前公司的開(kāi)發(fā)模式還比較簡(jiǎn)單。領(lǐng)導一句話(huà)做什么就做什么,什么需求以及文檔都是開(kāi)發(fā)人員根據自己的理解來(lái)做,往往在開(kāi)發(fā)中途可能由于各種原因領(lǐng)導的要求產(chǎn)生了變化。這樣導致需求不斷變更,直接影響了開(kāi)發(fā)的進(jìn)度。了解了這個(gè)情況后我就直接找過(guò)振飛,認真地談過(guò)這個(gè)問(wèn)題,并一再強調要重視它。很高興振飛在這方面很支持我的看法,讓大家都知道不可以隨便改需求。
當然在開(kāi)發(fā)過(guò)程中由于公司的業(yè)務(wù)要求,產(chǎn)品經(jīng)理(蔡志宏)有過(guò)幾次需求的變更。我的態(tài)度還是比較強硬,大的需求一定不能隨便動(dòng)(因為項目時(shí)間很緊,開(kāi)發(fā)人員遲遲未能到位,需求要是不斷變更,對開(kāi)發(fā)人員是致命打擊)。經(jīng)常和蔡志宏溝通,盡量保持一致意見(jiàn)。我記得快做完后臺管理時(shí)出現了一個(gè)致命的漏洞,極大的壓力也造成了情緒上的不穩定,還好在總體設計時(shí)我就就注意到了擴展的靈活性,所以在大家的精心協(xié)助下很順利的達成一致的意見(jiàn),并最終在規定的時(shí)間里完成了項目的開(kāi)發(fā)。
劉振飛:完整準確的需求定義決定著(zhù)整個(gè)項目的成敗。需求對項目組的作用就像劇本對電影劇組的重要性一樣。同樣的,項目一旦進(jìn)入開(kāi)發(fā)實(shí)現階段時(shí),只能做局部的小改動(dòng)、最好是不要動(dòng)。為什么這個(gè)項目規劃要花掉整體1/4的時(shí)間?我就是要在一開(kāi)始的時(shí)候,讓大家集思廣益,把各種情況都擺出來(lái)、理清楚,把以后可能的潛在變化都消滅在這個(gè)階段。同時(shí)我一再給公司領(lǐng)導、蔡志宏(詳細需求定義者)灌輸這樣的理念:需求必須明確、大家討論清楚,然后就不能輕易改動(dòng)了,所以多花些時(shí)間在前期規劃、書(shū)寫(xiě)Spec及討論上是非常劃算的??雌饋?lái)“浪費”了不少時(shí)間在文檔書(shū)寫(xiě)和討論上,但卻節省了未來(lái)大量的維護時(shí)間。
五一節后按計劃開(kāi)始網(wǎng)站前臺展示的開(kāi)發(fā)工作,我突然收到部門(mén)領(lǐng)導的Email,問(wèn)能否停止這個(gè)第1步聯(lián)通網(wǎng)站項目,轉向原計劃第2步那個(gè)移動(dòng)網(wǎng)站的研發(fā)。我立即給領(lǐng)導解釋?zhuān)喉椖康竭@個(gè)階段就像登山到了半山腰,所有人都憋著(zhù)一口氣瞄準山頂,這個(gè)時(shí)候突然告訴大家“咱們爬錯了,趕緊換旁邊那座山”吧,隊員們會(huì )是什么感覺(jué)?所謂“一鼓作氣,再而竭,三而衰”。當時(shí)那個(gè)項目還不具備啟動(dòng)的條件;況且我也需要通過(guò)這個(gè)項目來(lái)磨合隊伍。還好我說(shuō)服了他,這件事沒(méi)有影響到項目組。
作為項目經(jīng)理,一定要從善意的角度去理解領(lǐng)導的“多變”和需求的變化。但作為一線(xiàn)指揮官,要在項目前期做規劃和需求定義時(shí)集思廣益,盡可能避免可以預測的變化。當變化來(lái)臨時(shí),要把真實(shí)的狀況摸清楚——一些變化是必須接受的,一些是討論后可以變通接受的,還有一些是要想法拒絕的:你需要拿出負責任的決策,不能盲目服從。
《程序員》:在項目規劃過(guò)程中,你是怎樣預測進(jìn)度的?最關(guān)鍵的開(kāi)發(fā)環(huán)節是如何保證進(jìn)度的?采用了哪些方法來(lái)保證進(jìn)度能及時(shí)有效、保質(zhì)保量地執行?
朱偉波:作為開(kāi)發(fā)組長(cháng),首先在項目規劃中就要根據需求明確可能用到的技術(shù),并初步估算時(shí)間。但最重要的是需要充分的考慮環(huán)境因素,如領(lǐng)導的支持程度、人員的到位時(shí)間、以及需求的精確程度、甚至公司做項目的風(fēng)格(取決于領(lǐng)導的風(fēng)格)等。項目是不是會(huì )經(jīng)常的變動(dòng)、能否得到大家的支持,都是我要事前需要考慮的,有了這些信息,就可以大致估算項目的開(kāi)發(fā)實(shí)際需要多長(cháng)時(shí)間了。
為保證質(zhì)量,我們事先需要認真的做總體概要設計,這樣對以后的開(kāi)發(fā)起到了一個(gè)很好的指導作用。采用一個(gè)好的架構對項目成功的重要性不言而喻,對以后的擴展性、維護都起到很好的作用。在這個(gè)項目里我和振飛都重視這一點(diǎn),振飛特意多給我一天的時(shí)間來(lái)做該項目的設計工作。
再一個(gè)就是上面提到的,定義需求時(shí)一定要考慮周全、把握好,不能說(shuō)變就變。
劉振飛:在
當項目進(jìn)度明確后,后面就是監督落實(shí)的事情了:需求不清楚時(shí),立即請蔡志宏給出解釋?zhuān)豁?yè)面制作落伍時(shí),緊盯美工人員;開(kāi)發(fā)完一塊功能,就啟動(dòng)測試工作。尤其在接近尾聲的時(shí)候,一旦發(fā)現延遲的就立即找出原因,如果在Feature和時(shí)間發(fā)生沖突時(shí),我就需要及時(shí)給開(kāi)發(fā)人員做出抉擇:Cut Feature還是延遲時(shí)間?
示意圖:項目經(jīng)理要每天關(guān)注各個(gè)環(huán)節推進(jìn)的速度是否和預期的一樣
《程序員》:當時(shí)你對公司申請了哪些人力資源?在人員方面的預計是怎樣計算的?打算怎樣利用這些資源?招聘過(guò)程中的標準分別是什么?
劉振飛:根據舊網(wǎng)站的實(shí)踐、公司現有人力資源的情況,然后我們“核心小組”依照以前各自的經(jīng)驗,確定這個(gè)網(wǎng)站研發(fā)需要的人力資源:
Ø 前臺需求定義:1人(蔡志宏)
Ø 后臺需求定義:2人(劉振飛、朱偉波)
Ø 美工設計制作:1人
Ø 開(kāi)發(fā)組:3人(組長(cháng)朱偉波)
Ø 測試組:5人(組長(cháng)張春艷)
其中開(kāi)發(fā)組有2人是新招聘,考慮到這個(gè)項目及未來(lái)的工作要求,對開(kāi)發(fā)工程師的要求是:有較豐富的Java開(kāi)發(fā)經(jīng)驗,為人踏實(shí)肯干、能吃苦。我很高興把偉波招聘進(jìn)來(lái),他的Java功力很深厚,顧全大局,工作認真負責,團隊意識很強。
測試組不僅僅為這個(gè)網(wǎng)站服務(wù),而是為整個(gè)北京分公司的業(yè)務(wù)測試負責。我對測試人員的要求是:喜歡測試工作,有測試經(jīng)驗,學(xué)習能力強(因為SP是個(gè)新興行業(yè))。我也很高興招聘到春艷這樣有好幾年經(jīng)驗的同事,她對測試流程、規范、測試文檔都非常熟悉,幫我扛住了“測試”這一重要環(huán)節。
志宏比我早加盟公司,對業(yè)務(wù)非常熟悉,有很豐富的互聯(lián)網(wǎng)從業(yè)經(jīng)驗。在項目規劃和需求定義的時(shí)候,他經(jīng)常會(huì )冒出很多新鮮的創(chuàng )意和點(diǎn)子。項目結束的時(shí)候我跟他開(kāi)玩笑:忙乎了四個(gè)月,其實(shí)就是我帶著(zhù)一幫人把他的想法落實(shí)了。
《程序員》:團隊其他同事最初是否對你制定的目標非常認同?大家認為這個(gè)項目與之前所做的項目區別將會(huì )是在哪里?你是怎樣維系團隊氛圍的?
蔡志宏:我們是抱有革新態(tài)度在做這個(gè)項目的,它從思想上不同于一般的網(wǎng)站。開(kāi)發(fā)之前,振飛和公司上層有很好的溝通,使這個(gè)項目從上到下有了很好的共識,所以大目標明確,也能得到了公司的全方位支持。大家對做這個(gè)項目為公司帶來(lái)的收益和重要性有了理解,加上對公司的歸屬感,大家就都比較敬業(yè)。
朱偉波:這個(gè)項目是我來(lái)公司不久做的第一個(gè)項目,不知道大家以前是怎樣看待項目開(kāi)發(fā)的。我曾聽(tīng)到了很多不同的質(zhì)疑:這是內部的項目為什么要這么趕呢?為什么一定要在規定的時(shí)間里完成?這個(gè)項目并不能直接為公司帶來(lái)很多效益為什著(zhù)急去完成呢等等。也許在原來(lái)做項目的思想下,大家心里有很多為什么,對這個(gè)項目還抱著(zhù)一種試探,并沒(méi)有重視它。
但欣慰的是,領(lǐng)導對這個(gè)項目還是很重視的。我剛來(lái)公司,沒(méi)有歷史包袱,還是按我原來(lái)做項目的成功經(jīng)驗按部就班。事后證明我的判斷是對的——這個(gè)項目和我原來(lái)做過(guò)的項目,其區別就是打破一家公司做項目的風(fēng)格。“打破”就帶來(lái)壓力!試想,如果這個(gè)項目失敗了,說(shuō)明該公司原來(lái)做項目的混亂風(fēng)格未嘗不可,而我們的努力也就付之一炬了。
由于每個(gè)人的做事風(fēng)格不一樣,也會(huì )有這樣那樣的問(wèn)題。但是在振飛的揉和下大家還是能很好的融入到這個(gè)項目團隊中,最終解決問(wèn)題,完成任務(wù)。
張春艷:剛來(lái)公司時(shí),分配給我的任務(wù)就是測試舊版133新天地網(wǎng)站、熟悉聯(lián)通WAP業(yè)務(wù)。在測試舊版網(wǎng)站過(guò)程中,發(fā)現問(wèn)題不少如下:
1、內容不夠豐富,不吸引用戶(hù);
2、頁(yè)面的展現力不強,感覺(jué)比較枯燥;
3、程序不夠穩定,常出現HTTP Error 500、404錯誤;
4、有些很重要的功能都沒(méi)有實(shí)現(如搜索功能);
5、N久也不會(huì )更新一次內容(大概是因為更新一次很麻煩吧?。?;
6、沒(méi)有需求、沒(méi)有目標,測試屬于沒(méi)有目的狀態(tài),需要憑借經(jīng)驗和感覺(jué)進(jìn)行盲目測試。
對于測試這樣的網(wǎng)站,我認為沒(méi)有太大意義,早應該進(jìn)行改版或推翻重做。所以對振飛制定的項目目標十分認同,并希望協(xié)助很好完成。我理解這個(gè)項目與公司其他項目區別:
1、一個(gè)不賺錢(qián)但為公司所有賺錢(qián)項目服務(wù)的一個(gè)項目;
2、是公司當時(shí)唯一有規劃的項目,讓每個(gè)人都心中有數,到了哪個(gè)時(shí)間段該做什么事。其他項目基本處于混亂的狀態(tài),只有提交到測試這邊才知道有這么回事;
3、測試方法不同與其他項目:a、時(shí)間計劃安排上的不同:有頭有尾,且留給測試的時(shí)間足夠充裕,對測試的質(zhì)量給了一個(gè)很好的前提。其他項目經(jīng)常處于救火狀態(tài),下午提交測試,下班前就要求完成,沒(méi)有思考和準備的時(shí)間;b、測試方案和方法上,在可重用的流程上首先啟動(dòng)了Test Case的概念并加以執行;c、需求文檔的準備給測試做了很好的鋪墊。
劉振飛:項目的目標不是我一個(gè)人拍腦殼想出來(lái)的,而是結合領(lǐng)導的要求、公司的實(shí)際情況逐步從小范圍到大范圍反復討論后確立的,項目組的每個(gè)人在規劃階段結束的時(shí)候,都非常明確兩個(gè)問(wèn)題的答案:這個(gè)網(wǎng)站做成什么樣、為什么。
大家對整體規劃認識一致后,后面需求、美工、開(kāi)發(fā)、測試、運營(yíng)等各個(gè)環(huán)節的工作就可以“統一思想”,因為有了明確的共同奮斗目標。作為項目經(jīng)理,我做的就是定期把各個(gè)環(huán)節的進(jìn)展告訴整個(gè)項目組,做到信息透明。一個(gè)目標明確、互相信任、尊重、團結的隊伍,再把項目組的信息公開(kāi)出來(lái),就能夠保持良好的團隊氣氛。
《程序員》:從需求、測試和開(kāi)發(fā)各方面看,是否支持你的目標?大家對這個(gè)項目有信心么?信心源自何處?你是怎樣鼓勵團隊中其他同事的?
蔡志宏:這個(gè)項目中有許多值得討論的事情。首先在各個(gè)環(huán)節上都有很突出的創(chuàng )新,難得的就是這一點(diǎn),一是因為各個(gè)環(huán)節的負責人均是老手,有創(chuàng )新的實(shí)力;二是一些氣氛方面的因素,振飛的專(zhuān)業(yè)精神感染了我們,振飛有時(shí)候比較容易著(zhù)急,但是他有一個(gè)核心的優(yōu)點(diǎn)就是簡(jiǎn)單,我們基本上不用過(guò)多去考慮和他溝通的方式,只要把信息傳達到了即可,這樣的一個(gè)項目經(jīng)理可以節約很多的時(shí)間成本和腦細胞。
現在的一般的公司里面有許多不適合創(chuàng )新性思維的項目經(jīng)理,對上不會(huì )溝通,對下也不會(huì )激發(fā),天天板著(zhù)個(gè)臉,這樣很難做出什么有創(chuàng )新的項目,我覺(jué)得程序員寫(xiě)的是程序,但是程序員并不是一個(gè)程序。
朱偉波:在同一個(gè)目標下,我就只有一個(gè)想法是要按時(shí)按質(zhì)的完成項目。很多老員工對公司原來(lái)開(kāi)發(fā)的模式感覺(jué)不是很好,都希望能換一種模式。在這種心理下都希望能很好的完成項目,來(lái)證明自己;同時(shí)也可以在規范法下學(xué)到很多新的做法,所以大家的熱情都比較高,希望通過(guò)正規的開(kāi)發(fā)流程學(xué)到很多以前學(xué)不到的規范,這對參于項目的人員來(lái)說(shuō)是一個(gè)很好的經(jīng)歷。
當遇到困難時(shí),我們都能坐下來(lái)很好的商量、討論。再有就是領(lǐng)導的大力支持,讓我們對這個(gè)項目看到了很大的希望,讓大家都能把熱情投入到項目里。
張春艷:從完成這個(gè)項目的測試來(lái)說(shuō),信心源自明確的目標、合理的計劃及各部分之間的配合。對測試組來(lái)說(shuō),蔡志宏需求的配合和朱偉波開(kāi)發(fā)部的配合都不錯。測試組提出的疑問(wèn)及Bug會(huì )及時(shí)得到開(kāi)發(fā)組的回復,或是解決或是經(jīng)振飛確認可以延期解決或可以不解。不會(huì )出現有一個(gè)問(wèn)題沒(méi)人搭理的情況。
劉振飛:經(jīng)過(guò)2004年第一個(gè)網(wǎng)站的實(shí)踐,我非常有信心,可以把在微軟Office組學(xué)到的產(chǎn)品研發(fā)流程和項目管理方法移植到網(wǎng)站項目中。每個(gè)環(huán)節的同事在每個(gè)階段應該做什么事情,要讓每個(gè)人都非常清楚;項目組的任何信息都是公開(kāi)透明的。同時(shí)作為項目經(jīng)理,不要有任何“官架子”,大家在人格上都是平等的;出了意外情況的時(shí)候我要第一個(gè)及時(shí)做出反應,給出經(jīng)過(guò)認真討論、協(xié)商后的可接受的解決方案。
某個(gè)環(huán)節、某個(gè)人做的好,要在整個(gè)項目組及時(shí)提出表?yè)P,特別出色的要爭取申請公司的獎勵;某個(gè)環(huán)節、某個(gè)人做的不好,私下里要及時(shí)批評,找出原因和解決辦法,避免重復同樣的錯誤。當然,關(guān)鍵時(shí)候某個(gè)環(huán)節比較勞累的時(shí)候,要請相關(guān)的同事撮頓飯、緩口氣,搞研發(fā)的人既是理性的,又是感性的,大家都需要得到認可。
《程序員》: 我們看到你的項目管理依賴(lài)大量的文檔。目前這種文檔化的方法似乎在開(kāi)發(fā)人員中不受理解和歡迎,而且在理論界也受到了不少批評,大家怎么看待這個(gè)問(wèn)題?以團隊成員的親身體驗來(lái)說(shuō),文檔的作用是什么?如何恰當地使用文檔?
蔡志宏:這個(gè)項目在嚴格的時(shí)間控制下完成的,振飛為每一個(gè)小的環(huán)節設置了一個(gè)Deadline,包括一個(gè)小圖標的制作,我很佩服他可以這么精確的統計到工作量,做那么多的Excel表格和PPT來(lái)管我們。網(wǎng)站上線(xiàn)之后,我吃驚的發(fā)現在服務(wù)器的CVS目錄里面居然有上百個(gè)這樣的文檔,這些文檔中的有許多是用來(lái)記錄每次開(kāi)會(huì )的情況和隨之而來(lái)的工作分配,事無(wú)巨細!我想如果微軟的Office要是這樣做出來(lái)的話(huà),那肯定要拿好幾個(gè)電腦來(lái)裝這些文件。
朱偉波:文檔是軟件生命周期必不可少的東西。為了讓項目能有一個(gè)清晰且強壯的結構,就要做總體設計,具體到運用什么技術(shù),使用該技術(shù)對我們日后有什么好處、要承擔那些風(fēng)險,以及采用什么樣的結構來(lái)開(kāi)發(fā)等等,這些都一一記錄下了,為下一步的開(kāi)發(fā)做好準備。
在開(kāi)發(fā)前我們還寫(xiě)了一份詳細的概要文檔,這份文檔主要記錄了日后開(kāi)發(fā)的細節,比如包路徑、代碼的規范、需要的輔助類(lèi)、每個(gè)包下放什么東西、公用類(lèi)的簡(jiǎn)介、用法等等。這些文檔為日后我們查詢(xún)起到了舉足輕重的作用,為后續補充進(jìn)來(lái)的人員起到了很好的引領(lǐng)作用。在開(kāi)發(fā)過(guò)程中依據這些詳細的文檔能衡量代碼、判斷思想是否一致、風(fēng)格是否統一等等。
文檔的作用主要是規范行為和風(fēng)格,讓大家有一標準,避免在開(kāi)發(fā)過(guò)程中走一些不必要的彎路。當然,在制定文檔時(shí)需要全面考慮——要可實(shí)施。如果事先在寫(xiě)文檔時(shí)不能考慮周全,那么可能直接導致項目失敗。
張春艷:文檔是主要的工作產(chǎn)品之一,好的文檔可以推進(jìn)后續的工作順利執行。如:好的測試用例,第一、可以作為執行測試的依據和參考資料之一;第二、如果公司的測試人員流動(dòng),新來(lái)的測試人員不會(huì )無(wú)從下手;第三、文檔也是公司的財富之一。
劉振飛:不要去寫(xiě)那些走形式、對項目沒(méi)有實(shí)質(zhì)意義的文檔,比如變了味的所謂ISO9000或CMM認證的那些文檔、極其復雜混亂的UML文檔:每個(gè)人心里都很清楚那種文檔沒(méi)有用處,但還不得不寫(xiě),勞民傷財,非??尚?。
文檔的作用就是把問(wèn)題想清楚、記下來(lái),讓別人能夠看懂、能接手進(jìn)行維護。比如需求Spec的作用是幫助需求定義人把需求細節真正想清楚,對該模塊進(jìn)行詳細定義:功能描述、邏輯、界面、如何使用,就是站在用戶(hù)的角度去細化、去說(shuō)明。需求Spec首先要自己想明白、并以別人能夠理解的文字記錄下來(lái),作為開(kāi)發(fā)的“合同”。Spec要及時(shí)更新,反映最新的狀態(tài)。
當然在實(shí)踐中,中小企業(yè)的項目研發(fā)進(jìn)度都趕的比較急,把文檔細化到什么程度、如何保持更新,都是比較頭痛的事情。
示意圖:項目有幾十份各種格式的文檔,有效的文檔對項目成功極其重要
《程序員》:除了文檔,還有那些制度是你在這個(gè)項目中新建立起來(lái)的?如何保證這些制度的被理解和被執行?
蔡志宏:除了文檔,就是無(wú)所不在的BugFree(http://bugfree.1zsoft.com)系統了,這讓我想到一句話(huà),“體制化是這樣一種東西,一開(kāi)始你排斥它,后來(lái)你習慣它,直到最后你離不開(kāi)它。”開(kāi)始的時(shí)候大家都比較討厭那個(gè)叫BugFree的那東西,實(shí)在是麻煩,感覺(jué)一個(gè)很小的事情都要發(fā)一個(gè)Bug,覺(jué)得純粹是在浪費時(shí)間。后來(lái)發(fā)現這東西有它不可替代的好處,一個(gè)問(wèn)題從出現開(kāi)始到最后解決都有它跟蹤,效率反而提高了許多,盡管在后來(lái)對哪些問(wèn)題應該發(fā)Bug進(jìn)行了一些爭論并做了調整,但是BugFree系統在這個(gè)項目中起到了很重要的作用。
朱偉波:在這次開(kāi)發(fā)過(guò)程中使用了CVS作為我們的版本控制,我們規定在上傳代碼到CVS時(shí)一定需要寫(xiě)注釋?zhuān)员闶潞竽芎芸斓牟樵?xún)。在開(kāi)發(fā)組內部開(kāi)了一個(gè)會(huì )議,我重申了上傳代碼時(shí)寫(xiě)注釋的重要性,并當場(chǎng)上傳了一些不帶注釋的代碼,讓大家來(lái)恢復到我所需要的版本——在這種情況下大家很難一下就恢復到自己想要的版本。通過(guò)這種方法讓大家意識到自己原先的不規范的地方,統一認識,為保證下一步的研發(fā)打下了堅實(shí)的基礎。
還有就是寫(xiě)程序時(shí)要符合公司的代碼規范,其實(shí)就是在符合Sun公司的規范前提下統一我們代碼的規范性。做到這一點(diǎn)其實(shí)是很難的,大家來(lái)著(zhù)不同的環(huán)境,以前接觸的人也是不同。這就要求大家都堅持一個(gè)共同認可的標準,并嚴格的執行這一標準。我很慶幸的是大家都能很好的堅持我們公司制定的代碼規范,并且在我們公司的代碼檢查中順利的通過(guò)了考核。
張春艷:公司在測試這一環(huán)節的起步較晚,基本上是在今年的3月份才組建起了一只測試團隊,還有很多人認為測試是一個(gè)可有可無(wú)的過(guò)場(chǎng)。還好有領(lǐng)導的支持與認可,我們測試組努力把工作做得漂亮,證明自己存在的價(jià)值。用我們的實(shí)戰來(lái)告訴大家,測試不是隨隨便便就能完成的,而是一件有始有終、有流程、有規范、非常嚴謹的一項保證產(chǎn)品質(zhì)量的工作。
在133網(wǎng)站的測試中,我們就是這樣證明了測試組存在的意義:
1、根據振飛制定的規劃,我們按時(shí)完成了測試進(jìn)度,沒(méi)有拖延錄入及上線(xiàn)時(shí)間。
2、首次采用Test Case的方法完成下載流程的測試,并且取得了很好的效果。此次的Test Case還可以移植到以后網(wǎng)站的日常監控測試中。
3、測試效果體現。(1)保證后期錄入人員在錄入時(shí)不出基本錯誤;(2)利用邊界值的測試方法,提前測試出錄入后前臺展示可能不美觀(guān)的情況,便于在錄入前給出提示或硬性規定(如輸入的專(zhuān)題名的長(cháng)度等),來(lái)保證前臺的展示效果和錄入的效率;(3)為了使大數據量的用戶(hù)訪(fǎng)問(wèn)情況下不出問(wèn)題,我對首頁(yè)進(jìn)行了100人同時(shí)訪(fǎng)問(wèn)的壓力測試。
4、在
劉振飛:除了要求需求、開(kāi)發(fā)、測試文檔外,我逐步建立了如下制度:
★ 嚴格的進(jìn)度控制,每個(gè)環(huán)節都要遵守自己同意的進(jìn)度
★ 用CVS來(lái)管理文檔和代碼
★ Java編碼要有規范
★ 每一個(gè)功能模塊都必須經(jīng)過(guò)測試
★ 項目進(jìn)展情況定期通報給全組同事
★ 有延遲的時(shí)候要立即提出來(lái),及時(shí)找到補救辦法
★ 項目完了要及時(shí)總結,驗尸報告不是走過(guò)場(chǎng)
當然我不可能在短短四個(gè)月中通過(guò)這一個(gè)項目把這些制度都打造的很完美。關(guān)鍵是通過(guò)這個(gè)項目給大家灌輸這些意識,通過(guò)以后的工作實(shí)踐不斷強化,真正形成好習慣。這些制度其實(shí)都是研發(fā)中的基本素質(zhì)、本來(lái)就該這么做,所以面對這么多人、這么多事,我一個(gè)人有時(shí)難免有疲累、孤獨的感覺(jué),很多時(shí)候只能抓住大的方面,一些細節只能忽略了,是很無(wú)奈的事情。
《程序員》:盡管133項目的完成已經(jīng)非常不錯了,但在你的項目中仍然會(huì )再次提到“驗尸報告”這個(gè)詞,你認為項目還有哪些不足之處。
蔡志宏:我是第一次參與“驗尸報告”,感覺(jué)很新鮮。的確在最后結束的時(shí)候,大家和振飛面對面的單獨總結了各個(gè)環(huán)節的工作,對整個(gè)項目的運作有了更宏觀(guān)的視野,大家都站在一個(gè)更加高的角度來(lái)看待我們完成的工作。
朱偉波:我覺(jué)得一個(gè)人的成長(cháng)是在一件事即將結束的時(shí)候。在做項目時(shí)我沒(méi)時(shí)間過(guò)多的考慮去用什么新技術(shù)、用什么新概念、會(huì )有什么不足等等。這些都是在項目結束階段時(shí)我們總結所得,回顧項目過(guò)程時(shí)能發(fā)現有那些不足,這樣就有時(shí)間來(lái)考慮在下一個(gè)項目里用什么東西來(lái)彌補不足的地方。
我們開(kāi)發(fā)組和振飛一起總結出來(lái)項目的不足有:(1)美工的工作進(jìn)度緩慢,在很大的時(shí)間里直接影響到開(kāi)發(fā)的進(jìn)度。(2)我們不應該讓美工的開(kāi)發(fā)和代碼的開(kāi)發(fā)并行的來(lái)完成,使得很多的代碼重復。(3)代碼的開(kāi)發(fā)和測試的同步也是一個(gè)不可取的做法,在測試組前期測出的大量Bug,可是當研發(fā)繼續往下走后這些Bug就不存在了。(4)還有一點(diǎn)就是當我們完成這個(gè)項目研發(fā)后,網(wǎng)站營(yíng)運人員遲遲不能到位,內容跟不上。這是我們事先沒(méi)有考慮到的。
張春艷:任何一個(gè)項目都不會(huì )十全十美,就像一個(gè)再好的軟件也不會(huì )沒(méi)有Bug一樣。不是只有做得不好的項目才需要“驗尸報告”。我覺(jué)得“驗尸報告”是這個(gè)項目中很好的一個(gè)環(huán)節。不僅可以把好的東西繼承下來(lái),還把不足的地方提出來(lái),給以后的項目作為經(jīng)驗。
劉振飛:Everything that has a beginning has an end. 項目總結最重要作用的就是“承前啟后,繼往開(kāi)來(lái)”,表?yè)P與自我表?yè)P相結合、批評與自我批評相結合,不能走過(guò)場(chǎng)。不僅要在以后的工作發(fā)揚光大成功的地方,更要解決這個(gè)項目中曾經(jīng)存在的問(wèn)題,真正做到“吃一塹長(cháng)一智”。
示意圖:133網(wǎng)站項目的“驗尸報告”
通過(guò)我這一年多的實(shí)踐,痛感研發(fā)管理不僅僅是某個(gè)項目?jì)炔抗芾淼氖虑?,它涉及到整個(gè)公司的發(fā)展戰略、領(lǐng)導層素質(zhì)、員工能力、薪酬體系乃至企業(yè)文化的建設,僅僅從項目管理的層面去解決問(wèn)題的成效將是非常有限的,這是一個(gè)系統工程,靠一人之力來(lái)完善是不現實(shí)的。歡迎《程序員》的讀者朋友就項目管理一起交流心得,我的Email是:liuzf@pku.org.cn 。
聯(lián)系客服