软件工程/质量/代码审查简介
代码审查是对计算机源代码进行的系统性检查(通常是同行评审)。其目的是发现和修复在初始开发阶段被忽视的错误,从而提高软件的整体质量和开发人员的技能。审查以各种形式进行,例如结对编程、非正式的代码走查和正式的代码审查。[1]
代码审查通常可以发现并消除常见的漏洞,例如格式字符串漏洞、竞争条件、内存泄漏和缓冲区溢出,从而提高软件安全性。基于 Subversion(使用 Redmine 或 Trac)、Mercurial、Git 或其他工具的在线软件存储库允许团队成员协作审查代码。此外,用于协作代码审查的专用工具可以促进代码审查流程。
自动代码审查软件通过系统地检查源代码中已知的漏洞,减轻了开发人员审查大量代码的任务。
Capers Jones 对 12,000 多个软件开发项目的持续分析表明,正式审查的潜在缺陷发现率在 60% 到 65% 之间。对于非正式审查,该数字低于 50%。[需要引用] 大多数形式的测试的潜在缺陷发现率约为 30%。[2]
典型的代码审查速度约为每小时 150 行代码。对于关键软件(例如安全关键嵌入式软件),每小时检查和审查超过几百行代码可能太快而无法发现错误。[3] 行业数据表明,代码审查最多可以实现 85% 的缺陷去除率,平均去除率约为 65%。[4]
代码审查实践可分为三大类:结对编程、正式代码审查和轻量级代码审查。[1]
正式的代码审查,例如 Fagan 检查,涉及一个谨慎且详细的流程,包括多个参与者和多个阶段。正式代码审查是传统的审查方法,软件开发人员参加一系列会议,逐行审查代码,通常使用材料的打印副本。正式审查非常彻底,已被证明可以有效地发现被审查代码中的缺陷。
轻量级代码审查通常比正式代码审查需要更少的开销,但如果正确执行,它同样有效。[需要引用] 轻量级审查通常作为正常开发流程的一部分进行
- 肩并肩 - 一名开发人员站在作者的肩膀上,作者向他们讲解代码。
- 电子邮件传递 - 源代码管理系统在代码签入后自动通过电子邮件将代码发送给审阅者。
- 结对编程 - 两名作者在同一工作站上共同开发代码,这在极限编程中很常见。
- 工具辅助代码审查 - 作者和审阅者使用专门设计用于同行代码审查的工具。
其中一些也可能被称为“代码走查”(非正式)或“评论”(快速且非正式)。
许多避免使用传统正式代码审查的团队在他们的正常开发流程中使用上述轻量级审查形式之一。一本名为同行代码审查的最佳保密秘诀的书中发表的一项代码审查案例研究发现,轻量级审查发现的错误与正式审查一样多,但速度更快,成本效益更高。
从历史上看,正式代码审查需要在审查活动和执行时间上投入大量资金。
有些人认为,熟练、有纪律地使用一些其他开发实践可以带来类似的高潜在缺陷发现/避免率。此外,XP 支持者可能会争论,叠加额外的 XP 实践,例如重构和测试驱动开发,将导致与传统方法相当的潜在缺陷水平,而无需投入。[需要引用]
代码分析工具的使用可以支持这项活动。特别是那些在 IDE 中工作的工具,因为它们为开发人员提供关于编码标准合规性的直接反馈。
- ↑ a b Kolawa, Adam (2007). 自动缺陷预防:软件管理最佳实践. 约翰·威利父子公司-IEEE 计算机学会出版社. 第 260 页. ISBN 0470042125.
{{cite book}}
: More than one of|pages=
and|page=
specified (help); Unknown parameter|coauthors=
ignored (|author=
suggested) (help) - ↑ Jones, Capers; Christof, Ebert (2009 年 4 月). "嵌入式软件:事实、数字和未来". IEEE 计算机学会. 检索于 2010-10-05.
- ↑ Ganssle, Jack (2010 年 2 月). "代码检查指南" (PDF). Ganssle 集团. 检索于 2010-10-05.
- ↑ Jones, Capers (2008 年 6 月). "缺陷潜力和缺陷消除效率的度量". 交叉对话,国防软件工程杂志. 检索于 2010-10-05.
- Jason Cohen (2006). 同行代码审查的最佳秘诀(现代方法。实用建议。). Smartbearsoftware.com. ISBN 1599160676.
- 安全代码审查常见问题
- 安全代码审查指南
- 轻量级工具支持有效代码审查 白皮书
- 代码审查最佳实践 白皮书,作者 Adam Kolawa
- 同行代码审查最佳实践 白皮书
- 代码审查案例研究
- "代码检查指南"(Jack G. Ganssle)
- 文章 实用代码审查的四种方法