代碼質(zhì)量管控的四個(gè)階段

前言:

   質(zhì)量、功能和進(jìn)度,是一個(gè)軟件項(xiàng)目的三根支柱,但在現(xiàn)實(shí)項(xiàng)目中,當(dāng)質(zhì)量和其它兩項(xiàng)產(chǎn)生沖突時(shí),往往是作為被犧牲的對(duì)象。團(tuán)隊(duì)對(duì)于質(zhì)量的態(tài)度主要停留在口頭重視上,似乎還沒有上升到團(tuán)隊(duì)意識(shí)的高度,也缺乏必要的保障手段。但沒有質(zhì)量的功能,從它面世第一天就開始永無止境的修補(bǔ),并最終走向被[重寫](https://so.csdn.net/so/search?q=%E9%87%8D%E5%86%99&spm=1001.2101.3001.7020)的命運(yùn);沒有質(zhì)量的進(jìn)度,只能是一個(gè)虛偽的承諾,因?yàn)榻吁喽恋模且惠営忠惠喌母郊娱_銷,有效進(jìn)度被大大拖延。要想提升代碼質(zhì)量,首先需要確立質(zhì)量意識(shí)

    本文討論的代碼質(zhì)量指的是代碼本身的質(zhì)量,包括復(fù)雜度、重復(fù)率、代碼風(fēng)格等要素。代碼是團(tuán)隊(duì)的共同財(cái)產(chǎn),代碼質(zhì)量是團(tuán)隊(duì)技術(shù)水平和管理水平的直接體現(xiàn)。代碼質(zhì)量下降通常會(huì)自成因果,導(dǎo)致惡性循環(huán):
  • 破窗效應(yīng):在爛代碼上繼續(xù)生產(chǎn)爛代碼的心理負(fù)擔(dān)小很多
  • 傳染性:爛代碼傳遞著一種不在意質(zhì)量,只看業(yè)務(wù)成果的負(fù)面信息,會(huì)傷害團(tuán)隊(duì)的技術(shù)熱情和工作氛圍,導(dǎo)致更多爛代碼出現(xiàn)

本文會(huì)分析代碼質(zhì)量下降的內(nèi)在機(jī)制,并分享在代碼質(zhì)量管控方面的一些實(shí)踐經(jīng)驗(yàn)。

一、熵增定律與代碼質(zhì)量

熵增定律告訴我們,一個(gè)封閉系統(tǒng)總是趨向于熵增,也就是系統(tǒng)的無序程度只會(huì)不斷增加。

image
     對(duì)于軟件項(xiàng)目來說,代碼質(zhì)量代表著系統(tǒng)的有序程度,爛代碼增加就是系統(tǒng)無序性上升的體現(xiàn),在無外力影響的情況下,爛代碼只會(huì)原來越多。

    為了維持系統(tǒng)有序,需要外界向系統(tǒng)不斷輸入能量。對(duì)于代碼質(zhì)量,我們需要主動(dòng)投入資源,來有意識(shí)地抑制爛代碼越來越多的自然趨勢(shì)。

二、經(jīng)典循環(huán)

    爛代碼產(chǎn)生的常見原因是業(yè)務(wù)壓力大,導(dǎo)致沒有時(shí)間或意愿講究代碼質(zhì)量。但是向業(yè)務(wù)壓力妥協(xié)而生產(chǎn)爛代碼之后,開發(fā)效率會(huì)隨之下降,導(dǎo)致業(yè)務(wù)壓力更大,形成一種典型的惡性循環(huán)。
image
    為了應(yīng)對(duì)業(yè)務(wù)壓力,常見的做法就是向項(xiàng)目中增加人力,但是單純地增加人力的話,會(huì)因?yàn)轱L(fēng)格不一致、溝通成本上升等原因?qū)е聽€代碼更多。
image
    要遏制這種惡性循環(huán),需要多管齊下,主動(dòng)對(duì)代碼質(zhì)量進(jìn)行管控,并且持續(xù)進(jìn)行技術(shù)升級(jí),系統(tǒng)性地解決問題。
image
    不過質(zhì)量管控和技術(shù)升級(jí)需要長(zhǎng)期投入才能產(chǎn)生效果。通常情況下人們還是傾向于通過增加人力快速地解決業(yè)務(wù)壓力的問題,而忽略了對(duì)于代碼質(zhì)量的負(fù)面影響,導(dǎo)致代碼質(zhì)量越來越差。

三、四個(gè)階段

我把代碼質(zhì)量管控通常需要經(jīng)歷的四個(gè)階段,稱之為“四個(gè)現(xiàn)代化”:

  • 規(guī)范化 - 建立代碼規(guī)范與Code Review制度
  • 自動(dòng)化 - 使用工具自動(dòng)檢查代碼質(zhì)量
  • 流程化 - 將代碼質(zhì)量檢查與代碼流動(dòng)過程綁定
  • 中心化 - 以團(tuán)隊(duì)整體為視角,集中管理代碼規(guī)范,并實(shí)現(xiàn)質(zhì)量狀況透明化

