加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

如何提高代码质量之编码规范和代码审查

(2013-06-03 15:51:25)
标签:

代码质量

代码审核

代码review

编码规范

review

分类: 开发

代码质量是软件产品质量的一部分,我们从软件产品质量说起:

1.软件产品质量

软件产品质量通常可以从以下六个方面去衡量(定义) :

·       功能性(Functionality),即软件是否满足了客户业务要求;

·       可用性(Usability),即衡量用户使用软件需要付出多大的努力;

·       可靠性(Reliability),即软件是否能够一直处在一个稳定的状态上满足可用性;

·       高效性(Efficiency),即衡量软件正常运行需要耗费多少物理资源;

·       可维护性(Maintainability),即衡量对已经完成的软件进行调整需要多大的努力;

·       可移植性(Portability),即衡量软件是否能够方便地部署到不同的运行环境中;

由此可见,软件产品的质量有其明显的特殊性。而目前提高软件产品质量的主要方法是软件过程质量控制。

http://s15/mw690/44d803c9gde54fad7974e&690

软件产品质量关注点

 

2.代码质量的关注点

围绕软件质量的可度量特性,代码质量的关注点主要有:

可读性:代码是否可读易读,对于一个团队来说,编码标准是否一致,编码风格是否一致;

功能性:代码正确得实现了业务逻辑;

可维护性:代码逻辑是有层次的,是容易修改的;

高效性:代码实现在时间和空间的使用上是高效的; 


http://s1/mw690/44d803c9gde54fbcf1f40&690代码质量关注点

 

提高代码质量的方法

       提高代码质量的方法主要有:培训和审查监督。培训主要是针对业务领域、编程工具和技术、服务意识等基础方面的增强;而审查监督是针对编码规范、代码走查、代码评审、单元测试、集成测试、持续集成、执行流程等编程方面的增强。


http://s11/mw690/44d803c9gde54fbab490a&690

