掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
引言 誰應(yīng)該對項目進行管理

創(chuàng)新互聯(lián)專注于企業(yè)營銷型網(wǎng)站、網(wǎng)站重做改版、密山網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、html5、購物商城網(wǎng)站建設(shè)、集團公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為密山等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
項目管理的的文章和書籍到處都是,我也不敢在這班門弄斧。所以以下的文字主要關(guān)注從沒有管理到開始對項目進行一些管理這個過程,通常沒有進行管理或者很少進行管理的項目也不會特別大,所以本文并不一定適合大型項目。本文也不完全符合某***程或者標準,其中一些只是我個人的一些淺見,如果能拋磚引玉,那就再好不過了;如果哪里說的不對,肯定各位筒子們盡管拍磚。
作為項目組的成員之一,不論你是開發(fā)工程師,測試工程師還是數(shù)據(jù)庫工程師,你都對項目管理負有責(zé)任。在工作中,工程師應(yīng)該精通自己的部分,優(yōu)秀的工程師還應(yīng)該熟悉別人的部分,實際情況中的工程師通常還需要在必要的時候(有人離開)頂上去做任何一個部分,此時,對項目的整體的把握至關(guān)重要。在參與到管理的過程中,也會提高自己的項目管理能力。其實,“項目管理”四個字重點不在管理,而在項目,當你的心在項目上,你就是管理者,項目就有可能因為你而成功;反之,即使你是個小角色,項目也可能因你而面臨失敗的危險。
?。ㄒ唬?我們需要什么樣的人
在前面的文字中,我提到項目中的人員。我個人通常喜歡稱項目的參與者為“工程師”,不管是開發(fā),測試還是數(shù)據(jù)庫管理,還是需求分析,項目管理人員。工程師這個詞,其實包含了很多內(nèi)容,不僅僅是壘代碼,而是要像做一個建筑工程一樣,考慮自己的部分對其他部分的影響,設(shè)計自己的部分,構(gòu)建自己的部分,測試自己的部分,這是一個有機互動的過程,不是一個簡單機械運動。我要強調(diào)的是工程師是技術(shù)工種,不是熟練工種,作為項目組的一員,我們也要從內(nèi)心去做一個技術(shù)工種而不是熟練工種。
基于以上的考慮,我認為項目組成員應(yīng)該至少具備如下三個特征:
1, 具有本領(lǐng)域內(nèi)基本的技術(shù)能力和學(xué)習(xí)能力。我堅信不知道開機按鈕在哪的同志確實干不了修理電腦的活兒,也不認為三天學(xué)不會hello world的程序員還有在這個領(lǐng)域生存的機會。
2, 專注于工作的精神。哪怕你工作一分鐘,也請專注的工作,專注的思考。專注成就價值,只有專注的做事情,才能有所斬獲。
3, 能夠與人溝通。眾所周知,溝通對于項目的成功有多么重要,所以溝通是項目組成員比不可少的素質(zhì)之一。
工程師,還是代碼工人。你的選擇?
?。ǘ?始終關(guān)注交付物--不管是項目經(jīng)理還是開發(fā)人員(項目中的所有人)
項目一開始,我們就開始和客戶談需求?!捌囋趺促u跟我程序員有什么關(guān)系?如何讓你的客戶滿意又關(guān)我什么事?只要告訴我你要什么就行了嘛,廢話這么多”,很多程序員都這么想。
隨著這些我們并不關(guān)心的事情越談越多越談越深入,我們越不耐煩,越想早點兒結(jié)束,進入我們自己的代碼的世界。此時,我們忘記了真正重要的真正最核心的東西:我們要交付什么東西!此時你會說,我沒有忘記,我就是要做個B2B的電子交易平臺。沒錯兒,就是它,但是它是什么呢?包括什么呢?為什么是這樣的呢?將來有可能會變成什么樣呢?甚至這個平臺能為我們的客戶帶來什么呢?不知道你能回答上來多少。
我們的交付物---它可能是一個獨立工作的功能,可能是一個部署的方案,也可能是一個幫助文檔, 它才是值得我們一直關(guān)注并且必須要關(guān)注的東西。對于它,我們應(yīng)該深入的去了解,它能干什么? 為什么要這么干或者能為客戶帶來什么?在整個項目中處于什么位置?關(guān)鍵的挑戰(zhàn)在哪里?何時交付最給力?最晚何時交付還能有效?如果沒能交付會有什么后果,還有替代方案嗎?
為了了解我們的交付物,我們必須深入的了解客戶的需求。當我說到需求,我不想你聯(lián)想到海量的客戶業(yè)務(wù)信息,雖然那也是我們需要了解的;我只想讓你去深入了解當前你在思考的交付物,以及跟它有關(guān)聯(lián)的業(yè)務(wù)接口,當然,還有它產(chǎn)生的影響。關(guān)注交付物的***好處就是能夠保證項目的交付,而最核心的技術(shù)就是學(xué)習(xí)客戶的業(yè)務(wù)—雖然我們是程序員,但其實我們應(yīng)該是全才。
在此過程中,原型法是個不錯的主意。原型不一定是一個客戶看的東西,我不太看重那些重型的花費太多精力的原型。有時候,一個流程圖,簡單的幾行字,幾條描述業(yè)務(wù)的問題,一段與用戶關(guān)于功能點的深入短暫的交談,都是很好的原型。原型其實就是將你理解的東西,讓用戶理解,并得到用戶的反饋,不管用什么方式,只要達到這個目的,那你的原型就成功了。
***,一切關(guān)注交付物的努力都將迎來收獲的季節(jié):驗收。項目組員可能關(guān)注交付物,而項目***可能更關(guān)注驗收。其實關(guān)注交付物,就是關(guān)注驗收,因為驗收就是由一系列的交付物組成。乍一看,驗收貌似就是一堆代碼或者一堆文檔,其實不然。驗收其實是一個過程,是一個從開始就需要得到關(guān)注的過程。在項目開始的計劃和設(shè)計階段,每一個交付物都應(yīng)該有一個完成的標準,即做到什么時候為止,一切交付物都應(yīng)該是可驗證的,而這種驗證方式應(yīng)該得到客戶的認可。這些驗證方式可以是一些測試用例,也可以是一些其它的標準,但是必須得有,我們一切的工作都要圍繞這個驗證標準進行。要努力讓客戶相信:驗收就是跑完客戶已經(jīng)簽字的測試用例,系統(tǒng)出現(xiàn)的錯誤在可以接受的范圍之內(nèi)。我們并不是欺騙客戶,而是要客戶進行深度參與,讓它們意識到這些測試用例的重要性,從而更好的實現(xiàn)雙贏。
?。ㄈ?我們需要哪些文檔,工具和努力
軟件項目肯定離不了文檔和管理工具,如果您的項目還沒有它們,那么請從現(xiàn)在開始。那么文檔是不是越多越好呢?老話說的好,合適的才是***的。小而精的文檔和工具會讓我們事半功倍,大而全的文檔會讓我們疲于奔命,***迷失在文檔的海洋中。
我們寫代碼的都知道,錯誤的注釋比沒有注釋更可怕;同樣的,沒有及時得到更新的文檔比沒有文檔更可怕,因為文檔就是項目的注釋。那么我們是否有必要去更新那些我們根本沒有用到的文檔呢?很顯然,那是非常沒有必要的,是對資源的浪費。文檔說起來其實就是一個工具,是一個讓我們開發(fā)時有依據(jù),可以追溯開發(fā)過程以及記錄開發(fā)結(jié)果的工具。我們只有用到它,它才有存在的必要。
那么文檔過于少或者干脆沒有文檔,不是更簡潔?我想說:不寫代碼不是更簡潔?玩笑歸玩笑,沒有文檔或者文檔太少會導(dǎo)致的問題大家可能也都遇到過:那就是過程不可追溯,有些非常重要的邏輯沒有記錄,需要用到時團隊成員各執(zhí)一詞,甚至需要重新找客戶確認而是客戶認為我們不夠?qū)I(yè);有些非常重要的設(shè)計沒有記錄,導(dǎo)致代碼維護困難,以至于維護人員破口大罵開發(fā)人員寫的什么垃圾代碼做的什么垃圾設(shè)計。有些設(shè)計非常的巧妙,非常的值得學(xué)習(xí),然而就是因為沒有留下記錄而被初學(xué)者如我一樣的人罵了N次。在反省自己不夠聰明時,是否也該讓寫代碼的人反省一下為什么沒能留下點兒記錄?
有一種觀點是***的設(shè)計就是代碼,意思是代碼就是設(shè)計,代碼應(yīng)該非常的優(yōu)秀,可讀性特別好,讓人一看就明白,我完全同意。如果代碼寫到這種程度,那文檔就真的沒用了。那么請自問,您是這樣嗎?如果是,沒文檔,沒問題;如果不是,請把重要的東西寫下來。那么,哪些是重要的呢?
哪些是必須的, 哪些是Optional的。對于哪些文檔更重要些,應(yīng)該由項目的具體情況而定,特別是項目的大小,邏輯的復(fù)雜程度,人員的情況等等很多因素。在我做過的項目中,我個人認為最重要的一些文檔和工具如下所述:
1, 功能說明書(Functional Specification)------按獨立功能劃分優(yōu)先級,每一條記錄都是一個可交付物,都是一個功能。整個文檔就描述了整個項目的交付功能和優(yōu)先級。項目中的所有人,都應(yīng)該關(guān)注這個文檔:測試用它來寫測試用例;開發(fā)人員用它來決定先開發(fā)哪個功能;PM用它來查看功能的完成和驗證狀態(tài)。它通常不應(yīng)該內(nèi)容過多(由項目規(guī)模決定),我覺得最多兩行字就可以描述一個獨立工作的功能,至于對這個功能的理解,應(yīng)該由負責(zé)它的程序員來完成。
2, 核心流程圖。這個流程圖可能描述了用戶使用該系統(tǒng)的過程;也可能描述系統(tǒng)中數(shù)據(jù)的流轉(zhuǎn);也可能描述表單的流轉(zhuǎn)??傊?,它描述一個過程,這個過程對用戶來說非常重要。這個圖有時候也會被其它的圖,如順序圖代替。
3, 部署文檔。該文檔描述了該系統(tǒng)應(yīng)該如何部署,它不一定非要是一個word文檔,也可能僅是一個bat文件而已。這個文檔應(yīng)該描述該項目如何部署,步驟是怎么樣的,需要哪些文件,需要哪些硬件支持,以及需要注意什么。部署歷來都不太被重視,大家覺得只要東西做出來了,部署不就是放上去嗎?其實不然。在經(jīng)歷了一定周期的開發(fā)后,開發(fā)過程中積累的配置,對環(huán)境的要求,在真正部署的時候很多就忘了,所以部署可能會花費很多沒必要的時間,我覺得這也是微軟要做daily build的原因之一,每天都build一個可用的版本,當然部署就沒有問題了。我們剛開始可能不需要每天都build一個版本,但最少要一周或者兩周部署一個版本吧。每次部署都整理一個自動化的腳本或者文檔,會讓你***上線的時候非常的從容。
4, 測試用例。我不是一個測試人員,測試也是我覺得一直沒有做到位的地方??陀^的說,我覺得用例應(yīng)該花很大心思去編寫,就像用戶真正的在使用軟件一樣。項目應(yīng)該在設(shè)計和開發(fā)的時候就以滿足用例為目標,而不是開發(fā)完了才想起來用例,去測試,發(fā)現(xiàn)問題再修改,回頭想想,這可能就是測試驅(qū)動開發(fā)產(chǎn)生的原因吧。我們知道用戶發(fā)現(xiàn)錯誤修改的成本高于我們自己發(fā)現(xiàn)的錯誤;同樣的,設(shè)計和開發(fā)階段就解決的問題成本也遠遠小于測試階段發(fā)現(xiàn)的。正是,問題發(fā)現(xiàn)的越早,解決起來就越容易,成本就越低。
5, Bug管理工具。這個管理工具可以是一個excel,當然,我并不推薦這么做,畢竟excel卻是不那么自動化。但是,只要比excel自動化一點點兒的信息系統(tǒng)就可以了,它需要可以記錄問題,可以傳截圖,這就夠了。我推薦使用bug tracker,這是個dotnet開發(fā)的開源的bug管理工具,其實也可以管理需求,是非常實用的。
以上五個是我認為最重要的,我覺得是項目開始進行管理的階段必不可少的;而下面幾個,則是大家視情況可選的。
6, 核心類圖。這個可能是可選的,因為有時候,類的關(guān)于沒那么復(fù)雜,也就沒有必要有這個圖;相反,則需要進行記錄。
7, 數(shù)據(jù)庫設(shè)計。數(shù)據(jù)庫設(shè)計文檔可能在review的時候用到。
8, 系統(tǒng)間接口圖。如果產(chǎn)品有若干個子系統(tǒng),如web service等等,那么我認為需要一個描述系統(tǒng)間接口和交互關(guān)系的圖,這個圖應(yīng)該在設(shè)計的早期就開發(fā)出來供大家使用并且隨時保持更新和關(guān)注。
有了文檔和工具,是不是就一切OK了呢?不對,就像大而全的文檔并不能幫助我們成功一樣,有了文檔并不代表項目就能成功,如何維護和使用這些文檔和工具是相當重要的。每個文檔都應(yīng)該有人去維護,那么誰去做這個事呢?我認為項目經(jīng)理應(yīng)該經(jīng)常拿著功能說明書開會,它也可以被看做是WBS的初級版本,可以被標注狀態(tài)和優(yōu)先級;所有人都應(yīng)該熟悉流程圖,并隨時提出對流程圖進行檢驗和review;應(yīng)該指定一個人負責(zé)構(gòu)建,這并不需要花費很多時間,但是需要細心和一些***主義精神;測試人員自然要維護好測試用例;每個人特別是開發(fā)人員,都應(yīng)該有一種覺悟,那就是一旦想起了哪些重要的邏輯,不管是業(yè)務(wù)的邏輯還是系統(tǒng)的算法,都應(yīng)該記錄到bug管理工具上。Bug管理工具完全可以記錄這些零散但卻重要的東西,以便將來方便查詢。
在這里我也是根據(jù)自己的經(jīng)歷簡單的談了一些我的看法,這并不是金科玉律,我還得說,合適你的才是***的。
?。ㄋ模?代碼規(guī)范的選擇
做開發(fā)不可避免的遇到代碼規(guī)范,從上學(xué)時就會學(xué)習(xí)到一些規(guī)范,但是每個公司都不同,那么我們到底要遵守哪些規(guī)范呢?我個人認為,一個合格的程序員應(yīng)該可以隨時調(diào)整自己適應(yīng)任何一種規(guī)范,這是一種職業(yè)素養(yǎng)和能力。而何時該遵循何種規(guī)范,這也有一定的原則。
1, 在現(xiàn)有系統(tǒng)(代碼)基礎(chǔ)上進行開發(fā)。這種情況下,我們應(yīng)該盡量的去遵循原有系統(tǒng)的規(guī)范,不論是命名還是注釋。因為如果這時你非要按照自己的習(xí)慣寫,那么系統(tǒng)就會出現(xiàn)兩種完全不同風(fēng)格的代碼,這對將來的維護是一種噩夢。但是,遵循原有規(guī)范不是遷就原有錯誤。如果發(fā)現(xiàn)原有的規(guī)范會造成一定的問題,就要立刻改正,不能裝傻充愣假裝看不見。
2, 新建團隊開發(fā)新的系統(tǒng)。新建的團隊中團隊成員可能來自不同的環(huán)境,對規(guī)范的選擇傾向一定是不完全一樣的,此時要怎么做呢?這時,項目的***應(yīng)該組織大家一起做一個決定,討論如何定義變量,如何給控件取名等等。在出現(xiàn)意見不統(tǒng)一又誰都說服不了誰的情況時,項目經(jīng)理應(yīng)該做出明確的決定。此時選擇一種規(guī)范遠比同時遷就兩個人要來的好,不然造成新系統(tǒng)中存在兩種規(guī)范,同樣是維護的噩夢。
3, 穩(wěn)定團隊開發(fā)新的系統(tǒng)。這種情況就容易得多,團隊穩(wěn)定后團隊成員漸漸的了解了互相的習(xí)慣,互相學(xué)習(xí)后就更容易達成妥協(xié)。只要注意讓新加入的成員適應(yīng)就可以了。
有人可能覺得代碼規(guī)范沒什么大不了,功能正確沒有bug不就行了?當然,如果沒有bug那肯定沒問題,然而一個系統(tǒng)運行到退休還沒有bug,哪位見過呢?我做了一些運維工作之后才漸漸了解到,不同風(fēng)格的代碼讀起來就像是一會兒在赤道,一會兒在南極,非常的痛苦,有時甚至?xí)斐上到y(tǒng)很多的不一致,大大增加了維護的工作量。我們的目標之一不就是增加系統(tǒng)的可維護性嗎?
?。ㄎ澹?review和重構(gòu)
說到review,有些筒子可能立刻就想到了:吵架。確實,有的時候review真的可能演變成吵架,但是我們?yōu)榱隧椖康某晒?,這個風(fēng)險一定要冒,慢慢成熟以后,被人批評的次數(shù)多了,臉皮厚點兒就好了。;)玩笑歸玩笑,review確實是需要技巧的:在review別人的代碼時,要注意你的話語有時會傷害別人的自尊心,讓別人覺得你是在雞蛋里頭挑骨頭;在別人review你的代碼時,同樣的你也會覺得別人是在雞蛋里頭挑骨頭,傷害你的自尊心。這里我也沒有太多的技巧可言,一句話,換位思考,臉皮厚點兒吧。哈。
Review可能分成以下幾種:
1, 設(shè)計的review。說起review大家更多想到的是大家坐在一起邊侃大山邊看別人的代碼,其實設(shè)計的review是更加重要的和更加高級的,也是更有價值的,問題發(fā)現(xiàn)的早解決的代價就小嘛。在review別人或者自己的設(shè)計時,我們都能學(xué)到別人的設(shè)計理念,方法和技巧,這能大大提高團隊成員的能力。項目中的技術(shù)牛人,項目經(jīng)理和技術(shù)骨干應(yīng)該作為設(shè)計review的主力人員,多多談?wù)勛约旱目捶?;同時也要注意尊重設(shè)計者的感情,讓大家都有收獲的同時,把項目做好。
2, 代碼的review。代碼review的形式可以多種多樣,兩個人坐在一起看看代碼也是一種review,也沒有必要非得所有人都湊齊。Review代碼的可以讓自己迅速成長,也能讓項目組成員熟悉別人的業(yè)務(wù)和代碼,以***程度減少人員變動造成的損失;同時也能讓代碼規(guī)范更加一致。
不管是設(shè)計review還是代碼review,都不一定要全部人員到場,這可能會浪費一些時間;但是設(shè)計的review最少要有一個技術(shù)骨干或者項目經(jīng)理在場,否則review就會變成討論會進而升級成戰(zhàn)爭。
Review有時候也會被認為浪費時間,特別是很多程序員對review別人的代碼沒有任何興趣,也不愿意讓別人對自己的代碼說三道四。我想說,作為一個二十一世紀的軟件工程師,我們不但要善于對技術(shù)進行鉆研,更要善于把自己的技術(shù)傳播出去,也要善于通過別人的指點更快的提高自己的工作能力。這是一個開放的時代,是一個需要交流的時代,是一個迅速發(fā)展的時代,你慢,就就完蛋。
在review發(fā)現(xiàn)了很多問題之后,我們要怎么辦呢?對,重構(gòu)。這幾年重構(gòu)這個詞已經(jīng)非常的火了,大家都說重構(gòu)很重要,但是又有幾個人真正的去重構(gòu)呢?有幾個人真正的不允許自己寫重復(fù)代碼呢?大家是不是還在說:“項目schedule太緊了,等有空了再優(yōu)化吧”?我認為,這句話是有問題的,項目的總時間短,任務(wù)重,我們沒辦法;但是優(yōu)化(重構(gòu))卻不會增加這種時間的壓力,相反的,重構(gòu)會大大減少后續(xù)的開發(fā)和debug時間。因為重構(gòu)后,出現(xiàn)的bug更容易被定為,更容易被fix;相反垃圾代碼引起的debug和fix bug的時間將遠遠大于重構(gòu)的時間。
原文鏈接:http://www.cnblogs.com/wisdomsoft/archive/2011/08/16/2140148.html
【編輯推薦】

我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流