code-review程序员必看幻灯片课件.ppt

上传人:牧羊曲112 文档编号:3847186 上传时间:2023-03-25 格式:PPT 页数:43 大小:524KB
返回 下载 相关 举报
code-review程序员必看幻灯片课件.ppt_第1页
第1页 / 共43页
code-review程序员必看幻灯片课件.ppt_第2页
第2页 / 共43页
code-review程序员必看幻灯片课件.ppt_第3页
第3页 / 共43页
code-review程序员必看幻灯片课件.ppt_第4页
第4页 / 共43页
code-review程序员必看幻灯片课件.ppt_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《code-review程序员必看幻灯片课件.ppt》由会员分享,可在线阅读,更多相关《code-review程序员必看幻灯片课件.ppt(43页珍藏版)》请在三一办公上搜索。

1、Code Review,?,为什么要进行,Code Review,?,?,如何做,Code Review,?,?,如何使用工具进行,Code Review,?,?,CheckStyle,?,FindBugs,?,PMD,?,使用工具进行,Code Review,的局限性,?,我们可以做得更好,1,为什么要,Code Review,为完成一个软件项目需要多个成员的参与,因此存在,编码风格和质量上的差异。尽管在一个项目开始之初,团,队内部就对编码进行了格式化上的,规范,,但是在实际,过,程中,还是搀杂了许多个人的因素,比如习惯,思维方式,等等。在整体的角度上讲,差异存在越多对项目代码的,可,读性及

2、维护性,影响也越大。又由于一些人可能限于水平,,在编码过程当中引入了较低级且显而易见的错误,比如,,资源没有释放,造成泄漏。这些隐患如果不是通过,Code,Review,来发现和纠正,通过测试是很难发现的。随着时间,的推移,积累的问题会逐渐增,多,到一定程度的话就很,难再去着手处理。,Code Review,可以“防患于未然”,确,保,质量,,也能,提高整个开发团队的开发水平,。,2,如何做,Code Review,?,统一的编程规范和设计文档规范,.,也会用这些,作为,Code Review,的检查标准,?,完整的技术架构和技术架构说明或事例,争取,能够包含程序编写的各个方面,?,不定期的,

3、Code Review,会议及代码讲解,3,Code Review,时间安排,Code Review,的时间安排可以根据项目大小和周期长,短来定,小项目(如,3,个月内)可以定在,10,天内一次,,大项目(,6,个月以上)可以在半个月内一次,次数的,安排也要讲究,在项目的开始之处应该安排密一些,,在项目进展到一定的程度后,周期可以更长,一个月,内一次。这种安排出于以下考虑,一是项目成员对项,目的,认知在开始阶段比较粗浅,问题较多,因此需要,及时的纠正;而当项目成员随着进展而成长后,有很,多问题可以为成员自己所避免,因此安排,Code Review,的次数应该减少。除了纠正错误和问题之外,,Co

4、de,Review,可以通过相关人员的参与,来交流一些技巧和,宝贵的经验,以讲解和讨论的形式获得提高。,4,使用工具进行,Code Review,自动代码复查工具,?,CheckStyle,?,FindBugs,?,PMD,代码评审工具,?,Jupiter,(暂不讲解),5,CheckStyle,简介,?,CheckStyle:,主要用于检查代码规范,目前版本,5.1,主站网址,http:/,有,for eclipse,的插件,插件下载网址是,http:/,cs/files/Eclipse Checkstyle Plug-in/,?,工作原理,:,检查源码,对,javadoc,书写格式、基本错

5、误,等进行检查,.,?,规则定义,:,默认的规则是,sun,的编码规范,.,可以自定义,规范,.,6,CheckStyle,检查的问题,?,JavaDoc,注释,?,命名约定,?,文件头,?,Imports,?,长度限制,?,空格,?,关键字,?,对区域,(empty block),的检查,?,编码的检查(魔法数、,switch,中错误分支)等,?,重复的代码,?,各种量度,7,CheckStyle,演示,?,演示,checkstyle,使用,?,查看,checkstyle,各个视图,?,演示,checkstyle,配置,?,详细讲解,checkstyle,检查内容,以,sun,标,准为例进行

