代碼質量是我們程序開發中永遠的一個痛,提高代碼質量有不少種方式,強化管理是一種很常見的方式,這裏我們就聊聊,所謂的管理,真的是提高代碼質量最有效的方式嗎?git
不少企業喜歡將系統的代碼實現細節交由外包團隊處理,聲稱只要產品設計的合理,只要架構合理,只要代碼規範合理,代碼的實現找誰實現都是同樣的,因此乾脆找外包團隊來實現,這應該是不少非互聯網公司,特別是傳統企業的思路。可是,結果然的是這樣嗎?
經歷過的人應該都是有很深的感觸的,外包團隊開發的代碼和公司內部人員開發的代碼,質量上是有很大的扯別的,且不論這是由於技術自己的差異,因人而異,因環境而異,因心態而異產生的代碼就有很大的不一樣。
軟件是一個工程化的產品,那麼工程化產品的特色是什麼?程序員
你讓一個沒有融入感的人去作這些事情,會有一個好的結果嗎?都說作菜要用心去作,其實編程也是須要用心去完成的工做,一個小的疏忽均可能會形成嚴重的後果,公司內部人都沒法100%保證,外包團隊能保證嗎?
最後說明下,外包不會節省成本,從短時間來看,人員成本不會少,可能只是下降了必定的人員異動風險,長期來看,是一項很是不划算的投入。數據庫
之前一直看到網上的段子,有的公司經過bug數量來判斷一我的的績效,例如:bug多的程序員,績效評分低;測出bug多的測試工程師,績效評分高。原本一直覺得是段子,後來接觸的人多了,發現不少非IT專業的管理者都有這樣的想法,雖然,在我我的和團隊的強烈反對下沒有執行,可是,這種思想對不少人來講是根深蒂固。經過獎懲能有效提升代碼的質量嗎?
沒有一個軟件是完美的軟件,全部的軟件都是有BUG,「上次造人都有BUG,況且人制造軟件呢?」大如微軟這樣幾十年的老牌IT企業,仍是BAT這樣的新興互聯網大廠,即便項目投入的人再多,再優秀,也是沒法保證軟件是沒有BUG的。並且若有根據BUG來考評,有兩個很是嚴重的問題:編程
這與鼓勵創新、鼓勵分享的IT技術顯然是背道而馳的。微信
爲了提升代碼質量,團隊都會定義代碼審查的制度,如「工做經驗不足**年的代碼必須由主管審查」,「新入職員工的代碼必須師傅審查」,「開發經理按期對核心代碼進行審查」等,這些規定實際也是有必定的做用的,至少對統一新同事的代碼規範,提高經驗尚淺的開發人員能力是有做用的,可是由於更多的依賴於人工的審查,實施起來難度比較大,並且很難堅持。以前,咱們團隊就堅持了一段時間這樣的方式,SVN獲取代碼後對關注的人員的代碼進行審查,可是單憑我的或者少數幾我的的處理,時間一長,基本又回到原點。
其實我也一直有個疑問,真有結對編程的公司嗎??開發工程師都是屬於高強度工做,公司巴不得讓程序員一我的寫兩我的的代碼,怎麼會兩我的寫一份代碼。
也許咱們須要找到更加先進的方法來代替純人工的方式。多線程
「一個優秀的程序員的效率,比100個差的程序員效率都要高。」相似的結論是IT界是很是流行的,雖然不一樣的程序員在能力差100倍是有點誇張了,可是一個優秀的程序員,抵5個差的程序員這樣的事情在咱們身邊確定是常常發生的。
我一直都認爲,程序開發是一個很是須要創造性的工做,即便是簡單的增刪改查,不一樣的業務場景應該是不同的實現邏輯和技術手段,咱們在腦子裏面思考問題所花費的經歷真的比實現代碼花費精力多得多。
優秀的程序員效率更高,效率的差距可能會出現好幾倍的差距。並且,優秀的程序員,真的是BUG不多。一個簡單的插入操做,優秀的程序員想到的是:如何確保事務的一致性、如何防止連續點擊致使重複數據、多表的插入是否能夠並行提高效率,而差的程序員只會考慮最理想的外部狀況,其餘的問題都是環境的問題或者操做人員的問題。難道這些,上線後出現問題了,最終就不是BUG了??最後仍是須要開發人員來解決。架構
接上一個話題,想獲得優秀的程序員無非就兩種方式,招聘或者培養。前文也有說過要創建良好的代碼審查制度,雖然不是一個銀彈,但仍是有必定做用的。其實,代碼審查也能夠看作是內部培養的一種方式。每一個公司除了業務上的不一樣,咱們這裏暫不討論,每一個公司代碼都有本身的一個風格,統一代碼的風格,其實提高代碼質量一個很好的方式,公司都會有本身的代碼最佳實踐,如業界常常流傳的《阿里巴巴代碼規範》《58同城數據庫軍規》等。因此,多花點時間讓公司員工統一代碼風格,能讓總體代碼質量有明顯的提高。
同時,不少的BUG除了是技術上的問題,更可能是對於業務的不瞭解。有個長期穩定,而且能產生默契的團隊,除了有更高的效率,也能減小BUG的數量。異步
前文屢次提到代碼審查,代碼審查這個方式顯然是能提高代碼質量的,可是涉及的審查覆蓋率的問題,沒法發揮所有做用,若是有個自動化的方式進行代碼審查,那麼應該就是一個相對比較完善的解決方案了。
如今的代碼管理都是經過CVS工具進行管理的,基本都是git或者svn,經過代碼管理工具進行自動化的代碼審查就是一個很是好的方式。用戶提交代碼的時候,強制使用靜態的代碼審查工具(常見如findbug,checkstyled等)進行審查,沒法經過審查的,代碼是沒法提交的。雖然代碼審查工具現階段還不是很是智能,可是基礎的代碼規範,空指針預測等檢測仍是比較完善的,能很大程度上避免重複的人工審查工做。
move fast的審查方式是不少互聯網公司如今執行的一種人工審查方式,代碼的commit、push必須有兩我的執行,push的操做者必須審查commit的代碼,這樣基本能保證人工審查的覆蓋率,對提高代碼的質量有很大幫助。
這裏提到人工的方式,那麼人工的方式咱們應該注意哪些呢?靜態代碼掃描工具能幫忙解決不少基礎的代碼問題,咱們更多應該關注哪些靜態代碼檢查工具沒法找到的問題:svn
這些問題都是進行測試時都很難發現的問題,可是在生產環境卻很容易暴露的問題。工具
代碼質量的提高是做爲開發人員,特別是開發管理人員很是關注的問題,可是,要達到很是好的效果,倒是沒有銀彈的。
全部的管理制度、管理模式等,對於創造性的工做職位實際是不會有太大的幫助,「優秀的人」纔是提高代碼質量最好的武器,自動化的方式結合優秀的人,也許是你想要的最佳途徑。
微信號:itmifen