code-review(程序员必看)教学课件.ppt

上传人(卖家):晟晟文业 文档编号:4376665 上传时间:2022-12-03 格式:PPT 页数:43 大小:532KB
下载 相关 举报
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页
点击查看更多>>
资源描述

1、Code Reviewn为什么要进行Code Review?n如何做Code Review?n如何使用工具进行Code Review?CheckStyleFindBugsPMDn使用工具进行Code Review的局限性n我们可以做得更好1为什么要Code Review 为完成一个软件项目需要多个成员的参与,因此存在编码风格和质量上的差异。尽管在一个项目开始之初,团队内部就对编码进行了格式化上的规范,但是在实际 过程中,还是搀杂了许多个人的因素,比如习惯,思维方式等等。在整体的角度上讲,差异存在越多对项目代码的可读性及维护性影响也越大。又由于一些人可能限于水平,在编码过程当中引入了较低级且显而

2、易见的错误,比如,资源没有释放,造成泄漏。这些隐患如果不是通过Code Review来发现和纠正,通过测试是很难发现的。随着时间的推移,积累的问题会逐渐增 多,到一定程度的话就很难再去着手处理。Code Review可以“防患于未然”,确保质量,也能提高整个开发团队的开发水平。2如何做Code Reviewn统一的编程规范和设计文档规范.也会用这些作为Code Review的检查标准 n完整的技术架构和技术架构说明或事例,争取能够包含程序编写的各个方面 n不定期的Code Review会议及代码讲解 3Code Review时间安排 Code Review的时间安排可以根据项目大小和周期长短来

3、定,小项目(如3个月内)可以定在10天内一次,大项目(6个月以上)可以在半个月内一次,次数的 安排也要讲究,在项目的开始之处应该安排密一些,在项目进展到一定的程度后,周期可以更长,一个月内一次。这种安排出于以下考虑,一是项目成员对项目的 认知在开始阶段比较粗浅,问题较多,因此需要及时的纠正;而当项目成员随着进展而成长后,有很多问题可以为成员自己所避免,因此安排Code Review的次数应该减少。除了纠正错误和问题之外,Code Review可以通过相关人员的参与,来交流一些技巧和宝贵的经验,以讲解和讨论的形式获得提高。4使用工具进行Code Review自动代码复查工具nCheckStyle

4、nFindBugsnPMD代码评审工具nJupiter(暂不讲解)5CheckStyle简介nCheckStyle:主要用于检查代码规范目前版本5.1,主站网址http:/ eclipse的插件,插件下载网址是 http:/ block)的检查n编码的检查(魔法数、switch中错误分支)等n重复的代码n各种量度7CheckStyle演示n演示checkstyle使用n查看checkstyle各个视图n演示checkstyle配置n详细讲解checkstyle检查内容,以sun标准为例进行讲解,详见附件 附件Checkstyle4.mht8Javadoc注释nJavaDoc注释注释 Javad

5、oc 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命名约定JavaJava中命名采用驼峰命中命名采用驼峰命名方式,一般首字母名方式,一般首字母小写其他后面单词首小写其他后面单词首字母大写,如字母大写,如userNameuserName。需要注意的是

6、右边有不需要注意的是右边有不同同类名、接口名首字母也大写如:DateUtil常量所有字母均大写,如:MAXAGE包名都小写,如com.dareway抽象类建议以Abstract 开头10Importnimportimport中避免星号中避免星号*n删除没用的删除没用的importimport此项可以通过此项可以通过eclipseeclipse中中 ctrl+shift+octrl+shift+o功功能进行处理能进行处理11长度限制长度限制 FileLengthn文件长度文件长度 默认默认20002000行行n每行长度每行长度 默认默认8080个字个字n方法长度方法长度 默认默认150150行行

7、n方法的参数个数方法的参数个数 默认默认7 7个个12关键字关键字key wordn关键字的出现顺序关键字的出现顺序public static final XXX public static final XXX 是对一个常量是对一个常量的声明。如果使用的声明。如果使用 static public static public final final 就是错误的就是错误的13编码的习惯检查编码的习惯检查 n数组尾巴的逗号数组尾巴的逗号 如果一个数组定义的右括号如果一个数组定义的右括号 与最后一个元与最后一个元素不在同一行,就需要有一个逗号。比如:素不在同一行,就需要有一个逗号。比如:int a=n