6、讲解,详见附件,附件,Checkstyle4.mht,8,Javadoc,注释,?,JavaDoc,注释,Javadoc Comments,/*,*Returns an Integer object,*holding the value,*param s the string to be parsed.,*return an Integer,*object holding the value,*exception NumberFormatException if the,*string cannot be parsed.,*/,9,命名约定,Java,中命名采用驼峰命,名方式,一般首字母,小写

7、其他后面单词首,字母大写,如,userName,。,需要注意的是右边有不,同,类名、,接口名,首字母也大写,如:,DateUtil,常量,所有字母均大,写,如:,MAXAGE,包名,都小写,如,com.dareway,抽象类,建议以,Abstract,开,头,10,Import,?,import,中避免星号,?,?,删除没用的,import,此项可以通过,eclipse,中,ctrl+shift+o,功,能进行处理,11,长度限制,FileLength,?,文件长度,默认,2000,行,?,每行长度,默认,80,个字,?,方法长度,默认,150,行,?,方法的参数个数,默认,7,个,12,关键

8、字,key word,?,关键字的出现顺序,public static final XXX,是对一个常量,的声明。如果使用,static public,final,就是错误的,13,编码的习惯检查,?,数组尾巴的逗号,如果一个数组定义的右括号,与最后一个元,素不在同一行,就需要有一个逗号。比如:,int a=new int,1,2,3,;,14,编码的习惯检查,?,避免内联,(inline),条件判断,也就是三目运算符“,?:,”,。有的内联,条件让代码难以理解,比如:,String b,=(a=null|a.length1)?null:,a.substring(1);,?,equals,和,

9、hashCode,方法,检查一个类是否覆写,(override),了,equals,和,hashCode,方法,,15,编码的习惯检查,?,不合适的,token,很多大牛都建议在,java,中不要使用,switch,;另外,使用,c+,或,c-,,,+,c,或,-c,这样的后缀也会让可读性变差。,?,内部赋值语句,如果有人这样写:,String s=,Integer.toString(i=2);,是不是很想,扁他?,16,编码的习惯检查,?,魔法数,也叫,MagicNumber,,非常让程序不可读。比如:,sex=0,表示的什么意思?大多数时候,就连作者本,人都要皱眉头想半天,汗,所以,这里的

10、,?,就是一个魔法数。如果这样写就好的多:,public static final int MALE=0;,sex=MALE;,17,编码的习惯检查,?,被更改的循环控制变量,比如,一个,for,循环的,循环数是只应该在,最后,的,i+,中更改的,如果出现以下代码:,for(int i=0;i 1;i+),i+;/,这里是极可能是程序员大,意写出,来的。,则说明,这个循环节有,90%,是大意,写错了。,因为其中的循环控制变量,i,在一个循环中,+,了两次。,18,编码的习惯检查,?,嵌套的,if,层次,通过指定来限制,if-else,的嵌套的层次。所谓的,“嵌套的,if,”,是指一个,if,被

11、包含在另一个,if,中。下面是嵌套数是,?,的代码,:,if(true),if(true),默认为,1,,建议可以增加,另外还可以检查,try,等的嵌套,19,编码的习惯检查,?,调用父类的,clone,检查并确认一个类的,clone(),方法调用了父,类的,clone(),。,?,父类的,finalize,检查并确认一个类的,finalize(),调用了父,类的,finalize(),。,20,编码的习惯检查,?,return,语句的数量,限制一个方法中,return,语句的数量。默认是,2,。忽,略特定的方法(默认是,equals(),),如果,return,语句太多,说明某个方法需要实现

12、的,功能太多,而且很难阅读。,(这个时候就需要重构,建议看看重构的,Extract Method,和,Simplifying Conditional,Expressions.,两章。,),不过这个需要因程,序而异。,21,编码的习惯检查,?,参数被赋值,禁止对参数赋值。某个方法传递进来的,参数,是不允许在该方法中改变值的。,比如:,public someMethod(String para1),这个方法中,就不允许出现,para1=,“,new value,”,;,22,编码的习惯检查,?,详尽的变量初始化,确保某个,class,在被使用时都已经被初,始化成默认值,(,对象是,null,数字和

13、字,符是,0,boolean,变量是,false.),了,?,多个内容相同的字符串变量,确保一个文件中的同样内容的字符串不,出现多次。,?,同一行禁止声明多个变量,确保每行只声明一个变量。,23,编码的习惯检查,?,不使用,this,确保代码不使用,this,关键字。,?,声明的顺序,根据,Sun,编码规范,,class,或,interface,中的顺序如下:,class,声明。首先是,public,然后是,protected,然后,是,package level,(不包括,access modifier,)最后是,private.(,多个,class,放在一个,java,文件中的情况),变量

