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