




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、軟件項目研發(fā)人員的團隊建設與管理最近在與一位總經(jīng)理交流的時候,他談到他們公司的軟件研發(fā)管理,說:“我們公司最大的問題是項目不能按時完成,總要一拖再拖。”他問我有什么辦法能改變這個境況。從這樣一個問題開始,在隨后的交談中,又引出他一連串在軟件研發(fā)管理中的遇到的問題,包括:. 現(xiàn)有代碼質(zhì)量不高,新來的開發(fā)人員接手時寧愿重寫,也不愿意看別人留下的“爛”代碼,怎么辦?. 重構(gòu)會造成回退,怎樣避免?. 有些開發(fā)人員水平相對不高,如何保證他們的代碼質(zhì)量?. 軟件研發(fā)到底需不需要文檔?. 要求提交代碼前做Code Review,而開發(fā)人員不做,或敷衍了事,怎么辦?. 當有開發(fā)人員在開發(fā)過程中遇到難題,工作無
2、法繼續(xù),因而拖延進度,怎么解決?. 如何提高開發(fā)人員的主觀能動性?其實,每個軟件研發(fā)團隊的管理者都面臨著或曾經(jīng)面臨過這些問題,也都有著自己的管理“套路”來應對這些問題。我把我的“套路”再此絮叨絮叨。1. 項目不能按時完成,總要一拖再拖,怎么改變?找解決辦法前,當然要先知道問題為什么會出現(xiàn)。這位總經(jīng)理說:“總會不斷地有需求要改變和新需求提出來,使原來的開發(fā)計劃不得不延長?!痹瓉砣绱?。知道根源,當然解決辦法也就有了,那就是“敏捷”。敏捷開發(fā)因其迭代(Iterative)和增量(Incremental)的思想與實踐,正好適合“需求經(jīng)常變化和增加”的項目和產(chǎn)品。在我講述了敏捷的一些概念,特別是Scru
3、m的框架后,總經(jīng)理也表示了對“敏捷”的認同。其實仔細想想,這里面還有一個非常普遍的問題。對于產(chǎn)品的交付時間或項目的完成時間,往往由高級管理層根據(jù)市場情況決策和確定。在很多軟件企業(yè)中,這些決策者在決策時往往忽略了一個重要的參數(shù),那就是團隊的生產(chǎn)率(Velocity)。生產(chǎn)率需要量化,而不是“拍腦門子”感覺出來的。敏捷開發(fā)中有關于如何估算生產(chǎn)率的方法。所以使用敏捷,在估算產(chǎn)品交付時間或項目完成時間時,是相對較準確的。Scrum創(chuàng)始人之一的Jeff Sutherland說,他在一個風險投資團隊做敏捷教練時,團隊中的資深合伙人會向所有的待投資企業(yè)問同一個問題:“你們是否清楚團隊的生產(chǎn)率?”而這些企業(yè)都
4、很難做出明確的答復。軟件企業(yè)要想給產(chǎn)品定一個較實際的交付日期,就首先要弄清楚自己的軟件生產(chǎn)率。2. 現(xiàn)有代碼質(zhì)量不高,新來的開發(fā)人員接手時寧愿重寫,也不愿意看別人留下的“爛”代碼,怎么辦?這可能是很多軟件開發(fā)工程師都有過的體驗,在接手別人的代碼時,看不懂、無法加新功能,讀代碼讀的頭疼。這說明什么?排除接手人個人水平的因素,這說明舊代碼可讀性、可擴展性比較差。怎么辦?這時,也許重構(gòu)是一種兩全其美的辦法。接手人重構(gòu)代碼,既能改善舊代碼的可讀性和可擴展性,又不至于因重寫代碼帶來的時間上的風險。從接手人心理的角度看,重構(gòu)還有一個好的副作用,就是代碼重構(gòu)之后,接手人覺得那些原來的“爛”代碼被修改成為自己
5、引以自豪的新成就。Scrum敏捷軟件開發(fā)的作者Mike Cohn寫到過:“我的女兒們畫了一幅特別令人贊嘆的杰作后,她們會將它從學校帶回家,并想把它展示在一個明顯的位置,也就是冰箱上面。有一天,在工作中,我用C+代碼實現(xiàn)了某個特別有用的策略模式的程序。因為我認定冰箱門適合展示我們引以為豪的任何東西,所以我就將它放上去了。如果我們一直對自己工作的質(zhì)量特別自豪,可以驕傲地將它和孩子的藝術(shù)品一樣展示在冰箱上,那不是很好嗎?”所以這個積極的促進作用,將使得接手人感覺修改的代碼是自己的了,而且期望能夠找到更多的可以重構(gòu)的東西。3. 重構(gòu)會造成回退,怎樣避免?重構(gòu)確實很容易造成回退(Regression)。
6、這時,重構(gòu)會起到與其初衷相反的作用。所以我們應該盡可能多地增加單元測試。有些老產(chǎn)品,舊代碼,可能沒有或者沒有那么多的單元測試。但我們至少要在重構(gòu)前,增加對要重構(gòu)部分代碼的單元測試?;谥貥?gòu)目的的單元測試,應該遵循以下的原則(見重構(gòu)第4章:構(gòu)筑測試體系):- 編寫未臻完善的測試并實際運行,好過對完美測試的無盡等待。測試應該是一種風險驅(qū)動行為,所以不要去測試那些僅僅讀寫一個值域的訪問函數(shù),應為它們太簡單了,不大可能出錯。- 考慮可能出錯的邊界條件,把測試火力集中在哪兒。扮演“程序公敵”,縱容你心智中比較促狹的那一部分,積極思考如何破壞代碼。- 當事情被公認應該會出錯時,別忘了檢查是否有異常如期被拋
7、出。- 不要因為“測試無法捕捉所有Bug”,就不撰寫測試代碼,因為測試的確可以捕捉到大多數(shù)Bug。- “花合理時間抓出大多數(shù)Bug”要好過“窮盡一生抓出所有Bug”。因為當測試數(shù)量達到一定程度之后,測試效益就會呈現(xiàn)遞減態(tài)勢,而非持續(xù)遞增。說到重構(gòu)這本書,其實在每個重構(gòu)方法中都有“作法(Mechanics)”一段,在重構(gòu)的實踐中按照上面所述的步驟進行是比較穩(wěn)妥的,同時也能避免很多不經(jīng)意間制造的回退出現(xiàn)。4. 要求提交代碼前做Code Review,而開發(fā)人員不做,或敷衍了事,怎么辦?如果每個開發(fā)人員都是積極主動的,Code Review的作用能落到實處。但如果不是呢?團隊管理者需要一些手段促使其
8、有效地進行Code Review。首先,我們采用的Code Review有2種形式,一是Over-the-shoulder,也就是2個人座在一起,一個人講,另一個人審查。二是用工具Code Collaborator來進行。無論哪種形式,在提交代碼時,必須注明關于審查的信息,比如:審查者(Reviewer)的名字或?qū)彶樘?Review ID,Code Collaborator自動生成),每天由一名專職人員來檢查Checklist中的每一條,看是否有人漏寫這些信息,如果發(fā)現(xiàn)會提醒提交的人補上。另外,某段提交的代碼出問題,提交者和審查者都要一起來解決出現(xiàn)的問題,以最大限度避免審查過程敷衍了事。博主I
9、novy在某個評論說的很形象:“木(沒)有賞罰的制度,就是帶到廁所的報紙,看完就可以用來擦屁股了。”沒有獎懲制度作保證,當然上面的要求沒有什么效力。所以,當有人經(jīng)常不審查就提交,或?qū)彶闀r不負責任,它的績效評定就會因此低一點,而績效的評分是跟每年工資漲落掛鉤的。說白了,可能某個人會因為多次被查出沒有做Code Review就提交代碼,而到年底加薪時比別人少漲500塊錢。5. 軟件研發(fā)到底需不需要文檔?軟件研發(fā)需要文檔的起原可能有2種,一是比較原始的,需要文檔是為了當開發(fā)人員離職后,企業(yè)需要接手的人能根據(jù)文檔了解他所接手的代碼或模塊的設計。二是較高層次的,企業(yè)遵從ISO9001質(zhì)量管理體系或CMM
10、I。對于第一種,根源可能來自于兩個方面:- 原開發(fā)人員設計編碼水平不高,其代碼可讀性較差。- 設計思想和代碼只有一個人了解,此人一旦離職,無人知道其細節(jié)。在編碼前寫一些簡單的設計文檔,有助于理清思路,尤其是輔以一些UML圖,在交流時也是有好處的。但同時,我們也應該提高開發(fā)人員的編碼水平增加其代碼的可讀性,比如增強其變量命名的可讀性、用一些被大家所了解的設計模式來替代按自己某些獨特思路編寫的代碼、增加和改進注釋等等,以減少不必要的文檔。另外推行代碼的集體所有權(quán)(Collective Ownership),避免某些代碼只被一個人了解,這樣可以減少以此為目的而編寫的文檔。對于第二種,情況有些復雜。接
11、觸過敏捷開發(fā)的人都知道敏捷宣言中的“可以工作的軟件勝于面面俱到的文檔”。接觸過CMMI開發(fā)或者ISO9001質(zhì)量管理體系的人知道它們對文檔的要求是多么的高。它們看起來水火不相容。但是,它們的宗旨是一致的,即:構(gòu)建高質(zhì)量的產(chǎn)品。對于敏捷,使用手寫用戶故事來記錄需求和優(yōu)先級的方法,以及在白板上寫畫的非正式設計,是不能通過ISO9001的審核的,但當把它們復印、拍照、增加序號、保存后,可以通過審核。每次都是成功的Daily Build和Auto Test報告無法證明它們是否真正被執(zhí)行并真正成功,所以不能通過ISO9001的審核。但添加一個斷言失敗(類似assert(false)的斷言)的測試后,則可
12、以通過審核。CMMI與敏捷也是互補的,前者告訴組織在總體條款上做什么,但是沒有說如何去做,后者是一套最佳實踐。SCRUM之類的敏捷方法也被引入過那些已通過CMMI5級評估的組織。很多企業(yè)忘記了最終目標是改進他們構(gòu)建軟件及遞交產(chǎn)品的方式,相反,它們關注于填寫按照CMMI文檔描述的假想的缺陷,卻不關心這些變化是否能改進過程或產(chǎn)品。所以敏捷開發(fā)在過程中只編寫夠用的文檔,和以“信息的溝通、符合性的證據(jù)以及知識共享”作為主要目標的質(zhì)量體系文檔要求并不矛盾。在實踐中,我們可以按以下方法做,在實現(xiàn)SCRUM的同時,符合審核和評估的要求:- 制作格式良好的、被細化的、被保存的和能跟蹤的Backlog。復印和照
13、片同樣有效。- 將監(jiān)管需要的文檔工作也放入Backlog。除了可以確保它們不被忘記,還能使監(jiān)管要求的成本是可見的。- 使用檢查列表,以向?qū)徍藛T或評估員證明活動已執(zhí)行。團隊對“完成”的定義(Definition of “Done”)可以很容易轉(zhuǎn)變?yōu)橐环輽z查列表。- 使用敏捷項目管理工具。它其實就是開發(fā)程序和記錄的電子呈現(xiàn)方式。總而言之,軟件研發(fā)需要文檔(但文檔的形式可以是多種多樣的,用Word寫的文字式的文件是文檔,用Visio畫的UML圖也是文檔,保存在Quality Center中的測試用例也是文檔),同時我們只需寫夠用的文檔。6. 當有開發(fā)人員在開發(fā)過程中遇到難題,工作無法繼續(xù),因而拖延進
14、度,怎么解決?這也是個常遇到的問題。如果管理者對于某個工程師的具體問題進行指導,就會陷入過度微觀管理的境地。我們需要找到宏觀解決辦法。一,我們基于Scrum的“團隊有共同的目標”這一規(guī)則,利用前面提到的集體所有權(quán),當出現(xiàn)這些問題時,用團隊中所有可以使用的力量來幫助其擺脫困境,而不是任其他人袖手旁觀。當然這里會牽扯到績效評定的問題,比如:提供幫助的人會覺得,他的幫助無助于自己績效評定的提高,為什么要提供幫助。這需要人力資源部門在使用Scrum開發(fā)的團隊的績效評估中,盡量消除那些傾向個人的因素,還要包含團隊協(xié)作的因素,廣泛聽取個方面的意見,更頻繁地評估績效等等。二,即使動用所有可以使用的力量,如果
15、某個難題真的無法逾越,為了減少不能按時交付的風險,產(chǎn)品負責人應當站出來,并有所作為。要么重新評估Backlog的優(yōu)先級,使無法繼續(xù)的Backlog遲一點交付,先做一些相對較低優(yōu)先級的Backlog,以保證整體交付時間不至于延長;要么減少部分功能,給出更多的時間去攻克難題。總之逾越技術(shù)上難關會使團隊的生產(chǎn)率下降,產(chǎn)品負責人必須作出取舍。7. 有些開發(fā)人員水平相對不高,如何保證他們的代碼質(zhì)量?當然首先讓較有經(jīng)驗的人Review其要提交的代碼,這幾乎是所有管理者會做的事。除此之外,管理者有責任幫助這些人(也包括水平較高的人)提高水平,他們可以看一些書,上網(wǎng)看資料,讀別人的代碼等等,途經(jīng)還是很多的。但
16、問題是你如何去衡量其是否真正有所收獲。我們的經(jīng)驗是,在每年大約3月份為每個工程師制定整個年度的目標,每個人的目標包括產(chǎn)品上的,技術(shù)上的,個人能力上的等4到5項。半年后和一年后,要做兩次Performance Review,目標是否實現(xiàn),也會跟績效評定掛鉤。我們在制定目標時,遵循SMART原則,即:Specific(明確的):目標應該按照明確的結(jié)果和成效表述。Measurable(可衡量的):目標的完成情況應該可以衡量和驗證。Aligned(結(jié)盟的):目標應該與公司的商業(yè)策略保持一致。Realistic(現(xiàn)實的):目標雖然應具挑戰(zhàn)性,但更應該能在給定的條件和環(huán)境下實現(xiàn)。Time-Bound(有時
17、限的):目標應該包括一個實現(xiàn)的具體時間。比如:某個人制定了“初步掌握本地化技術(shù)”的目標,他要確定實現(xiàn)時間,要描述學習的途經(jīng)和步驟,要通過將技術(shù)施加到公司現(xiàn)有的產(chǎn)品中,為公司產(chǎn)品的本地化/國際化/全球化作一些探索,并制作Presentation給團隊演示他的成果,并準備回答其他人提出的問題。團隊還為了配合其實現(xiàn)目標,組織Tech Talk的活動,供大家分享每個人的學習成果。通過這些手段,提高開發(fā)人員的自學興趣,并逐步提高開發(fā)人員的技術(shù)水平。8. 如何提高開發(fā)人員的主觀能動性?提高開發(fā)人員的主觀能動性,少不了激勵機制。不能讓開發(fā)人員感到,5年以后的他和現(xiàn)在比不會有什么進步。你要讓他感到他所從事的是
18、一個職業(yè)(Career),而不只是一份工作(Job)。否則,他們是不會主動投入到工作中的。我們的經(jīng)驗是提供一套職業(yè)發(fā)展的框架。框架制定了2類發(fā)展道路,管理類(Managerial Path)和技術(shù)類(Technical Path),6個職業(yè)級別(1-3級是Entry/Associate,Intermediate,Senior。4級管理類是Manager/Senior,技術(shù)類是Principal/Senior Principal。5級管理類是Director/Senior Director,技術(shù)類是Fellow/Architect。6級是Executive Management)。每個級別都有13個方面的具體要求,包括:范圍(Scope)、跨職能(Cross Functional)、層次(Level)、知識(Knowledge)、指導(Guidance)、問題解決(Problem Solving)、遞交成果(Delivering Result)、責任感(Responsbility)、導師(Mentoring)、交流(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中介居間合同解除協(xié)議書
- 會議場地租賃合同協(xié)議書
- 鋼結(jié)構(gòu)臨時工合同協(xié)議書
- 油卡訂購合同協(xié)議書
- 貨架安裝合同協(xié)議書
- 賣房裝修合作協(xié)議書合同
- 款項合同協(xié)議書
- 房屋租賃合同解除協(xié)議書
- 合同協(xié)議書逾期
- 美發(fā)店合作協(xié)議書合同
- 茶葉加工機械與設備(全套524張課件)
- 五年級下冊數(shù)學課件-4.分數(shù)連加、連減和加減混合運算及應用練習 蘇教版 (共11張PPT)
- 設備機房出入登記表
- 起重吊裝作業(yè)審批表
- 工程質(zhì)保金付款申請表格
- 最新三角形的特性優(yōu)質(zhì)課教學設計公開課教案
- X射線衍射學:第九章 點陣常數(shù)的精確測定
- 招商工作策略與路徑pptPPT通用課件
- 宮腔鏡的儀器及噐械(課堂PPT)
- 通訊工具的發(fā)展PPT課件
- 血常規(guī)檢驗報告單模板
評論
0/150
提交評論