14、声明。,首先是,public,然后是,protected,然后是,package level,(不包括,access modifier,)最后是,private.,构造函数,方法,24,FindBugs,简介,?,FindBugs,是一个静态分析工具,目前版本,1.3.9,主,要专注于检查程序错误和性能问题。主站网址,http:/,有,for eclipse,的插件,插件下载网址是,http:/,?,工作原理,:,它检查类或者,JAR,文件,将字节码与一组,缺陷模式进行对比以发现可能的问题。,?,规则定义,:,默认规则列表,可以自选需检查的项目,.,25,FindBugs,检查问题分类,?,正

15、确性(,Correctness,):这种归类下的问题在某种情,况下会导致,bug,,比如错误的强制类型转换等。,?,不良实践(,Bad practice,):这种类别下的代码违反,了公认的最佳实践标准,比如某个类实现了,equals,方,法但未实现,hashCode,方法等。,?,多线程正确性(,Multithreaded correctness,):关注,于同步和多线程问题。,?,性能(,Performance,):潜在的性能问题。,?,安全(,Security,):安全相关。,?,高危(,Dodgy,):,FindBugs,团队认为该类型下的问题代,码导致,bug,的可能性很高。,26,F

16、indBugs,演示,?,演示,FindBugs,使用,?,查看,FindBugs,视图,?,演示,FindBugs,配置,?,详细讲解,FindBugs,检查内容,详见附件,附件,bugDescriptions.html,27,FindBugs,检查内容详解,?,equals,方法参数必须是,object,,有人会这样写,public,boolean equals(ClassXX para),CompareTo,也必须如此。,?,重写,equals,方法时,也需要重写,hashCode,,因为大家,均默认相同的对象有相同的,hashCode,。,?,Random,对象可以重复使用,不需要重复

17、创建,?,实现,Clonable,接口,必须重写,clone,方法。,Clone,方法,中一般要调用父类的,clone,方法。,?,类里面有,clone,方法,但没有实现,clonable,接口,28,FindBugs,检查内容详解,?,方法中不能随意丢弃或忽略异常,?,Collection,中对象需要全部清除时,应该使用,clear,,而不是使用,removeAll,?,方法中不能随意调用,System.exit(),更不能随,意调用,System.runFinalizersOnExit,Runtime.runFinalizersOnExit,?,比较对象时,使用了,=,,而不是,equal

18、s,29,FindBugs,检查内容详解,?,finalizer,方法不能为空,为空时应该删,除,?,finalizer,如果仅仅是将对象变量赋值为,null,,也可以删除,?,finalizer,如果仅仅调用父类的,finalizer,方法,也可以删除,?,finalizer,方法中必须调用父类的,finalizer,方法,30,FindBugs,检查内容详解,?,不要在父类初始化时,初始化子类,这,样可能会出问题,如下,public class CircularClassInitialization,static class InnerClassSingleton extends,Circ

19、ularClassInitialization,static InnerClassSingleton singleton=new,InnerClassSingleton();,static CircularClassInitialization foo=,InnerClassSingleton.singleton;,31,FindBugs,检查内容详解,?,不要通过类的实例去访问他的静态方法或变量。,?,不要在,session,中放入未实现序列化的对象,?,返回,Boolean,类型的方法返回,null,,会报空指,针异常,?,clone,方法也不允许返回,null,?,ToString,方法

