龔永峰
(浩鯨云計(jì)算科技股份有限公司,南京211135)
很多軟件企業(yè)隨著業(yè)務(wù)發(fā)展,出現(xiàn)了諸多研發(fā)問題,如產(chǎn)品交付延期,研發(fā)加班,產(chǎn)品故障率高,測試壓力大,客戶滿意度低。這些問題更多是提升研發(fā)效能不得當(dāng)所致。軟件研發(fā)是一個(gè)復(fù)雜的系統(tǒng)工程,效能提高也就需要系統(tǒng)化端到端地思考,需要從多方面入手。研發(fā)流程優(yōu)化,做好每個(gè)環(huán)節(jié),做好環(huán)節(jié)與環(huán)節(jié)的銜接,助力提效。在敏捷和精益的推動(dòng)下,很多軟件研發(fā)項(xiàng)目只是望文生義,只學(xué)到了“速度”,提出了快速迭代,快速交付,忽略了做好每個(gè)環(huán)節(jié)才是提效的根本。
首先研發(fā)的源頭:需求管理的提效。需求的準(zhǔn)確性是至關(guān)重要的,或者說需求的主要部分必須是正確的。不能因?yàn)槿蝿?wù)緊急、搶占市場需要,稀里糊涂地啟動(dòng)研發(fā),將來再不斷去廢棄已經(jīng)完成的工作。這種情況從研發(fā)項(xiàng)目的過程數(shù)據(jù)看是高效的,因?yàn)楣ぷ鲿r(shí)間很長,代碼行數(shù)、測試用例足夠多。但是從最終目標(biāo),項(xiàng)目價(jià)值來看,做得都是無用功,這樣效能也就無從談起了。不僅僅是需求,正確做好軟件研發(fā)的每個(gè)環(huán)節(jié)的事情,就是一種提效。
環(huán)節(jié)信息的準(zhǔn)確傳遞,減少上下游溝通,減少信息傳遞的流失,會(huì)是明顯的提效。信息傳遞的環(huán)節(jié)越多丟失的也就越多。一個(gè)項(xiàng)目的研發(fā)往往會(huì)經(jīng)過需求調(diào)研,需求分析、設(shè)計(jì)、編碼、測試、交付等眾多環(huán)節(jié)。降低這么多環(huán)節(jié)的信息丟失方法有兩種:一種是減少環(huán)節(jié),通過人員復(fù)用的方式隱形減少環(huán)節(jié),如需求調(diào)研和需求分析同一批人做,減少這兩個(gè)環(huán)節(jié)的需求傳遞。其他環(huán)節(jié)也可以采用類似手段和方法。另一種方式是下游環(huán)節(jié)提前介入上游環(huán)節(jié)的活動(dòng),如需求分析階段,系統(tǒng)架構(gòu)師、編碼工程師、測試工程師、交付工程師一起和需求分析師做需求分析,避免串行需求傳遞,同時(shí)也可以提前發(fā)現(xiàn)問題,減少返工,提升每個(gè)環(huán)節(jié)的輸出質(zhì)量,就是一種有效的提效[1]。
在軟件研發(fā)項(xiàng)目中,人員的能力的重要性基本都是得到大家認(rèn)可的,但是很多時(shí)候只是部分崗位的人員被要求優(yōu)秀的人員擔(dān)當(dāng),如設(shè)計(jì)崗位的系統(tǒng)架構(gòu)師是公認(rèn)的重要崗位,而普通的編碼人員、測試人員卻被忽視。
其實(shí)在整個(gè)研發(fā)流程中,每個(gè)崗位的人員都很重要,不一定都需要最優(yōu)秀的,但是一定是最合適的人員,人員的基本素質(zhì)不能降低。另外,每個(gè)崗位的人才不能局限于專業(yè)能力,更應(yīng)該重視綜合能力。如編碼工程師,如果能夠有一定的系統(tǒng)架構(gòu)能力,在設(shè)計(jì)階段就能發(fā)現(xiàn)方案是否具備落地的可行性,提升設(shè)計(jì)方案的質(zhì)量。如果測試人員有需求分析的能力,在需求評審階段就能更好地完善需求。
人員的綜合能力高,在必要時(shí)也可以彌補(bǔ)短時(shí)間部分崗位人員少量緊缺的情況,更好地提高人員利用率[2]。當(dāng)然這只是一種有效的補(bǔ)充,而不是真正的替代,如果走極端方式,所有崗位的人員都要求全能,最終全部混用,這不但不能有效提高效能,只會(huì)讓研發(fā)過程混亂,產(chǎn)品質(zhì)量不可控,畢竟專業(yè)的人應(yīng)該做專業(yè)的事情。所有全能型人才一定是精于某個(gè)方面,如果長時(shí)間、大比例使用非專業(yè)人員做專業(yè)的事情,非但不能提高人員利用率、效率,反而會(huì)讓產(chǎn)品質(zhì)量更低,交付更艱難。而且員工的專業(yè)技能長期得不到重用,也會(huì)導(dǎo)致人員流失。
根據(jù)多個(gè)大型項(xiàng)目的使用經(jīng)驗(yàn)來看,具備崗位基本技能的人員混用比例應(yīng)該控制在10%~30%,時(shí)間在1~3 個(gè)月為宜,能夠很好地解決崗位和技能之間的短時(shí)間缺口,崗位的新鮮感也會(huì)讓員工的工作熱情和積極性更高。
很多企業(yè)為了節(jié)約成本,軟件研發(fā)的管理還停留在“Excel+郵件”的方式上,項(xiàng)目過程中遇到問題,只能花費(fèi)大量的時(shí)間在郵件中檢索,幾個(gè)項(xiàng)目做完了,龐大的項(xiàng)目數(shù)據(jù)散落在各處,回溯總結(jié)項(xiàng)目只流于形式。沒有客觀的數(shù)據(jù)來縱向總結(jié)項(xiàng)目,也沒辦法橫向?qū)Ρ榷鄠€(gè)項(xiàng)目。有效的項(xiàng)目管理工具會(huì)成為項(xiàng)目提效的好幫手。首先,需求管理工具,如Jira,可以將組織和軟件產(chǎn)品各個(gè)模塊管理起來,可以將需求、功能點(diǎn)、任務(wù),測試用例、故障相關(guān)聯(lián),將需求、設(shè)計(jì)、開發(fā)、測試等各個(gè)環(huán)節(jié)打通,可以讓整個(gè)研發(fā)流程更加順暢。其次,自動(dòng)化測試工具的使用是研發(fā)提效的一個(gè)利刃。自動(dòng)化測試不僅可以降低人工測試的隨意性,也不會(huì)受限于測試人員能力的差異,更重要的是可以在一個(gè)研發(fā)周期內(nèi)對每個(gè)迭代版本做重復(fù)的回歸測試,保證已經(jīng)開發(fā)完成的功能不會(huì)在后繼版本中被破壞[3]。最后,持續(xù)構(gòu)建平臺(tái)是軟件研發(fā)流程中一個(gè)非常重要的工具,可以輕松實(shí)現(xiàn)多模塊,多團(tuán)隊(duì)研發(fā)的協(xié)作,解決手工集成、測試、部署的重復(fù)性勞動(dòng)??梢愿绲匕l(fā)現(xiàn)問題,降低解決問題的成本,減少手工錯(cuò)誤的概率,提高完整產(chǎn)品構(gòu)建的頻率。
我們在很多項(xiàng)目中使用了持續(xù)構(gòu)建平臺(tái),加入了靜態(tài)代碼的檢查,腳本的編譯執(zhí)行、代碼編譯、單元測試、系統(tǒng)部署、自動(dòng)化用例執(zhí)行。采用有變更即運(yùn)行,1 小時(shí)解決問題的原則,真正能做到隨時(shí)發(fā)布版本的原則,大大加快了產(chǎn)品迭代速度,解決問題的速度,提供版本質(zhì)量和客戶滿意度。
上述的這些方法、工具是比較通用的軟件研發(fā)提效的方法和手段,如果結(jié)合各種不同項(xiàng)目的特點(diǎn),針對具體研發(fā)場景,還可以挖掘出更貼合項(xiàng)目的提效手段,如技術(shù)手段的提效,針對一個(gè)大型項(xiàng)目做分中心、微服務(wù)化,前后端分離,降低項(xiàng)目代碼管理的復(fù)雜度,降低系統(tǒng)的整體耦合度,提高研發(fā)的并行度等。愿意在研發(fā)過程中多觀察,多思考,發(fā)現(xiàn)障礙點(diǎn),積極嘗試,研發(fā)效能也會(huì)不斷提高。
軟件研發(fā)提效是一個(gè)永恒的話題,每一個(gè)研發(fā)項(xiàng)目都希望能夠提高效能,為組織創(chuàng)造出更高的價(jià)值,各個(gè)研發(fā)項(xiàng)目也都會(huì)有一些獨(dú)特之處,提效的方法也會(huì)有所不同。根據(jù)項(xiàng)目經(jīng)驗(yàn)來看,都可以歸結(jié)為人、工具、流程這三方面,只要能夠有效利用好這三方面,做好彼此的平衡,能夠很好地提高軟件研發(fā)的效能。如果顧此失彼,只是追求某個(gè)點(diǎn),某一方面,而忽略之間的聯(lián)系和配合,最終的效果也將會(huì)大打折扣。