code Review

Martist發表於2019-10-30

現狀

Code Review做得好的是一些比較偏技術的團隊,而偏業務的技術團隊基本上沒有看到Code Review的記錄。在業務團隊不僅沒有Code Review,而且認為Code Review沒用,因為:

1)工期壓得太緊,業務應用開發忙的跟狗一樣,時間連coding都不夠,以上線為目的,
2)需求老變,程式碼的生命週期太短。所以,寫好的程式碼沒有任何意義,爛就爛吧,反正與績效無關。
3),而且業務邏輯變化快,通用性差,code review的成本要比底層高。
4)Code Review是一種教條,意義不大,有測試,只要不出錯,就可以了。
5)現在的主要矛盾是倒排出來的工期和不靠譜的程式設計師之間的矛盾,我認為cr不是解決這個問題的銀彈。不從實際情況出發光打正義的嘴炮實在太過於自慰了 。

工程師文化

Code Review沒用? 我心裡非常不認同這樣的觀點,我覺得我是程式設計師,我是工程師,就像醫生一樣,不是把病人醫好就好了,還要對病人的長期健康負責。對於常見病,要很快地醫好病人很簡單,下猛藥,大量使用抗生素,好得飛快。但大家都知道,這明顯是“飲鴆止渴”、“竭澤而漁”的做法。醫生需要有責任心和醫德,我也覺得程式設計師工程師也要有相應的責任心和相應的修養。東西交給我我必須要負責,我覺得這種負責和修養不是”做出來“就了事了,而是要到“做漂亮”這個級別,這就是“山寨”和“工業”的差別。而只以“做出來”為目的標準,我只能以為,這樣的做法只不過是“按部就班”的堆砌程式碼罷了,和勞動密集型的“裝配生產線”和“砌磚頭”沒有什麼差別,在這種環境裡呆著還不如離開。

技術團隊和業務團隊的矛盾

我們可以看到,上面觀點其實和Code Review沒有太多關係,其實是在抱怨另外的問題。這些觀點其實是技術團隊和業務團隊的矛盾,但不知道為什麼強加給了我的“Code Review很重要”的這個觀點,然後這些觀點反過來衝擊“Code Reivew”,並說“Code Review無用”。這種討論問題的方式在很常見,你說A,我說B,本來A、B是兩件事,但就是要混為一談,然後似是而非的用B來證明你的A觀點是錯的。(也許,這些工程師/架構師心存怨氣,需要一個發洩的通道)

我覺得,很多時候,人思考問題思考不清楚,很大一部分原因是因為把很多問題混為一談,連我自己有些時候都會這樣。引以為戒。

即然被混為一談,那我就來拆分一下,也是下面這三個問題:

Code Review有沒有用的問題。

Code Review做不起來的問題。

業務變化快,速度快的問題,技術疲於跟命。

大師點評Code Review

你Google一下Code Reivew這個關鍵詞,你就會發現Code Review的好處基本上是不存在爭議的,有很多很多的文章和博文都在說Code Review的重要性,怎麼做會更好,而且很多公司在面試過程中會加入“Code Review”的問題。開啟Wikipedia的詞條你會看到這樣的描述——

卡珀斯·瓊斯(Capers Jones)分析了超過12,000個軟體開發專案,其中使用正式程式碼審查的專案,發現潛在缺陷率約在60-65%之間,若是非正式的程式碼審查,發現潛在缺陷率不到50%。大部分的測試,發現的潛在缺陷率會在30%左右。

對於一些關鍵的軟體(例如安全關鍵系統的嵌入式軟體),一般的程式碼審查速度約是一小時150行程式碼,一小時審查數百行程式碼的審查速度太快,可能無法找到程式中的問題。程式碼審查一般可以找到及移除約65%的錯誤,最高可以到85%。

也有研究針對程式碼審查詢到的缺陷型別進行分析。程式碼審查詢到的缺陷中,有75%是和電腦保安隱患有關。對於產品生命週期很長的軟體公司而言,程式碼審查是很有效的工具。

Code Review的好處我覺得不用多說了,主要是讓你的程式碼可以更好的組織起來,有更易讀,有更高的維護性,同時可以達到知識共享,找到bug只是其中的副產品。這個東西已經不新鮮了,你上網可以找到很多文章,我就不多說了。就像你寫程式要判斷錯誤一樣,Code Review也是最基本的常識性的東西。
我從2002年開始就浸泡在嚴格的Code Review中,我的個人成長和Code Review有很大的關係,如果我的成長過程中沒有經歷過Code Review這個事,我完全不敢想像。
我個人認為程式碼有這幾種級別:1)可編譯,2)可執行,3)可測試,4)可讀,5)可維護,6)可重用。通過自動化測試的程式碼只能達到第3)級,而通過Code Review的程式碼少會在第4)級甚至更高。關於Code Review,你可以參看本站的《Code Review中的幾個提示》
可見,Code Review直接關係到了你的工程能力!

Code Review 的問題

有下面幾個情況會讓你的Code Review沒有效果。

人員能力不足

