说起代码走查,相信每个人都不陌生,但为什么要执行代码走查,什么时候来执行代码走查,如何有效执行代码走查,很多人的看法和见解都不一样。
一般的看法,认为代码走查是一种非正式的代码评审技术,它通常在编码完成之后由代码的作者向一组同事来讲解他自己编写的代码,由同事来给出意见。
这种做法在很多做软件开发组织中经常采用。但从实际执行效果来看,成效并不都那么明显,反而很多组织的这种做法有浪费时间之嫌。主要是因为代码走查活动时间有限,而参加代码走查的人之前没有较多的时间来提前了解被走查的代码,故而在实际执行时能被走查的代码所占的比例并不高,同时也发现不了多少本质问题。
随着软件外包业的发展,它有别于软件产品开发,客户对于产品的要求不再局限于系统是否能够正确运行。而是在设计、代码的品质上也有了更多的要求。有的客户甚至会在我们每次交付后先来检查我们的代码品质,只要是代码不符合要求就会被拒绝。
但在项目的实际执行中,面对客户的这些要求,我们又常常遇到诸如编写的代码不符合规范;编码效率低;代码的可重用性低;代码错误多等现象,从而影响到项目的时程和交付的品质,影响到客户对我们的满意度和对我们专业程度的质疑。
那么在项目的执行过程中,如何来解决面临的这些问题呢?结合在过程改进中的实践和软件外包项目的实际来看,我认为要解决这些问题的一个有效方法还是在于如何有效地执行代码走查活动。
首先我们要明确为什么要进行代码走查活动,我以为其目的主要有:
1)、通过代码走查活动,及时了解程序员编写的代码是否符合设计要求以及编码规范;
2)、通过代码走查活动,及时了解程序员在编码过程中遇到的问题,并给以协助,从而达到有效、透明地掌控项目进度的目的;
3)、通过代码走查活动,及时了解代码中可以重用的代码,并将其提取为公共方法或模块,提高代码的可重用性以弥补当前人员设计能力不足的现状。
要满足上面的三个目的,显然仅仅依靠工具是不能够满足要求的。那么如何执行代码走查活动才会有效呢?
首先,在系统设计阶段,我们需要明确系统架构、编码规范等技术要求,来制定出代码走查活动需要的Checklist(对于编码规范,当可以利用工具来进行检查时,准备的Checklist中就不需要将工具可以检查的要点再逐一列出来。)下图就是一个Checklist的示例。
第二步是确定代码走查时发现问题的记录方式。可以使用文档的方式来记录(这在很多项目中使用),也可以使用缺陷跟踪系统来记录。
当准备工作完成,且项目进入Coding阶段后,我们就可以正式开始执行代码走查活动了。为了改变以前那种事后检查的弊端,我们将代码走查活动前移到与程序员的Coding同步进行。这样做就是为了及时发现问题及时解决问题。实施的步骤如下:
1)、负责代码走查的人员从建构库中获取需要走查的代码;
2)、阅读代码,并根据前面准备好的Checklist对代码进行检查,看代码是否符合相关的技术要求,以及是否满足业务需求,发现的问题及时记录下来;
TIPS: 通常可以在阅读代码之前或者阅读完代码之后,利用工具来进行必要的Check。可以利用的工具有:Checkstyle,
CodePro, FindBugs, Metrics, JDepend等等。
3)、阅读代码的过程中,如果发现有可供提取的可重用方法或模块,及时记录并通报给项目的架构负责人,由其负责可重用方法的编写;
4)、及时向程序员通报代码走查的结果,并由程序员对发现的问题进行修改。必要时对代码走查中发现的问题需及时向程序员进行讲解和指导;
5)、跟踪代码走查中发现的问题的解决进展,直到问题均关闭;
6)、每日重复以上的步骤,直到所有功能的编码全部结束为止。
通过以上代码走查活动的说明,可看出代码走查人员在项目中承担着比较重要的角色。因此安排合适的人来进行代码走查也显得格外重要,可以说直接关系着代码走查活动的最终成效。
通常我们可考虑安排功能的设计者来负责该功能的代码走查。这样有几个好处:
一是功能的设计者对于功能的业务需求比较清楚,这样在做代码走查时就容易了解程序员编写的代码是否能够满足设计的要求和业务需求。其实从另外一个角度来看也是对设计的一种检查;
二是通常功能的设计者都是较资深的人员,可以为程序员提供有效地指导和协助,从另外一个角度也是对程序员的On-Job
Training。
在实施代码走查的过程中,我们还需要借助工具来提高我们的效率,但切忌过分依赖工具或者仅仅只靠工具。同时也需要转变为了代码走查而代码走查的倾向,因为那样就不能发挥代码走查的作用,并最终达到代码走查的目的。
从实践来看,代码走查时记录问题的方式也影响到代码走查的效率。这里向大家介绍一个在Eclipse中进行代码走查的插件——Jupiter。它提供了一种简单而便捷的方式来记录和跟踪代码走查时发现的问题。
Jupiter将走查结果以XML文件的形式存入SCM系统中,并且每条代码走查的意见直接关联对应代码,可以做方便的代码跳转。最新的安装包可以在Jupiter的网站上下载到:http://csdl.ics.hawaii.edu/tools/jupiter
下图是Eclipse中安装Jupiter后的界面。
在项目中使用Jupiter时,需要先进行配置。所有配置信息都保存在一个.jupiter文件中,并需将之提交到SCM系统。
配置完成后,可按照以下步骤来使用:
1)、个人走查(Individual Phase) 代码走查者在本地对代码进行走查,然后建立相关的Review
Issue。走查结果会自动保存在一个以.review为扩展名的XML文件中。该文件保存在Eclipse项目所在目录的某个子目录下,通常是项目根目录下的Review子目录。走查完毕,走查者需将.review文件提交到SCM系统。
2)、团队走查(Team Phase) 个人更新本地工程以获得其他走查者的.review文件,然后选择“Team
Phase”。这样,所有在个人走查阶段建立的Review Issue都将会在本地呈现。此阶段主要完成问题的分析与指派。最后,将修改后的全部.review文件重新提交到SCM系统。
3)、修改阶段(Rework Phase) 被查代码的所有者,根据走查者的意见对代码做出修改,然后修改Review
Issue的状态。
由于使用Jupiter建立Review Issue是可以与代码关联的,并且是在Eclipse的集成环境下,相比较而言,我们记录Issue就会更加方便,而修改代码时也更容易将Issue与代码相对应。
按照以上介绍的方法来进行代码走查的项目,在代码品质上都有了普遍地提高。那么,你所在的项目呢?行动起来,相信代码走查这个锦囊能够为你的项目走向成功奠定一个很好的基础。 |