一文告訴你為什么代碼提交要關(guān)聯(lián)需求和任務(wù)信息
記得原來有一次聽到一個(gè)開發(fā)同學(xué)抱怨說為啥每次Commit都必須要填寫commit message呢?他覺得有些浪費(fèi)時(shí)間,因此想出了各種辦法來應(yīng)對,比如輸入一個(gè)句點(diǎn)或復(fù)制粘貼上個(gè)commit message等。這種一時(shí)偷懶的做法,卻會給其他合作開發(fā)的伙伴帶來很多煩惱,這些不知所云的commmit message不僅不能很好代表每次代碼提交的用途,還會成為垃圾信息給團(tuán)隊(duì)帶來干擾。
git commit -m “.”
不過現(xiàn)在很多開發(fā)團(tuán)隊(duì)已經(jīng)通過約定代碼提交規(guī)范來約束提交信息的規(guī)范化,比如必須包含類型(新功能、修復(fù)缺陷或者增加測試等)和主題(提交代碼的簡短描述)信息。
git commit -m “feature:用戶查詢接口開發(fā)”
可以看到在代碼提交信息中增加目的描述,是為了使代碼的作用通過文字顯式地展示出來。比如一看提交信息就知道這段代碼是為了開發(fā)某個(gè)新的需求功能,而不用去通過逐行瀏覽代碼才能了解其含義。更進(jìn)一步的做法是,直接使代碼的提交與需求、任務(wù)或者缺陷等建立關(guān)聯(lián)。拿GitHub舉例,需求和缺陷都可以通過issue來進(jìn)行管理,而只每次在代碼提交信息中輸入issue的ID就可以了,如下:
git commit -m “#10 issueid”
還可以通過在commit信息中輸入close等指令來實(shí)現(xiàn)issue狀態(tài)的修改,如下:
git commit -m “close #10 issueid”
直接通過git命令就實(shí)現(xiàn)了issue的關(guān)閉:
為什么代碼提交要關(guān)聯(lián)需求和任務(wù)信息
看到這里,我想你可能要問:我為什么要每次提交代碼的時(shí)候,要費(fèi)勁地先去查詢下IssueID呢,這樣做能帶來什么收益呢?下面我就來給你捋一捋:
1. 研發(fā)過程資產(chǎn)的可度量
代碼是一種很重要的研發(fā)過程資產(chǎn),而其原生狀態(tài)又是一種非結(jié)構(gòu)化的數(shù)據(jù)信息,無法很直觀的與管理者所關(guān)注的項(xiàng)目或者需求關(guān)聯(lián)起來。如果沒有好的數(shù)據(jù)管理和度量機(jī)制,管理者角度就只能通過會議和溝通等手段從一線工程師那里獲取一些主觀的描述。如需求和任務(wù)的工作量大小、細(xì)化到需求和任務(wù)維度的代碼質(zhì)量和風(fēng)險(xiǎn)等數(shù)據(jù),這些數(shù)據(jù)在做項(xiàng)目復(fù)盤、資源評估、質(zhì)量和風(fēng)險(xiǎn)評估等環(huán)節(jié)都是非常重要的參考依據(jù)。
通過提交信息中關(guān)聯(lián)需求和任務(wù)ID,就可以得到以下的數(shù)據(jù):
以上是基礎(chǔ)數(shù)據(jù)的匯總計(jì)算,還可以引入需求和任務(wù)維度的代碼復(fù)雜度、代碼當(dāng)量和測試覆蓋率等數(shù)據(jù)。
2. 精細(xì)化的代碼質(zhì)量和風(fēng)險(xiǎn)管控
質(zhì)量和風(fēng)險(xiǎn)的管控都是需要投入成本的,而通過實(shí)現(xiàn)代碼和需求及任務(wù)的關(guān)聯(lián),可以設(shè)計(jì)更細(xì)粒度的質(zhì)量和風(fēng)險(xiǎn)管控策略,在早期的質(zhì)量預(yù)防、中期的風(fēng)險(xiǎn)發(fā)現(xiàn)和后期的問題復(fù)盤都可以很大程度上減少成本投入。目前大家所說的精準(zhǔn)化測試的方法就是基于此策略,設(shè)計(jì)測試策略時(shí)可以依據(jù)需求來劃定代碼變更范圍,再針對一定范圍內(nèi)的代碼變更來設(shè)計(jì)高覆蓋率的測試策略,從而避免由于全量執(zhí)行測試用例帶來的高成本。
另外還可以把代碼掃描、單元測試和代碼評審等質(zhì)量卡點(diǎn)與需求和任務(wù)的流轉(zhuǎn)狀態(tài)相關(guān)聯(lián),做到需求和任務(wù)維度的質(zhì)量內(nèi)建和測試左移。
3. 開發(fā)者視角的收益
如果你是一位一線工程師,看完以上兩點(diǎn)收益,肯定會覺得這都是管理的訴求,那從工程師的視角來看又會有哪些收益呢?
(1) 減少為了研發(fā)效能度量而做一些額外工作
研發(fā)效能度量,需要度量需求的在各個(gè)階段的停留時(shí)長,比如開發(fā)時(shí)長,比較傳統(tǒng)的做法是需要研發(fā)同學(xué)開始寫代碼的時(shí)候,在研發(fā)協(xié)同平臺上更新下需求和任務(wù)的狀態(tài),寫完了提交測試后再去更新狀態(tài)。這些重復(fù)性的工作,還是需要占用不少時(shí)間的,那么通過需求任務(wù)和代碼提交建立關(guān)聯(lián),就可以通過代碼提交等事件來自動化觸發(fā)需求和任務(wù)狀態(tài)的流轉(zhuǎn),這樣還能自動把對應(yīng)的開始時(shí)間和結(jié)束時(shí)間都自動記錄下來,從而便于高效和準(zhǔn)確地開展研發(fā)效能度量。
(2) 從代碼為主的技術(shù)視角逐步擴(kuò)展到關(guān)注需求價(jià)值的全局視角
由于管理者和業(yè)務(wù)方更關(guān)注需求價(jià)值和項(xiàng)目交付進(jìn)度,而一線研發(fā)工程師往往更加關(guān)注技術(shù)細(xì)節(jié),這樣就容易造成管理者和業(yè)務(wù)視角獲得的信息和工程師視角之間的割裂,比如作為研發(fā)leader為了緊急的項(xiàng)目或者需求焦慮不已,而作為一線工程師又各自在沉浸在自己的代碼世界里不明所以。那么通過代碼提交和需求任務(wù)建立關(guān)聯(lián),開發(fā)工程師關(guān)注代碼本身的同時(shí),還可以通過匯總代碼倉庫級或者版本所實(shí)現(xiàn)的需求價(jià)值和完成的開發(fā)任務(wù),從而能夠更加關(guān)注業(yè)務(wù)價(jià)值,通過技術(shù)視角和業(yè)務(wù)視角的結(jié)合,助推技術(shù)職業(yè)生涯的更好發(fā)展。
代碼關(guān)聯(lián)需求和任務(wù)的功能擴(kuò)展
文章的前面只是介紹了從命令行提交代碼的時(shí)候,如何與需求和任務(wù)信息建立關(guān)聯(lián)。而要帶來更多的收益,只有這個(gè)功能就不能完全滿足了。完整的功能一般通過與協(xié)作工具的配合來完成,如Jira就實(shí)現(xiàn)需求/任務(wù)和開發(fā)分支的關(guān)聯(lián),還可以通過配置工作流來實(shí)現(xiàn)在線創(chuàng)建分支的同時(shí)觸發(fā)需求/任務(wù)的狀態(tài)變化(進(jìn)入開發(fā)狀態(tài))。下圖為需求/任務(wù)卡片詳情頁面的開發(fā)信息的展示,可以看到關(guān)聯(lián)了一個(gè)開發(fā)分支,可以通過點(diǎn)擊分支到代碼庫的分支詳情頁面。
“功能拓展建議:在需求/任務(wù)已經(jīng)關(guān)聯(lián)一個(gè)代碼分支的前提下,可以通過規(guī)則設(shè)定實(shí)現(xiàn)該分支下的所有代碼提交都自動關(guān)聯(lián),這樣就不需要每個(gè)Commit信息里都填寫需求和任務(wù)ID信息了?!?/p>
目前很多協(xié)同平臺的做法是,除了實(shí)現(xiàn)除了提交信息和分支與需求/任務(wù)的關(guān)聯(lián),還可以關(guān)聯(lián)代碼庫的合并請求。另外還可以實(shí)現(xiàn)需求/任務(wù)與測試過程資產(chǎn)的關(guān)聯(lián)。
具體的實(shí)現(xiàn)方式有兩種:一種是在協(xié)同平臺的需求/任務(wù)卡片上通過手動操作來選擇需要關(guān)聯(lián)的信息,第二種是通過代碼倉庫和測試管理系統(tǒng)這樣的三方工具平臺主動上報(bào)關(guān)聯(lián)的需求和任務(wù)信息。
結(jié)語
代碼提交關(guān)聯(lián)需求和任務(wù)的功能雖然不大,確實(shí)一個(gè)良好習(xí)慣的養(yǎng)成,在此基礎(chǔ)上逐步實(shí)現(xiàn)更加豐富的代碼過程資產(chǎn)與需求和任務(wù)的關(guān)聯(lián),從而為效能度量、質(zhì)量和風(fēng)險(xiǎn)管控等提供更多的便利。研發(fā)效能提升包含兩個(gè)層面,一個(gè)是單點(diǎn)任務(wù)的效能提升,如環(huán)境部署和測試等;另外一個(gè)就是不同角色成員之間的協(xié)同效能提升,而代碼信息與需求任務(wù)信息的關(guān)聯(lián),就是通過過程數(shù)據(jù)的可視化使關(guān)注需求和任務(wù)的角色成員與關(guān)注代碼的工程師實(shí)現(xiàn)更好的協(xié)同。