- 浏览: 70667 次
- 性别:
- 来自: 杭州
最新评论
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上),
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上),
发表评论
-
帧率测试
2015-06-09 18:37 29831、GPU概念 GPU(Gr ... -
html5前端常用的jsonp,web的json的区别与原理
2015-01-14 19:51 685json 和 jsonp的区别: web开 ... -
android代码混淆以及如何判断一个apk代码是否被混淆过
2015-01-02 21:32 81671、proguard原理 java代码编译成 ... -
java 内存溢出 栈溢出的原因与排查方法
2014-10-18 17:52 51721、 内存溢出的原因 ... -
java 垃圾回收机制
2014-10-18 17:19 8471.垃圾回收的意义 ... -
String StringBuffer StringBuilder
2014-10-18 00:51 667相信在面试过程 ... -
自动化测试与测试自动化区别
2014-10-16 12:05 1496今天看到一篇文章关于自动化测试与测试自动化的区别。 ... -
一台机器上安装多个jdk
2014-09-29 15:06 3228一台机器上安装多个版本的jdk并解决环境问题 ... -
反射 原理 demo
2014-09-24 16:01 433在Android的源码中有很多方法是被@hide注 ... -
oracle in exists performance选择性
2014-09-24 12:56 535oracle 数据库中既然存在着exists 与 in,肯 ... -
robotium 命令行运行测试
2014-09-19 16:10 927用robotium写的测试脚本后,打成apk包安装 ... -
How do I debug UiAutomator scripts with Eclipse
2014-08-08 14:44 1801网上千篇一律的介绍UiAutomator测试了,近期在用UiA ... -
UiAutomator 测试多个类
2014-08-06 17:11 12251、UiAutomator是手机内部工作,即adb shell ... -
UiAutomator解决中文输入法
2014-08-04 19:06 1823一、安装输入法: 1,去utf7ime的 github上把整个 ... -
adb logcat日志分析
2014-07-30 11:30 49111、adb logcat 1)此命令用于输出手机或 ... -
adb 常用命令
2014-07-28 16:18 10511、 adb shell cat /system/build. ... -
Android优化工具----zipalign
2014-07-28 16:18 2294Zipalign优化工具是Android SDK中 ... -
monkey详解
2014-07-28 16:15 1123monkey是模拟用户的按键输入,触摸屏输入,手 ... -
android adb install + apk 与adb push+apk两种安装apk的使用总结
2014-07-28 16:05 10623[size=large][size=large]1、and ... -
monkey API
2014-03-31 23:46 792Monkey- 源码库链接:http://www.oschin ...
相关推荐
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宏**是专门针对Source Insight这款强大的源代码查看和编辑工具设计的一套扩展功能,主要用于代码评审和统计。Source Insight以其强大的代码导航、语法高亮和实时分析能力,深受程序员...
在实际使用中,下载的压缩包文件"IntellijIDEA-CodeReview-Plugin-master"包含了插件的源代码,开发者可以对其进行定制或扩展以满足特定团队的需求。安装插件通常包括以下几个步骤: 1. 解压下载的压缩包。 2. 打开...
CodeReview工具的作用:1.减少评审人的缺陷记录和汇总时间,方便责任人查找问题出处;2.检视完成后生成检查报告,代码作者点击按钮可以直接找到错误处;3.任务责任人修改完成后,直接修改问题状态,组织者按快捷键...
Code Review的作用和意义已在很多技术团队内达成共识,可是很多时候并未被有效执行,甚至被认为是一项费时费力的工作。借助一些工具可以更容易,更有效率地来进行Code Review,本文介绍的Jupiter即是其中之一。 ...
静态测试方法之代码审查(CodeReview)的清单。代码审查可以帮助提高代码质量,避免由于代码习惯而造成的bug。下面列出的这些要点因该可以作为大部分代码审查的指导,如果是Java应用的话,这些建议应该被视作最佳实践...
Code Review是软件开发过程中的一个重要环节,它有助于提高代码质量,发现潜在的错误,以及确保团队成员间的代码风格一致。本文将详细介绍两款Eclipse插件——Jupiter和Reviewclipse,它们是进行Code Review的有力...
我一直认为CodeReview(代码审查)是软件开发中的最佳实践之一,可以有效提高整体代码质量,及时发现代码中可能存在的问题。包括像Google、微软这些公司,CodeReview都是基本要求,代 我一直认为CodeReview(代码...
在Redmine中,Code Review插件是一个重要的扩展,它致力于帮助开发团队进行代码审查,提升代码质量和团队协作效率。本文将详细介绍如何使用Redmine的Code Review插件。 首先,安装Code Review插件是必要的步骤。...
### CodeReview中的常见代码问题分析 #### 一、引言 在软件开发过程中,CodeReview(代码审查)是一项至关重要的活动。它不仅有助于提高代码质量,还能促进团队成员之间的知识共享和技术交流。本文将深入探讨Code...
`CodeReview.em`可能是一个包含了代码审查过程记录或结果的文件,而`codereivew.docx`可能是详细的代码审查报告,其中可能详细列出了审查过程中发现的问题、建议的修改以及后续的行动计划。通过这两个文件,团队成员...
Steven Code Review 2009.12M1发布包.rar 代码在线审查工具 @date: 2009-12-28 @author: YF @email: yifi@tom.com 功能: 1 方便学员学习教师的代码,无需在本机运行IDE即可以代码加亮的方式查看服务器共享的代码...
软件介绍: 一、软件特色 功能丰富:实现文件内容、度量、命名、注释、类图、Halstead等审查。 简单易用:无需安装,直接使用,直接删除;... 直观可视:分析结果与源代码在同一界面显示对照,...http://www.codereview.com.cn
标题:Code Review Tool from Google 描述:Code review on the web 根据给定的文件信息,我们可以提炼出关于代码审查(Code Review)及其在谷歌开发流程中的应用的关键知识点。 ### 什么是代码审查? 代码审查...
CodeReview的基本手段还是需要技术经理通过人工检查项目成员的代码,来将各种问题扼杀在开发阶段,但是不同经验及技术水平的经理在review同一段代码所发现的问题可能相差比较大,不同的Team可能因此产生的效果也不同...
**代码审查(Code Review)是软件开发过程中的一个重要环节,旨在提高代码质量,发现潜在的错误,提升团队协作效率,并确保代码遵循最佳实践和项目规范。本文将深入探讨代码审查的原理、步骤以及如何有效地执行代码...
C++代码 Code Review时使用的检查清单和问题记录模板
首先,我们需要理解“同行代码审查”(Peer Code Review)的概念。这是一种质量保证活动,开发人员互相检查彼此的代码,旨在发现并修复错误,改进设计,以及传播知识和最佳实践。这个过程不仅限于找出错误,还在于...
source insighet 集成code review,代码审核时非常好用,使用起来比较简单,加入工程,同步,添加快捷键,使用快捷键即可正常使用,保存即可。