代码评审清单
代码审查单
![代码审查单](https://img.taocdn.com/s3/m/676dadf6f90f76c661371ab8.png)
□
要步骤?
是否违背了继承和组合的规则?
(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吗?
学生选课系统-代码评审
![学生选课系统-代码评审](https://img.taocdn.com/s3/m/196523d58bd63186bcebbcb5.png)
scanf("%d",&j);
if(j==1) {system("cls");gotoleap1;}
}
printf("任意键返回\n");
scanf("%s",&t);
system("cls");
printf("%s欢迎回来!\n",S[XH].Sname);
{3,"英语",307.30, "15#15217","王五",3,1},
{4,"经济",715.40,"6#6510", "张三",1,4},
{5,"防身术",10.00,"8#8321","李四",2,0},
{6,"电脑游戏",10.00,"5#5310","王五",3,0}
}; /*课程初始化课程编号、上课时间、上课地点、老师、老师编号、课程人数*/
printf("是否重新选课?1是2否\n");
scanf("%d",&i);
if(i==1) {system("cls");gotoleap1;} /*1111*/
}
else
{
if(Student[XH][1]==0) Student[XH][1]=Cou[Cn].Cno;
else if(Student[XH][2]==0) Student[XH][2]=Cou[Cn].Cno;
xx项目(软件)_日常管理_代码审查表(模板))
![xx项目(软件)_日常管理_代码审查表(模板))](https://img.taocdn.com/s3/m/a2680b63a417866fb84a8e5e.png)
代码审查表
检查文件 审查代码行数 缺陷数 代码可读性
,评价标准为:优良中差。 评价标准为:优良中差。
代码正确性
代码提交பைடு நூலகம்志
备注
代码审查表
周期:20XX/XX/XX-20XX6/XX/XX 项目名称:XX项目 日期 20XX/XX/XX 20XX/XX/XX 20XX/XX/XX 20XX/XX/XX 20XX/XX/XX 工程师 张三 张三 张三 张三 张三 审查人员 李四 李四 李四 李四 李四 功能模块
备注: 1. 代码可读性:代码注释、文件名称(文件名或包名,作用描述),评价标准为:优良中差。 2. 代码正确性:是否符合设计、符合情景、合理、执行是否有误,评价标准为:优良中差。 3. 代码提交日志:编写提交信息日志,评价标准为:优良中差。 4. 缺陷数为注意事项中检查结果为“否”的数量
代码评审标准与结果
![代码评审标准与结果](https://img.taocdn.com/s3/m/7cd2c366dd88d0d232d46a29.png)
注释对于理解代码是否有帮助
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
是否存在更好的数据结构和算法可以采用
C#开发者准备的通用性代码审查清单
![C#开发者准备的通用性代码审查清单](https://img.taocdn.com/s3/m/e91610295901020207409ce5.png)
C#开发通用性代码审查清单1. 确保没有任何警告(warnings);2.如果先执行Code Analysis(启用所有Microsoft Rules)再消除所有警告就更好了;3. 去掉所有没有用到的usings,编码过程中去掉多余代码是个好习惯(参考:msdn);4. 在合理的地方检查对象是否为’null’,避免运行的时候出现Null Reference Exception ;5. 始终遵循命名规范,一般而言变量参数使用驼峰命名法,方法名和类名使用Pascal命名法(参考:msdn);6. 请确保你了解SOLID原则。
(根据维基百科定义:在程序设计领域,SOLID (单一功能、开闭原则、里氏替换、接口隔离以及依赖反转) 是由罗伯特·C·马丁在21世纪早期引入的记忆术首字母缩略字,指代了面向对象编程和面向对象设计的五个基本原则。
当这些原则被一起应用时,它们使得一个程序员开发一个容易进行软件维护和扩展的系统变得更加可能。
SOLID所包含的原则是通过引发编程者进行软件源代码的代码重构进行软件的代码异味清扫,从而使得软件清晰可读以及可扩展时可以应用的指南。
SOLID被典型的应用在测试驱动开发上,并且是敏捷开发以及自适应软件开发的基本原则的重要组成部分(参考:wiki/SOLID_面向对象设计)7. 代码可重用性:如果一块代码已经被使用超过一次,或者你希望将来使用它,请提取成一个方法。
将重复的工作做成通用的方法放在相关的类中,这样一旦你完成别人就可以使用了。
将常用功能开发成用户控件,这样可以跨项目重用它们(参考:①、②);8. 代码一致性:比方说,Int32写成int,String写成string,应该在代码里保持统一形式。
不能一会二写成int一会儿写成Int32;9. 代码可读性:代码应该是可维护的,便于其他开发者理解(参考:msdn);10. 释放非托管资源,比如文件I/O,网络资源等,一旦使用结束就应该释放它们,如果你想一旦超出使用范围就自动释放对象,可以使用usings将非托管代码括起来(参考:msdn);11. 合理实现异常处理(try/catch和finally块)和异常记录(参考:msdn);12. 确保代码中方法的行数不要过多,不超过30到40行;13. 及时用代码管理工具check-in/check-out代码(比如TFS) (参考:);14. 相互审查代码:和你的同事交换代码,实现内部审查;15. 单元测试:编写开发测试用例完成单元测试,确保代码被送到QA以前,基本测试完成(参考:msdn);16. 尽量避免for/foreach循环嵌套和if条件嵌套;17. 如果代码只会使用一次,请使用匿名类型(参考:msdn);18. 尽量使用LINQ查询和Lambda表达式,增加可读性(参考:msdn);19. 合理使用var、object和dynamic关键字。
Lect03-代码评审检查表
![Lect03-代码评审检查表](https://img.taocdn.com/s3/m/464558180b4e767f5acfce12.png)
代码评审检查表1.格式✧嵌套的IF是否正确地缩进✧注释是否准确并有意义✧是否使用有意义的标号✧代码是否基本上与开始时的模块模式一致✧是否遵循全套的编程标准2.程序语言的使用✧是否使用一个或一组最佳动词✧模块中是否使用完整定义的语言的有限子集✧是否使用的适当的转移语句3.数据引用错误✧是否引用了未初始化的变量✧数组和字符串的下标是整数值吗?下标总是在数组或字符串的大小范围之内吗?✧是否应该在使用常量的地方使用了变量✧变量是否被赋予了不同类型的值✧一个数据结构是否在多个函数或者子程序中引用,在每一个引用中明确定义了结构了吗4.数据声明错误✧所有变量都赋予正确的长度、类型和存储类了吗?如需要字符串的变量声明为字符数组了✧变量是否在声明的同时进行了初始化?是否正确初始化并与其类型一致?✧变量有相似的名称吗?是否自定义变量使用了系统变量名?✧存在声明过但是从未引用或只引用一次的变量吗?✧在特定模块中所有变量都显式声明了吗?如果没有,是否可以理解为该变量与更高级别的模块共享?5.计算错误✧计算中是否使用了不同数据类型的变量?如整型数与浮点数相加✧计算中是否使用了不同数据类型的变量?如字节与字相加✧计算时是否了解和考虑到编译器对类型和长度不一致变量的转换规则?✧赋值的目的变量是否小于赋值表达式的值✧在数值计算过程中是否可能溢出✧除数/模是否可能为0✧对于整型算术运算,特别是除法的代码处理是否丢失精度✧变量的值是否超出有意义的范围✧对于包含多个操作数的表达式,求值的次序是否混乱,运算的优先级是否正确6.比较错误✧比较正确吗?如小于与小于等于常发生混淆✧存在分数或者浮点值之间的比较吗?如果有,精度问题会影响比较吗✧每一个逻辑表达式都正确吗?逻辑计算如期进行了吗?求值次序有问题吗?✧逻辑表达式的操作数是逻辑值吗?如包含整型数的整型变量用于逻辑计算7.入口和出口的连接✧初始入口和最终出口是否正确✧对另一个模块的每一次调用是否恰当?如全部所需的参数是否传递给每一个被调用的模块?被传送的参数值是否正确的设置?对关键的被调用模块的意外情况是否处理?✧每个模块的代码是否只有一个入口和一个出口?8.存储器的使用✧每个域,在其第一次被使用前是否正确初始化?✧规定的域正确否?✧每个域是否有正确的变量类型声明9.控制流错误✧如果程序包含Begin-End、Do-While等语句组,End是否对应?程序、模块、子程序和循环能否终止?如果不能,可以接受吗?✧可能存在永远不停的循环码?✧存在循环从不执行吗?如果存在,可以接受吗?✧如果程序包含像Switch-Case等多分支语句,索引变量能超出可能的分支数目吗?如果超出,该情况能正确处理吗?✧是否存在丢掉一个错误,导致意外进入循环?✧代码执行路径是否已全部覆盖?是否能保证每条源代码语句至少执行一次?10.子程序参数错误✧子程序接收的参数类型、大小与调用代码发送的匹配吗?次序正确吗?✧如果子程序有多个入口点,引用的参数是否与当前入口点没有关联?✧常量当做形式参数传递时,是否意外在子程序中改动?✧子程序是否改变了仅作为输入值的参数?✧每一个参数的单位是否与相应的形参匹配?✧如果存在全局变量,在所有引用子程序是否有相似的定义和属性?11.输入输出错误✧软件是否严格遵守外部设备读写数据的专用格式✧文件或外设不存在或者未准备好的错误情况下有处理吗✧软件是否处理外部设备未连接、不可用或者读写过程中存储空间沾满等情况?✧软件以预期方式处理预计的错误了吗?✧检查错误提示信息的准确性、正确性、语法和拼写了吗12.逻辑和性能✧全部设计已实现否✧逻辑被最佳地编码否✧提取正确的错误/例外子程序否✧每一个循环执行正确的次数否13.维护性和可靠性✧清单格式适于提高可读性否✧标号和子程序符合代码的逻辑意义否✧对从外部接口采集的数据有确认否✧遵循可靠性编程要求否✧是否存在内存泄露的问题。
代码评审清单
![代码评审清单](https://img.taocdn.com/s3/m/64eaaa43f90f76c661371aea.png)
代码评审清单(Code Checklist )产品,项目组名称;_宅急送_________ 产品项号名称,公共_______________ 版本号:被检杳人簽字:—检杳內容: _ _检查人螯宇,_____________________ 检查日期’______________________说明:是杏尽童避免了嵌会的立•弔篦杂芳雄是否併行了必茅而充分的汗释拎K是否代码拥亍路径是否清晰S罰Chi航是否有決4分支控制逻短复杂度是否合浬是否诜行了必更1门充分的注释同个循坏怎是吞仅执行了羊而明确的巧毙占械比校需要挣常数玫在比较表达式的前面否代彳礎丧奸格ig化并能疝苴逻辑结枸尽量孑哎在循开丙岀观近程谐月奇个吐务可作远程谓用次数是否小于以冈1中因数是吞仕抱定范围内Joinb on矽页产恪匹0己问題淸单.冋幅沐阚窟改n期修改n期楡杳SQL r 是冈1语句』碍弓用乎符画单引号T^MO select *开预的语句,必姦指出旦饶宇SF严禁使用ins«t m2 Uiblc: values "t ? , ? , "?) >必须指1岀具依更0jt值広字段避兌隐含的炎型转换(不同数据类型字段明加)子宣询前后必须加上桔号邀免在我here使用,1* / 1=2’这*怯廿戎作为部分条件禁上使用椰图禁上使用XX in 0 or XX血CKm中的元素个数不应超过500)禁止使用or超辽500个其止使用not in・建议使冃not exist婪止在一条河语句中恃月3层以丄的嵌套如具勺多表连莪盯「应该有主从之分,尽重从一个表取数Where子句过滤条杵,索引列或过遞记录最多氏条林应験在前面字符邑连接必须使用“ rCaw when吾匀中巳能出珂二、k、u以及is mill运算袴左连接写送必須带”cxuei'关佬宰伝稈诅用蓟摇伎端启否有不必萼的冗輛摇Java代码审查检查丧类定义缺陷(CD)代码评申检査表软件代码检杳单(C语言)77 检鱼寮量和宏,数字帘金应该用宏未表不,检登宏足义中的数位、実型是合正佚月说明・1.本檢杳单为软件评頁朋检査较件产品惜俣和扶陷提供了指导。
代码评审表——Java
![代码评审表——Java](https://img.taocdn.com/s3/m/4880b7ae81c758f5f61f679f.png)
8 内存及其它资源是否被有效利用?
9 数字和字符串常量是否用符号代替?
10 是否有过于复杂的模块需要重新构造或拆分成多个程序?
十、布局和封包缺陷
基础
5
1 代码布局格式和缩排标准是否前后一致?
2 对于每一个方法,它的代码量是否都不超过规定行数?
3 对于每一个编译模块,它的代码量是否都不超过规定行数?
十一、模块性缺陷 (MO)
重点
10
1 模块(方法,类)之间是否具有低偶合性?
2 每个模块(方法,类)自身是否具有高聚合性? 3 是否存在重复的代码,它的功能可以通过调用其它方法实现? 4 Java类库的使用是否合理?
十二、存储器使用缺陷
基础
5
1 数组是否过大? 2 数组和对象不再使用之后,它们的引用是否被赋为空值? 十三、防御性编程 1 索引和下标是否经过了数组,记录或文件一个类是否都有正确的构造函数? 2 在子类中是否有应该放到父类中的通用成员? 3 类的继承层次是否能被简化?
四、数据引用缺陷
基础
1 对于每一个数组引用,下标值是否在定义的范围内? 2 对于对象和数组引用,是否组确定其值应为非空? 3 是否存在大内存对象的频繁创建或引用?
五、计算/数值缺陷
JAVA代码评审表
约定:总分100=基础项50分+重点项50分。附加分上限10分。针对每一大项评分,细项作为评分的参考依据。大项评 大于该项总分的80%必须给出说明。如该大项整体不适用,评分栏填写“/”。细项中,带删除线的项可忽略,
部门名称 项目名称 模块列表
类列表
编号
问题
类别
一、变量,属性和常量声明缺陷
基础
5
1 每一个方法,类和文件是否都有适当的头注释? 2 变量和常量的声明是否都有注释? 3 每个类和方法的潜在行为是否都有用简易的语言进行解释? 4 方法和类的头注释是否和它们的功能保持一致?
6代码评审报告
![6代码评审报告](https://img.taocdn.com/s3/m/0440d338abea998fcc22bcd126fff705cc175ce7.png)
项目管理
17
框架权限模块变动,需要额外拓展 框架变更
严重 严重
SPE(需求定义) FUN(功能实现)
18
文件处理统一api实现
代码规范
严重
IND(接口)
19
导入导出及条件筛选api拓展与统一 规范
代码规范
致命
IND(接口)
20
数据报表生成规则不明确
借还款管理
严重
SPE(需求定义)
21
首页数据获取接口未通用,开发成本 增加
项目管理
importFileTemplate()会议批量导入 异常
会议管理
getMeetingInfo()会议成员不能批量 添加
会议管理
planAddlist()还款计划自动生成异 常
借还款管理
会议管理同时添加多个项目同时审
核,会影响多项目进度审核,需求变 会议管理
更
合同管理中模板生成,填充页面多列 表展示数据格式错误
一般严重
SPE(需求定义)
一般严重 严重
FUN(功能实现) STA(相关标准)
发现人员
问题计划解 决时间
问题实际解 决时间
14
前后端表单数据跨越
实时交互
严重
CHK(数据检测)
15
createPlan()方法生成还款计划计息 规则验证错误
借还款管理
严重
IND(接口)
16
需求变更尽职调查报告生成PDF格式 进行预览
首页工作台
严重
IND(接口)
评审会上根据评审会意见填写
评审会后由问题跟踪人填写
问题责任 问题跟踪
人
人
状态
已解决 已解决
代码同行评审
![代码同行评审](https://img.taocdn.com/s3/m/b0f4ecd249649b6648d74776.png)
CPF 0.43 0 2/0.43 描述 未进行内存分配成功是否判断 未进行内存分配成功是否判断 没有坚持左边变量 没有坚持左边变量 没有坚持左边变量
预审工作量(分钟) 预审工作量(分钟) 预审专家姓名 一般问题数 预审速率 规模/人时) (规模/人时) 缺陷疑问 缺陷 缺陷 缺陷 缺陷 缺陷
15 预审日期 2 1.72 严重程度 问题解决 已解决 已解决 已解决 已解决 已解决 提示问题数 预审效率 问题/人时) (问题/人时) 缺陷类型 错误 错误 错误 错误 错误
72预审效率问题人时缺陷类型描述缺陷疑问严重程度问题解决未进行内存分配成功是否判断缺陷一般已解决错误未进行内存分配成功是否判断缺陷一般已解决错误没有坚持左边变量缺陷一般已解决错误没有坚持左边变量缺陷一般已解决错误没有坚持左边变量缺陷一般已解决错误预审速率规模人时预审工作量分钟预审专家姓名一般问题数201141408
一般 一般 一般 一般 一般
2011-4-14 0 8.00 触发因素 人为 人为 人为 人为 人为
0 Hi3560H V100R002 OR-DR-DS(刘渊00111160).xls 0 Hi3560H V100R002 OR-DR-DS(刘渊00111160).xls 0 Hi3560H V100R002 OR-DR-பைடு நூலகம்S(刘渊00111160).xls 0 Hi3560H V100R002 OR-DR-DS(刘渊00111160).xls
预审对象 预审规模 (页/KLOC/ 条) 严重问题数 预审问题密度 (问题/规模) 问题/规模) 序号 1 2 3 4 5 6 7 8 9 10 11 2011-4-14 2011-4-14 2011-4-14 2011-4-14 2011-4-14
java代码评审内容
![java代码评审内容](https://img.taocdn.com/s3/m/5acd80c4b8f3f90f76c66137ee06eff9aef8498f.png)
java代码评审内容评审内容u ⼯具检查□ Eclipse警告□ FindBug□ CheckStyle□ Jupiter□ Subclipse 或者Subversiveu 代码注释内容(详细参考《代码注释规范》)□类注释内容□接⼝注释内容□⽅法注释内容□⽅法内部注释内容u 业务逻辑□业务逻辑实现的正确性□业务逻辑实现的完整性u 代码细节u 异常处理□接⼝⽅法声明需要抛出BusinessException□接⼝实现类最外层需要强制try….catch,对Exception进⾏marsh BusinessException包装□禁⽌出现try….catch后,没有对异常做任何处理的情况□在EJB边界对所有的异常进⾏marsh BusinessException包装□后台所有⽅法不再显⽰的进⾏异常的抛出声明,如有异常⽤wrappBusinessException包装成运⾏时异常直接抛出□前台代码直接抛出后台传递过来的异常□前台代码主动抛异常时,需要使⽤ExceptionUtils.wrappBusinessException;□前后台异常处理类统⼀使⽤nc.vo.pubapp.pattern.exception.ExceptionUtils□未⽤异常作为业务流程转换的判断u 效率□接⼝的定义使⽤参数数组来进⾏批量调⽤,⽽不是循环调⽤⾮批量接⼝□⽅法内部禁⽌出现循环执⾏相似重复的SQL语句□尽量使⽤绑定变量的sql□ sql关联的表不超过3个□ sql不采⽤外连接u 内存□ UFDobule常量必须使⽤UFDouble.ZERO, UFDouble.ONE□ UFBoolean常量必须⽤UFBoolean.TRUE, UFBoolean.FALSE□ UFBoolean的值必须采⽤UFBoolean.valueof(true|false|y|n|Y|N),的形式进⾏构造u 其他□临时表命名⽅式为:TEMP_(模块名称)_(具体作⽤) 例如:temp_gl_assid temp_fa_depdata □常量要使⽤NC枚举类□加锁应⽤统⼀的⼯具类,⼀定先加锁再查询□代码中访问数据库都⽤相应的VO类,禁⽌直接使⽤JDBC□⾯向接⼝编程□⽅法⼊⼝处不能对传⼊参数进⾏容错处理□ VO的get/set⽅法中不能包含业务逻辑□ VO中不能有业务⽅法,也不能有数据校验⽅法□避免全局变量注:代码评审不负责检查功能、逻辑是否正确,这些要靠单元测试和QA⼯作来解决。