龔永峰
【摘 要】隨著軟件行業的飛速發展,很多企業為了縮短軟件研發交付周期,降低研發成本,越來越重視研發效能。但是從實際情況看,很多企業還停留在時間換進度的層面,也許短時間內能夠提效,但是從長遠來看,這種提效很難持續。軟件研發是一個創造性過程,不是機械的、重復性的傳統生產線操作。論文結合實際研發管理過程,從研發的流程特點、研發人員能力、研發工具等方面提出軟件研發提效的意義和方法,給大家以借鑒和參考。
【Abstract】With the rapid development of software industry, many enterprises have paid more and more attention to research and development efficiency, so as to shorten the period of software research and development delivery and reduce research and development cost. However, from the actual situation, many enterprises still stay at the level of time to schedule, may be able to improve the efficiency in a short time, but in the long run, this kind of improvement is difficult to sustain. Software research and development is a creative process, not mechanical, repetitive, and traditional line operation. Combined with the actual research and development management process, this paper proposes the significance and methods of software research and development efficiency improvement from the aspects of research and development process characteristics, research and development personnel ability, research and development tools, etc., for reference.
【關鍵詞】軟件研發;提效;精益;項目管理
【Keywords】software development; efficiency improvement; lean; project management
【中圖分類號】TP31? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?【文獻標志碼】A? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 【文章編號】1673-1069(2019)09-0080-02
1 引言
很多軟件企業隨著業務發展,出現了諸多研發問題,如產品交付延期,研發加班,產品故障率高,測試壓力大,客戶滿意度低。這些問題更多是提升研發效能不得當所致。軟件研發是一個復雜的系統工程,效能提高也就需要系統化端到端地思考,需要從多方面入手。研發流程優化,做好每個環節,做好環節與環節的銜接,助力提效。在敏捷和精益的推動下,很多軟件研發項目只是望文生義,只學到了“速度”,提出了快速迭代,快速交付,忽略了做好每個環節才是提效的根本。
2 需求管理的提效
首先研發的源頭:需求管理的提效。需求的準確性是至關重要的,或者說需求的主要部分必須是正確的。不能因為任務緊急、搶占市場需要,稀里糊涂地啟動研發,將來再不斷去廢棄已經完成的工作。這種情況從研發項目的過程數據看是高效的,因為工作時間很長,代碼行數、測試用例足夠多。但是從最終目標,項目價值來看,做得都是無用功,這樣效能也就無從談起了。不僅僅是需求,正確做好軟件研發的每個環節的事情,就是一種提效。
3 環節信息準確傳遞
環節信息的準確傳遞,減少上下游溝通,減少信息傳遞的流失,會是明顯的提效。信息傳遞的環節越多丟失的也就越多。一個項目的研發往往會經過需求調研,需求分析、設計、編碼、測試、交付等眾多環節。降低這么多環節的信息丟失方法有兩種:一種是減少環節,通過人員復用的方式隱形減少環節,如需求調研和需求分析同一批人做,減少這兩個環節的需求傳遞。其他環節也可以采用類似手段和方法。另一種方式是下游環節提前介入上游環節的活動,如需求分析階段,系統架構師、編碼工程師、測試工程師、交付工程師一起和需求分析師做需求分析,避免串行需求傳遞,同時也可以提前發現問題,減少返工,提升每個環節的輸出質量,就是一種有效的提效[1]。
4 提升人員能力是提效的基礎
在軟件研發項目中,人員的能力的重要性基本都是得到大家認可的,但是很多時候只是部分崗位的人員被要求優秀的人員擔當,如設計崗位的系統架構師是公認的重要崗位,而普通的編碼人員、測試人員卻被忽視。
其實在整個研發流程中,每個崗位的人員都很重要,不一定都需要最優秀的,但是一定是最合適的人員,人員的基本素質不能降低。另外,每個崗位的人才不能局限于專業能力,更應該重視綜合能力。如編碼工程師,如果能夠有一定的系統架構能力,在設計階段就能發現方案是否具備落地的可行性,提升設計方案的質量。如果測試人員有需求分析的能力,在需求評審階段就能更好地完善需求。
人員的綜合能力高,在必要時也可以彌補短時間部分崗位人員少量緊缺的情況,更好地提高人員利用率[2]。當然這只是一種有效的補充,而不是真正的替代,如果走極端方式,所有崗位的人員都要求全能,最終全部混用,這不但不能有效提高效能,只會讓研發過程混亂,產品質量不可控,畢竟專業的人應該做專業的事情。所有全能型人才一定是精于某個方面,如果長時間、大比例使用非專業人員做專業的事情,非但不能提高人員利用率、效率,反而會讓產品質量更低,交付更艱難。而且員工的專業技能長期得不到重用,也會導致人員流失。
根據多個大型項目的使用經驗來看,具備崗位基本技能的人員混用比例應該控制在10%~30%,時間在1~3個月為宜,能夠很好地解決崗位和技能之間的短時間缺口,崗位的新鮮感也會讓員工的工作熱情和積極性更高。
5 軟件研發工具是有效的提效手段
很多企業為了節約成本,軟件研發的管理還停留在“Excel+郵件”的方式上,項目過程中遇到問題,只能花費大量的時間在郵件中檢索,幾個項目做完了,龐大的項目數據散落在各處,回溯總結項目只流于形式。沒有客觀的數據來縱向總結項目,也沒辦法橫向對比多個項目。有效的項目管理工具會成為項目提效的好幫手。首先,需求管理工具,如Jira,可以將組織和軟件產品各個模塊管理起來,可以將需求、功能點、任務,測試用例、故障相關聯,將需求、設計、開發、測試等各個環節打通,可以讓整個研發流程更加順暢。其次,自動化測試工具的使用是研發提效的一個利刃。自動化測試不僅可以降低人工測試的隨意性,也不會受限于測試人員能力的差異,更重要的是可以在一個研發周期內對每個迭代版本做重復的回歸測試,保證已經開發完成的功能不會在后繼版本中被破壞[3]。最后,持續構建平臺是軟件研發流程中一個非常重要的工具,可以輕松實現多模塊,多團隊研發的協作,解決手工集成、測試、部署的重復性勞動。可以更早地發現問題,降低解決問題的成本,減少手工錯誤的概率,提高完整產品構建的頻率。
我們在很多項目中使用了持續構建平臺,加入了靜態代碼的檢查,腳本的編譯執行、代碼編譯、單元測試、系統部署、自動化用例執行。采用有變更即運行,1小時解決問題的原則,真正能做到隨時發布版本的原則,大大加快了產品迭代速度,解決問題的速度,提供版本質量和客戶滿意度。
6 結語
上述的這些方法、工具是比較通用的軟件研發提效的方法和手段,如果結合各種不同項目的特點,針對具體研發場景,還可以挖掘出更貼合項目的提效手段,如技術手段的提效,針對一個大型項目做分中心、微服務化,前后端分離,降低項目代碼管理的復雜度,降低系統的整體耦合度,提高研發的并行度等。愿意在研發過程中多觀察,多思考,發現障礙點,積極嘗試,研發效能也會不斷提高。
軟件研發提效是一個永恒的話題,每一個研發項目都希望能夠提高效能,為組織創造出更高的價值,各個研發項目也都會有一些獨特之處,提效的方法也會有所不同。根據項目經驗來看,都可以歸結為人、工具、流程這三方面,只要能夠有效利用好這三方面,做好彼此的平衡,能夠很好地提高軟件研發的效能。如果顧此失彼,只是追求某個點,某一方面,而忽略之間的聯系和配合,最終的效果也將會大打折扣。
【參考文獻】
【1】李作學,王永東.研發管理流程與節點精益設計[M].北京:人民郵電出版社,2016.
【2】[美]Mike Cohn著,金明譯.敏捷軟件開發實踐 估算與計劃[M].北京:清華大學出版社,2016.
【3】王京生.華為之研發模式[M].深圳:海天出版社,2018.