`

code Review

 
阅读更多
1、为什么要Code Review
    
     1、一般情况下一个软件项目是需要多个开发人参与一同完成,因此会存在编码风格和质量的差异。差异越多就越容易影响代码的可读性及维护性。代码维护性越多,后期成本会成倍增长。
       2、由于一些人可能限于水平,在编码过程中引入了较低级且显而易见的错误,比如:资源没有释放,造成内存泄漏。而这些问题只有在Code Review中才能发现和纠正,通过测试是很难发现的。
       3、提高整个开发团队的开发水平


2、从哪些方面Code Review

       1、开发的代码是否符合编程规范和设计文档规范

       2、注释是否符合规范
    
       3、Java中命名方法是否正确(方法名,变量名采取驼峰命名方式,一般首字母小写,其他后面单词首字母大写;类名接口名采取首字母大写;常量采取全部大写;包名采取全部小写)

      4、import中避免星号“*”,删除没用的import。可通过ctrl+shift+o能自动处理

      5、长度限制(文件长度默认2000行;每行长度:80;方法长度:150;方法的参数:7)

      6、关键字出现的顺序,如:public static final XXX

      7、避免三目运行符

      8、一个Class中是否oveeride 了equals和hashCode方法

      9、建议在java中不要使用switch,C++/C--/++C/--C

      10、不可读数据:
                              如:sex=0,这表示什么,大多数情况下,就连作者本人都要皱眉头想半天,所以这里的"0"是魔法法。如果这样写就好的多:
            public static final int MALE=0;
            sex = MALE;

      11、循环体中是否出现更改循环体变量,如:

           for(int i = 0; i < 1; i++){
               i++;
         }

     12、嵌套的if层次
           通过指定来限制if-else的嵌套层次,即一个if中包含另一个if。如:
         if(true){
            if(true){
          
             }
       }默认为1,建议可以增加,另外还可以检查try等嵌套

    13、检查并确认一个类中clone()方法与finalize()都调用了父类的clone()与finalize().

   14、限制一个方法中return语句的数据(默认是2条),如果return语句太多,说明某个方法实现的功能过多,而且很难阅读。

   15、在一个方法中,禁止对传来的参数进行赋值,如:

        public someMethod(String para1){
               para1 = "new para1";   //这是禁止的
       }

   16、确保某个class在被使用时都已经被初始化成默认值(对象是null; 数据和字符是0;boolean变量是false)

   17、确保在一个.java文件中,同样内容的字符串不可出现多次。如String name  String mz

   18、同一行中禁止声明多个变量,即每行只能声明一个变量

   19、不使用this(容易造成badTokenException的异常)

3、FindBugs简介

    这是一款静态分析工具,主要用于检查程度错误和性能问题。

     工作原理:它检查类或者jar文件,将字节码(字节码文件即.class文件)与一组缺陷模式进行对比以发现可能的问题


4、FindBugs能检查的问题类型

        1、正确性(Correntness):这种类型的问题在某种情况下会导致bug,如强制类型转换等异常。


2、不良实践(Bad practice):这种类型下的代码违反了公认的最佳实践标准,比如某个类实现了equals方法但未实现hashCode()方法等.

3、多线程正确性(MultiThread correntness):关注于同步和多线程问题。


        4、性能(performance):潜在的性能问题

        5、安全(Security):安全问题

        6、高危(Dodgy):FindBugs团队认为该类型的问题导致bug的可能性很高


[i]5、FindBugs可以具体检查哪些[/i]

     1、在一个类中的equals方法参数必须是Object,有人会这样写public boolean equals(ClassXX para)。comparaTo()也必须是Object.

      2、Random这个类下的实例可以重复使用,不需要重复创建

      3、实现Clonable接口,必须重写clone方法,但clone方法中必须要调用父类的clone

      4、重写equals方法时也必须重写hashCode(),因为大家均默认相同的对象也有相同的hashCode.

     5、方法中不能随意丢弃或忽略异常

    6、Collection中对象需要全部清除时,应该调用clear(),而不是removeAll()

     7、方法中不能随意调用System.exit()(用于结束掉当前正在运行的java虚拟机,即终止所有正在运行的程序),更不能随便调用System.runFinalizerOnExit(当程序结果的时候执行垃圾回收)
 
     8、比较对像时应使用equals而不是==

     9、finalizer()方法不能为空(对没有被引用的对像进行回收释放内存资源)为空时应该删除

    10、finalizer()方法中的参数为null时,也可删除此方法

    11、finalizer()方法中如果仅仅调用父类的方法,也可以删除

    12、finalizer()方法中必须调用父类的finalizer()方法

    13、不要通过类的实例去访问它的静态方法或变量

    14、不要在session中放入未实现序列化的对像

    15、返回Boolean 类型的方法返回null,会报空指针异常

    16、clone方法也不允许返回null

    17、toString() 也不允许返回null,应该返回空字符串。

    18、如果不是异常类,类的名称不能命名为XXException

    19、方法未关闭数据库(流等资源)或方法会抛出异常导致数据库不能关闭(如果不关流,长时间的话会出OutOfMemoryError异常;如果Connection没有关闭的话,连接就会一直被占用,当被占用的连接数达到tomcat设置的最大数时,就会导致系统连不上数据库了,而且一样会占用资源)

   20、方法中忽略的java.io.InputStream.read(),java.io.InputStream.skip(),File.delete()等方法的返回值

   21、实现了Comparator接口的对象,最好也实现Serializable接口,将对象放入Treemap时使用

  22、不能序列化的对象不能直接放到实现Serializable接口的对象中,要标记为transient

  23、如果一个类是Serializable的,其父类必须有默认的构造器,因为反序列化时会调用,而且此类必须有serialVersionUID

  24、如果一个类是Externalizable的必须有默认构造器。

  25、如果不是非常有必要不要乱用instanceof

  26、在hasNext方法里调用next

  27、synchronized不能加在Integer,Boolean等装箱变量上(因为在运算过程中,java是自动解箱,再装箱成新对象的,这一过程导致对像改变,无法用在synchronized上),






分享到:
评论

相关推荐

    Modern Code Review- A Case Study at Google.pdf

    Employing lightweight, tool-based code review of code changes (aka modern code review) has become the norm for a wide variety of open-source and industrial systems. In this paper, we make an ...

    Source Insight 宏 codeReview.em

    CodeReview工具的作用:1.减少评审人的缺陷记录和汇总时间,方便责任人查找问题出处;2.检视完成后生成检查报告,代码作者点击按钮可以直接找到错误处;3.任务责任人修改完成后,直接修改问题状态,组织者按快捷键...

    CodeReview工具Jupiter

    Code Review的作用和意义已在很多技术团队内达成共识,可是很多时候并未被有效执行,甚至被认为是一项费时费力的工作。借助一些工具可以更容易,更有效率地来进行Code Review,本文介绍的Jupiter即是其中之一。  ...

    Source Insight CodeReview宏,增加使用说明

    Source Insight CodeReview宏,增加使用说明。用于代码评审和统计。

    Java项目开发CodeReview 常见问题实例分析及指南

    CodeReview的基本手段还是需要技术经理通过人工检查项目成员的代码,来将各种问题扼杀在开发阶段,但是不同经验及技术水平的经理在review同一段代码所发现的问题可能相差比较大,不同的Team可能因此产生的效果也不同...

    Steven Code Review 代码在线审查

    Steven Code Review 2009.12M1发布包.rar 代码在线审查工具 @date: 2009-12-28 @author: YF @email: yifi@tom.com 功能: 1 方便学员学习教师的代码,无需在本机运行IDE即可以代码加亮的方式查看服务器共享的代码...

    OWASP Code Review Guide

    There are four basic techniques for analyzing the security of a software application - automated scanning, manual penetration testing, static analysis, and manual code review. This OWASP Guide is ...

    Codereview 代码审查工具(国人开发)

    软件介绍: 一、软件特色 功能丰富:实现文件内容、度量、命名、注释、类图、Halstead等审查。 简单易用:无需安装,直接使用,直接删除;... 直观可视:分析结果与源代码在同一界面显示对照,...http://www.codereview.com.cn

    code review

    code review 用来检查代码,生成检查报告的

    code review(程序员必看)

    code review(程序员必看)code review(程序员必看)code review(程序员必看)

    code review tool from google

    code review on the web

    C++ Code Review检查清单

    C++代码 Code Review时使用的检查清单和问题记录模板

    code review代码检测原理

    本文叫你如何进行code review代码检测

    CodeReview.em

    source insighet 集成code review,代码审核时非常好用,使用起来比较简单,加入工程,同步,添加快捷键,使用快捷键即可正常使用,保存即可。

    Best kept secrets of peer code review

    Best kept secrets of peer code review 2006

    CodeReview常見代碼問題

    CodeReview常見代碼問題,常见的潜在代码问题是当前直接会导致BUG、故障或者产品功能不能正常工作的类别。

    what to look for in a code review.pdf

    what to look for in a code review。 Jetbrains 的 Code review 文档,参考价值极大,超级推荐!!!!!

    Learning Gerrit Code Review

    agile methodologies that worked well enough with co-located teams now need to be empowered with additional tools such as Gerrit code review to allow the developers to share, discuss, and cooperate in...

    Code Review Checklist

    Code Review ChecklistCode Review ChecklistCode Review Checklist

    CodeReview工具

    包含jupiter和reviewclipse两款eclipse插件,做code review使用。有效的code review能有效改善bug多发,代码质量低下等问题

Global site tag (gtag.js) - Google Analytics