8、ew int int a=new int 1,1,2,2,3,3,;14编码的习惯检查编码的习惯检查 n避免内联避免内联(inline)(inline)条件判断条件判断 也就是三目运算符也就是三目运算符“?:?:”。有的内联。有的内联条件让代码难以理解,比如:条件让代码难以理解,比如:String b String b=(a=null|a.length1)?null:=(a=null|a.length1)?null:a.substring(1);a.substring(1);nequals和hashCode方法 检查一个类是否覆写(override)了equals和hashCode方法,15编

9、码的习惯检查编码的习惯检查 n不合适的不合适的tokentoken 很多大牛都建议在很多大牛都建议在javajava中不要使用中不要使用switchswitch;另外,使用;另外,使用c+c+或或 c-c-,+c c 或或 -c-c这样的后缀也会让可读性变差。这样的后缀也会让可读性变差。n内部赋值语句内部赋值语句 如果有人这样写:如果有人这样写:String s=String s=Integer.toString(i=2);Integer.toString(i=2);是不是很想是不是很想扁他?扁他?16编码的习惯检查编码的习惯检查 n魔法数魔法数 也叫也叫 MagicNumber MagicN

10、umber,非常让程序不可读。比如:,非常让程序不可读。比如:sex=0 sex=0 表示的什么意思?大多数时候,就连作者本表示的什么意思?大多数时候,就连作者本人都要皱眉头想半天,汗人都要皱眉头想半天,汗所以,这里的所以,这里的0 0 就是一个魔法数。如果这样写就好的多:就是一个魔法数。如果这样写就好的多:public static final int MALE=0;public static final int MALE=0;sex=MALE;sex=MALE;17编码的习惯检查编码的习惯检查 n被更改的循环控制变量被更改的循环控制变量 比如,一个比如,一个forfor循环的循环的 循环数

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

12、嵌套的层次。所谓的“嵌套的嵌套的ifif”,是指一个,是指一个ifif被包含在另一个被包含在另一个ifif中。下面是嵌套数是中。下面是嵌套数是11的代码的代码:if(true)if(true)if(true)if(true)默认为默认为1 1,建议可以增加,另外还可以检查,建议可以增加,另外还可以检查trytry等的嵌套等的嵌套19编码的习惯检查编码的习惯检查 n调用父类的调用父类的cloneclone检查并确认一个类的检查并确认一个类的clone()clone()方法调用了父方法调用了父类的类的clone()clone()。n父类的父类的finalizefinalize检查并确认一个类的检查