20、也不允许返回,null,,应该返回空串,?,如果不是异常类,不能叫,XXException,32,FindBugs,检查内容详解,?,方法未关闭数据库(流等资源)或方法会抛出异常导致数据库不,能关闭。,?,方法中忽略的,java.io.InputStream.read(),,,java.io.InputStream.skip(),,,File.delete(),等方法的返回值,?,实现了,Comparator,接口的对象,最好也实现,Serializable,接口,将,对象放入,TreeMap,时使用,?,不能序列化的对象不能直接放到实现,Serializable,接口的对象中,,要标记为,t

21、ransient,?,如果一个类是,Serializable,的,其父类必须有默认的构造器,因为,反序列化时会调用,而且此类必须有,serialVersionUID,?,如果一个类是,Externalizable,的必须有默认的构造器,33,FindBugs,检查内容详解,?,如果不是非常有必要不要乱用,instanceof,?,在,hasNext,方法里调用,next,?,S,是一个,Collection,,不要调用,s.contains(s),,因为他不一定是,true,,,而且可能导致错误,?,尽量不要使用,equals,去比较,2,个,Array,34,FindBugs,检查内容详解,

22、?,synchronized,不能加到,bool,,,int,等对应的,Boolean Integer,装箱变量上。也不能用到,private static String LOCK=,“,LOCK,”,;,上。,?,不要显式的调用,run,方法,而是调用,start,?,不要在构造器里调用,start,方法,如果这个类,有子类,线程会在子类构造完毕前启动,导致,错误,?,不要在多线程中调用,Calendar,、,DateFormat,?,不要在,lock,的代码中调用,sleep,35,FindBugs,检查内容详解,?,不要使用,new Integer(1).toString(),,,Int

23、eger.toString(1),?,不要使用,new Integer(1),,使用,Integer.valueOf(1),?,不要,new String,(“,xx,”,),直接赋值即,可。,?,String,串不要用,+,频繁拼接,36,FindBugs,检查内容详解,?,内部类最好定义为,static,,可以及时释放所在的类对象,?,尽量使用无参数的,toArray,方法,而不是使用泛型的方法,myCollection.toArray(new FoomyCollection.size(),?,Int,和,double,直接的算法,int x=2;,int y=5;,/Wrong:yiel

24、ds result 0.0,double value1=x/y;,/Right:yields result 0.4,double value2=x/(double)y;,37,PMD,简介,?,PMD,也是一个静态分析工具,目前版本,4.2.5,主站网,址,http:/,有,for eclipse,的插件,插件下载网址是,http:/,?,工作原理,:PMD,通过静态分析获知代码错误。也就是,说,在不运行,Java,程序的情况下报告错误,。,?,规则定义,:,默认规则列表,可以自选需检查的项目,也,可以自定义规则,.,38,PMD,检查的问题,?,潜在的,bug,:空的,try/catch/f

25、inally/switch,语句,?,未使用的代码:未使用的局部变量、参数、私有方法,等,?,可选的代码:,String/StringBuffer,的滥用,?,复杂的表达式:不必须的,if,语句、可以使用,while,循环,完成的,for,循环,?,重复的代码:拷贝,/,粘贴代码意味着拷贝,/,粘贴,bugs,?,循环体创建新对象:尽量不要再,for,或,while,循环体内,实例化一个新对象,?,资源关闭:,Connect,,,Result,,,Statement,等使用之后,确保关闭掉,39,PMD,演示,?,演示,PMD,使用,?,查看,PMD,视图,?,演示,PMD,配置,?,详细讲解

26、,PMD,检查内容,详见附件,附件,Eclipse+PMD,插件分析代码规则(中,文),.xls,40,使用工具,Code Review,的局限,?,使用,Code Review,工具可以代替那些费时,费力却有规则可循的代码检查工作,用,以提高工作效率。但是他们并不能对业,务逻辑进行检查,所以人工代码复查仍,然是必不可少的。,41,我们可以做得更好,今天只是讲了几个,code review,的工具,其实不只有,这些,请看看下面:,构建工具,ant,、,maven,版本控制工具,cvs,、,subversion,项目(问题)管理工具,trac,、,bugzilla,、,redmine,单元测试工具,junit,、,TestNg,、,Cobertura,集成、负载、性能测试工具,strutsTestCase,、,DbUnit,、,JunitPerf,、,Jmeter,等,持续集成工具,continuum,、,hudson,等等,42,Thank you,!,End.,43,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号