评审日期:年 月 日
| 评审对象 | 作者 | |||
| 评审人 | 评审工作量 | |||
| 序号 | 检查项 | 评审意见 | ||
| 走查前准备 | ||||
| 1 | 得到一份解释代码的最新的设计文档 ,作为代码走查的参考 | |||
| 2 | 代码都已提交 ,版本统一 | |||
| 程序结构组织 | ||||
| 1 | 所有代码的结构清晰,具有良好的结构外观和整齐 | |||
| 2 | 所有的模块(函数和外部接口)定义清晰,模块分解清楚 | |||
| 3 | 所有的功能需求都明显的覆盖 | |||
| 4 | 整个代码体系结构组合合理 ,分层清晰,代码之间功能划分明确 | |||
| 5 | 所有的接口模块化,尽量减少接口之间的耦合度,修改时尽量不影响其他代码模块 | |||
| 6 | 代码体系构架对空间和速度都已经进行考虑 | |||
| 7 | 数据库操作、IO操作等是否正确关闭资源。并且必须在try -catch-finally 的finally中关闭。 | |||
| 8 | 一个业务如果进行多次数据库更新、添加、删除是否正确添加事务。 | |||
| 9 | 进行逻辑与、逻辑或判断时是否使用短路与、短路或。 | |||
| 10 | 多处使用相同代码时,应定义唯一方法或变量以供使用。 | |||
| 11 | 对象是否使用工厂获取。 | |||
| 12 | 导入类时,如果仅使用包中的几个类,应导入具体类,而不是导入整个包。 | |||
| 13 | 数组声明的时候使用 int[] index ,而不要使用 int index[]。 | |||
| 14 | 代码实现的逻辑是否与详细设计描述的逻辑一致 | |||
| 15 | 检查类中是否有无效的代码或者是无用的代码。 | |||
| 16 | 不要使用System.out.print()以及System.err输出,需要进行日志处理 | |||
| 17 | 所有的文件名符合文件命名规范,见名知意 | |||
| 18 | 文件和模块分组清晰 | |||
| 19 | 较长的语句、表达式或参数(>80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读 | |||
| 20 | 每个程序文件都小于2000行 | |||
| 代码组织 | ||||
| 1 | 数据库查询语句不要出现select * | |||
| 2 | 对需要处理的字符串定义为StringBuffer ,常量定义成静态的。 | |||
| 3 | 所有的变量名都小于32字符 | |||
| 4 | 有返回值的方法是否正确返回。Return语句应定义在方法结尾处。 | |||
| 5 | 代码排版是否规范。 | |||
| 6 | 所有的行每行最多只有一句代码或一个表达式 | |||
| 7 | 复杂的表达式具备可读性,添加注释说明,表达式结构清晰 | |||
| 8 | 续行缩进 | |||
| 9 | 括号在合适的位置 | |||
| 10 | 每个顺序的小块用空行隔开 | |||
| 11 | 注释和代码对齐或接续在代码之后 | |||
| 12 | JSP必须不能有basepath。 | |||
| 13 | JSP引用js全部要有path | |||
| 14 | JSP用的标签库是否都正确引用。 | |||
| 15 | JSP写的js方法必须要有注释。 代码是否可读。 | |||
| 16 | 代码的逻辑是否有问题。 | |||
| 17 | JSP页面尽量不要写过多的隐藏域。 | |||
| 18 | JSP页面要注意排版、必要的注释、尽量减少使用alert(),JS 和CSS除非必要就放到外部的单独文件中,在JSP中引用。 | |||
| 19 | 实例变量是否使用private修饰并定义getter、setter方法。 | |||
| 20 | 连接数据库的方法必须调用公用的方法。 | |||
| 21 | 异常要统一处理,异常处理方法是否符合项目组的约定 | |||
| 22 | 在Action中不要过多的逻辑处理代码 | |||
| 23 | 不要出现魔鬼数字 | |||
| 24 | 检查可能出现空指针异常的地方,例如一个对象可能为空,却调用它的方法或属性。 | |||
| 25 | 显示的文本无拼写和语法错误 | |||
| 26 | 所有的表达式使用了正确的操作符 | |||
| 函数组织 | ||||
| 1 | 所有的函数名都小于个字符 | |||
| 2 | 函数高内聚 尽量只做一件事情,并做好 | |||
| 3 | 函数和其他代码松耦合 | |||
| 4 | 所有的参数都被使用 | |||
| 5 | 如果一个函数有返回值,在所有的出口都有返回值 | |||
| 6 | 函数使用了最少数目的return语句 | |||
| 7 | 函数的参数个数小于7个 | |||
| 8 | 使用的算法说明清楚 | |||
| 9 | 函数检查了输入数据的合法性 | |||
| 10 | 函数异常处理清楚 | |||
| 11 | 函数设计尽量考虑将来的变化 | |||
| 12 | 调试信息存在于代码中并容易激活 | |||
| 13 | 递归定义了出口 | |||
| 14 | 递归局限于一个函数 | |||
| 15 | 对接口的调用必须要有判断传入的参数不能为空和传入的参数正确。 | |||
| 数据类型与变量 | ||||
| 1 | 数据类型存在数据类型解释 | |||
| 2 | 代码避免了重新定义预先定义的数据类型 | |||
| 3 | 每一个变量都初始化了 | |||
| 4 | 所有的变量都有最小的活动范围 | |||
| 5 | 所有的全局变量都描述清楚,如全局变量的作用 | |||
| 6 | 所有的变量都用到了 | |||
| 条件判断 | ||||
| 1 | If/else 使用正确 | |||
| 2 | 判断的次数降到最小 | |||
| 3 | Boolean表达式表示清楚 | |||
| 4 | 最常用的情况最先判断 ,所有的情况都考虑 | |||
| 5 | 判断体足够短,以使得一次可以看清楚 ,不要有臃肿的逻辑判断。 | |||
| 6 | 嵌套层次小于3次 | |||
| 7 | 判断条件使用引用时,应先判断其是否为null。 | |||
| 循环 | ||||
| 1 | 不要出现三层以上的for循环。如有必要必须写清楚注释 | |||
| 2 | 循环体不为空,循环体能够一次看清楚 | |||
| 3 | 循环之前做好初始化代码 | |||
| 4 | 当有明确的多次循环操作,使用For循环 | |||
| 5 | 当有不明确的多次循环操作,while循环被使用 | |||
| 6 | 代码中不存在无穷次循环 | |||
| 7 | 循环的头部进行循环控制 | |||
| 8 | 循环体内的循环变量起到指示作用。 | |||
| 9 | 所有的循环边界是否正确; | |||
| 10 | 循环终止的条件清晰 | |||
| 11 | 循环条件、判断条件的边界值,数组、集合下标是否越界。 | |||
| 注释 | ||||
| 1 | 类、方法、判断条件、循环、主要变量是否添加注释。 | |||
| 2 | 类名、方法名、变量名的命名是否规范。 | |||
| 3 | 有返回值的方法是否正确返回。Return语句应定义在方法结尾处。 | |||
| 4 | 源代码能够自我解释 ,每个人看到代码就能很快理解 | |||
| 5 | 解释不过于简单,解释说明代码功能,准确描述代码意义 | |||
| 6 | 所有的假设和进行注解 | |||
| 7 | 长的控制体结束,进行注解 | |||
| 8 | 对if和for、while等要进行必要的注释,并且方法体都要用{ }包起来 | |||
| 9 | 代码的注释不能过于简单,要清晰明了。 | |||
| 10 | 缺陷修改阶段,提交代码的时候必须写清楚修改的功能点和为什么要修改。 | |||
| 总括 | ||||
| 1 | 无用的代码、注解已经删除 | |||
| 2 | 除非必要,不要在循环体内定义对象。 | “ | ||
| 其他注意项 | ||||
| 1 | 尽量减少同名的类(如java.sql.Date,java.util.Date) | |||
| 2 | 不要在循环中反复定义创建变量 for(){String str= (new String)v.next();} | |||
| 3 | 可能重复执行的SQl语句尽量使用preparedStatment | |||
| 4 | 浮点型要精确比较时不要使用==,而如下进行 Math.abs(x-0.0) | |||
| 5 | 在sql中注意敏感的单词要回避使用 DB2 中id flag year month name state Oracle 中number Sybase中 count | |||
| 6 | 代码与操作系统无关,不需要任何假设条件 | |||
| 7 | 所有的数组访问在它们的边界内 | |||
| 8 | 类型转换明确指明 | |||
| 变更版本 | 修订日期 | 原因与修改情况描述 | 位置(页/段落/章节号 | 修订人 | 审核人 |
| 1.0 | 2012-5-22 | 新增 | all | 孟洋涛、郑海焘 | 郑博 |
| 1.1 | 2012-5-28 | 根据各项目组评审出问题进行修改 | all | 孟洋涛 | 郑博 |