代碼審查除了顯而易見的對源碼本身正確性以及可維護性等方面的驗證,交流和學習也應該是其目的之一。和白盒測試相比,在很大程度上有共通之處,但側重點不同。代碼審查更偏重整體性,而白盒測試更偏重局部性。
代碼審查一般基于3種目的,包括審查代碼風格,審查正確性以及是否與設計相符,還有特定目的的審查,比如效率、容錯性、安全性等等。對于我們來說,對于不同部分的代碼,可能有不同的目的,有時候甚至多種目的結合起來審查。但是不論如何,每次代碼審查都應該確定目的,有的放矢,否則可能很難控制時間和質量。
形式上應該是多樣的,針對審查對象,應該有自查,互查,小組走讀等各種方式以區別對待,否則可能難以發現隱藏較深的問題,或者因大量的討論和會議喪失效率。但是如何區別就成了一個問題,對我們來說,什么樣的問題才需要小組走讀,由誰來判斷,如何判斷是需要明確的。
代碼審查的資源消耗是非常大的,這取決于審查的形式,審查的目的(涉及深度和廣度),以及審查的頻率。要認識到成本收益比和邊際收益遞減的規律,當然我們目前審查不足,增加審查力度的邊際收益應該還是比較大的。還有一個問題就是過程成本,或者說管理成本,如何保證審查的有效性以及縮減組織審查造成的資源損耗,制度化、規范化應該是一個辦法。
審查人員的素質也是關鍵的。不是說任何人都能成為審查人員,他必須在對象問題上具有一定的權威性,否則審查錯誤比不審查還要糟糕。而我們目前的情況是,所有具有一定資質的人員,都肩負著管理任務,大多數時間都消耗在公共、行政或者其它事務上,造成在審查力度上的不足,如何協調也是我們需要解決的一個問題。
最后的一點是期望收益的問題。如果我們希望審查發現所有問題,或者實行對審查人員的問責制,可能會造成大家都不愿意去審查代碼。審查只是一個保證手段,就好像測試一樣。如果一旦發現問題,就責怪審查人員為什么沒有發現,那是不可取的。