代碼審查
![本頁使用了標題或全文手工轉換](http://images.weserv.nl/?url=//upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Zh_conversion_icon_m.svg/35px-Zh_conversion_icon_m.svg.png)
軟件開發 |
---|
核心行動 |
範式與模式 |
方法論與框架 |
支持行為 |
實踐 |
工具 |
標準與知識體系 |
代碼審查是指對電腦源代碼系統化地審查,常用軟體同行評審的方式進行,其目的是在找出及修正在軟體開發初期未發現的錯誤,提升軟件質量及開發者的技術。代碼審查常以不同的形式進行,例如結對編程、非正式的看過整個程式碼,或是正式的軟件檢查[1]。
簡介
藉由代碼審查可以找到及移除像是格式化字串攻擊、競爭危害、內存泄漏及緩存溢出等計算機安全隱患,因此提昇代碼的安全性。基於Subversion(可能是Trac或是Redmine)、Mercurial、Git或其他軟體的線上軟體庫可以允許協同審查代碼,而且有些協同代碼審查工具可以簡化代碼審查的過程。
自動化代碼審查軟體可以系統化的檢查源代碼中是否有已知的計算機安全隱患,可以減少大量代碼審查的工作。
卡珀斯·瓊斯(Capers Jones)分析了超過12,000個軟件開發項目,其中使用正式代碼審查的項目,潛在缺陷發現率約在60-65%之間,若是非正式的代碼審查,潛在缺陷發現率不到50%。大部份的測試,潛在缺陷發現率會在30%左右。[2]。
一般的代碼審查速度約是一小時150行程式碼,對於一些關鍵的軟體(例如安全關鍵系統的嵌入式軟體),一小時審查數百行程式碼的審查速度太快,可能無法找到程式中的問題[3][4]。代碼審查一般可以找到及移除約65%的錯誤,最高可以到85%[5]。
也有研究針對代碼審查找到的缺陷類型進行分析。代碼審查找到的缺陷中,有75%是和計算機安全隱患有關。對於產品生命週期很長的軟體公司而言,代碼審查是很有效的工具[6] [7]。
分類
代碼審查一般會分為三類:正式的代碼審查、結對程式設計、以及輕量型的非正式代碼審查[1]。
正式的代碼審查(例如范根檢查法)有審慎及仔細的流程,由多位參與者分階段進行。正式的代碼審查是傳統審查代碼的方式,由軟體開發者參加一連串的會議,一行一行的審查程式碼,一般會使用列印好的源代碼。正式的代碼審查可以徹底的找到程式中的缺陷,但需要投入許多的資源。
結對程式設計是兩個程式設計師在一個電腦上共同工作,一個輸入程式,另一個工程師審查他或她所輸入的程式,結對程式設計是在極限編程中常見的開發方式。
輕量型的非正式代碼審查需要投入的資源比正式的代碼審查要少,一般會是在正常軟體開發流程中同時進行,有時也會將結對程式設計視為輕量型代碼審查的一種。
- Email往返:在代碼登入後,源代碼管理系統自動將代碼郵寄給審查者。
- 配合輔助工具的代碼審查:作者及審查者利用配合代碼審查的軟體進行審查。
書籍Best Kept Secrets of Peer Code Review中曾提到有關代碼審查的案例研究,這個研究發現輕量型代碼審查所找到的缺陷會比正式的代碼審查要少,但其速度較快,其成本也較低。
評論
以往正式的代碼審查在審查的準備及進行時都需要投入許多的資源。
代碼分析工具的使用可以協助代碼審查。尤其是一些整合在整合開發環境(IDE)下的工具,可以直接提供程式開發者有關編程標準相容的回饋。
相關條目
參考資料
- ^ 1.0 1.1 Kolawa, Adam; Huizinga, Dorota. Automated Defect Prevention: Best Practices in Software Management. Wiley-IEEE Computer Society Press. 2007: 260/426 [2012-04-08]. ISBN 0-470-04212-5. (原始內容存檔於2012-04-25).
- ^ Jones, Capers; Christof, Ebert. Embedded Software: Facts, Figures, and Future. IEEE Computer Society. April 2009 [2010-10-05].
- ^ Ganssle, Jack. A Guide to Code Inspections (PDF). The Ganssle Group. February 2010 [2010-10-05]. (原始內容存檔 (PDF)於2018-12-15).
- ^ Kemerer, C.F.; Paulk, M.C. The Impact of Design and Code Reviews on Software Quality: An Empirical Study Based on PSP Data. IEEE Transactions on Software Engineering. July-Aug. 2009 [2012-03-21].
- ^ Jones, Capers. Measuring Defect Potentials and Defect Removal Efficiency. Crosstalk, The Journal of Defense Software Engineering. June 2008 [2010-10-05]. (原始內容存檔於2010-01-11).
- ^ Mantyla, M.V.; Lassenius, C. What Types of Defects Are Really Discovered in Code Reviews? (PDF). IEEE Transactions on Software Engineering. May–June 2009 [2012-03-21]. (原始內容存檔 (PDF)於2018-07-21).
- ^ Siy, H.; Votta, L. Does the Modern Code Inspection Have Value?. IEEE Proc. International Conference of Software Maintenance. May–June 2001 [2012-03-21].