• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
导航菜单
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx
您的位置:首页 > 服务器 >云计算 > 什么是Code Review,CodeReview

什么是Code Review,CodeReview

作者:网友 字体:[增加 减小] 来源:互联网

本文主要包含codereview,codereview 工具,codereview是什么意思,gerrit code review,code review tool等服务器相关知识,网友希望可以进行参考

什么是Code Review,CodeReview


Code Review是一种通过复查代码提高代码质量的过程,在XP方法中占有极为重要的地位,也已经成为软件工程中一个不可缺少的环节。本文通过对Code Review的一些概念和经验的探讨,就如何进行Code Review和Code Review中应该注意什么提出一些建议。 本文中涉及的问题大部分针对JAVA类代码。同时本文不涉及Code Review过程和组织。

关键词: Code Review,JAVA, XP ,代码质量 ,软件工程

一、Code Review简介
1 Code Review的目的
凡事知其然还要知其所以然,我们首先需要知道什么是Code Review和我们使用它的目的是什么。Code Review是一种用来确认方案设计和代码实现的质量保证机制,通过这个机制我们可以对代码,测试过程和注释进行检查。Code Review主要用来在软件工程过程中改进代码质量,通过Code Review可以达到如下目的:

在项目早期就能够发现代码中的BUG

帮助初级开发人员学习高级开发人员的经验,达到知识共享

避免开发人员犯一些很常见,很普通的错误

    保证项目组人员的良好沟通

    项目或产品的代码更容易维护

2 Code Review的前提
知道了Code Review的目的,我们就可以看看如何做Code Review了,但在做Code Review前我们还有事要做,所谓预则立,不预则废,就是说如果在进入Code Review之前我们不做些准备工作,Code Review很容易就变得没有意义或是流于形式,这在我们周围是有很多例子的啊。进入Code Review需要检查的条件如下:

a)       Code Review人员是否理解了Code Review的概念和Code Review将做什么

如果做Code Review的人员不能理解Code Review对项目成败和代码质量的重要程度,他们的做法可能就会是应付了事。

b)      代码是否已经正确的build,build的目的使得代码已经不存在基本语法错误

我们总不希望高级开发人员或是主管将时间浪费在检查连编译都通不过的代码上吧。

c)      代码执行时功能是否正确

Code Review人员也不负责检查代码的功能是否正确,也就是说,需要复查的代码必须由开发人员或质量人员负责该代码的功能的正确性。

d)      Review人员是否理解了代码

做复查的人员需要对该代码有一个基本的了解,其功能是什么,是拿一方面的代码,涉及到数据库或是通讯,这样才能采取针对性的检查

e)       开发人员是否对代码做了单元测试

这一点也是为了保证Code Review前一些语法和功能问题已经得到解决,Code Review人员可以将精力集中在代码的质量上。

3 Code Review需要做什么
好了,进入条件准备好了,有人在这些条件中看到Code Review这也不负责,那也不检查,不禁会问,Code Review到底做什么?其实Code Review主要检查代码中是否存在以下方面问题:代码的一致性、编码风格、代码的安全问题、代码冗余、是否正确设计以满足需求(性能、功能等等),下边我们一一道来。以下内容参考了《Software Quality Assurance: Documentation and Reviews》一文中的代码检查部分。

3.1完整性检查(Completeness)
代码是否完全实现了设计文档中提出的功能需求

代码是否已按照设计文档进行了集成和Debug

代码是否已创建了需要的数据库,包括正确的初始化数据

代码中是否存在任何没有定义或没有引用到的变量、常数或数据类型

3.2一致性检查(Consistency)
代码的逻辑是否符合设计文档

代码中使用的格式、符号、结构等风格是否保持一致

3.3正确性检查(Correctness)
       代码是否符合制定的标准

       所有的变量都被正确定义和使用

       所有的注释都是准确的

       所有的程序调用都使用了正确的参数个数

3.4可修改性检查(Modifiability)
       代码涉及到的常量是否易于修改(如使用配置、定义为类常量、使用专门的常量类等)

       代码中是否包含了交叉说明或数据字典,以描述程序是如何对变量和常量进行访问的

       代码是否只有一个出口和一个入口(严重的异常处理除外)

