代码走查规范
代码走查
代码走查(code walkthrough)和代码审查(code inspection)是两种不同的代码评审方法,代码审查是一种正式的评审活动,而代码走查的讨论过程是非正式的。
最近对项目组进行代码评审,发觉需要对代码评审中找到的问题进行一下分类,大概可以分成以下几类问题:1. Comment注释没写,或者格式不对,或者毫无意义2. Coding Standard没遵守代码规范3. Existing Wheel重复现成的代码,或者是开源项目,或者公司已有代码4. Better practiceJava或者开源项目,有更好的写法5. Performance bottle and Improvement性能瓶颈和提高6. Code Logic Error代码逻辑错误7. Business Logic Error业务逻辑错误代码审查列出问题的类型,并有解决情况报告11月23日代码走查——项目走向成功的锦囊之一说起代码走查,相信每个人都不陌生,但为什么要执行代码走查,什么时候来执行代码走查,如何有效执行代码走查,很多人的看法和见解都不一样。
一般的看法,认为代码走查是一种非正式的代码评审技术,它通常在编码完成之后由代码的作者向一组同事来讲解他自己编写的代码,由同事来给出意见。
这种做法在很多做软件开发组织中经常采用。
但从实际执行效果来看,成效并不都那么明显,反而很多组织的这种做法有浪费时间之嫌。
主要是因为代码走查活动时间有限,而参加代码走查的人之前没有较多的时间来提前了解被走查的代码,故而在实际执行时能被走查的代码所占的比例并不高,同时也发现不了多少本质问题。
随着软件外包业的发展,它有别于软件产品开发,客户对于产品的要求不再局限于系统是否能够正确运行。
而是在设计、代码的品质上也有了更多的要求。
有的客户甚至会在我们每次交付后先来检查我们的代码品质,只要是代码不符合要求就会被拒绝。
但在项目的实际执行中,面对客户的这些要求,我们又常常遇到诸如编写的代码不符合规范;编码效率低;代码的可重用性低;代码错误多等现象,从而影响到项目的时程和交付的品质,影响到客户对我们的满意度和对我们专业程度的质疑。
软件测试 ——白盒测试——代码检查、走查与评审
比较运算符是否与布尔表达式相混合?(如2<i<10对吗?)
是否存在浮点数的比较?(例9)
优先顺序是否正确?
布尔表达式的计算方式
共十四页
代码检查(jiǎnchá)的错误列表(cont)
5.控制流程错误
是否所有循环都能终止?(循环结束条件是否能满足以 及递归的终止条件是否能满足。)(例10)
共十四页
界错误) 中间结果是否上溢或下溢? 是否存在除0错误? 操作符的优先顺序是否正确? 整数除法是否正确?(精度问题,如2*(i/2)==i)
共十四页
代码检查的错误(cuòwù)列表(cont)
4.比较错误
是否有不同类型数据的比较运算(yùn suàn)?(如日期与数字) (例8)
是否有混合模式或不同长度数据的比较运算? 比较运算符是否正确?(如至多、至少,不小于)
6.接口错误
形参和实参的数量是否相等?
形参的属性是否与实参的属性相匹配?
形参的属性是否与实参的顺序相匹配? 形参的单位(dānwèi)是否和实参匹配?(属逻辑错误) 是否改变了某个仅作为输入值的形参?(C++中的const
关键字)
全局变量的定义是否一致?
共十四页
代码检查(jiǎnchá)的错误列表(cont)
其他与代码检查相同的地方 参与者所持的态度同样非常关键 代码走查也会带来同样的附带作用
共十四页
桌面 检查 (zhuōmiàn)
桌面检查
是人工查找错误的一种古老的方法
桌面检查可视为由单人进行的代码检查或代码走查
由一个人阅读程序,对照错误列表检查程序,对程序推演 的过程。
桌面检查的缺点
C__代码走查CheckList
代码走查
一.代码走查的目的
1.保证代码符合编码规范
2.保证代码符合设计
3.发现bug
4.保证代码单元测试充分
5.促进开发人员之间的交流,为代码的优秀程度的提高和开发人员编码技能的提高提供契机。
二.过程
每次迭代都要对修改过和新编的代码进行走查,走查的过程如下图:
三.Checklist
说明:本checklist用于走查人员走查代码。
开发人员用于自我检查的checklist可以参照此checklist,依自身实际情况制定。
说明:本checklist应随着组织开发过程中出现的实际情况,对检查项具体内容进行增、删、改,以使得此checklist更具效率,但要注意保持检查项数目的简洁。
类名:走查的类的名字。
代码检查与代码走查
代码检查与代码⾛查
代码检查与代码⾛查是基于⼈⼯测试的⽩盒测试⽅法。
⽬的:找出错误,⽽不是改正错误,是测试⽽不是调试。
优点:能够精确地定位的错误,降低调试成本。
可以成批的发现错误,⽽计算机测试往往是逐个发现错误并改正。
注意:代码检查、代码⾛查、基于计算机的测试三者是互补的
代码检查:以组为单位阅读代码,是⼀系列规程和错误检查技术的集合。
代码检查⼩组由⼩组主导者、代码编写者、设计⼈员、测试专家组成。
代码编写者组逐条语句讲解程序的逻辑结构,⼩组参考代码检查错误列表分析程序。
代码检查错误列表有:数据引⽤错误、数据声明错误、运算错误、⽐较错误、控制流错误、接⼝错误、输⼊/输出错误、其他错误。
代码⾛查的概念和代码检查的概念相似,但是代码⾛查⼩组中指定的测试⼈员会携带书⾯的测试⽤例来参加会议。
这些测试⽤例必须是结果简单数量少,在代码⾛查过程中,这是测试⽤例并不起到关键性作⽤,测试⽤例在⼩组成员脑袋中推演的过程,很多问题是在向程序员提问的过程中发现的,⽽不是有测试⽤例本⾝发现的。
桌⾯检查是由单⼈进⾏的代码检查或代码⾛查,效率低,但是⽐没有检查好。
检查代码的方法
检查代码的方法全文共四篇示例,供读者参考第一篇示例:在软件开发过程中,代码检查是非常重要的环节。
它可以帮助开发人员发现潜在的bug和错误,并且提升代码质量。
本文将介绍一些常用的检查代码的方法,帮助开发人员更好地进行代码检查。
一、代码审查代码审查是最常用的一种检查代码的方法。
一般情况下,代码审查包括两种形式:静态代码审查和动态代码审查。
静态代码审查是通过检查源代码或编译后的代码进行审查。
它可以发现一些潜在的bug和编码风格问题。
常用的静态代码审查工具包括Lint、PMD、Checkstyle等。
动态代码审查是通过运行程序来检查代码的质量。
可以使用断点调试工具来检查代码的执行过程,查看变量的值是否正确、程序的执行路径是否正确等。
二、单元测试单元测试是一种非常有效的代码检查方法。
通过编写单元测试用例,可以测试代码的各个功能模块是否正常工作。
如果单元测试用例都通过了,那么说明代码的质量较高。
在编写单元测试用例时,需要考虑尽可能多的测试场景,包括正常情况和异常情况下的处理逻辑。
可以使用Mock框架来模拟一些外部依赖,从而使测试更加容易。
代码走查是一种通过团队协作来检查代码的方法。
一般在代码走查会有一个专门的评审小组,由团队成员轮流担任Leader,负责主持代码走查的过程。
在代码走查中,团队成员可以提出自己的看法和建议,帮助发现代码中的问题。
这种方法可以增强团队之间的沟通和合作,提升整个团队的代码质量。
四、代码规范检查代码规范检查是一种通过检查代码是否符合编码规范来评估代码质量的方法。
编码规范是一种统一的编码风格,可以帮助开发人员编写易读、易维护的代码。
在进行代码规范检查时,可以使用代码检查工具来自动检查代码中的规范问题,如缩进、命名规范、文档注释等。
这种方法可以节省开发人员的时间,同时提高代码的一致性和可读性。
五、自动化测试自动化测试是一种自动化进行测试的方法。
通过编写自动化测试脚本,可以帮助开发人员快速地测试代码的各个功能,提高测试效率和代码质量。
软件测试(代码走查、检查与审查)
5、传递给被调用模块的实参量纲是否与其形参量纲匹配?
6、调用内部函数的实参的数量、属性、顺序是否正确?
7、是否引用了与当前入口点无关的形参?
8、是否改变了某个原来仅为输入值的形参?
9、全局变量的定义在模块间是否一致?
10、常数是否以实参形式传递过?
1)程序是够易于理解?
2)高层次的设计是够可见且合理?
3)低层次的设计是否可见且合理?
4)修改此程序对评审者而言是否容易?
5)评审者是否会以编写出该程序而骄傲?
还要要求评审人给出总的评价和建议的改进意见。
评审结束后,参与者会收到自己的那两个程序的匿名评价爱表,此外还会收到一个带统计的总结,说明在所有的程序中其程序的整体和具体得分情况,以及他对其他程序的评价爱与其他评审人同意程序打分的比较分析情况。
2、桌面检查胜过没有极限嘻哈,但其效果远远逊色于代码检查和代码走查。
同行评审
(peerrating)
1、同行评审的概念
同行评分是一种依据程序整体质量,可维护性、可扩展性、易用性和清晰性对匿名的程序进行技术评价的技术。改技术的目的是为程序员提供自我评价的手段。
2、实施过程:
选出一名程序员来担任这个评分过程的管理员,管理员又会挑选出大约2~20名参与者,保持匿名,这些参与者否应具有相似的背景要求每名参与者都挑选出两个由自己编写的程序以供评审。其中的一个程序应是参与者自认为能代表其自身能力的最好的作品,而了另一个则是参与者自认为质量较差的作品。
3、代码走查的意义:
提出的建议应针对程序本身,而不是针对程序员。换句话说,软件中存在的错误不应该被视为编写程序人员自身的弱点。相反,这些错误应被看作是伴随着软件的艰难性所固有的。
【软件工程】【CMMI】代码走查单
1-14
用 应通 该配 尽符 可方 能式 减小类与类之间耦合,所遵循的经验法则是:尽量限制成员函数的可见性。如果成员函数没必要
1-15
为 若保 没护 有足(够pr理ot由ec,te不d)要;把没实必例要或保类护变(量pr声ot明ec为te公d)有,。就公定共义和为保私护有的(可pr见iv性at应e)当。尽量避免,所有的字段都建议
1-3
避免使用长名字(最好不超过 25 个字母)
1-4
采用大小写混合,提高名字的可读性。一般应该采用小写字母,但是类和接口的名字的首字母,以及任何中
1-5
所 写有 。单 包词 名首 全字 部母 小大 写写 。。使用能确切反应该类、接口含义、功能等的词。一般采用名词
1-6
采用完整的英文大写单词,在词与词之间用下划线连接,如:DEFAULT_VALUE
代码走查记录跟踪单
项目名称
记录更新人
记录更新时间
走期 模块名称
检查文件 代码总行 数(个) 数(LOC)
花费工时(H)
1
50000
2
50000
3
50000
编号
检查项
1 代码规范
1-1
程序结构清晰,简单易懂,单个函数行数不得超过100行;
1-2
使用可以准确说明变量/字段/类/接口/包等的完整的英文描述符
1-7
对不易清楚识别出该变量类型的变量应使用类型缩写作其前缀,如字符串使用strXXX,boolean使用isXXX。
1-8
应采用完整的英文描述符命名组件(接口部件),遵循匈牙利命名法则
1-9
一个集合,例如数组和矢量,应采用复数命名来表示队列中存放的对象类型。命名应采用完整的英文描述符
刚刚知道“代码走查”是什么意思
刚刚知道“代码⾛查”是什么意思
代码⾛查的最主要的⽬的是为了发现程序中的逻辑错误,编程风格⽅⾯的错误可以通过风格检查的⼯具去检查。
如下的检查单给代码⾛查的专家发现逻辑错误提供了⼀个很好的帮助。
序号检查项
1代码的注释与代码是否⼀致?注释是否是多余的?
2是否存在超过3层嵌套的循环与/或判断?
3变量的命名是否代表了其作⽤?
4所有的循环边界是否正确?
5所有的判断条件边界是否正确?
6输⼊参数的异常是否处理了?
7程序中所有的异常是否处理了?
8是否存在重复的代码?
9是否存在超过20⾏的⽅法?
10是否存在超过7个⽅法的类?
11⽅法的参数是否超过3个?
12是否有多种原因导致修改某个类?
13当发⽣某个功能变化时,是否需要修改多个类?
14代码中的常量是否合适?
15⼀个⽅法是否访问了其他类的多个属性?
16某⼏项数据是否总是同时出现,⽽⼜不是⼀个类的属性?
17switch语句是否可以⽤类来替代?
18是否有⼀类的职责很少?
19是否有⼀个类的某些属性或者⽅法没有被其他类所使⽤?
20在类的⽅法中是否存在如下的调⽤形式:a.b().c()?
21是否某个类的⽅法总是调⽤另外⼀个类的同名⽅法?
22是否某个类总是访问另外⼀个类的属性与⽅法?
23是否两个类完成了类似的⼯作,使⽤了不同的⽅法名,却没有拥有同⼀个⽗类?
24是否某个类仅有字段和简单的赋值⽅法与取值⽅法构成?
25是否某个⼦类仅使⽤了⽗类的部分属性或⽅法?。
JAVA代码走查规范
x
x
evtaction变量名类名包名常量名方法名等名称长度不得超过32个字母通常用ijk作循环变量pq作位移变量方法参数之间在逗号后面加一个空格如callprocstringnameintcountbooleanisvalid缩进长度为4个空格不在源代码中使用tab字符回车换行采用unix风格即char10而不需要每行代码的长度不超过80字符超长行应在单词结束时或标点符号后换行新行在原行基础上缩进不单独占用一行紧跟着上一行的结尾单独占用一行中左括号和其后的单词中间不要出现空格右括号与之前的单词中间不要出现空格不要在语句中出现无意义的括号只应该为达到某种目的而出现在源代码中在若干行代码后应该有空行空行率保持在20左右按照javadoc要求的风格为包类变量等写注释如果有文件头注释则版权信息必须出现在注释的开头e2eview2
待测模块标识: 待测模块标识: 待测模块版本 序号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 编码规范 检查项
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
SQA检查代码审查过程的 SQA检查代码审查过程的 1 2 3 4 5 最终得分代码 覆盖率
代码走查人 员: 走查日期: 走查日期: 实现工程 师: 确认人: 确认人: 确认日期: 确认日期:
规范
检查内容 包名全部由小写的单词或缩写组成 禁止混合使用 AWT 和 SWING 可视化组件 类名由大写字母开头的单词或缩写组成,禁用下划线 static final 常量的名字应该都大写,并且指出完整含义,单词之间用下划线分隔 初始化变量时,应集中在一起,尤其是static类型 变量名称应符合见名知义的原则,且首单词首字母小写,其它单词首字母大写,不推荐使用下划线 原则上,局部变量不允许与成员变量重名;如有重名,成员变量应以“this.”为前缀修饰 方法名称应以小写动词开头,后面的单词符合首字母大写的规定 方法名称中的动词要符合成对使用的习惯,如get/set,add/remove等 方法参数名称除符合变量命名的一般规则外,可与相应的被赋值成员变量同名 尽量使用公认无异义的缩写,自定义缩写不要超过 4 个字母 JFC 对象不得使用“Label1, Label2”等自动生成的无意义名称,建议规则为:用途+类型,如“ printDialog” 数组命令规则为:类型+Array+用途,如 byteArrayOutput,对于一目了然的局部数组变量,可适当放宽限制 异常对象命令规则为:exp+对象名,或:ex+对象名,如 expSQL 或 exSQL 事件对象命令规则为:evt+对象名,如:evtAction 变量名、类名、包名、常量名、方法名等名称,长度不得超过 32 个字母 通常用“i, j, k”作循环变量,“p, q”作位移变量 方法参数之间,在逗号后面加一个空格,如 callProc(String name, int count, boolean isValid) 缩进长度为 4 个空格,不在源代码中使用 TAB 字符,回车换行采用 UNIX 风格,即char(10),而不需要 char(13) 每行代码的长度不超过 80 字符,超长行应在单词结束时或标点符号后换行,新行在原行基础上缩进 “{”不单独占用一行,紧跟着上一行的结尾,“}”单独占用一行 “()”中,左括号和其后的单词中间不要出现空格,右括号与之前的单词中间不要出现空格 不要在语句中出现无意义的“()”,括号只应该为达到某种目的而出现在源代码中 在若干行代码后,应该有空行,空行率保持在 20% 左右 按照 javadoc 要求的风格为包、类、变量等写注释 如果有文件头注释,则版权信息必须出现在注释的开头(E2E View 2.0 中,不需要写版权信息) 必须为类的所有成员变量,包括 private 变量,书写 javadoc 风格的注释 对方法进行注释时,必须标明参数、返回值、异常等信息 暂时不用但又不宜删除的代码,用批量注释符号注释:/* … */(注意:不是 /** … */) 单行注释不要写在语句的结尾,而应写在语句的上一行 方法之间,应该有空行分隔 在语句块(如 if, for, switch)开始和结尾处,应有适当的注释 一个文件不能太长(不要超过2000行) 在循环语句中,不得出现类似于“for (int i=0;i<list.size();i++)”的情况 switch 结构必须有 default 子句 Case语句的结尾是否忘了加break? 单元测试的类的命名规则为:在被测试类的名称前加“test”,
代码走查单
是否适用 严重程度
是: 高:
否: 中:
评审工件
工件版本
是否达到可评审状态
是
否
严重程度 建议修正措施
评审人员 其它 注释
不适用: 低:
4 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 结果 统 计:
其它:
注释 注释是否解释了代码的目的,或总结了代码所要完成的工作? 注释是否是最新的? 注释是否清晰正确? 是否对代码含义进行了注释? 声明全局变量时,是否给以了注释? 是否说明了每个子程序的目的? 注释是否与代码保持一致性,不存在没用的注释? 其它:
程序块的分界符是否各独占一行并且位于同一列,同时与引用它们 1.6 的语句左对齐? 1.7 其它:
2 命名 2.1 定义的程序名是否有意义?
标识符的命名是否清晰、明了,有明确含义,同时使用完整的单词 2.2 或大家基本可以理解的缩写,避免使人产生误解? 2.3 命名中规若范使是用否特与殊所约使定用或的缩系写统,风是格否保有持注释一说致明,?并在同一项目中统 2.7 一? 2.8 其它:
是否注意运算符的优先级,并用括号明确表达式的操作顺序,避免 3.9 使用默认优先级? 3.1 是否只引用属于自己的存贮空间? 3.11 是否防止引用已经释放的内存空间?
如果不是构造函数,过程/函数中分配的内存,在过程/函数退出之 3.12 前是否释放?
对于退出过程/函数后仍然需要存在的内存,是否确保该内存使用完 3.13 毕后及时释放该内存?
过程/函数中申请的(为打开文件而使用的)文件句柄,在过程/函 3.14 数退出之前是否关闭? 3.15 是否防止内存操作越界?
系统运行之初,是否初始化有关变量及运行环境,防止未经初始化 3.16 的变量被引用? 3.17 在产品软件(项目组)中,是否统一编译开关选项?
检查代码的方法
检查代码的方法全文共四篇示例,供读者参考第一篇示例:在软件开发过程中,编写的代码需要经过严格的测试和检查,以确保代码的质量和稳定性。
代码的质量决定着软件的可靠性和性能,因此对代码进行检查是非常重要的。
下面将介绍一些常用的检查代码的方法,帮助开发人员提高代码质量和效率。
1. 代码审查代码审查是检查代码最常用的方法之一,也是最有效的方法之一。
代码审查是由项目组的成员对编写的代码进行检查和审查,发现代码中的错误和缺陷。
代码审查可以分为静态代码审查和动态代码审查两种方式。
静态代码审查是通过查看代码本身的结构、逻辑和规范性来发现问题,而动态代码审查是通过运行代码来检查代码的功能性和性能。
通过代码审查,可以及早发现和解决问题,提高代码的质量和稳定性。
2. 自动化测试自动化测试是通过编写测试用例和测试脚本,自动化执行测试来检查代码的质量。
自动化测试可以帮助开发人员快速地发现和修复代码中的错误和缺陷,提高测试效率和准确性。
常见的自动化测试工具包括Junit、TestNG、Selenium等,开发人员可以根据项目的需求选择适合的工具进行自动化测试。
代码检查工具可以帮助开发人员快速地发现和修复代码中的潜在问题和错误。
代码检查工具可以检查代码中的语法错误、逻辑错误、效率问题等,提高代码的质量和稳定性。
常见的代码检查工具包括Checkstyle、FindBugs、SonarQube 等,这些工具可以针对不同的编程语言和项目需求进行代码检查,帮助开发人员更好地控制代码质量。
4. 单元测试单元测试是检查代码的一个重要环节,通过编写单元测试用例对代码进行单元测试,验证代码的功能是否符合预期。
单元测试可以帮助开发人员及时发现代码中的问题和错误,保证代码的可靠性和稳定性。
在编写单元测试时,应该尽可能覆盖所有的代码路径,包括边界情况和异常情况,确保代码的健壮性和可靠性。
代码规范检查是检查代码风格和规范是否符合项目的要求和标准。
通过定义代码规范和风格指南,可以帮助开发人员编写更加清晰和规范的代码,提高代码的可读性和可维护性。
代码走查制度
代码走查制度
为代码走查的目的:
第一、及时了解程序员编写的代码是否符合设计要求以及编码规范;第二、及时了解程序员在编码过程中遇到的问题,并给以协助,从而达到有效、透明地掌控项目进度的目的;第三、通过代码走查活动,及时了解代码中可以重用的代码,并将其提取为公共方法或模块,提高代码的可重用性以弥补当前人员设计能力不足的现状;代码走查分为两种方式:日常代码走查、定期代码审查
日常代码走查的步骤
一、交叉走查
开发人员提交上线工作单前,需要把文件清单发给组内的其他成员进行交叉走查,开发人员根据走查报告修改代码后才能提交,技术组长对提交的代码进行抽查,如果抽查不通过则退回重新交叉走查。
产出:交叉走查报告(格式同代码走查记录表)
二、代码审核
上线工作单提交给技术组长审批时,技术组长需要判断是否有核心代码修改或数据库表结构变更,如果有则转交给架构组评审,架构组进行核心代码走查后在OA上审批通过
产出:OA工作审批记录和备注
定期代码抽查
部门内部定期(一个月或一个大型项目结束后)对代码进行抽查,总结该阶段内的程序员代码德尔情况,帮助程序员提高代码的质量和能力
产出:代码走查记录表。
检查代码的方法
检查代码的方法检查代码的方法有很多种,以下是一些常见的检查代码的方法:1. 桌面检查:这是一种传统的检查方法,由程序员检查自己编写的程序。
程序员在程序通过编译之后,对源程序代码进行分析、检验,并补充相关文档,目的是发现程序中的错误。
由于程序员熟悉自己的程序及其程序设计风格,桌面检查由程序员自己进行可以节省很多的检查时间,但应避免主观片面性。
2. 代码审查:由若干程序员和测试员组成一个审查小组,通过阅读、讨论和争议,对程序进行静态分析的过程。
小组成员在充分阅读这些材料后,进入审查的第二步,召开程序审查会。
在会上,首先由程序员逐句简介程序的逻辑。
常见的错误清单也成为检查表,它把程序中可能发生的各种错误进行分类,对每一类错误列出尽可能多的典型错误,然后把它们制成表格,供再审查时使用。
3. 走查:与代码审查基本相同,分为两步,第一步也是把材料分给走查小组的每个成员,让他们认真研究程序,然后再开会。
4. 静态结构分析:可以检查函数的调用关系是否正确;是否存在孤立的函数而没有被调用;编码的规范性;资源是否释放;数据结构是否完整和正确;是否有死代码和死循环;代码本身是否存在明显的效率和性能问题;代码本身方法,类和函数的划分是否清晰,易理解;代码本身是否健壮,是否有完善的异常处理和错误处理。
5. 人工代码审查:由开发者或其他人员手动检查代码,并寻找潜在的问题、错误或不规范之处。
这种方式可以发现一些常规的错误,例如语法错误、代码逻辑错误和代码结构问题。
人工代码审查需要严格遵循代码审查流程和标准,以确保检查的完整性和准确性。
这种方式需要大量的人力和时间,但它可以帮助开发者学习其他人的编程技巧,并发现自己的代码中潜在的问题。
以上是一些常见的检查代码的方法,具体使用哪种方法可以根据项目的实际情况和团队的需求来决定。
代码走查总结报告
]
否
重要
变量值问题:
(1)变量的初始化或缺省值有错误吗?
(2)变量发生上溢或下溢吗?
(3)变量的精度够吗?
否
重要
逻辑判断问题:
(1)由于精度原因导致比较无效吗?
(2)表达式中的优先级有误吗?
(3)逻辑判断结果颠倒吗?
否
重要
循环问题:
(1)循环终止条件不正确吗?
(2)无法正常终止(死循环)吗?
否
重要
Case语句的结尾是否忘了加break?
否
重要
是否忘记写switch的default分支?
'
否
常量
重要性
审查项
结论
是否使用含义直观的常量来表示那些将在程序中多次出现的数字或字符串?
是
|
重要
如果某一常量与其它常量密切相关,是否在定义中包含了这种关系?
是
函数设计
重要性
审查项
结论
:
参数的书写是否完整?
否
重要
是否将malloc/free和new/delete混淆使用?
@
是
重要பைடு நூலகம்
malloc语句是否正确无误?例如字节数是否正确?类型转换是否正确?
是
重要
在创建与释放动态对象数组时,new/delete的语句是否正确无误?
是
其它常见问题
$
重要性
审查项
结论
重要
数据类型问题:
(1)变量的数据类型有错误吗?
(2)存在不同数据类型的赋值吗?
是
头文件中是否只存放“声明”而不存放“定义”
是
程序的版式
代码走查规范
维远泰克代码走查规范文件编号:起草部门:测试组审核人:签发人:批准日期:版本标识:目录1引言...................................................................................................................................... 错误!未定义书签。
1.1目的 .................................................................................................................................... 错误!未定义书签。
1.2说明 .................................................................................................................................... 错误!未定义书签。
2代码走查 (4)2.1检查点 (4)2.2走查流程 (4)2.2.1走查流程图 ......................................................................................................... 错误!未定义书签。
2.2.2流程概述............................................................................................................. 错误!未定义书签。
2.2.3具体流程............................................................................................................. 错误!未定义书签。
代码走查审查规范
代码⾛查审查规范分类重要性检查项备注命名重要命名规则是否与所采⽤的规范保持⼀致?成员变量,⽅法参数等需要使⽤⾸字母⼩写,其余单词⾸字母⼤写的命名⽅式,禁⽌使⽤下划线(_)数字等⽅式命名不要出现局部变量,成员变量⼤写字母开头等问题⼀般是否遵循了最⼩长度最多信息原则?各种命名尽可能短,表意准确,除2代替‘to’,4代替‘for’外,不建议使⽤数字在命名中重要has/can/is前缀的函数是否返回布尔型?成员变量,⽅法参数,局部变量等为布尔型时,如果出现has/can/is开头,则将这些词去掉重要类名是否存在重名问题?⾃⼰实现的类尽量不要和别⼈的类重名,尽管不在同⼀个包下,特别是⼦类和⽗类重名的情况注释重要注释是否较清晰且必要?⽅法JAVADOC注释中需要说明各参数、返回值及异常说明,参数说明需按照参数名称及⽤意对应标注重要复杂的分⽀流程是否已经被注释?⼀般距离较远的}是否已经被注释?重要函数是否已经有⽂档注释?(功能、输⼊、返回及其他可选)⽂件,类(含接⼝,枚举等),成员变量,⽅法前需要有JAVADOC的注释⼀般特殊⽤法是否被注释?声明、空⽩、缩进⼀般每⾏是否只声明了⼀个变量?(特别是那些可能出错的类型)重要变量是否已经在定义的同时初始化?重要类属性是否都执⾏了初始化?⼀般代码段落是否被合适地以空⾏分隔?⼀般是否合理地使⽤了空格使程序更清晰?基本代码格式中的空格符不可缺少,这些空格出现在?,:,+,-,*,/,=,==,>,<,>=,<=,!=,及各种括号附近提⽰代码⾏长度是否在要求之内?每⾏不得超过120个字符重要controller,service, dao 中不要声明有状态的变量。
此变量不能被修改。
如果要进⾏修改,必须通过锁进⾏控制。
⼀般折⾏是否恰当?⼀般集合是否被定义为泛型类型?定义集合时,建议定义其泛型类型,减少类型转换和警告错误语句/功能分布/规模⼀般包含复合语句的{}是否成对出现并符合规范?重要是否给单个的循环、条件语句也加了{}?if,else,else if,while,for,case等代码块必须⽤{}包围⼀般单个变量是否只做单个⽤途?重要单⾏是否只有单个功能?(不要使⽤;进⾏多⾏合并)重要单个函数是否执⾏了单个功能并与其命名相符?⼀般操作符++和— —操作符的应⽤是否符合规范?规模重要单个函数不超过规定⾏数?重要缩进层数是否不超过规定?可靠性(总则/变量和语句)重要是否已经消除了所有警告?开发⼯具的警告要重要常数变量是否声明为final?重要对象使⽤前是否进⾏了检查?重要成员变量,局部变量是否在使⽤前被赋值?对象初始化为null的对象被调⽤前必须被重新赋值,如果赋值语句在try块中,调⽤操作必须在try块中⼀般局部对象变量使⽤后是否被复位为NULL?特别是数组集合 Map重要对数组的访问是否是安全的?(合法的index取值为[0, MAX_SIZE-1])。
软件项目代码走查管理规范
代码走查管理规范修订记录修订类型包含:新增、修改、删除。
目录1 目的 (1)2 适用范围 (1)3 职责划分 (1)4 代码走查分类 (2)5 代码走查流程 (2)5.1 准备阶段 (2)5.2 执行阶段 (2)5.3 修复阶段 (3)5.4 反馈阶段 (4)6 代码走查要求 (4)7 相关文件 (5)1目的明确项目中代码走查的流程和要求,提升代码走查质量,为代码走查工作提供指导依据。
2适用范围技术与研发中心。
3职责划分在代码走查工作中,各角色职责如下:4代码走查分类5代码走查流程5.1 准备阶段(1)技术经理依据代码走查活动要求,规划代码走查执行时间,确定走查方式。
(2)开发人员在代码编写完成后,应先对编写内容进行自查,再将代码提交到开发库中进行保存。
(3)技术经理确定走查代码范围,发送代码走查活动通知。
5.2 执行阶段(1)工具静态检查如果使用工具进行静态代码走查,则按照工具的使用方法,执行静态检查活动,代码走查执行者将工具走查结果记录到《代码质量评价表》中。
使用工具的静态检查是可以实时执行的活动,因此鼓励开发人员在编译个人部分的代码时,尽可能多频次、全覆盖的执行工具静态检查,提升个人编写代码内容的准确性、规范性,最大程度确保合并到主流上的分支代码的优质性。
除此之外,为了增强执行效果,还可以待全部分支代码合并到主流后,以全量代码为对象进行整体性的工具静态检查。
(2)人工代码评审人工代码评审是一种正式的评审活动,通常采用集中会议的方式,以功能模块为单位,通过讨论的方式,对程序代码进行审查,以达到提升代码质量的目的。
如果采用人工代码评审方式,则由技术经理牵头组织审查活动,邀请团队开发人员及其他必要成员组成一个审查小组,进行代码评审会议。
会议中,评审小组成员依据设计说明书、控制流程图、程序文本及有关要求、规范等内容,充分阅读被评审程序代码,并由该程序编写者介绍其代码实现过程、讲解程序逻辑,在此过程中参会人员提出问题、展开讨论、发现错误。
代码走查
代码走查,英文词语叫:Code Review,也叫“代码审查”,它是软件公司的一项传统保留项目。
1.代码走查的形式代码走查的形式有很多种,主要有以下几种形式:●每日走查:只针对每日提交的内容进行评审,走查时间和地点都比较灵活。
●专项走查:针对某个具体问题或者专题进行走查。
评审人需要提前发送评审内容给大家进行预审,然后安排专门的会议室进行评审,时间较长。
●结对互查:提交代码前指定某位同事进行线上评审,评审通过后才能合入代码。
本文要介绍的是每日代码走查,就是大家围在一台开发机周围,逐一轮换讲解所有提交的内容。
就即使是每日代码走查,也被我们团队玩出了花样:●谈心式走查●批判式走查●半蹲式走查●伴侣式走查2.代码走查的好处持续、有效的开展代码走查,将会收获许多收益,具体表现在:●能及时发现代码中的Bug,保证版本质量。
●提升代码的可读性、可维护性,建立团队共同的编码风格。
●有利于知识共享,打破技能壁垒,避免单点故障。
●通过展示自己的优秀代码和设计思路,提升了个人成就感。
●通过讲解自己的代码,对个人沟通能力也是一种提升。
特别是对于平时比较内向或者不太喜欢发言的同学。
●给大家提供了一个每天交流、沟通的平台。
工作一天了,也挺累的了,是时候停下手工的编码工作,一起说说话,交流一下了。
3.代码走查中的“坏味道”虽然代码走查有这么多好处,可在实施的过程中并不会像想象中的那么美好,会遇到各种各样的问题,总结起来的“坏味道”有:●开发的时间本来就不多,再加上代码走查,会打乱开发节奏。
●评审的同事对代码不熟悉,发现不了问题。
●讨论发散或者纠缠在某个具体细节中,导致时间把控不好。
●评审量大。
只能走查部分同事的代码,其他同事的内容没有覆盖。
●提问题的总是那几个人,其他人都是围观群众。
4.如何做有效的代码走查虽然代码走查很多团队都在做,但要想真正做好它并不是件容易的事情。
我们团队经过长期实践,摸索出一些经验和大家分享:4.1代码走查的时间代码走查建议在固定时间举行,当团队养成习惯后,就会很自然成为团队日常工作的一部分。
代码走查标准
一.目录文件组织一.目录文件组织1.1. 所有的文件名符合文件命名规范所有的文件名符合文件命名规范2.2. 文件和模块分组清晰文件和模块分组清晰二.程序结构二.程序结构3.3. 所有的模块(函数和外部接口)定义清晰,模块分解清楚4.4. 结构设计能够满足机能变更,便于重构5.5. 模块中所有的数据结构都定义为局部的,并且通过定义好的函数进行访问6.6. 为外部定义了良好的函数接口,且修改时不影响其他代码模块7.7. 代码体系构架对空间和速度都已经进行考虑三.代码组织三.代码组织8.8. 所有的代码行在80字符以内字符以内9.9. 每个程序文件都小于2000行10.10.每个函数显示不超过100行 11.11. 所有的变量声明每行只声明一个所有的变量声明每行只声明一个12.12. 所有的变量名都小于32字符字符13.13. 所有的函数名都小于64个字符个字符14.14. 每个函数之间都用空行进行分开每个函数之间都用空行进行分开15.15.所有的行每行最多只有一句代码或一个表达式 四.函数四.函数16.16. 函数注释清楚地描述函数和它的功能函数注释清楚地描述函数和它的功能17.17.函数的名字清晰的定义了它的目标以及函数所做的事情 18.18. 函数的参数遵循一个明显的顺序函数的参数遵循一个明显的顺序19.19. 函数由并列关系的语句组成函数由并列关系的语句组成20.20. 函数高内聚,只做一件事情,并做好函数高内聚,只做一件事情,并做好21.21. 所有的参数小于7个,且都被使用个,且都被使用22.22. 函数使用了最少数目的return 语句语句23.23. 函数检查了输入数据的合法性函数检查了输入数据的合法性24.24. 函数异常处理清楚函数异常处理清楚25.25. 函数设计已经考虑了将来的变化函数设计已经考虑了将来的变化五.数据类型与变量五.数据类型与变量26.26. Plugin 中尽量避免全局变量的使用中尽量避免全局变量的使用27.27.每一个变量都在接近使用它的地方才初始化 28.28.变量的命名完全、明确的描述了该变量代表什么 29.29. 同一种类型命名使用统一的前缀同一种类型命名使用统一的前缀30.30. 所有的变量都被使用所有的变量都被使用31.31. 所有的数组访问要考虑越界情况所有的数组访问要考虑越界情况32.32. 变量在使用前进行必要的null 值判断和处理值判断和处理六.条件判断六.条件判断33.33.普通的情况在if 下处理而不是else 34.34. 最常用的情况最先判断最常用的情况最先判断35.35.嵌套层次小于3层 七.循环七.循环36.36. 当有明确的多次循环操作,使用For 循环循环37.37. 当有不明确的多次循环操作,当有不明确的多次循环操作,while while 循环被使用循环被使用38.38.变量定义,数据库读写尽量在循环外进行 39.39.循环嵌套的次数小于3次 八.注释八.注释40.40. 使用统一的注释模版使用统一的注释模版41.41. 每个类,每个函数都要有注释每个类,每个函数都要有注释42.42.注释量不低于20% 43.43. 注释要随着代码改变而进行更新注释要随着代码改变而进行更新九.其他九.其他44.44. 无用的代码和注解已经删除无用的代码和注解已经删除45.45. 页面的布局要符合统一操作说明页面的布局要符合统一操作说明。
后端代码走查
秒赚运营商平台后端代码走查
1.try catch块不作操作,导致日志不记录
使用logmanager在trycatch中记录日志,以便排查问题
2.文件命名辨识度低,不便于定位
编写接口文档时须注意:controller与service命名须保证辨识度,不要频繁出现重合的命名
3.新项目中请不要直接保留旧项目中的代码文件,如有需要,请按需拷贝代码
4.理解业务后进行代码编写,去除多余不必要的代码
4.关于一些规范:
理解业务,在controller中务必作区分;习惯使用region进行业务功能模块的区分;标注编写人,便于沟通
变量名规范;参数类型传递。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
综合征管信息系统代码走查规范文档编号:当前版本: 1.0修改日期:2010年8月18日一、JA V A编程规范 (3)1、变量定义问题 (3)2、变量命名规则 (3)3、变量的声明和初始化(I NITIALIZATION) (3)4、换行(W RAPPING L INES) (4)5、M AP对象使用问题 (4)6、EQUALS方法使用问题 (5)7、IMPORT多余包问题 (5)8、N ULL P OINTER E XCEPTION问题 (6)9、关于对象声明问题 (7)10、注释 (7)11、访问静态变量或方法 (8)12、使用静态变量 (8)13、I F语句 (8)14、J A V A源文件的长度 (8)15、方法的长度 (8)二、项目开发规范 (8)1、J A V A文件命名规则 (8)2、JSP代码规范 (9)3、CTRL代码规范 (14)4、E VENT &VO&BO (17)5、P ROXY代码规范 (18)6、日志 (20)7、异常处理 (21)8、缓存 (22)一、J A V A编程规范1、变量定义问题如果定义的变量只是在某个局部内使用,就在局部内定义,不要在局部外定义。
问题代码:// 返回的明细信息放到vo里传到前台MAmkdjVO mamkdjVO = new MAmkdjVO();//如果找到详细信息的记录,就展现if (responseEvent.getFindNoRecordFlag() == "1") {mamkdjVO = responseEvent.getDetailVO();更正代码:(mamkdjVO只是在if条件内使用,只需要自if内定义即可) //如果找到详细信息的记录,就展现if (responseEvent.getFindNoRecordFlag() == "1") {// 返回的明细信息放到vo里传到前台MAmkdjVO mamkdjVO = responseEvent.getDetailVO();2、变量命名规则1、禁用差别不大(只有一个或少数几个字母不同)的名称例如:hiThere和hiThre2、在名称中禁用下划线字符('_')3、变量的声明和初始化(Initialization)1、避免声明的局部变量覆盖上一级声明的变量2、尽量在声明局部变量的同时初始化。
4、换行(Wrapping Lines)当一个表达式无法容纳在一行内时,可以依据如下一般规则断开之:- 在一个逗号后面断开- 在一个操作符前面断开- 宁可选择较高级别(higher-level)的断开,而非较低级别(lower-level)的断开- 新的一行应该与上一行同一级别表达式的开头处对齐- 如果以上规则导致你的代码混乱或者使你的代码都堆挤在右边,那就代之以缩进8个空格。
5、Map对象使用问题Map对象遍历通常使用主键值循环遍历,一般不使用值对象循环遍历。
问题代码://用Iterator 实现遍历Iterator keyValuePairs = conditionMap.entrySet().iterator();//开始遍历条件mapwhile (keyValuePairs.hasNext()) {Map.Entry conditionEntry = (Map.Entry) keyValuePairs.next();更正代码://用Iterator 实现遍历Iterator keySet = conditionMap.keySet().iterator();//开始遍历条件mapwhile (keySet.hasNext()) {String key = (String) keySet.next();//可以直接造型成实际对象Object keyValue = conditionMap.get(key);6、equals方法使用问题使用equals方法进行比较的时候,把不为空的对象放在前面,避免NullPointerException异常。
问题代码://数据库中存在记录 1代表存在记录 0代表不存在if (responseEvent.getFindNoRecordFlag().equals("1")) {更正代码://数据库中存在记录 1代表存在记录 0代表不存在if ("1".equals(responseEvent.getFindNoRecordFlag())) {7、import多余包问题每个java代码,提交前应该检查是否import没有使用的类,可以使用CTRL+SHIFT+O快捷键整理。
问题代码:8、NullPointerException问题所有的公共方法必须考虑null对象参数,根据实际需要,要对传入的参数作非空校验。
问题代码:public static void vo2bo(SwordBaseValueObject swordVO,CTPBaseBusinessObject ctpBO) {// 获得VO、BO的方法名Method[] boSetMethods = ctpBO.getClass().getMethods();Method[] voMethods = swordVO.getClass().getMethods();更正代码:public static void vo2bo(SwordBaseValueObject swordVO, CTPBaseBusinessObject ctpBO) {//空对象判断,否则就有可能出现NullPointerExceptionIf(swordVO == null || ctpBO == null){return;}// 获得VO、BO的方法名Method[] boSetMethods = ctpBO.getClass().getMethods();Method[] voMethods = swordVO.getClass().getMethods();9、关于对象声明问题声明的对象如果不使用应该去掉10、注释(1)所有的类都要有注释模板/***<p>Title:</p>*<p>Description:</p>*<p>Copyright:Copyright(c)2008-2012</p>*<p>Company:中国软件与技术服务股份有限公司</p>*<p>@author${user}</p>* <p>@version 1.0</p>*/(2)类中方法要有注释模板/***<p>Description:</p>*<p>@author${user}</p>*${tags}*/(3)方法内必要的注释// 注释(关键步骤的说明)11、访问静态变量或方法避免用一个对象访问一个类的静态变量或方法,而应该用类名代替。
12、使用静态变量程序中应尽可能少使用数字(或字符),尽可能定义静态变量来说明该数字(或字符)的含义。
程序中需要赋值或比较时,使用前面定义的静态变量13、If语句if语句总是用“{”和“}”括起来,即使语句体中只包含一条语句。
14、Java源文件的长度在一个java类中代码行数尽量不要超过1000行15、方法的长度方法中代码行数尽量不要超过200行二、项目内部开发规范1、Java文件命名规则(1)、JA V A文件命名规则(2)、其他相关文件命名规则对于名字较长的用例,拼音简写可以采用抽取适当关键词语的方法,以减少JA V A 文件名的长度。
所属大类标识有以下几种: 举例:2、 JSP代码规范(4) Jsp 文件命名规则a 、jsp 程序主页面程序文件命名规则b、其他相关页面文件命名规则c、jsp中为实现具体的业务逻辑和校验而自己定义的Javascript方法,命名不要用太过简单的名字如:save,submit,check…..,因为页面引入的JS库或者其他人的页面可能包含了成千上万了Funtion,很有可能和已有的方法重名,且出了问题不易查找。
建议方法1.可以用用例的缩写+$+方法名,如:纳税人登记的保存方法,nsrdj$save(),仅供参考。
2.json形式的命名空间。
如:<script type=”text/javascript”>Var nsrdj = {};Nsrdj.save = function(){// code;};Nsrdj.query = function(){// code;};// 调用Nsrdj.save(),Nsrdj.query()</script>仅供参考!(5)头文件的引入JSP文件中,对于头文件应该在html标签之前引入问题代码:(6)尽量不要自己定义css样式,用架构提供的样式问题代码:更正后代码:删除自定义的样式,在元素中用class="tdsectionbar"来赋值,以保持界风格的统一(7)特定隐藏域一般将隐藏域,如:viewXML和selectXml,添加到body标签之后。
问题代码:(8)JSP中不允许使用java代码问题代码:(9)避免重复加载JS文件在加载js脚本文件时,先确定header.jsp是否引入,如果引入,不需要重新加载。
clsDynamicSelect$init("selectXml");代码下拉表用IE缓存方式去加载sysCtrl.initViewPage(); 完成功能?(10)请求提交方式Jsp页面中尽量不要用form提交,用ajax提交,保持页面不要刷新,以达到更好用户感受。
如果必须用form提交,建议使用隐藏iframe帧的形式提交,以达到不刷新的目的。
(11)页面代码转名称项目组提供了统一的页面代码转名称组件,不需要使用c:if标签硬编码问题代码:修改后代码:加载页面,在初始化方法中加入: clsDynamicSelect$codeToName(["khlxDm","khdlDm","ssgwDm","khmkDm"]);(12)中文乱码问题在Jsp中,如果以get方式提交,在url拼接参数时,最好用URIENCODECOMPONENT编码,以避免乱码的出现。
(13)下拉列表Jsp页面中尽量不要使用select下拉列表,而使用框架提供的input下拉列表。