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