3.5可预测性检查(Predictability)
       代码所用的开发语言是否具有定义良好的语法和语义

       是否代码避免了依赖于开发语言缺省提供的功能

       代码是否无意中陷入了死循环

       代码是否是否避免了无穷递归

3.6健壮性检查(Robustness)
       代码是否采取措施避免运行时错误(如数组边界溢出、被零除、值越界、堆栈溢出等)

3.7结构性检查(Structuredness)
       程序的每个功能是否都作为一个可辩识的代码块存在

       循环是否只有一个入口

3.8可追溯性检查(Traceability)
       代码是否对每个程序进行了唯一标识

       是否有一个交叉引用的框架可以用来在代码和开发文档之间相互对应

       代码是否包括一个修订历史记录,记录中对代码的修改和原因都有记录

       是否所有的安全功能都有标识

3.9可理解性检查(Understandability)
       注释是否足够清晰的描述每个子程序

       是否使用到不明确或不必要的复杂代码,它们是否被清楚的注释

       使用一些统一的格式化技巧(如缩进、空白等)用来增强代码的清晰度

       是否在定义命名规则时采用了便于记忆,反映类型等方法

       每个变量都定义了合法的取值范围

       代码中的算法是否符合开发文档中描述的数学模型

3.10可验证性检查(Verifiability)
       代码中的实现技术是否便于测试

二、Code Review经验检查项
以下是在实践中建立的检查列表(checklist),通过分类和有针对性的检查项,保证了Code Review可以有的放矢。

1 JAVA编码规范方面检查项
检查项参照JAVA编码规范执行,见《JAVA编码规范(Java Code Conventions)》

2 面向对象设计方面检查项
这几点的范围都很大,不可能在本文展开讨论,有专门的书籍介绍这方面问题,当然在Code Review中主要靠经验来判断。

A)       类设计和抽象是否合适

B)        是否符合面向接口编程的思想

C)       是否采用合适的设计范式

3 性能方面检查项
性能检查在大多数代码中都是需要严重关注的方面,也是最容易出现问题的方面,常常有程序员写出了功能和语法没有丝毫问题的代码后,正式运行时却在性能上表现不佳,从而不得不做大量的返工,甚至是推倒重来。

A)       在海量数据出现时,队列,表,文件,在传输,upload等方面是否会出现问题,有无控制,如分配的内存块大小,队列长度等控制参数

B)       对hashtable,vector等集合类数据结构的选择和设置是否合适,如正确设置capacity,load factor等参数,数据结构的是否是同步的

C)       有无滥用String对象的现象

D)       是否采用通用的线程池、对象池模块等cache技术以提高性能

E)       类的接口是否定义良好,如参数

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 什么是Code Review,CodeReview
  • 程序员必备的代码审查(Code Review)清单,codereview

相关文章

  • ERROR (ConnectionError): HTTPConnectionPool (Caused by <class 'socket.error'>: [Errno 111] Connecti,errno111
  • Linux配置时间服务器,linux配置服务器
  • 相似度计算map-reduce实现思路,计算map-reduce思路
  • 通过TelnetClient获取Zookeeper监控数据,zookeeperclient
  • Spark的Master和Worker集群启动的源码分析,sparkworker
  • Libvirt中windows虚拟机的动态内存管理,libvirt虚拟机
  • 在 Mac OS X 系统里使用 Docker,osdocker
  • 【Spark】配置Spark源码阅读环境,spark源码阅读环境
  • 玩转OpenStack网络Neutron(2)--使用Open vSwitch实现VLAN类型租户网络,openstackvswitch
  • Linux索引节点(Inode:no space for device)用满导致的一次故障,linuxinode

文章分类

  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx

最近更新的内容

    • RabbitMQ(python实现)学习之二:Producer发送消息至多个消息队列queue(广播消息),rabbitmqqueue
    • OpenStack Kilo版本新功能分析,openstackkilo
    • 给大数据文件的每一行产生唯一的id,数据一行id
    • Apache Pig的前世今生,apachepig前世今生
    • CSR1000V在XenServer的安装和简单使用,csr1000vxenserver
    • hive创建表语句详解,hive语句详解
    • CDH集群中YARN的参数配置,cdh集群yarn参数
    • 2015.6.5,2015.6.5世界环境日
    • OpenStack-API开发,openstackapi
    • HDFS小文件的合并优化

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有