代码质量控制方法关注点

 

    本文着重讨论一下编码规范和代码审查的方法,其他内容将另外讨论。

    编码规范是对开发人员来说应该算最基本的要求,而通常都会被忽略,或者团队中存在不同的规范,即个人习惯主导了编码标准合代码风格。在这个问题上,我的建议是采用一些成熟的大型公司提出的标准来执行,这样即能够全面的考虑到各种代码的可读易读,又可以确保没有歧义。我们可以借鉴Google C++ Style Guide(参考地址:http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Doing_Work_in_Constructors(英文),https://github.com/brantyoung/zh-google-styleguide(中文))或者Code Conventions for the Java TM Programming Language(http://www.oracle.com/technetwork/java/codeconvtoc-136057.html),但是这两个语言具有非常大的通用性,也就是基本涵盖了我们现在使用率较高的集中语言,并且Google C++ Style还有一些针对objcpythonjson的规范,这些对我们规范编码都是很有好处的。

      第二,需要有良好的编程习惯,做好代码中的注释,一般要求在做类,变量,属性,方法等申明的时候必须添加注释,另外,在一些重要的业务逻辑处(一般是判断和循环)添加必要的注释。至于文档,至少要编写架构设计文档即概要设计文档, 为了便于进行单元测试,我们还必须写好详细设计文档。

    第三,我们还必须考虑到代码的美观,需要使用一致的缩进,现在大多数IDE都支持自动排版,基本可以排列出一个很漂亮整齐的缩进,请充分利用。除此以外,还要考虑适当的分行,一行不能太长影像阅读,行不能过长,同时代码行数也不能太多,一般一个方法的行数不要超过100,便于阅读理解。

 

       代码走查和代码评审属于代码审查范畴 。

码审查一般会分:正式的代码审查结对编程、以及量型的非正式代码审查(摘自维基百科) 

正式的代码审查慎及仔的流程,由多位参与者分。正式的代码审查传统审查的方式,由件开者参加一串的会,一行一行的审查,一般会使用打印好的原行。正式的代码审查可以底的找到程序中的缺陷,但需要投入多的源。

结对编程是两个程序在一个算机上共同工作,一个入程序,另一个工程师审查他所入的程序,结对编程是在极限程中常的开方式。

量型的非正式代码审查需要投入的源比正式的代码审查要少,一般会是在正常件开流程中同时进行,有也会将结对编视为轻量型代码审查的一种。

 

http://s4/mw690/44d803c9gde54fb952e23&690

我们当然不希望这样做代码审核

            首先,我们对代码审查要有一个正确的认识,代码审查并非挑错,也不是瞻仰大神牛人,而是对代码的鉴赏品玩,大家在一个相对平等宽松的环境里讨论各种代码的得失。

            其次,审核的代码要少而精,应该针对项目的热点,难点进行代码审核。比如,框架的工作原理,类库的封装,缓存的处理,内存的优化,复杂算法的实现甚至包括某个重大bug的修复。要明确的是,代码审核是一项非常消耗脑力的活动,甚至不亚于写代码,因此,应该将有限的脑力用在少而精的核心代码,重要代码。所以,审核代码前做好神和代码的选择也很重要。

            审核发现的问题,应该由代码编写者自己去修正或者重写,并且做好讨论记录和问题跟踪工作,通常代码审核发现的问题是具有一定普遍性,并且也是具有一定深度的,所以,必须做好记录,避免以后重犯。可以直接在mantis这类缺陷管理中进行记录,原则上来说,代码审核发现的问题也是bug的一部分。

            使用合适的代码审核分享工具,比较有名的开源代码工具Github就支持对某个分支或者提交进行讨论,并且由新的讨论都会给参与者发送一封邮件。也可以搭建自己的代码库,比如Bitbucket(更多代码审查工具见文末参考),还有我们已经搭建好的phabricator都可以进行代码审查。相对来说,phabricator是一个比较重量级的产品,而Bitbucket及其他几个参考文章(Code Review:代码审查工具大: http://developer.51cto.com/art/200908/141712.htm

)中提到的工具都是基于web,相对较轻量级。

            以上讨论了对于代码审查的管理执行方法,那么对于一个程序员来说,怎么提高代码质量呢?

            1、要主动去改进自己的代码,并且应该对自己的代码定期进行审查,作为一个程序员,每个阶段的代码都会有不同,这就是你进步的脚印,所以,每当过一个阶段,你去审查自己以前的代码时,会发现很多问题,会从中悟道很多。因此,代码审查不只是大家做下来看你的代码,还包括你自己有空时多看看自己的代码。

            2、阅读优秀的代码,看看别人怎么来写,看优秀的代码能让你欣赏到代码之优雅,编程之美。当你要实现一个算法,完成一个功能的时候,可以找一些开源的项目来看看别人怎么实现,当遇到一些复杂的难题的时候,多使用google来查看一下别人的实现方案,一定可以从中学到很多东西。

            3、请学好英语,如果没有学好,请补上。好的英语,不但能让你看懂很多英文资料(大家知道,这很重要,如果你不知道,那么请记住),并且还能让你的文件名,类名,方法名,变量名的命名更加规范贴切,增加代码的易读性,前面我们说过,这也是代码质量很重要的一部分。

以上这些只是粗步地列出了一些比较有效地方法,其他一些技术层面和技巧层面地东西抽时间继续讨论。

 参考文章:

Google C++ Style中文: https://github.com/brantyoung/zh-google-styleguide

Google C++ Style英文:http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Doing_Work_in_Constructors

Code Conventions for the Java TM Programming Language

http://www.oracle.com/technetwork/java/codeconvtoc-136057.html

如何提高代码质量意识: http://cantellow.iteye.com/blog/1040261

如何提高代码质量(管理篇):代: http://www.51testing.com/html/80/n-228280.html

一堂如何提高代码质量的培训课:http://www.uml.org.cn/sjms/201112155.asp

Code Review:代码审查工具大: http://developer.51cto.com/art/200908/141712.htm

部分摘自http://blog.163.com/haizai219@126/blog/static/44412555201122921114695/

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有