代码审查(英语:Code review)是指对计算机源代码系统化地审查,常用软件同行评审的方式进行,其目的是在找出及修正在软件开发初期未发现的错误,提升软件质量及开发者的技术。代码审查常以不同的形式进行,例如结对编程、非正式的看过整个代码,或是正式的软件检查。
简介借由代码审查可以找到及移除像是格式化字符串攻击、竞争危害、内存泄漏及缓存溢出等计算机安全隐患,因此提升代码的安全性。基于Subversion(可能是Trac或是Redmine)、Mercurial、Git或其他软件的线上软件库可以允许协同审查代码,而且有些协同代码审查工具可以简化代码审查的过程。
自动化代码审查软件可以系统化的检查源代码中是否有已知的计算机安全隐患,可以减少大量代码审查的工作。
卡珀斯·琼斯(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
本词条内容贡献者为:
王沛 - 副教授、副研究员 - 中国科学院工程热物理研究所