code-review(程序员必看)教学课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《code-review(程序员必看)教学课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- code review 程序员 教学 课件
- 资源描述:
-
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 语句太多,说明某个方法需要实现的语句太多,说明某个方法需要实现的功能太多,而且很难阅读。功能太多,而且很难阅读。(这个时候就需要重构,建议看看重构的(这个时候就需要重构,建议看看重构的
展开阅读全文