Code Review的過程中,大家大眼瞪小眼,沒有什麼好的想法,不知道什麼是好的程式碼,什麼是不好的程式碼。導致Code Review大多數都在程式碼風格上。今天,我告訴你,程式碼風格這種事,是每個程式設計師自查的事情,不應該浪費大家的時間。對此,我有兩個建議:

1)你團隊的人招錯了,該換血了。
2)讓你團隊的人花時候閱讀一下《程式碼大全》這本書(當然,還要讀很多基礎知識的書)。

結果更重要

做出來更重要,做漂亮不重要。因為我的KPI和年終獎based on how many works I’ve done!而不是How perfect they are ! 這讓我想到那些天天在用Spring MVC 做CRUD網頁的工程師,我承認,他們很熟練。大量的重複勞動。其實,仔細想一下好多東西是可以框架化,模板化,或是自動生成的。所以,為了堆出這麼多網頁就停地去堆,做的東西是很多,但是沒有任何成長。急功近利,也許,你做得多,拿到了不錯的年終獎,但是你失去的也多,失去了成為一個卓越工程師的機會。你本來可以讓你的月薪在1-2年後翻1-2倍的,但一年後你只拿到了為數不多的年終獎。

人員的態度問題

一方面就是懶,不想精益求精,只要幹完活交差了事。對此,你更要大力開展Code Review了,讓這種人寫出來的程式碼曝光在更多人面前,讓他為質量不好的程式碼蒙羞。另一方面,有人會覺得那是別人的模組,我不懂,也沒時間 去懂,不懂他的業務怎麼做Code Review? 我只想說,如果你的團隊裡這樣的“各個自掃門前雪”的事越多,那麼這個團隊也就越沒主動性,沒有主動性也就越不可能是個好團隊,做的東西也不可能好。而對於個人來說,也就越不可能有成長。

需求變化的問題

有人認識,需求變得快,程式碼的生存週期比較短,不需要好的程式碼,反正過兩天這些程式碼就會被廢棄了。如果是一次性的東西,的確質量不需要太高,反正用了就扔。但是,我覺得多多少少要Review一下這個一次性的爛程式碼不會影響那些長期在用的程式碼吧,如果你的專案全部都是臨時程式碼,那麼你團隊是不是也是一個臨時團隊?

時間不夠問題

如果是業務逼得緊,讓你疲於奔命,那麼這不是Code Review好不好問題,這是需求管理和專案管理的問題以及別的非技術的問題。下面我會說。

被業務逼得太緊

被業務逼得太緊,需求亂變,如果你有足夠的許可權,再者提供一些解決思路。

1)重新定義產品主要目標和範圍,確定哪些該做,哪些不該做。
2)制定標準 ,API都長得基本一樣,並制訂接入標準。
3)推動重構,不再重複造輪子。

這些事情推動起來並不容易,如果被業務方逼得緊,首先不要抱怨,你沒有時間被逼得像牲口一樣工作,這個時候,你需要的是暫停一下想一想,為什麼會像牲口一樣?而這正是讓你變得聰明的機會。

總結一下

你有沒有去Review業務部門給你的這麼多的需求,哪些是合理的,哪些是不合理的

在Amazon,開發工程師都會被教育拿到需求後一定要問——“為什麼要做?業務影響度有多大?有多少使用者受益?”,回答不清這個問題,沒有資料的支援,就不做。所以,產品經理要做很多資料挖拙和使用者調研的工作,而不是拍拍腦袋,聽極少數的使用者抱怨就要開需求了。

產品經理也要管理和教育的

你要告訴你的產品經理:“你是一個好的產品經理,因為你不但對使用者把握得很好,也會對軟體工藝把握得很好。你不但會開出外在的功能性需求,也同樣會開出內在的讓軟體系統更完善的非功能性需求。你不是在遷就使用者,而是引導使用者。你不會無限制地加功能,而是把握產品靈魂控制並簡化功能。你會為自己要做的和不做東西的感到同樣的自豪。”你要告訴你的產品經理:“做一個半成品不如做好半年產品”(更多這樣的觀點請參看《Rework摘錄和感想》)

做事情是要講效率的

Amazon裡喜歡使用一種叫T-Shirt Size Estimation的評估方法來優先做投入小產出大的“Happy Case”。關於什麼是效率,什麼是T-Shirt Size Estimation,你可以看看《加班與效率》一文 。

需求總是會變化的,不要抱怨需求變化太快

你應該抱怨的是為什麼我們沒有把握好方向?老變?這個事就像踢足球一樣,你要去的地方是球將要去的地方,而不是球現在的地方。你要知道球要去哪裡,你就知道球之前是怎麼動的,找到了運動軌跡後,你才知道球要去像何方。如果你都不知道球要去向何方,那你就是一隻無頭蒼蠅一樣,東一下西一下。

當你忙得跟牲口一樣,你應該停下來,問一下自己,自己成為牲口的原因,是不是就是因為自己做事時候像就牲口一樣思考?

推薦一本不錯的電子書

https://www.kancloud.cn/martist/ma_zhao_li...

本作品採用《CC 協議》,轉載必須註明作者和本文連結

是非之外有一座花園,我們會在那裡相遇

相關文章