複製鏈接
請複製以下鏈接發送給好友

代碼審查

鎖定
代碼審查(英語:Code review)是指對計算機源代碼系統化地審查,常用軟件同行評審的方式進行,其目的是在找出及修正在軟件開發初期未發現的錯誤,提升軟件質量及開發者的技術。代碼審查常以不同的形式進行,例如結對編程、非正式的看過整個代碼,或是正式的軟件檢查。
中文名
代碼審查
外文名
Code review
目    的
對計算機源代碼系統化地審查
領    域
計算機

目錄

代碼審查簡介

藉由代碼審查可以找到及移除像是格式化字符串攻擊競爭危害內存泄漏緩存溢出計算機安全隱患,因此提升代碼的安全性。基於Subversion(可能是Trac或是Redmine)、MercurialGit或其他軟件的線上軟件庫可以允許協同審查代碼,而且有些協同代碼審查工具可以簡化代碼審查的過程。
自動化代碼審查軟件可以系統化的檢查源代碼中是否有已知的計算機安全隱患,可以減少大量代碼審查的工作。
卡珀斯·瓊斯(Capers Jones)分析了超過12,000個軟件開發項目,其中使用正式代碼審查的項目,潛在缺陷發現率約在60-65%之間,若是非正式的代碼審查,潛在缺陷發現率不到50%。大部分的測試,潛在缺陷發現率會在30%左右。。
一般的代碼審查速度約是一小時150行程序碼,對於一些關鍵的軟件(例如安全關鍵系統的嵌入式軟件),一小時審查數百行程序碼的審查速度太快,可能無法找到程序中的問題。代碼審查一般可以找到及移除約65%的錯誤,最高可以到85%。
也有研究針對代碼審查找到的缺陷類型進行分析。代碼審查找到的缺陷中,有75%是和計算機安全隱患有關。對於產品生命週期很長的軟件公司而言,代碼審查是很有效的工具。 [1] 

代碼審查分類

代碼審查一般會分為三類:正式的代碼審查、結對編程、以及輕量型的非正式代碼審查。
正式的代碼審查(例如範根檢查法)有審慎及仔細的流程,由多位參與者分階段進行。正式的代碼審查是傳統審查代碼的方式,由軟件開發者參加一連串的會議,一行一行的審查代碼,一般會使用打印好的原行碼。正式的代碼審查可以徹底的找到程序中的缺陷,但需要投入許多的資源。
結對編程是兩個程序員在一個計算機上共同工作,一個輸入程序,另一個工程師審查他所輸入的程序,結對編程是在極限編程中常見的開發方式。
輕量型的非正式代碼審查需要投入的資源比正式的代碼審查要少,一般會是在正常軟件開發流程中同時進行,有時也會將結對編程視為輕量型代碼審查的一種。
  • Email往返:在代碼登錄後,源代碼管理系統自動將代碼郵寄給審查者。
  • 配合輔助工具的代碼審查:作者及審查者利用配合代碼審查的軟件進行審查。
書籍Best Kept Secrets of Peer Code Review中曾提到有關代碼審查的案例研究,這個研究發現輕量型代碼審查所找到的缺陷會比正式的代碼審查要少,但其速度較快,其成本也較低。 [1] 

代碼審查評論

以往正式的代碼審查在審查的準備及進行時都需要投入許多的資源。
代碼分析工具的使用可以協助代碼審查。尤其是一些集成在集成開發環境(IDE)下的工具,可以直接提供程序開發者有關編程標準兼容的反饋。 [2] 

代碼審查結對編程

結對編程(英語:Pair programming)是一種敏捷軟件開發的方法,兩個程序員在一個計算機上共同工作。一個人輸入代碼,而另一個人審查他輸入的每一行代碼。輸入代碼的人稱作駕駛員,審查代碼的人稱作觀察員(或導航員)。兩個程序員經常互換角色。
在結對編程中,觀察員同時考慮工作的戰略性方向,提出改進的意見,或將來可能出現的問題以便處理。這樣使得駕駛者可以集中全部注意力在完成當前任務的“戰術”方面。觀察員當作安全網和指南。結對編程對開發程序有很多好處。比如增加紀律性,寫出更好的代碼等。
結對編程是極端編程的組成部分。 [2] 
參考資料
  • 1.    Cockburn, Alistair; Williams, Laurie. The Costs and Benefits of Pair Programming (PDF). Proceedings of the First International Conference on Extreme Programming and Flexible Processes in Software Engineering (XP2000). 2000.
  • 2.    Schümmer, Till; Stephan Lukosch. Understanding Tools and Practices for Distributed Pair Programming (PDF). Journal of Universal Computer Science. September 2009, 15 (16): 3101–3125