• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            兔子的技術博客

            兔子

               :: 首頁 :: 聯系 :: 聚合  :: 管理
              202 Posts :: 0 Stories :: 43 Comments :: 0 Trackbacks

            留言簿(10)

            最新評論

            閱讀排行榜

            評論排行榜

            幾個軟件研發團隊管理的小問題

            最近在與一位總經理交流的時候,他談到他們公司的軟件研發管理,說:“我們公司最大的問題是項目不能按時完成,總要一拖再拖。”他問我有什么辦法能改變這個境況。從這樣一個問題開始,在隨后的交談中,又引出他一連串在軟件研發管理中的遇到的問題,包括:

             

            . 現有代碼質量不高,新來的開發人員接手時寧愿重寫,也不愿意看別人留下的“爛”代碼,怎么辦?

            . 重構會造成回退,怎樣避免?

            . 有些開發人員水平相對不高,如何保證他們的代碼質量?

            . 軟件研發到底需不需要文檔?

            . 要求提交代碼前做Code Review,而開發人員不做,或敷衍了事,怎么辦?

            . 當有開發人員在開發過程中遇到難題,工作無法繼續,因而拖延進度,怎么解決?

            . 如何提高開發人員的主觀能動性?

             

            其實,每個軟件研發團隊的管理者都面臨著或曾經面臨過這些問題,也都有著自己的管理“套路”來應對這些問題。我把我的“套路”再此絮叨絮叨。

             

            1. 項目不能按時完成,總要一拖再拖,怎么改變?

             

            找解決辦法前,當然要先知道問題為什么會出現。這位總經理說:“總會不斷地有需求要改變和新需求提出來,使原來的開發計劃不得不延長。”原來如此。知道根源,當然解決辦法也就有了,那就是“敏捷”。敏捷開發因其迭代(Iterative)和增量(Incremental)的思想與實踐,正好適合“需求經常變化和增加”的項目和產品。在我講述了敏捷的一些概念,特別是Scrum的框架后,總經理也表示了對“敏捷”的認同。

             

            其實仔細想想,這里面還有一個非常普遍的問題。對于產品的交付時間或項目的完成時間,往往由高級管理層根據市場情況決策和確定。在很多軟件企業中,這些決策者在決策時往往忽略了一個重要的參數,那就是團隊的生產率(Velocity)。生產率需要量化,而不是“拍腦門子”感覺出來的。敏捷開發中有關于如何估算生產率的方法。所以使用敏捷,在估算產品交付時間或項目完成時間時,是相對較準確的。Scrum創始人之一的Jeff Sutherland說,他在一個風險投資團隊做敏捷教練時,團隊中的資深合伙人會向所有的待投資企業問同一個問題:“你們是否清楚團隊的生產率?”而這些企業都很難做出明確的答復。軟件企業要想給產品定一個較實際的交付日期,就首先要弄清楚自己的軟件生產率。

             

            2. 現有代碼質量不高,新來的開發人員接手時寧愿重寫,也不愿意看別人留下的“爛”代碼,怎么辦?

             

            這可能是很多軟件開發工程師都有過的體驗,在接手別人的代碼時,看不懂、無法加新功能,讀代碼讀的頭疼。這說明什么?排除接手人個人水平的因素,這說明舊代碼可讀性、可擴展性比較差。怎么辦?這時,也許重構是一種兩全其美的辦法。接手人重構代碼,既能改善舊代碼的可讀性和可擴展性,又不至于因重寫代碼帶來的時間上的風險。

             

            從接手人心理的角度看,重構還有一個好的副作用,就是代碼重構之后,接手人覺得那些原來的“爛”代碼被修改成為自己引以自豪的新成就。《Scrum敏捷軟件開發》的作者Mike Cohn寫到過:“我的女兒們畫了一幅特別令人贊嘆的杰作后,她們會將它從學校帶回家,并想把它展示在一個明顯的位置,也就是冰箱上面。有一天,在工作中,我用C++代碼實現了某個特別有用的策略模式的程序。因為我認定冰箱門適合展示我們引以為豪的任何東西,所以我就將它放上去了。如果我們一直對自己工作的質量特別自豪,可以驕傲地將它和孩子的藝術品一樣展示在冰箱上,那不是很好嗎?”所以這個積極的促進作用,將使得接手人感覺修改的代碼是自己的了,而且期望能夠找到更多的可以重構的東西。

             

            3. 重構會造成回退,怎樣避免?

             

            重構確實很容易造成回退(Regression)。這時,重構會起到與其初衷相反的作用。所以我們應該盡可能多地增加單元測試。有些老產品,舊代碼,可能沒有或者沒有那么多的單元測試。但我們至少要在重構前,增加對要重構部分代碼的單元測試。基于重構目的的單元測試,應該遵循以下的原則(見《重構》第4章:構筑測試體系):

            - 編寫未臻完善的測試并實際運行,好過對完美測試的無盡等待。測試應該是一種風險驅動行為,所以不要去測試那些僅僅讀寫一個值域的訪問函數,應為它們太簡單了,不大可能出錯。

            - 考慮可能出錯的邊界條件,把測試火力集中在哪兒。扮演“程序公敵”,縱容你心智中比較促狹的那一部分,積極思考如何破壞代碼。

            - 當事情被公認應該會出錯時,別忘了檢查是否有異常如期被拋出。

            - 不要因為“測試無法捕捉所有Bug”,就不撰寫測試代碼,因為測試的確可以捕捉到大多數Bug。

            - “花合理時間抓出大多數Bug”要好過“窮盡一生抓出所有Bug”。因為當測試數量達到一定程度之后,測試效益就會呈現遞減態勢,而非持續遞增。

            說到《重構》這本書,其實在每個重構方法中都有“作法(Mechanics)”一段,在重構的實踐中按照上面所述的步驟進行是比較穩妥的,同時也能避免很多不經意間制造的回退出現。

             

            4. 要求提交代碼前做Code Review,而開發人員不做,或敷衍了事,怎么辦?

             

            如果每個開發人員都是積極主動的,Code Review的作用能落到實處。但如果不是呢?團隊管理者需要一些手段促使其有效地進行Code Review。首先,我們采用的Code Review有2種形式,一是Over-the-shoulder,也就是2個人座在一起,一個人講,另一個人審查。二是用工具Code Collaborator來進行。無論哪種形式,在提交代碼時,必須注明關于審查的信息,比如:審查者(Reviewer)的名字或審查號(Review ID,Code Collaborator自動生成),每天由一名專職人員來檢查Checklist中的每一條,看是否有人漏寫這些信息,如果發現會提醒提交的人補上。另外,某段提交的代碼出問題,提交者和審查者都要一起來解決出現的問題,以最大限度避免審查過程敷衍了事。

             

            博主Inovy在某個評論說的很形象:“木(沒)有賞罰的制度,就是帶到廁所的報紙,看完就可以用來擦屁股了。”沒有獎懲制度作保證,當然上面的要求沒有什么效力。所以,當有人經常不審查就提交,或審查時不負責任,它的績效評定就會因此低一點,而績效的評分是跟每年工資漲落掛鉤的。說白了,可能某個人會因為多次被查出沒有做Code Review就提交代碼,而到年底加薪時比別人少漲500塊錢。

             

            5. 軟件研發到底需不需要文檔?

             

            軟件研發需要文檔的起原可能有2種,一是比較原始的,需要文檔是為了當開發人員離職后,企業需要接手的人能根據文檔了解他所接手的代碼或模塊的設計。二是較高層次的,企業遵從ISO9001質量管理體系或CMMI。

             

            對于第一種,根源可能來自于兩個方面:

            - 原開發人員設計編碼水平不高,其代碼可讀性較差。

            - 設計思想和代碼只有一個人了解,此人一旦離職,無人知道其細節。

            在編碼前寫一些簡單的設計文檔,有助于理清思路,尤其是輔以一些UML圖,在交流時也是有好處的。但同時,我們也應該提高開發人員的編碼水平增加其代碼的可讀性,比如增強其變量命名的可讀性、用一些被大家所了解的設計模式來替代按自己某些獨特思路編寫的代碼、增加和改進注釋等等,以減少不必要的文檔。另外推行代碼的集體所有權(Collective Ownership),避免某些代碼只被一個人了解,這樣可以減少以此為目的而編寫的文檔。

             

            對于第二種,情況有些復雜。接觸過敏捷開發的人都知道《敏捷宣言》中的“可以工作的軟件勝于面面俱到的文檔”。接觸過CMMI開發或者ISO9001質量管理體系的人知道它們對文檔的要求是多么的高。它們看起來水火不相容。但是,它們的宗旨是一致的,即:構建高質量的產品。

             

            對于敏捷,使用手寫用戶故事來記錄需求和優先級的方法,以及在白板上寫畫的非正式設計,是不能通過ISO9001的審核的,但當把它們復印、拍照、增加序號、保存后,可以通過審核。每次都是成功的Daily Build和Auto Test報告無法證明它們是否真正被執行并真正成功,所以不能通過ISO9001的審核。但添加一個斷言失敗(類似assert(false)的斷言)的測試后,則可以通過審核。

             

            CMMI與敏捷也是互補的,前者告訴組織在總體條款上做什么,但是沒有說如何去做,后者是一套最佳實踐。SCRUM之類的敏捷方法也被引入過那些已通過CMMI5級評估的組織。很多企業忘記了最終目標是改進他們構建軟件及遞交產品的方式,相反,它們關注于填寫按照CMMI文檔描述的假想的缺陷,卻不關心這些變化是否能改進過程或產品。

             

            所以敏捷開發在過程中只編寫夠用的文檔,和以“信息的溝通、符合性的證據以及知識共享”作為主要目標的質量體系文檔要求并不矛盾。在實踐中,我們可以按以下方法做,在實現SCRUM的同時,符合審核和評估的要求:

             

            - 制作格式良好的、被細化的、被保存的和能跟蹤的Backlog。復印和照片同樣有效。

            - 將監管需要的文檔工作也放入Backlog。除了可以確保它們不被忘記,還能使監管要求的成本是可見的。

            - 使用檢查列表,以向審核員或評估員證明活動已執行。團隊對“完成”的定義(Definition of “Done”)可以很容易轉變為一份檢查列表。

            - 使用敏捷項目管理工具。它其實就是開發程序和記錄的電子呈現方式。

             

            總而言之,軟件研發需要文檔(但文檔的形式可以是多種多樣的,用Word寫的文字式的文件是文檔,用Visio畫的UML圖也是文檔,保存在Quality Center中的測試用例也是文檔),同時我們只需寫夠用的文檔。

             

            6. 當有開發人員在開發過程中遇到難題,工作無法繼續,因而拖延進度,怎么解決?

             

            這也是個常遇到的問題。如果管理者對于某個工程師的具體問題進行指導,就會陷入過度微觀管理的境地。我們需要找到宏觀解決辦法。一,我們基于Scrum的“團隊有共同的目標”這一規則,利用前面提到的集體所有權,當出現這些問題時,用團隊中所有可以使用的力量來幫助其擺脫困境,而不是任其他人袖手旁觀。當然這里會牽扯到績效評定的問題,比如:提供幫助的人會覺得,他的幫助無助于自己績效評定的提高,為什么要提供幫助。這需要人力資源部門在使用Scrum開發的團隊的績效評估中,盡量消除那些傾向個人的因素,還要包含團隊協作的因素,廣泛聽取個方面的意見,更頻繁地評估績效等等。

             

            二,即使動用所有可以使用的力量,如果某個難題真的無法逾越,為了減少不能按時交付的風險,產品負責人應當站出來,并有所作為。要么重新評估Backlog的優先級,使無法繼續的Backlog遲一點交付,先做一些相對較低優先級的Backlog,以保證整體交付時間不至于延長;要么減少部分功能,給出更多的時間去攻克難題。總之逾越技術上難關會使團隊的生產率下降,產品負責人必須作出取舍。

             

            7. 有些開發人員水平相對不高,如何保證他們的代碼質量?

             

            當然首先讓較有經驗的人Review其要提交的代碼,這幾乎是所有管理者會做的事。除此之外,管理者有責任幫助這些人(也包括水平較高的人)提高水平,他們可以看一些書,上網看資料,讀別人的代碼等等,途經還是很多的。但問題是你如何去衡量其是否真正有所收獲。我們的經驗是,在每年大約3月份為每個工程師制定整個年度的目標,每個人的目標包括產品上的,技術上的,個人能力上的等4到5項。半年后和一年后,要做兩次Performance Review,目標是否實現,也會跟績效評定掛鉤。我們在制定目標時,遵循SMART原則,即:

             

            Specific(明確的):目標應該按照明確的結果和成效表述。

            Measurable(可衡量的):目標的完成情況應該可以衡量和驗證。

            Aligned(結盟的):目標應該與公司的商業策略保持一致。

            Realistic(現實的):目標雖然應具挑戰性,但更應該能在給定的條件和環境下實現。

            Time-Bound(有時限的):目標應該包括一個實現的具體時間。

             

            比如:某個人制定了“初步掌握本地化技術”的目標,他要確定實現時間,要描述學習的途經和步驟,要通過將技術施加到公司現有的產品中,為公司產品的本地化/國際化/全球化作一些探索,并制作Presentation給團隊演示他的成果,并準備回答其他人提出的問題。團隊還為了配合其實現目標,組織Tech Talk的活動,供大家分享每個人的學習成果。通過這些手段,提高開發人員的自學興趣,并逐步提高開發人員的技術水平。

             

            8. 如何提高開發人員的主觀能動性?

             

            提高開發人員的主觀能動性,少不了激勵機制。不能讓開發人員感到,5年以后的他和現在比不會有什么進步。你要讓他感到他所從事的是一個職業(Career),而不只是一份工作(Job)。否則,他們是不會主動投入到工作中的。我們的經驗是提供一套職業發展的框架。框架制定了2類發展道路,管理類(Managerial Path)和技術類(Technical Path),6個職業級別(1-3級是Entry/Associate,Intermediate,Senior。4級管理類是Manager/Senior Manager,技術類是Principal/Senior Principal。5級管理類是Director/Senior Director,技術類是Fellow/Architect。6級是Executive Management)。每個級別都有13個方面的具體要求,包括:范圍(Scope)、跨職能(Cross Functional)、層次(Level)、知識(Knowledge)、指導(Guidance)、問題解決(Problem Solving)、遞交成果(Delivering Result)、責任感(Responsbility)、導師(Mentoring)、交流(Communication)、自學(Self-Learning),運作監督(Operational Oversight),客戶響應(Customer Responsiveness)。每年有2次提高級別的機會,開發人員一旦具備了升級的條件,他的Supervisor將會提出申請,一旦批準,他的頭銜隨之提高,薪水也會有相對較大提高。從而使每個開發人員覺得“有奔頭”,自然他們的主觀能動性也就提高了。

             

            上面的“套路”涉及了軟件研發團隊管理中的研發過程、技術實踐、文檔管理、激勵機制等一些方面。但只是九牛一毛,研發團隊管理涵蓋的內容還有很多很多,還需要管理者在不斷探索和實踐的道路上學習和掌握。

            轉自:http://www.cnblogs.com/wanghui9072229/archive/2011/03/18/1988477.html
            posted on 2013-08-22 14:21 會飛的兔子 閱讀(461) 評論(0)  編輯 收藏 引用 所屬分類: 開發過程管理
            久久亚洲中文字幕精品一区四| 乱亲女H秽乱长久久久| 亚洲国产精品成人久久| 一本久久综合亚洲鲁鲁五月天| 久久国产精品无码网站| 嫩草影院久久国产精品| 国产精品久久久久国产A级| 午夜精品久久久久久99热| 国内精品伊人久久久久妇| 亚洲欧洲久久av| 中文字幕久久精品无码| 性欧美大战久久久久久久久| 色偷偷久久一区二区三区| 久久人人爽人人爽人人片av高请| 亚洲国产另类久久久精品小说 | 久久综合久久综合亚洲| 香蕉99久久国产综合精品宅男自 | 久久影院午夜理论片无码| 久久久久九九精品影院| 久久久久99这里有精品10| 亚洲中文字幕无码久久2020| 久久久久人妻一区二区三区vr | 亚洲精品99久久久久中文字幕| 国产精品久久久久蜜芽| 久久久久久午夜成人影院| 66精品综合久久久久久久| 久久这里有精品视频| 亚洲色大成网站www久久九| 国产精品岛国久久久久| 久久一本综合| 国产精品久久久久天天影视| 天堂无码久久综合东京热| 色欲久久久天天天综合网| 99久久99久久精品国产片果冻| 亚洲精品国产第一综合99久久| 欧美黑人又粗又大久久久| 久久九九青青国产精品| 一极黄色视频久久网站| 国产精品久久久福利| 久久亚洲sm情趣捆绑调教 | 亚洲日本va中文字幕久久|