JAVA代码审查检查表
代码走查检查表
整个代码体系结构组合合理,分层清晰,代码之间功能划分明确
5
所有的接口模块化,尽量减少接口之间的耦合度,修改时尽量不影响其他代码模块
6
代码体系构架对空间和速度都已经进行考虑
7
数据库操作、IO操作等是否正确关闭资源。并且必须在try -catch-finally 的finally中关闭。
8
一个业务如果进行多次数据库更新、添加、删除是否正确添加事务。
代码走查检查表
评审日期:年 月 日
评审对象
作者
评审人
评审工作量
序号
检查项
评审意见
走查前准备
1
得到一份解释代码的最新的设计文档,作为代码走查的参考
2
代码都已提交 ,版本统一
程序结构组织
1
所有代码的结构清晰,具有良好的结构外观和整齐
2
所有的模块(函数和外部接口)定义清晰,模块分解清楚
3
所有的功能需求都明显的覆盖
1
类、方法、判断条件、循环、主要变量是否添加注释。
2
类名、方法名、变量名的命名是否规范。
3
有返回值的方法是否正确返回。Return语句应定义在方法结尾处。
4
源代码能够自我解释,每个人看到代码就能很快理解
5
解释不过于简单,解释说明代码功能,准确描述代码意义6所有的假Fra bibliotek和限制进行注解
7
长的控制体结束,进行注解
新增
all
孟洋涛、郑海焘
郑博
1.1
2012-5-28
根据各项目组评审出问题进行修改
all
孟洋涛
郑博
14
递归局限于一个函数
15
对接口的调用必须要有判断传入的参数不能为空和传入的参数正确。
代码审查单
□
要步骤?
是否违背了继承和组合的规则?
(1)若在逻辑上B是A的“一种”,并且A的所有功能和属性对B而言都
有意义,则允许B继承A的功能和属性。
□
(2)若在逻辑上A是B的“一部分” (a part of),则不允许B从A派生,
而是要用A和其它东西组合出B。
每一个域在每一次使用前正确地初始化了吗? 是否忘记为数组和动态内存赋初值?(防止将未被初始化的内存作为右值使 用)
对屏幕输出操作,是否到达了最快的刷新速度?效率是否为最佳?需部分 刷新区域的地方是否进行了全部刷新?
□
有无可优化的程序块、函数或子程序等?
□
算法是否可以优化?
□
注释比例达到25%以上吗?
□
标号和子程序名符合代码的意义吗?
□
是否使用了GOTO语句?
□
是否使用了非通用的函数库?对于非标准的库是否提供了源程序?
□
测试和转移检 查
每个转移目标正确并至少执行一次吗?
□
三种情况(大于0,小于0,等于0)是否已全部测试?边界值是否进行了 测试?
□
循环语句是否有正常跳出循环的条件吗?是否会出现死循环?break和conti nue语句使用正确吗?
□
逻辑是否被最佳地编码?
□
提供的是一般的错误处理还是异常的例程?
□
性能检查
头文件是否使用了ifndef/define/endif预处理块?
程序结构和模块功能定义清楚吗?
编程风格检查 是否遵循该语言的指令编写格式?
注释的行数不少于代码总行数的1/5吗?
注释说明和代码功能一致吗?
错误处理分支信息表达清楚吗?
每一个模块单元的圈复杂度都小于10吗?
Java代码规范检查表范本
78
编写代码前,先编写注释(可以认为是伪代码),先想后写。
推荐
79
使代码水平方向保持在一屏之内。
推荐
80
不要硬编码无意义的数字值,用常量代替。
推荐
81
不要硬编码字符串,使用常量代替。
推荐
82
避免使用出错代码作为返回值,尽量使用异常处理。
推荐
83
经常使用接口(interface)。
推荐
84
当需要构建一个长字符串时,用StringBuffer代替String。
强制
41
使用get / set对类属性进行访问,这是Java社区的核心编码规范。
强制
42
使用is前缀表示一个布尔变量和方法。
强制
43
在查询方法中应使用find作为前缀。
推荐
44
使用initialize做为对象初始化的方法前缀,也可以简写为init。
推荐
45
对于对象集合,变量名称应使用复数。
强制
46
对于抽象类,应该使用Abstract前缀,对于非抽象基类,可以使用Base前缀。
强制
64
使用@deprecated废弃方法,不要删掉它。
推荐
65
使用行末注释对深Байду номын сангаас嵌套代码进行注释。
推荐
66
所有变量都应该进行初始化。
强制
67
变量在使用前应进行合法性检查。
强制
68
静态变量和方法的使用应保证线程安全。
强制
69
所有异常应该被正确的处理,不应简单的吞掉异常或打印ex.printStackTrace()。应该将异常记入日志或者包装后向上层抛出。对于表现层页面,不应该出现程序异常,应该在捕获到异常后进行友好的提示。
代码检查表
4
不存在相似的变量名
5Байду номын сангаас
6
7
8
9
10
控制流程检查
#
检查项
评审结果
是否适用
注释
1
每个循环都能正确终止
2
每个程序都按流程终止
3
不存在由于入口条件不满足而跳过循环体
4
可能的循环越界正确
5
不存在“仅差一个”的迭代错误
6
DO/END语句匹配
7
8
输入/输出检查
#
检查项
评审
结果
是否适用
注释
1
文件属性正确
4
是否有输入信息的合法性检查
5
没有遗漏某个功能
6
7
注:
也可针对实际情况对某语言进行评审(C、C++、Java…)
结果统计:是个;否个
2
OPEN语句正确
3
I/O语句符合格式规范
4
缓冲大小与记录大小相匹配
5
文件在使用前是否打开
6
文件在使用后是否关闭
7
文件结束条件是否被正确处理
8
是否处理了I/O错误
9
10
程序接口检查
#
检查项
评审
结果
是否适用
注释
1
形参的数量是否等于实参的数量
2
形参的属性是否与实参的属性相匹配
3
形参的量纲是否与实参的量纲相匹配
#
检查项
评审
结果
是否适用
注释
1
不存在非算术变量间的运算
2
不存在混合模式的运算
3
代码评审标准与结果
注释对于理解代码是否有帮助
7
代码中的注释是否充分
8
代码中的注释是否过多
布局/封装缺陷
1
代码布局风格和缩排标准是否前后一致并体现其逻辑结构
2
代码中是否存在已被注释且不再使用的代码
3
复杂程序是否合理地分解成多个子程序
4
每个方法的代码量是否都不超过60行
5
方法或类之间是否具有低耦合性
6
方法或类之间是否具有高内聚性
2
比较运算符是否正确
3
布尔表达式是否通过内部否定操作进行了简化
4
每个布尔表达式是否都正确
5
比较操作是否存在不引人注意的副作用
6
是否存在“&&”替换为“&”或“||”替换为“|”的情况
7
代码中是否避免了对浮点型数值的相等比较操作
流程控制缺陷
1
每个循环是否选用了最佳循环结构
2
所有的循环结束条件是否明显
3
6
注释对于理解代码是否有帮助
7
代码中的注释是否充分
8
代码中的注释是否过多
布局/封装缺陷
1
代码布局风格和缩排标准是否前后一致并体现其逻辑结构
2
代码中是否存在已被注释且不再使用的代码
3
复杂程序是否合理地分解成多个子程序
4
每个方法的代码量是否都不超过60行
5
方法或类之间是否具有低耦合性
6
方法或类之间是否具有高内聚性
7
是否存在重复代码且它的功能可以通过调用其他方法实现
8
方法参数数量是否控制在5个以内
性能/算法缺陷
1
是否存在更好的数据结构和算法可以采用
代码评审表模板
代码评审表模板代码码码码清;Code Checklist,版本,1.0码品/码目码名,称宅急送码品/码目名,称公共版本,号 1.0被码码人码字, 码码容,内___ ______码码人码字 ,___________ 码码日期, _ ____码明,码码清被码码码名模码名称码品名称码码码常码是否程序是否明地注码了其码码功能确注码格式是否正确程序码元是否承码一码码担码码程序是否合理地分解码子程序程序中接口定码是否明晰异常码理是否符合码范包名、码名命名是否符合码范方法名命名是否符合码范码量/常量是否相码系列码量是否码一集中明~自定码据码型码量是否码行了必要而充分的描述声数码量是否按相码码范码行了命名;有意码的命名、据码型的分等,数区码量是否按其命名含码承了码一的使用目的~必要码是否定码了码外码量担清晰码量引用是否正码码确常量是否使用getter/setter方法码码是否码用良好定码的枚码码型替代了码码的字符码码或布码码量使用UFBoolean是否使用UFBoolean构数构造函码行造码理可码String码是否未使用StringBuffer是否码先使用Java码准码提供的容器;ArrayList、HashSet、HashMap、LinkList,码理码序来码、集合、码码码合堆码码列构数码码的使用码景是否正数确码于public尽慎量码使用不同作用域码量名量不要相同称尽算法是否数构据码是否合理、精码算法是否可以立码码~是否据码和其他算法隔独与数离是否量避免了嵌套的用尽运码码码码是否码行了必要而充分的注码控制是否代码码行路是否径清晰Switch码句是否有缺省分支控制码码码码度是否合理~是否码行了必要而充分的注码每循码是否码码行了码一而明的功能个体确与数将数达常比码需要常放在比码表式的前面布局是否代码是否良好格式化能码其码码码并体构码码是否程序是否可码、可码展健并壮具码码码码是否已可能的“码藏”体尽是否码先使用接口而不是抽象码或具码体方法是否在参数5个内以方法用慎public修码符码于不需要子码重码的码量使用来尽final码象作用域是否码大效率是否尽内量不要在循码出码码程码用每码码码作码程码用次是否小于个数3次码程码用据码码是否有不必要的冗余据数数SQL是否Sql码句小写引用字符使用码引号码禁使用select * 形式的码句~必码指出具字段体码禁使用insert into table values;,~,~,,~必码指出具要码码的字段体避免码含的码型码码;不同据码型字段相加,数子码码前后必码加上括号避免在where使用’1=1’,’1=2’码码表方式作码部分件达条禁止使用码码禁止使用XX in () or XX in ()(in中的元素不码超码个数500)禁止使用or超码500个禁止使用not in~建码使用not exist禁止在一条sql码句中使用3码以上的嵌套如果有多表码接码~码码有主之分~量一表取从尽从个数Where子句码码件~索引列或码码码码最多的件码码放在前面条条字符串码接必码使用“||”Case when码句中只能出码=、>=、<=以及is null运算符左码接法必码码”写outer”码码字Sql中函是否在指定范码数内Join与on必码码格匹配码码码清码码描述码码修改日期修改日期码码人码字。
代码评审检查表
流程控制缺陷(CF) 流程控制缺陷(CF)
10 所有的异常是否都得到了正确的处理 11 每一个方法在是否都结束? 输入输出缺陷(IO) 输入输出缺陷(IO) 1 2 3 1 2 1 2 3 1 2 3 4 5 6 7 8 1 2 3 1 2 文件在被使用之前是否都被打开? 输入对象的属性是否与使用的文件一致? 文件在被使用之后是否都被关闭? 文本中是否有拼写和语法上的错误? 所有的I/O异常处理的是否合理? 方法调用的参数的数量,顺序,类型和值是否与该方法声明一致? 度量单位是否一致(如:公分 vs. 公尺)? 如果对象或数组被传递,它们是否改变?是否被调用方法正确改变? 每一个方法,类和文件是否都有适当的头注释? 每一个属性,变量和常量的声明是否都有注释? 每个类和方法的潜在行为是否都有用简易的语言进行解释? 方法和类的头注释是否和它们的功能保持一致? 注释和代码是否保持一致? 注释对于理解代码是否有帮助? 代码中的注释是否充分? 代码中的注释是否过多? 代码布局格式和缩排标准是否前后一致? 对于每一个方法,它的代码量是否都不超过60行? 对于每一个编译模块,它的代码量是否都不超过600行? 模块(方法,类)之间是否具有低偶合性? 每个模块(方法,类)自身是否具有高聚合性?
存储器使用缺陷(SU) 存储器使用缺陷(SU)
PE) [可选 可选] 性能缺陷 (PE) [可选]
其他 结论: 结论: 说 明: 明:
通过
有条件通过
不通过
CODE-CHECKLIST-YYYYMMDD
备注
版本:V1.1
检查日期 填写人 是 否 不适用 BUG数
属性是否可以用本地变量? 10 所有的属性是否都有正确的访问限制符 (private,protected,public)? 11 是否有静态属性应该是非静态或vice-versa? 方法定义缺陷(FD) 方法定义缺陷(FD) 1 2 3 4 5 1 2 3 1 2 1 2 3 4 1 2 3 4 方法名的描述方法是否与命名约定一致? 每个方法的参数值在使用之前是否都作了检查? 对于每一个方法,它是否都返回了正确的值? 每种方法是否都有正确的访问限制符(private, protected, public)? 静态方法是否应该为非静态或vice-versa? 每一个类是否都有正确的构造函数和析构函数? 在子类中是否有应该放到父类中的通用成员? 类的继承层次是否能被简化? 对于每一个数组引用,下标值是否在定义的范围内? 对于对象和数组引用,是否组确定其值应为非空? 是否存在不同类型数据之间的混合计算? 在计算中是否存在上溢或下溢的可能? 关于数值计算的顺序和优先级的假设是否正确? 是否用了括号来避免模糊不清? 对每一个布尔测试,正确条件是否被检查? 比较操作符是否正确? 布尔表达式是否通过内部否定操作进行了简化 每个布尔表达式是否都正确?
java代码检查表(很好的公司在用)
4.
代码优化
4.1同步方法的使用是否必要?同步代码块是否已粒度最小化?
4.2在不影响可读性和易维护性的前提下,对象是否可重复利用?如StringBuffer可以通过setLength(0)重复利用,无需每次重复创建新实例。
4.3是否有这样的代码:new String(””)?
2.2嵌套内部类是否超过2层?
2.3所有方法是抽象的且所有成员变量是静态常量的抽象类是否声明成了接口?
2.4当类所有的方法和属性都是静态的时,是否定义了缺省的私有构造方法?
2.5没有使用任何实例类成员(包括方法和成员变量)的方法是否被声明为静态的?
2.6异常发生时是否均恰当的记录了错误日志?是否存在使用System.out.println而不是日志模块记录日志的情况发生?
3.8克隆方法中是否调用了父克隆方法?克隆方法中是否避免了调用构造函数?
3.9使用ObjectStream后是否调用了reset()方法以避免内存泄漏?
3.10条件、循环中的判断边界值是否恰当?
3.11程序块的break、return、throw是否恰当?
3.12charAt()、数组下标、parseInt之类可能抛运行时异常的方法是否需要事先判断或事后catch?如需要,处理是否恰当?
代码走查检查表
项目名称:模块名称:版本号:
检查时间:检查员:
#
检查项
是/否
注释
1.
命名、注释及风格
1.1文件、类/接口、静态变量、成员变量、方法及关键代码是否都有格式良好、简明扼要、的注释?注释是否是对设计思路的说明而不仅仅是代码行为的描述?是否存在过时的注释或废代码注释?
1.2文件中各种段落布局是否合理、是否用恰当的空行分隔?代码的断行、对齐、缩进、空行是否恰当?
CMMI-3Java代码走查检查单(修改举例)
X模块,X行的XXX没有按照格式 书写
**.java中**方法没有注释 **.java中**算法需要改进
。
是
类、方法、变量必须注释说明
否
注释
JavaDoc注释将用于说明那些被其它类调 用的类、属性和方法
是
尽量不要用do…while循环
是
程序的算法易读
否
编码
"return"只能出现在一个方法的末尾 尽量不要用"continue"
"break" 通 常 只 用 于 转 换 状 态 ( switch statement)的控制和循环
2)功能测试主要的依据是该单元对应的需求和详细设计。
3)白盒测试有工具。主要有:Junit
4)检查结果请填写:是、否、不适用
走查检查单
规范
赵勇 说明
备注
完成前次未完成的编码
前次检查出的问题修改完毕
前次检查出的问题修改完毕 **.java
例外:方 法 名,数 组,自加 、自减运 算符, 类 型转换运
Java代码走查检查单
走查日期 使用说明 检查类型
2007年6月10日
走查人
检查java程序代码是否符合公司的代码编写规范
检查项
检查结果
完整性 验证设计的所有的功能都已经编码
是
所有缩进皆为4个半角空格,即一个Tab键
是
所有的if、while和for语句中的"状态"内容 必须用括号括起来,就算只有一个状态
是
所有的标识符都必须被空白字符包围(有 例外)
是
格式
在代码中增加空行,提高程序可读性及美 观度
否
private方法被放置在所有public方法之下
Java代码规范检查表范本
70
对于静态方法,应该使用类名去使用,不应该用实例去引用,主要是为了体现更多的语义。
强制
71
对一些基本数据类型和不太可能通过继承进行扩展的类,应声明为final,提高效率。
推荐
72
类和方法的粒度保持适中,保持类的规模尽量短小,职责单。小类有很多好处,易于设计,易于测试,易于理解。同样方法也要尽量的小,每个方法尽量不要超出25行。
强制
6
包的导入应该按照相关性进行分组。
强制
7
只导入明确需要的类,这样只要看导入列表,就可以知道该类依赖于哪些类和接口,保证可读性。
强制
8
类和按口中元糸的布局顺序。
强制
9
类的声明,基类和实现的接口在一行显示不下时,应该独立成行,保证可读性。
推荐
10
方法修饰关键字定义顺序。
强制
11
变量声明,采用camel表示法,不要在一行声明多个变量。
强制
64
使用@deprecated废弃方法,不要删掉匕。
推荐
65
使用行末注释对深层嵌套代码进行注释。
推荐
66
所有变量都应该进行初始化。
强制
67
变量在使用刖应进行合法性检杳。
强制
68
静态变量和方法的使用应保证线程安全。
强制
69
所有异常应该被正确的处理,不应简单的吞掉异常或打印ex.printStackTrace()。应该将异常记入日志或者包装后向上层抛出。对于表现层页面,不应该出现程序异常,应该在捕获到异常后进行友好的提示。
力。一般以“able,和“ible,作为后缀,代表了一种能力。
35
变量名和参数名使用camel表示方式。
JAVA代码审查
代码编写者,代码审核者共同对代码的质量承担责任。这样才能保证 Code Review 不是走过场,其中代码编写者承担主要责任,代码审核者承担次要责任。
二、java 代码审查检查表
重要性
激 级别 检查项
活
总计
命名
重要
20命名规则是否与所采用的规范保持一致?
20是否遵循了最小长度最多信息原则?
5、代码编写者根据“代码审核报告”给出的修改意见,修改好代码,有不 清楚的地方可积极向代码审核者提出。
6、代码编写者 bug fix 完毕之后给出反馈。 7、代码审核者把 Code Review 中发现的有价值的问题更新到"代码审核检查 表"的文档中,对于特别值得提醒的问题可群发 email 给所开发人员。
1.1 主要工作
1、发现代码中的 bug; 2、从代码的易维护性、可扩展性角度考察代码的质量,提出修改建议。 3、是否符合 java 开发规范和代码审核检查表
1.2 基本流程
1、代码编写者和代码审核者坐在一起,由代码编写者按照 UC(Use Case) 依次讲解自己负责的代码和相关逻辑,从表现层->持久层;
d.height = height; d.width = width; }
public synchronized Dimension getValues(){ // Ooops! Breaks encapsulation return d; } }
Example 类保证了它所存储的 height 和 width 值永远非负数,试图使用 setValues()方法来 设置负值会触发异常。不幸的是,由于 getValues()返回 d 的引用,而不是 d 的拷贝,你可 以编写如下的破坏性代码:
XX项目java代码检查表
代码检查表
XXXXXXXXXXXXXXXX公司
更改记录
序
号
版本
更改内容Байду номын сангаас
更改人/日期
审核人/日期
批准人/日期
1
2
3
4
5
代码检查表
项目名称:模块名称:版本号:
检查时间:检查员:
序号
检查项
是/否/不适用
注释
1.
命名、注释及风格
1.1文件、类/接口、静态变量、成员变量、方法及关键代码是否都有格式良好、简明扼要、的注释?注释是否是对设计思路的说明而不仅仅是代码行为的描述?是否存在过时的注释或废代码注释?
3.5打开的流、连接等资源是否在finally语句块或恰当的地方关闭或释放了?临时资源使用完后是否及时释放了?如临时文件要及时删除。各种资源释放的顺序是否正确?
3.6条件、循环中的判断边界值是否恰当?
3.7程序块的break、return、throw是否恰当?
3.8相似的代码块是否是拷贝过来的?如果是,则需检查拷贝的代码中每处需要修改的地方是否都修改了。
4.2是否有这样的代码:new String(””)?
4.3嵌套的条件判断、循环是否可优化?
嵌套的条件判断、循环是否可替换为较简单的结构?
是否存在可以合并的循环或条件判断?
循环体内是否存在可以提到循环体外的代码?如实例化对象或声明变量等
4.4循环条件中或重复出现的如.length() .size() .getClass().getName()等取值方法的返回值是否使用了临时变量代替?
3.
缺陷检查
3.1程序逻辑是否符合详细设计?
3.2输入参数、调用其他函数的返回值是否有必要校验合法性、完整性、依赖关系?如有必要,是否做了恰当的校验?如无必要,是否有多余的代码?
QR_815.02_JAVA代码审查表
常量(final static):
全部用大写字母,每个单词之间用下划线连接。
M7
属性(attribute):
属性名不要以“_”,“the”,“a”,“an”和“for”起头。另外,属性不应该是公有的(但也有一些例外),应该用setter和getter方法;
M8
EJB:在类名后加“EJB”
M9
JavaBean:在类名后加“Bean”
JAVA
编号:QR_815.03_XXX
基本信息
代码所属项目和任务
代码名称
代码描述
开发人
审查人
审查日期
审查最终结果
通过需要修改
审查的内容与结果
序号
标准(注:请根据具体项目的设计规范将此表补充完整)
是否满足(Y/N)
说明
命名规则
M1
包:
1)所有的包名都必须采用小写英文单词组合;
2)包应按如下方式组织和命名:<system>.<subsystem>.<module>.<submodule>;
*<p>JDK version used :jdk1.6.1</p>
*<p>Comments :config path</p>
*<p>Version :1.01</p>
*<p>Modification history:2008.6.19</p>
*<p>Sr Date Modified By Why & What is MODIFIED</p>
6)所有可能导致系统级异常的地方,如数据库或资源连接失败,须使用fatal记录,此类信息应尽可能少
代码检查表
代码行注释量是否大于20%
设计者
检查者
1
2
3
4
5
6
7
8
9
10
11
12
备注
四、软件安装文件、固件烧录文件生成说明
□固件□软件(涂黑符号□标识)
提供软件安装文件打包说明、固件目标文件转烧录文件过程说明。
五、软件母盘制作、固件烧录过程说明
□固件□软件(涂黑符号□标识)
提供软件母盘刻录说明、固件烧录过程说明。
六、代码注释及语法检查表
□固件□软件(涂黑符号□标识)
序号
源码文件名称
4
5
6
7
8
9
10
11
12
备注
二、应用程序、目标文件清单
□固件目标文件□软件应用程序(涂黑符号□标识)
序号
文件名称
基本功能、配置描述
缺少次文件现象
问题解决人
1
2
3
4
5
6
7
8
9
10
11
12
备注
三、程序构造环境及编译说明
□固件□软件(涂黑符号□标识)
提供工具软件、路径设置、选项设置、配置文件、编译过程等说明。
项目名称、研发阶段
检查表编号
拟定质控协调员
检查表版本
项目负责人(提交人)
提交时间
部门负责பைடு நூலகம்(审阅人)
审阅时间
修改记录:
修改对象及内容
备注(原因、进一步说明)
修改人
修改时间
一、固件、软件模块开发卷宗
□固件模块□软件模块(涂黑符号□标识)
序号
模块名称
JAVA代码审查检查表
11
3.2变量是否已经在定义的同时初始化
是[ ]否[ ]免[ ]
12
3.3类属性是否都执行了初始化
是[ ]否[ ]免[ ]
13
3.4代码段落是否被合适地以空行分隔
是[ ]否[ ]免[ ]
14
3.5是否合理地使用了空格使程序更清晰
是[ ]否[ ]免[ ]
15
3.6代码行长度是否在要求之内
是[ ]否[ ]免[ ]
16
3.7折行是否恰当
是[ ]否[ ]免[ ]
17
4.1包含复合语句的{}是否成对出现并符合规范
是[ ]否[ ]免[ ]
18
4.2是否给单个的循环、条件语句也加了{}
是[ ]否[ ]免[ ]
19
4.3if/if-else/if-else if-else/do-while/switch-case语句的格式是否符合规范
5
2.2复杂的分支流程是否已经被注释
是[ ]否[ ]免[ ]
6
2.3距离较远的}是否已经被注释
是[ ]否[ ]免[ ]
7
2.4非通用变量是否全部被注释
是[ ]否[ ]免[ ]
8
2.5函数是否已经有文档注释
是[ ]否[ ]免[ ]
9
2.6特殊用法是否被注释
是[ ]否[ ]免[ ]
10
3.1每行是否只声明了一个变量(特别是那些可能出错的类型)
是[ ]否[ ]免[ ]
20
4.4单个变量是否只做单个用途
是[ ]否[ ]免[ ]
21
4.5单行是否只有单个功能(不要使用;进行多行合并)
是[ ]否[ ]免[ ]
22
代码评审表
产品代码评审表注:表头检查项目中黑体的项目表示必审项。
使用说明:1.此表用于检查产品/项目代码的状况,从而从代码上对产品质量进行提高。
2.由产品经理或设计人员确定代码的检查范围,以核心业务处理的代码检查为主;3.按照确定的检查范围列出需要检查的类清单,并通过检查代码得出评审结论,对于各种类的检查侧重点可以不同;4.代码检查采用程序员自己检查和至少一个其他程序员进行复查的方式进行;5.在代码实现的功能基本正确以后才能进行该部分代码的确认,对评审发现问题的代码要复查;6.类型有以下几种状态:界面(UI)、业务处理(BO)、数据处理(DM)、数据对象(VO);7.按照检查项目逐项确认,对正确的项填写“Y”,有问题的项填写“N”,不需确认的项填写“-”,未确认的项不填;8.评审结果可以分几种:A--好、B--合格、C--有问题、D--有严重问题。
对于有问题和有严重问题的需要注明问题的内容(可以附加问题说明),对于这种情况需要再重新进行代码修改并重新进行确认;9.在代码提交时要求同时提交本确认表,提交时要保证所有检查的类的评审结果为A或B;10.确认的项目除列出的项目外,产品组可以补充项目。
项目说明:●易读性:代码结构清晰;●注释清晰:对功能的注释及代码的作者;●命名规范:变量、类、方法、属性的命名符合公司开发规范;●逻辑正确性:业务逻辑处理的正确性;●事务一致性:TRANSACTION是否一致;●Sql语句清晰:SQL语句结构是否清晰;●计算精度:如计算精度有问题时是否使用了UFDouble;●用标准控件:对于可以使用标准控件的是否使用标准控件;●调用中间件:不存在反复调用中间件的情况;●BS与UI交叉:没有BS类与UI类的交叉调用情况;通过检查以上项目,根据情况得出评审的结论,必审项目要求必须检查;。
JAVA代码审查
三、Java 代码审查的常见错误
3.1 常见错误 1# :多次拷贝字符串
测试所不能发现的一个错误是生成不可变(immutable)对象的多份拷贝。不可变对象是不可 改变的,因此不需要拷贝它。最常用的不可变对象是 String。
如果你必须改变一个 String 对象的内容,你应该使用 StringBuffer。下面的代码会正常工 作:
String s = new String ("Text here");
但是,这段代码性能差,而且没有必要这么复杂。你还可以用以下的方式来重写上面的代码:
String temp = "Text here"; String s = new String (temp);
但是这段代码包含额外的 String,并非完全必要。更好的代码为:
不幸的是,随着时间的推移,客户代码可能会改变返回的 Dimension 对象的值,这个时候, 追寻错误的根源是件枯燥且费时的事情,尤其是在多线程环境中。
更好的方式是让 getValues()返回拷贝:
public synchronized Dimension getValues(){ return new Dimension (d.x, d.y); }
一、概述
代码审查(Code Review)是消灭 Bug 最重要的方法之一,这些审查在大 多数时候都特别奏效。由于代码审查本身所针对的对象,就是俯瞰整个代码在测 试过程中的问题和 Bug。并且,代码审查对消除一些特别细节的错误大有裨益, 尤其是那些能够容易在阅读代码的时候发现的错误,这些错误往往不容易通过机 器上的测试识别出来。
60入口对象是否都被进行了判断不为空? 60入口数据的合法范围是否都被进行了判断?(尤其是数组) 20是否对有异常抛出的方法都执行了 try...catch 保护? 80是否函数的所有分支都有返回值? 50int 的返回值是否合理?(负值为失败,非负值成功) 20对于反复进行了 int 返回值判断是否定义了函数来处理? 60关键代码是否做了捕获异常处理? 60是否确保函数返回 CORBA 对象的任何一个属性都不能为 null?
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
16
3.7折行是否恰当
是[ ]否[ ]免[ ]
17
4.1包含复合语ቤተ መጻሕፍቲ ባይዱ的{}是否成对出现并符合规范
是[ ]否[ ]免[ ]
18
4.2是否给单个的循环、条件语句也加了{}
是[ ]否[ ]免[ ]
19
4.3if/if-else/if-else if-else/do-while/switch-case语句的格式是否符合规范
是[ ]否[ ]免[ ]
30
5.5对数组的访问是否是安全的(合法的index取值为[0, MAX_SIZE-1])
是[ ]否[ ]免[ ]
31
5.6是否确认没有同名变量局部重复定义问题
是[ ]否[ ]免[ ]
32
5.7程序中是否只使用了简单的表达式
是[ ]否[ ]免[ ]
33
5.8是否已经用()使操作符优先级明确化
JAVA软件代码审查表(CHECKLIST)
执行情况
说明
1
1.1命名规则是否与所采用的规范保持一致
是[ ]否[ ]免[ ]
2
1.2是否遵循了最小长度最多信息原则
是[ ]否[ ]免[ ]
3
1.3has/can/is前缀的函数是否返回布尔型
是[ ]否[ ]免[ ]
4
2.1注释是否较清晰且必要
是[ ]否[ ]免[ ]
是[ ]否[ ]免[ ]
53
6.11是否确认在对Map对象使用迭代遍历过程中没有做增减元素操作
是[ ]否[ ]免[ ]
54
6.12线程处理函数循环内部是否有异常捕获处理,防止线程抛出异常而退出
是[ ]否[ ]免[ ]
55
6.13原子操作代码异常中断,使用的相关外部变量是否恢复先前状态
是[ ]否[ ]免[ ]
24
4.8单个函数不超过规定行数
是[ ]否[ ]免[ ]
25
4.9缩进层数是否不超过规定
是[ ]否[ ]免[ ]
26
5.1是否已经消除了所有警告
是[ ]否[ ]免[ ]
27
5.2常数变量是否声明为final
是[ ]否[ ]免[ ]
28
5.3对象使用前是否进行了检查
是[ ]否[ ]免[ ]
29
5.4局部对象变量使用后是否被复位为NULL
49
6.7关键代码是否做了捕获异常处理
是[ ]否[ ]免[ ]
50
6.8是否确保函数返回CORBA对象的任何一个属性都不能为null
是[ ]否[ ]免[ ]
51
6.9是否对方法返回值对象做了null检查,该返回值定义时是否被初始化
是[ ]否[ ]免[ ]
52
6.10是否对同步对象的遍历访问做了代码同步
是[ ]否[ ]免[ ]
34
5.9所有判断是否都使用了(常量==变量)的形式
是[ ]否[ ]免[ ]
35
5.10是否消除了流程悬挂
是[ ]否[ ]免[ ]
36
5.11是否每个if-else if-else语句都有最后一个else以确保处理了全集
是[ ]否[ ]免[ ]
37
5.12是否每个switch-case语句都有最后一个default以确保处理了全集
56
6.14函数对错误的处理是恰当的
是[ ]否[ ]免[ ]
57
7.1实现代码中是否消除了直接常量(用于计数起点的简单常数例外)
是[ ]否[ ]免[ ]
58
7.2是否消除了导致结构模糊的连续赋值(如a= (b=d+c ))
是[ ]否[ ]免[ ]
59
7.3是否每个return前都要有日志记录
是[ ]否[ ]免[ ]
是[ ]否[ ]免[ ]
38
5.13for循环是否都使用了包含下限不包含上限的形式(k=0; k<MAX)
是[ ]否[ ]免[ ]
39
5.14XML标记书写是否完整,字符串的拼写是否正确
是[ ]否[ ]免[ ]
40
5.15对于流操作代码的异常捕获是否有finally操作以关闭流对象
是[ ]否[ ]免[ ]
60
7.4是否有冗余判断语句(如:if (b) return true; else return false;)
是[ ]否[ ]免[ ]
61
7.5是否把方法中的重复代码抽象成私有函数
是[ ]否[ ]免[ ]
5
2.2复杂的分支流程是否已经被注释
是[ ]否[ ]免[ ]
6
2.3距离较远的}是否已经被注释
是[ ]否[ ]免[ ]
7
2.4非通用变量是否全部被注释
是[ ]否[ ]免[ ]
8
2.5函数是否已经有文档注释
是[ ]否[ ]免[ ]
9
2.6特殊用法是否被注释
是[ ]否[ ]免[ ]
10
3.1每行是否只声明了一个变量(特别是那些可能出错的类型)
45
6.3是否对有异常抛出的方法都执行了try...catch保护
是[ ]否[ ]免[ ]
46
6.4是否函数的所有分支都有返回值
是[ ]否[ ]免[ ]
47
6.5int的返回值是否合理(负值为失败,非负值成功)
是[ ]否[ ]免[ ]
48
6.6对于反复进行了int返回值判断是否定义了函数来处理
是[ ]否[ ]免[ ]
是[ ]否[ ]免[ ]
11
3.2变量是否已经在定义的同时初始化
是[ ]否[ ]免[ ]
12
3.3类属性是否都执行了初始化
是[ ]否[ ]免[ ]
13
3.4代码段落是否被合适地以空行分隔
是[ ]否[ ]免[ ]
14
3.5是否合理地使用了空格使程序更清晰
是[ ]否[ ]免[ ]
15
3.6代码行长度是否在要求之内
是[ ]否[ ]免[ ]
20
4.4单个变量是否只做单个用途
是[ ]否[ ]免[ ]
21
4.5单行是否只有单个功能(不要使用;进行多行合并)
是[ ]否[ ]免[ ]
22
4.6单个函数是否执行了单个功能并与其命名相符
是[ ]否[ ]免[ ]
23
4.7操作符++和--操作符的应用是否复合规范
是[ ]否[ ]免[ ]
41
5.16退出代码段时是否对临时对象做了释放处理
是[ ]否[ ]免[ ]
42
5.17对浮点数值的相等判断是否是恰当的(严禁使用==直接判断)
是[ ]否[ ]免[ ]
43
6.1入口对象是否都被进行了判断不为空
是[ ]否[ ]免[ ]
44
6.2入口数据的合法范围是否都被进行了判断(尤其是数组)
是[ ]否[ ]免[ ]