簡介
藉由代碼審查可以找到及移除像是格式化字元串攻擊、競爭危害、記憶體泄漏及快取溢出等計算機安全隱患,因此提升代碼的安全性。基於Subversion(可能是Trac或是Redmine)、Mercurial、Git或其他軟體的線上軟體庫可以允許協同審查代碼,而且有些協同代碼審查工具可以簡化代碼審查的過程。
自動化代碼審查軟體可以系統化的檢查原始碼中是否有已知的計算機安全隱患,可以減少大量代碼審查的工作。
卡珀斯·瓊斯(Capers Jones)分析了超過12,000個軟體開發項目,其中使用正式代碼審查的項目,潛在缺陷發現率約在60-65%之間,若是非正式的代碼審查,潛在缺陷發現率不到50%。大部分的測試,潛在缺陷發現率會在30%左右。。
一般的代碼審查速度約是一小時150行程式碼,對於一些關鍵的軟體(例如安全關鍵系統的嵌入式軟體),一小時審查數百行程式碼的審查速度太快,可能無法找到程式中的問題。代碼審查一般可以找到及移除約65%的錯誤,最高可以到85%。
也有研究針對代碼審查找到的缺陷類型進行分析。代碼審查找到的缺陷中,有75%是和計算機安全隱患有關。對於產品生命周期很長的軟體公司而言,代碼審查是很有效的工具。
分類
代碼審查一般會分為三類:正式的代碼審查、結對編程、以及輕量型的非正式代碼審查。
正式的代碼審查(例如范根檢查法)有審慎及仔細的流程,由多位參與者分階段進行。正式的代碼審查是傳統審查代碼的方式,由軟體開發者參加一連串的會議,一行一行的審查代碼,一般會使用列印好的原行碼。正式的代碼審查可以徹底的找到程式中的缺陷,但需要投入許多的資源。
結對編程是兩個程式設計師在一個計算機上共同工作,一個輸入程式,另一個工程師審查他所輸入的程式,結對編程是在極限編程中常見的開發方式。
輕量型的非正式代碼審查需要投入的資源比正式的代碼審查要少,一般會是在正常軟體開發流程中同時進行,有時也會將結對編程視為輕量型代碼審查的一種。
•Email往返:在代碼登錄後,原始碼管理系統自動將代碼郵寄給審查者。
•配合輔助工具的代碼審查:作者及審查者利用配合代碼審查的軟體進行審查。
書籍 Best Kept Secrets of Peer Code Review中曾提到有關代碼審查的案例研究,這個研究發現輕量型代碼審查所找到的缺陷會比正式的代碼審查要少,但其速度較快,其成本也較低。
評論
以往正式的代碼審查在審查的準備及進行時都需要投入許多的資源。
代碼分析工具的使用可以協助代碼審查。尤其是一些集成在集成開發環境(IDE)下的工具,可以直接提供程式開發者有關編程標準兼容的反饋。
結對編程
結對編程(英語:Pair programming)是一種敏捷軟體開發的方法,兩個程式設計師在一個計算機上共同工作。一個人輸入代碼,而另一個人審查他輸入的每一行代碼。輸入代碼的人稱作 駕駛員,審查代碼的人稱作 觀察員(或 導航員)。兩個程式設計師經常互換角色。
在結對編程中,觀察員同時考慮工作的戰略性方向,提出改進的意見,或將來可能出現的問題以便處理。這樣使得駕駛者可以集中全部注意力在完成當前任務的“戰術”方面。觀察員當作安全網和指南。結對編程對開發程式有很多好處。比如增加紀律性,寫出更好的代碼等。
結對編程是極端編程的組成部分。