代码审查
![本页使用了标题或全文手工转换](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].