代码审核分为自我审核和同行评审。
一、自我审核
代码自我审核可以借助工具来进行,工具分为两种,一种是动态审核,一种是静态审核。
静态审核
静态审核是直接对代码源文件进行审查, 重在在于检查代码编写是否符合规范。一般来说, 静态审核主要检查如下内容:
- 潜在的Bug, 如空的try/catch/finally/switch申明;
- 死代码: 未使用的局部变量,参数和私有方法;
- 过于复杂的表达式;
- 重复代码;
目前静态检查主要使用的工具是PMD (http://pmd.sourceforge.net/pmd-5.0.4/ ), 这是一个开源的代码检查工具,有丰富的检查规则,也支持自定义检查规则。提供和Eclipse集成插件, 支持对代码进行实时动态检查。
【图】
静态审核有助于开发人员养成良好的编码习惯。一般来说,刚开始使用时,总有大量的错误发生,开发人员需使用超过50%的编码时间来修复错误,随着编码习惯养成,在修复静态编码错误上的时间也会越来越少。
开发人员需在完成一个文件编写之后,执行静态检查。 提交到版本控制服务器上的代码,必须是完成静态检查的代码。
动态检查
动态检查是对编译之后的代码进行检查,主要目的是提前发现一些运行时的错误,包括:
潜在的内存泄露
未释放的资源
动态检查可以帮助开发人员尽快发现代码运行过程中可能出现的错误。 目前使用的工具主要是FindBugs.
http://findbugs.sourceforge.net/index.html
FindBugs提供Eclipse集成插件, 安装以后,可以对代码进行检查。
【图】
FindBugs不需要实时运行,开发人员在完成一个模块编写之后,可以运行这个工具对代码做检查。
二、 同行评审
代码评审也称代码复查,是指通过阅读代码来检查源代码与编码标准的符合性以及代码质量的活动。
[参考 http://daquan198163.iteye.com/blog/339832 ]
评审的内容:
- 代码结构问题:重复代码、巨大的方法和类、分层不当、紧耦合
- 工具、框架使用不当:Spring、Hibernate、AJAX
- 实现问题:错误验证、异常处理、事务划分、线程、性能、安全、实现过于复杂、代码可读性不佳、扩展性不好
- 测试问题:测试覆盖度不够、可测试性不好
代码评审不负责检查功能、逻辑是否正确,这些要靠单元测试和QA工作来解决
代码评审的好处:
- 帮助新加入人员尽快熟悉项目情况,熟悉编码风格。 特别是新员工多时,这个很有必要。
- 提高代码质量
- 在项目的早期发现缺陷,将损失降至最低
- 评审的过程也是重新梳理思路的过程,双方都加深了对系统的理解
- 促进团队沟通、促进知识共享、共同提高
代码评审的形式有交叉评审和会审。
交叉评审
项目组成员互相检查代码。
参与者可以是任意两个组员,或开发组长分别与每个组员结对进行
时机可以选择在下班前半小时,对当天改动的模块进行评审。每次评审代码控制在200行以内,故要求每1-2天进行一次。
议程:
- 必要时,由代码作者讲解如何以及为何这样实现、
- 评审者提出问题和建议,可以当面沟通,也可以通过bugzilla进行。 当面沟通的话,需有会议记录,会议记录发送给全项目组人员参考。
会审
以项目为单位,召开专门的代码评审会议
参与者:包括CTO, 项目组全体成员,其它组的开发组长也应尽量参加
时机选择:
- 如果项目组中新人多(50%及以上),要求每周开展一次;
- 正常情况下,在项目开发阶段,至少每两周进行一次。
- 开发进行到某一阶段时,对共性问题进行总结,对好的做法进行提炼和推广
会前准备工作:
- 由项目经理组织,组织者应通知各参与者本次评审的范围 。
- 参与者阅读源代码,列出发现的问题、亮点,汇总给组织者
- 准备工作要细致,需要给出问题详细描述以及相关代码在SVN上的URL地址等
评审代码的选择:
- 最近一次迭代开发的代码
- 系统关键模块
- 业务较复杂的模块
- 缺陷率较高的模块
会议议程:
- 如果是第一次会议,先由该项目开发组长做整体介绍
- 参加者依次发言,结合代码讲解发现的问题
- 每讲完一个问题,针对其展开讨论,每个问题控制在10分钟以内
- 如果问题不多,还可以安排该组成员对最近开发的代码进行地毯式的讲解和排查;或者针对某个方面对整个项目做评审,例如性能、安全性或测试
会后总结:
- 把会上提出的所有问题、亮点及最终结论详细的记录下来,供其他团队借鉴
- 未能讨论清楚的问题,会后解决
实行代码评审制度前的准备工作:
- 架构师提供开发规范、指南,为代码评审提供依据
- 建立起单元测试规范,否则无法达到测试覆盖度的要求、难以修正发现的问题
- 最好有样例代码库作参照,以提高代码评审的可操作性
- 提供评审案例:用评审前的代码与评审后优化的代码做对比
- 问题跟踪:对评审中发现的问题代码应加以跟踪,确保问题得以解决,防止复发
- 评审到什么程度:
- 进行全面的代码评审成本较高,也没有必要
对发现的问题要本着集体代码所有制的观点和就事论事的原则,因此建议把代码质量与团队绩效(而不是个人绩效)挂钩。
代码评审最佳实践,参考:http://www.ibm.com/developerworks/cn/rational/11-proven-practices-for-peer-review/
- 一次评审少于 200–400 行的代码。
- 目标为每小时低于 300–500 LOC 的检查速率。
- 花足够的时间进行正确缓慢的评审,但是不要超过 60–90 分钟。
- 确定代码开发者在评审开始之前就已经注释了源代码。
- 为代码评审和获取制度建立可定量化的目标,这样您才能改进流程。
- 使用检查列表,因为它可以极大地改进代码开发者和评审者的作品。
- 确认缺陷确实得到修复了。
- 培养良好的代码评审文化氛围,在这样的氛围中搜索缺陷被看做是积极的活动。
- 警惕“老大”效应。
- 最少评审一部分代码,就是您不能评审全部的代码,以从 Ego Effect 中受益。
- 采用轻量级,能用工具支持的代码评审
相关推荐
### 代码评审会流程和评审标准 #### 一、引言 在软件开发过程中,代码的质量直接影响产品的稳定性和用户体验。为了提升代码质量、加强团队之间的沟通与协作,并且确保项目能够顺利推进,代码评审(Code Review)...
本文将详细介绍程序代码评审记录表的组成部分、代码评审的重要性、类型、缺陷的分类、以及代码评审带来的好处,最终总结其在整个软件开发过程中的作用。 程序代码评审记录表涵盖了项目信息、代码评审表、评审准备、...
### 11个高效的同行代码评审最佳实践 #### 背景介绍 本文基于IBM Rational Team Concert与SmartBear Code Collaborator结合使用的案例研究,提出了11项轻量级高效的同行代码评审最佳实践。这些实践旨在确保代码评审...
本篇文章将详细介绍前端代码评审规范V1.0,包括评审标准、评审时间、评审范围、评审代码选择、人员组成、评审结果和评审记录等方面的内容。 1. 编写目的 代码评审的主要目的是通过阅读代码来检查源代码与编码标准...
本文档旨在详细介绍中软国际的代码评审规范,包括代码评审的目的、前提条件以及具体的检查项等内容。 #### 二、代码评审的目的 1. **早期发现并修复缺陷**:通过代码评审可以在项目的早期阶段发现潜在的问题和缺陷...
本文档详细介绍了C++代码评审的等级标准及其具体示例,旨在帮助开发人员了解和识别常见的编码问题,并逐步提升代码质量。 #### 二、代码评审概述 **代码评审定义**:通过同行间的审查来检查源代码的缺陷和潜在问题...
1. **代码评审**:CodeReview宏允许开发者在Source Insight中直接进行代码评审。它可以标记出待审代码,记录评审意见,并支持多轮评审流程。这样,团队成员可以在保持代码编辑环境一致的同时,进行有效的代码质量...
- **概念**:代码评审是一种通过团队成员共同审查代码以发现错误、改进质量和确保代码符合既定规范的过程。 - **流程**: - 准备评审:确定参与者、目标和范围。 - 进行评审:逐行审查代码,提出意见和建议。 - ...
本文档旨在详细介绍如何利用Gerrit进行自动化脚本的评审过程,包括必要的软件安装、SSH连接初始化、TortoiseGIT的使用以及具体的代码评审流程。 #### 二、软件安装与配置 ##### 2.1 GIT软件安装 - **下载地址**:...
本文将围绕敏捷开发流程中的关键环节——提升代码质量的五个步骤展开讨论,即统一编码规范、静态代码分析、单元测试、持续集成及代码评审与重构,并介绍相关工具和方法的应用。 #### 一、统一编码规范 统一编码...
第4部分,"Review Application Matrix",可能是一个矩阵表格,列出了不同类型的评审(例如,需求评审、设计评审、代码评审)适用的场景,以及何时应该进行这些评审。 第5部分,"Review process – Informal format...
本文档旨在为软件开发团队提供一套完整的编码自测与代码评审流程指南,通过明确的工作项步骤,确保软件产品的质量与效率。文档将详细介绍编码完成后自测的重点功能点以及Java代码在评审过程中的关键点。 #### 二、...
#### 四、项目阶段评审表格介绍 项目阶段评审表由四张子表组成,每张表都有其特定的功能和作用: 1. **表1:评审问题记录(RPL)** - **目的**:记录评审过程中发现的问题及其相关信息。 - **内容**:包括问题的...
##### 1. 功能需求 - **功能概述**:简述每个功能的目的与实现方式。 - **输入输出**:定义功能的输入项与输出结果。 - **前提条件**:说明执行该功能所需的前置条件。 - **基本流程**:概述功能的基本处理流程。 - ...
提供支持评审的相关文档,如设计规格、需求文档、代码片段等,供评审人员参考和分析。 4. **申请人与评审负责人** 申请人通常是负责该项目或技术任务的工程师或团队,他们提出评审请求;评审负责人则负责协调评审...
6. **代码评审**:代码评审是团队协作中提高代码质量的重要手段。书中讨论了有效的代码评审策略,包括何时进行评审,如何给出建设性反馈,以及如何处理评审中发现的问题。 7. **编程习惯**:良好的编程习惯能显著...
1. **计划阶段**:确定评审的目标、参与人员、评审内容以及时间安排。 2. **准备阶段**:作者准备待评审的文档或代码,确保其完整性和可读性。 3. **预审阶段**:评审人预先熟悉材料,查找初步的问题。 4. **评审...