13、并确认一个类的finalize()finalize()调用了父调用了父类的类的finalize()finalize()。20编码的习惯检查编码的习惯检查 nreturn return 语句的数量语句的数量限制一个方法中限制一个方法中returnreturn语句的数量。默认是语句的数量。默认是2 2。忽。忽略特定的方法(默认是略特定的方法(默认是equals()equals())如果如果return return 语句太多,说明某个方法需要实现的语句太多,说明某个方法需要实现的功能太多,而且很难阅读。功能太多,而且很难阅读。(这个时候就需要重构,建议看看重构的(这个时候就需要重构,建议看看重构的

14、Extract Method Extract Method 和和 Simplifying Conditional Simplifying Conditional Expressions.Expressions.两章。两章。),不过这个需要因程,不过这个需要因程序而异。序而异。21编码的习惯检查编码的习惯检查 n参数被赋值参数被赋值 禁止对参数赋值。某个方法传递进来的禁止对参数赋值。某个方法传递进来的参数,是不允许在该方法中改变值的。参数,是不允许在该方法中改变值的。比如:比如:public someMethod(String para1)public someMethod(String par

15、a1)这个方法中,就不允许出现这个方法中,就不允许出现 para1=para1=“new valuenew value”;22编码的习惯检查编码的习惯检查 n详尽的变量初始化 确保某个class 在被使用时都已经被初始化成默认值(对象是null,数字和字符是0,boolean 变量是false.)了n多个内容相同的字符串变量多个内容相同的字符串变量 确保一个文件中的同样内容的字符串不出现多次。n同一行禁止声明多个变量 确保每行只声明一个变量。23编码的习惯检查编码的习惯检查 n不使用this 确保代码不使用this关键字。n声明的顺序根据 Sun编码规范,class 或 interface 中

16、的顺序如下:class 声明。首先是 public,然后是protected,然后是 package level(不包括access modifier)最后是private.(多个class放在一个java文件中的情况)变量声明。首先是 public,然后是protected然后是 package level(不包括access modifier)最后是private.构造函数方法24FindBugs简介nFindBugs 是一个静态分析工具,目前版本1.3.9,主要专注于检查程序错误和性能问题。主站网址http:/ 有for eclipse的插件,插件下载网址是 http:/ n工作原理:它

17、检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题。n规则定义:默认规则列表,可以自选需检查的项目.25FindBugs检查问题分类n正确性(Correctness):这种归类下的问题在某种情况下会导致bug,比如错误的强制类型转换等。n不良实践(Bad practice):这种类别下的代码违反了公认的最佳实践标准,比如某个类实现了equals方法但未实现hashCode方法等。n多线程正确性(Multithreaded correctness):关注于同步和多线程问题。n性能(Performance):潜在的性能问题。n安全(Security):安全相关。n高危(Dod

18、gy):FindBugs团队认为该类型下的问题代码导致bug的可能性很高。26FindBugs演示n演示FindBugs使用n查看FindBugs视图n演示FindBugs配置n详细讲解FindBugs检查内容,详见附件附件bugDescriptions.html27FindBugs检查内容详解nequals方法参数必须是object,有人会这样写public boolean equals(ClassXX para)CompareTo也必须如此。n重写equals方法时,也需要重写hashCode,因为大家均默认相同的对象有相同的hashCode。nRandom对象可以重复使用,不需要重复创建

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

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

21、nerClassSingleton();static CircularClassInitialization foo=InnerClassSingleton.singleton;31FindBugs检查内容详解n不要通过类的实例去访问他的静态方法或变量。n不要在session中放入未实现序列化的对象n返回Boolean 类型的方法返回null,会报空指针异常nclone方法也不允许返回nullnToString方法也不允许返回null,应该返回空串n如果不是异常类,不能叫XXException32FindBugs检查内容详解n方法未关闭数据库(流等资源)或方法会抛出异常导致数据库不能关闭。n方

22、法中忽略的java.io.InputStream.read(),java.io.InputStream.skip(),File.delete()等方法的返回值n实现了Comparator接口的对象,最好也实现Serializable接口,将对象放入TreeMap时使用n不能序列化的对象不能直接放到实现Serializable接口的对象中,要标记为transientn如果一个类是 Serializable的,其父类必须有默认的构造器,因为反序列化时会调用,而且此类必须有serialVersionUID n如果一个类是Externalizable 的必须有默认的构造器33FindBugs检查内容详

23、解n如果不是非常有必要不要乱用instanceofn在hasNext方法里调用nextnS是一个Collection,不要调用s.contains(s),因为他不一定是true,而且可能导致错误n尽量不要使用equals去比较2个Array34FindBugs检查内容详解nsynchronized 不能加到bool,int等对应的Boolean Integer装箱变量上。也不能用到private static String LOCK=“LOCK”;上。n不要显式的调用run方法,而是调用startn不要在构造器里调用start方法,如果这个类有子类,线程会在子类构造完毕前启动,导致错误n不要在

24、多线程中调用Calendar、DateFormat n不要在lock的代码中调用sleep35FindBugs检查内容详解n不要使用new Integer(1).toString(),Integer.toString(1)n不要使用new Integer(1),使用Integer.valueOf(1)n不要new String(“xx”),直接赋值即可。nString串不要用+频繁拼接36FindBugs检查内容详解n内部类最好定义为static,可以及时释放所在的类对象n尽量使用无参数的toArray方法,而不是使用泛型的方法myCollection.toArray(new FoomyCol

25、lection.size(),nInt 和double直接的算法int x=2;int y=5;/Wrong:yields result 0.0double value1=x/y;/Right:yields result 0.4double value2=x/(double)y;37PMD简介nPMD也是一个静态分析工具,目前版本4.2.5,主站网址http:/ eclipse的插件,插件下载网址是 http:/ n 工作原理:PMD通过静态分析获知代码错误。也就是说,在不运行Java程序的情况下报告错误。n规则定义:默认规则列表,可以自选需检查的项目,也可以自定义规则.38PMD检查的问题n

26、潜在的bug:空的try/catch/finally/switch语句n未使用的代码:未使用的局部变量、参数、私有方法等n可选的代码:String/StringBuffer的滥用n复杂的表达式:不必须的if语句、可以使用while循环完成的for循环n重复的代码:拷贝/粘贴代码意味着拷贝/粘贴bugsn循环体创建新对象:尽量不要再for或while循环体内实例化一个新对象n资源关闭:Connect,Result,Statement等使用之后确保关闭掉39PMD演示n演示PMD使用n查看PMD视图n演示PMD配置n详细讲解PMD检查内容,详见附件附件Eclipse+PMD插件分析代码规则(中文)

27、.xls40使用工具Code Review的局限n使用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

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

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(code-review(程序员必看)教学课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|