當前位置:
首頁 > 最新 > 加強管理能提高程序代碼質量嗎?

加強管理能提高程序代碼質量嗎?

代碼質量是咱們程序開發中永遠的一個痛,提升代碼質量有很多種方式,強化管理是一種很常見的方式,這裡咱們就聊聊,所謂的管理,真的是提升代碼質量最有效的方式嗎?

外包團隊進行代碼實現,可以嗎?

很多企業喜歡將系統的代碼實現細節交由外包團隊處理,聲稱只要產品設計的合理,只要架構合理,只要代碼規範合理,代碼的實現找誰實現都是一樣的,所以乾脆找外包團隊來實現,這應該是很多非互聯網公司,特別是傳統企業的思路。但是,結果真的是這樣嗎?

經歷過的人應該都是有很深的感觸的,外包團隊開發的代碼和公司內部人員開發的代碼,質量上是有很大的扯別的,且不論這是因為技術本身的差別,因人而異,因環境而異,因心態而異產生的代碼就有很大的不同。

軟體是一個工程化的產品,那麼工程化產品的特點是什麼?

長期運營維護

頻繁的變更

高頻溝通

你讓一個沒有融入感的人去做這些事情,會有一個好的結果嗎?都說做菜要用心去做,其實編程也是需要用心去完成的工作,一個小的疏忽都可能會造成嚴重的後果,公司內部人都無法100%保證,外包團隊能保證嗎?

最後說明下,外包不會節省成本,從短期來看,人員成本不會少,可能只是降低了一定的人員異動風險,長期來看,是一項非常不划算的投入。

代碼質量通過獎懲來進行強制執行,可以嗎?

以前一直看到網上的段子,有的公司通過bug數量來判斷一個人的績效,例如:bug多的程序員,績效評分低;測出bug多的測試工程師,績效評分高。本來一直以為是段子,後來接觸的人多了,發現很多非IT專業的管理者都有這樣的想法,雖然,在我個人和團隊的強烈反對下沒有執行,但是,這種思想對很多人來說是根深蒂固。通過獎懲能有效提高代碼的質量嗎?

沒有一個軟體是完美的軟體,所有的軟體都是有BUG,「上次造人都有BUG,何況人製造軟體呢?」大如微軟這樣幾十年的老牌IT企業,還是BAT這樣的新興互聯網大廠,即使項目投入的人再多,再優秀,也是無法保證軟體是沒有BUG的。而且如有根據BUG來考評,有兩個非常嚴重的問題:

多做多錯,那麼我不做或者少做,那麼BUG就很少了。

發現BUG,不願意暴露BUG,而是偷偷的處理掉。

這與鼓勵創新、鼓勵分享的IT技術顯然是背道而馳的。

建立良好的代碼審查制度,可以嗎?

為了提高代碼質量,團隊都會定義代碼審查的制度,如「工作經驗不足**年的代碼必須由主管審查」,「新入職員工的代碼必須師傅審查」,「開發經理定期對核心代碼進行審查」等,這些規定實際也是有一定的作用的,至少對統一新同事的代碼規範,提升經驗尚淺的開發人員能力是有作用的,但是因為更多的依賴於人工的審查,實施起來難度比較大,而且很難堅持。之前,我們團隊就堅持了一段時間這樣的方式,SVN獲取代碼後對關注的人員的代碼進行審查,但是單憑個人或者少數幾個人的處理,時間一長,基本又回到原點。

其實我也一直有個疑問,真有結對編程的公司嗎??開發工程師都是屬於高強度工作,公司恨不得讓程序員一個人寫兩個人的代碼,怎麼會兩個人寫一份代碼。

也許我們需要找到更加先進的方法來代替純人工的方式。

招聘更優秀的程序員

「一個優秀的程序員的效率,比100個差的程序員效率都要高。」類似的結論是IT界是非常流行的,雖然不同的程序員在能力差100倍是有點誇張了,但是一個優秀的程序員,抵5個差的程序員這樣的事情在我們身邊肯定是經常發生的。

我一直都認為,程序開發是一個非常需要創造性的工作,即使是簡單的增刪改查,不同的業務場景應該是不一樣的實現邏輯和技術手段,我們在腦子裡面思考問題所花費的經歷真的比實現代碼花費精力多得多。

優秀的程序員效率更高,效率的差距可能會出現好幾倍的差距。而且,優秀的程序員,真的是BUG很少。一個簡單的插入操作,優秀的程序員想到的是:如何確保事務的一致性、如何防止連續點擊導致重複數據、多表的插入是否可以並行提升效率,而差的程序員只會考慮最理想的外部情況,其他的問題都是環境的問題或者操作人員的問題。難道這些,上線後出現問題了,最終就不是BUG了??最後還是需要開發人員來解決。

注重公司內部人員的培養

接上一個話題,想得到優秀的程序員無非就兩種方式,招聘或者培養。前文也有說過要建立良好的代碼審查制度,雖然不是一個銀彈,但還是有一定作用的。其實,代碼審查也可以看做是內部培養的一種方式。每個公司除了業務上的不同,我們這裡暫不討論,每個公司代碼都有自己的一個風格,統一代碼的風格,其實提升代碼質量一個很好的方式,公司都會有自己的代碼最佳實踐,如業界經常流傳的《阿里巴巴代碼規範》《58同城資料庫軍規》等。所以,多花點時間讓公司員工統一代碼風格,能讓整體代碼質量有明顯的提升。

同時,很多的BUG除了是技術上的問題,更多是對於業務的不了解。有個長期穩定,並且能產生默契的團隊,除了有更高的效率,也能減少BUG的數量。

自動化+人工的方式提升團隊能力

前文多次提到代碼審查,代碼審查這個方式顯然是能提升代碼質量的,但是涉及的審查覆蓋率的問題,無法發揮全部作用,如果有個自動化的方式進行代碼審查,那麼應該就是一個相對比較完善的解決方案了。

現在的代碼管理都是通過CVS工具進行管理的,基本都是git或者svn,通過代碼管理工具進行自動化的代碼審查就是一個非常好的方式。用戶提交代碼的時候,強制使用靜態的代碼審查工具(常見如findbug,checkstyled等)進行審查,無法通過審查的,代碼是無法提交的。雖然代碼審查工具現階段還不是非常智能,但是基礎的代碼規範,空指針預測等檢測還是比較完善的,能很大程度上避免重複的人工審查工作。

move fast的審查方式是很多互聯網公司現在執行的一種人工審查方式,代碼的commit、push必須有兩個人執行,push的操作者必須審查commit的代碼,這樣基本能保證人工審查的覆蓋率,對提升代碼的質量有很大幫助。

這裡提到人工的方式,那麼人工的方式我們應該注意哪些呢?靜態代碼掃描工具能幫忙解決很多基礎的代碼問題,我們更多應該關注哪些靜態代碼檢查工具無法找到的問題:

關注循環體內的問題,循環體內調用外部服務,循環體內查詢資料庫等。

涉及多線程或者其他非同步處理的代碼

try catch 的使用,特別是catch中的代碼

靜態變數使用的問題

這些問題都是進行測試時都很難發現的問題,但是在生產環境卻很容易暴露的問題。

總結

代碼質量的提升是作為開發人員,特別是開發管理人員非常關注的問題,但是,要達到非常好的效果,卻是沒有銀彈的。

所有的管理制度、管理模式等,對於創造性的工作職位實際是不會有太大的幫助,「優秀的人」才是提升代碼質量最好的武器,自動化的方式結合優秀的人,也許是你想要的最佳途徑。

微信號:itmifen

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 IT米粉 的精彩文章:

TAG:IT米粉 |