经历了ITOO5.0和组织部考核系统新旧两版代码的历练,前段时间也要过来考评和基础的代码晚上回家研究,着实通过看别人的代码可以扩展自己的眼界,也是由于在期间看到了一些“坏味道”,让我有了总结“代码走查”这样一篇博客,希望与网友们互相学习。
一、什么是代码走查
Code Review 中文翻译“代码审查”,“代码走查”等。代码走查是一个流程,从开发人员在一个开发阶段写好代码后开始,之后需要别人以发现bug和技术交流为目的review一下他的代码。整个流程是集代码审查,找出问题,改进代码和改后督查为一体的完整的流程。就像我们组织部最近的验收,都是集上一次查出来的问题针对做以检查。其实在我看来,两点,一、提高代码的质量,就像我们在ITOO中,除了要求效率之外, 我认为代码质量这块很应该抓一抓;二、提高程序员写代码时对代码质量的重视;三、让同学们有意识的去阅读别人的代码,去体验一个项目组长审查别人代码,学习别人代码闪亮点的兴趣。
二、Coder Review分类
分类标准一:
功能性Review:
通过Review检查当前代码是否全部实现了需求里面全部的功能点,且功能正确。找出代码中的bug,每个人在写和读代码的时候都有固有的习惯,这样的一些习惯往往会影响代码的质量。比如:我们在代码编写过程中都出现过类似的问题,自己代码中的问题自己无论看了多少遍都发现不了,但别人一眼就能发现问题。出现这样的情况并不是说写代码的人水平不高而是个人编程中的“无意识”错误。当然这也就是结队编程的妙处。
可读性Review:
代码做为软件开发过程中最实时的文档,同时为了以后维护方便一定要有高度的可读性。可读性检查主要检查代码风格是否严格按照系统代码风格规定,代码中是否经过充分的重构消除了其中冗余重复的代码。代码结构是否合理。
分类标准二:
Peer Review:
这种形式是从结对编程中抽象出来的简化版。主要由两个人完成代码走查工作,一个是代码的编写者,一个是对代码的查看者。先由代码编写者向代码走查者对代码进行简单的讲解,然后由代码查看者提出代码需要改进的地方。之后由编写者修改代码。
Peers Review:
这种形式是上面Peer Review的一个进化版增加了代码查看者的数量,通过引入更多的眼睛来更有效的发现代码存在的问题,同时使更多的人了解某一功能的解决方法,也扩大了对该功能的解决方法的讨论的范围。
以上两个分类标准从两个不同的方面给出了对于代码走查的解释,无非就是从内容上和形式上的分类标准,在TGB的项目当中,就像个人和合作机房收费系统,可以采用Peer Review这种形式,从功能性和可读性两个方面进行走查,对于初级程序员提高代码质量还是非常有好处的。
三、代码走查的一些注意事项
虽然之前在ITOO4.1有做代码规范检查的经历,但是当我发现这个比较全面的走查策略的时候还是激动不已的,我的那个兴奋啊,如下:
1代码的注释与代码是否一致?注释是否是多余的?
2是否存在超过3层嵌套的循环与/或判断?
3变量的命名是否代表了其作用?
4所有的循环边界是否正确?
5所有的判断条件边界是否正确?
6输入参数的异常是否处理了?
7程序中所有的异常是否处理了?
8是否存在重复的代码?
9是否存在超过20行的方法?
10是否存在超过7个方法的类?
11方法的参数是否超过3个?
12是否有多种原因导致修改某个类?
13当发生某个功能变化时,是否需要修改多个类?
14代码中的常量是否合适?
15一个方法是否访问了其他类的多个属性?
16某几项数据是否总是同时出现,而又不是一个类的属性?
17switch语句是否可以用类来替代?
18是否有一类的职责很少?
19是否有一个类的某些属性或者方法没有被其他类所使用?
20在类的方法中是否存在如下的调用形式:a.b().c()?
21是否某个类的方法总是调用另外一个类的同名方法?
22是否某个类总是访问另外一个类的属性与方法?
23是否两个类完成了类似的工作,使用了不同的方法名,却没有拥有同一个父类?
24是否某个类仅有字段和简单的赋值方法与取值方法构成?
25是否某个子类仅使用了父类的部分属性或方法?
做为敲代码的程序员,这25条疑问就是自己的代码规范的修炼手册啊,尤其是对于异常的处理,除了try catch,缺少输入参数的异常往往会让开发人员和测试人员互相扯皮的现象发生,还是从敲程序的时候就做好处理吧,So nice,整理完这些,站位又高了一大截,积累代码量的过程中慢慢来养成习惯吧。
提前介绍一个代码走查工具“StyleCop”,可以内嵌到VS中来做代码规范性检查,下一篇博客做出简要介绍。