階段一:規(guī)范化

    保障代碼質(zhì)量的基礎(chǔ)是建立團(tuán)隊(duì)的代碼規(guī)范,通常包括:
  • 風(fēng)格規(guī)范 - 縮進(jìn)、換行、大小寫等風(fēng)格問題

  • 實(shí)踐規(guī)范 - 規(guī)避一些常見的隱患,或者針對(duì)特定問題的最佳實(shí)踐

  • 業(yè)務(wù)規(guī)范 - 與業(yè)務(wù)有關(guān)的特殊要求,比如文案中的關(guān)鍵詞

    團(tuán)隊(duì)的代碼規(guī)范通常以文檔的形式存在,供新人們學(xué)習(xí)。但文檔這種形式常見的情況就是新人看過之后就不再回顧了,也很難對(duì)實(shí)際寫代碼形成真正的約束。
    
    在規(guī)范的基礎(chǔ)上,要通過 code review 將規(guī)范落地。code review 中大家可以對(duì)代碼質(zhì)量問題進(jìn)行交流,并且相互監(jiān)督,形成團(tuán)隊(duì)重視代碼的習(xí)慣。
    

階段二:自動(dòng)化

自動(dòng)化是指在代碼規(guī)范的基礎(chǔ)上,使用自動(dòng)化工具進(jìn)行質(zhì)量檢查,通常包括:

  • 代碼規(guī)范檢查 - 包括風(fēng)格規(guī)范、實(shí)踐規(guī)范、業(yè)務(wù)規(guī)范
  • 重復(fù)率 - 重復(fù)出現(xiàn)的代碼區(qū)塊占比,通常要求在5%以下
  • 復(fù)雜度 - 總行數(shù),模塊大小,循環(huán)復(fù)雜度等
  • 檢查覆蓋度 - 經(jīng)過檢查的行數(shù)占代碼庫總行數(shù)的比例

自動(dòng)化質(zhì)量檢查可以覆蓋多數(shù)常見問題,能夠提升開發(fā)效率,也可以降低人工 code review 的成本。

image
     自動(dòng)化檢查工具的規(guī)則集與代碼規(guī)范直接對(duì)應(yīng)。通過編輯器插件,在寫代碼的時(shí)候直接給出檢查結(jié)果。到這個(gè)階段,團(tuán)隊(duì)的代碼規(guī)范文檔已經(jīng)不再需要陳述各種細(xì)節(jié),開發(fā)者可以直接通過查看自動(dòng)化工具的規(guī)則集來了解代碼規(guī)范。

階段三:流程化

    流程化的意思是將自動(dòng)化代碼質(zhì)量檢查和 code review 與代碼流動(dòng)的過程綁定,從而保證所有上線的代碼都經(jīng)過機(jī)器與人工多個(gè)環(huán)節(jié)的檢查。代碼流動(dòng)過程:
image

執(zhí)行自動(dòng)化代碼質(zhì)量檢查的時(shí)機(jī):

  • 編輯時(shí) - 使用編輯器插件,實(shí)時(shí)運(yùn)行質(zhì)量檢查
  • 構(gòu)建時(shí) - 在本地或者開發(fā)機(jī)的構(gòu)建腳本中運(yùn)行質(zhì)量檢查
  • 提交時(shí) - 利用Git Hooks,提交代碼或者生成Pull Request時(shí)運(yùn)行質(zhì)量檢查
  • 發(fā)布時(shí) - 在發(fā)布腳本中再做一次質(zhì)量檢查,通常與自動(dòng)化測(cè)試放在一起

質(zhì)量檢查與代碼流動(dòng)綁定后的效果:

image

階段四:中心化

當(dāng)團(tuán)隊(duì)規(guī)模越來越大,項(xiàng)目越來越多時(shí),代碼質(zhì)量管控就會(huì)面臨以下問題:

  • 不同項(xiàng)目使用的代碼規(guī)范不一樣
  • 部分項(xiàng)目由于放松要求,沒有接入質(zhì)量檢查,或者存在大量未修復(fù)的缺陷
  • 無法從團(tuán)隊(duì)整體層面上體現(xiàn)各個(gè)項(xiàng)目的質(zhì)量狀況對(duì)比

為了應(yīng)對(duì)以上問題,需要建設(shè)中心化的代碼質(zhì)量管控體系,要點(diǎn)包括:

  • 代碼規(guī)范統(tǒng)一管理。使用Git或者NPM包管理自動(dòng)化代碼質(zhì)量檢查的規(guī)則集,自動(dòng)安裝,不在本地寫規(guī)則。一個(gè)團(tuán)隊(duì)、一類項(xiàng)目、一套規(guī)則。
  • 使用統(tǒng)一的持續(xù)集成服務(wù)。質(zhì)量檢查不通過的項(xiàng)目不能上線。
  • 建立代碼質(zhì)量評(píng)分制度。讓項(xiàng)目與項(xiàng)目之間能夠橫向?qū)Ρ龋?xiàng)目自身能夠縱向?qū)Ρ?,并且進(jìn)行匯總反饋。

總結(jié)

    在面臨業(yè)務(wù)壓力時(shí),人們通常會(huì)傾向于通過增加人力來緩解業(yè)務(wù)壓力。但從系統(tǒng)整體的角度來看,人力增加會(huì)造成代碼質(zhì)量變差,開發(fā)效率下降,從而再度增大業(yè)務(wù)壓力。這種代碼質(zhì)量越來越差的循環(huán),是熵增定律在軟件工程領(lǐng)域的生動(dòng)體現(xiàn)。

    為了抑制這種循環(huán),我們需要有意識(shí)地投入資源來建設(shè)代碼質(zhì)量的管控體系。這個(gè)過程分為四個(gè)階段:規(guī)范化,自動(dòng)化,流程化,中心化。每個(gè)階段都有不同關(guān)注的要點(diǎn)
轉(zhuǎn)載:https://blog.csdn.net/a745233700/article/details/126327098
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容