11 月 22 日,由 CODING 主辦的 DevOps 技術沙龍系列「質量」專場在上海圓滿結束,在活動現場,四位來自騰訊等知名企業的技術大咖們分享了研發質量與效能的實戰經驗,與觀眾們共同探討如何采取有效手段以保證和提高軟體質量,

本期沙龍回顧為大家帶來的,是來自騰訊云 CODING 布道師楊周的議題——《DevOps 代碼質量實戰》,
問題:人越來越多,代碼越來越亂

隨著團隊成員增多,每個人在縮進、換行、空格以及大小寫方面有不同的習慣,導致代碼越來越亂,代碼風格問題尚且不致命,更嚴重的是這些問題:
- Hard code:在代碼中書寫各種環境配置、鏈接、密鑰,導致安全風險
- 魔法數字(Magic Number):難以理解和維護
- 代碼行數過多:難以維護,違反面向物件的 SOLID 原則
不少業界大廠公布了代碼規范,推薦大家直接采用,因為自己發明規范往往不夠全面,很難服眾,

代碼規范不只是縮進換行問題,通過強制約束圈復雜度、檔案行數和方法行數,可促使大家按照面向物件的方式設計,
如何強制執行代碼規范
有了代碼規范,但怎么落地?是很多團隊面臨的問題,Lint 程式用來檢查代碼規范,各個語言(比如 Kotlin、Java、PHP)都有自己的規范和 Lint,
自動檢查代碼規范有三個時機:
- IDE:最實時方便的,但需要所有人進行配置、某些 IDE 可能不支持
- Git commit Hook:提交時,會呼叫命令列工具強制檢查,優點是非常及時,然而存在可被洗掉的風險
- 服務端:在 Git push 之后,在服務端進行檢查,很可靠,但缺點是不夠實時
因此,建議同時使用這三種方式,

在代碼檢查之后,如何處理?老專案有成千上萬處不規范,很顯然不能一次清理干凈,讓所有人停下老專案去清理老代碼并不現實,而且一次改動太多檔案的風險也很高,因此建議使用增量檢查,尤其是 Java 增量檢查方案比較復雜,詳情可識別下圖二維碼閱讀 CODING 檔案,

服務端檢查:建議使用持續集成(持續不斷地把代碼集成到主干,實作質量內建),流程為:鎖定 Git 主干,所有人開發功能拉取小分支,小分支提交后觸發持續集成進行代碼規范檢查,通過之后再通知同事進行代碼評審,通過這套流程來提高代碼質量,CODING 持續集成兼容 Jenkins,圖形化界面易上手,如果專案已經在用 Jenkins 可平滑遷移,

代碼整潔了,但結果正確嗎?
很多專案到最后面臨的困境——沒有人敢改老代碼,比如開發人員會把已有函式如get() 復制一份再修改,變成了 get1()、get2(),這種做法導致專案逐漸潰爛,根源在于沒有人知道修改老代碼會不會導致其他地方呼叫出錯,
在開發和測驗分離的團隊架構中,一個負責任的開發者在寫了代碼之后要自測,然后提測給測驗人員,但是后期大家逐漸會變得不耐煩,從自測 10 種情況到 5 種情況,再到只測一種,最后到完全不自測直接提測,所有的壓力都慢慢轉移到了測驗人員身上,負責任的開發逐漸變成不負責任的開發,問題還是出在機制上,
國外十幾年前就開始這個方案:測驗人員轉崗學編程開發,僅保留少部分的人工測驗,開發人員自己寫測驗代碼,測驗覆寫率不達標(比如 80%)則禁止合并,
開發人員如何對自己的代碼有信心?不是靠聰明才智,因為人總會百密一疏,即使頂尖的程式員也可能會犯最初級的問題,因此自己寫測驗代碼才是最可靠的方案,測驗代碼覆寫了多種邊界情況,即使其他人來改寫代碼也無需擔心掛掉,
最晚什么時候開始自動化測驗?
自動化測驗很好,但是也面臨困境:業務太忙,沒有時間寫測驗代碼,
從個人職業發展的角度,把手動操作 Postman 自測的時間用來寫自動化測驗代碼,這樣一來,自己的水平得到了提高,后續改代碼的時候重測時間也得到了節省,不再是一直堆業務代碼,難以成長,
以前中國的大公司專案質量普遍十分糟糕,因為前 20 年是 2C 的紅利期,大家在快速搶占市場,但現在到了守地盤的時候,這兩年大公司開始重視代碼質量問題,建議大家為這個機遇早做準備,
從公司角度,主要看時機,比如 2C 專案逐漸成熟,用戶量變大,線上的故障損失已經大于多招開發人員的成本,或者隨著專案功能逐漸增加,回歸測驗時間越來越長,如果一個網站一天上線多次,一天把整個網站所有功能測過來是不實際的,因此自動化測驗才能保障持續的高上線頻率,而 ToB 專案初期出現了嚴重 bug 可能就要賠償客戶,因此初期就需要自動化測驗,
代碼質量評級標準:從下圖中可以看到,“優”級別的代碼質量標準圈復雜度最多允許 5,類行數不能超過 50,函式行數不能超過 10,測驗覆寫率需達到 90%,CODING的合作伙伴優普豐提供了 CSD 認證培訓,能夠幫助開發者們達到相應的標準,可識別二維碼了解詳情,

那么本次的分享就到這里,大家可以前往 B 站觀看演講視頻并獲取完整 PPT,或者前往 CODING 了解更多,
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/231414.html
標籤:其他
