代码走查规范

合集下载

代码走查

代码走查

代码走查(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

C__代码走查CheckList

代码走查
一.代码走查的目的
1.保证代码符合编码规范
2.保证代码符合设计
3.发现bug
4.保证代码单元测试充分
5.促进开发人员之间的交流,为代码的优秀程度的提高和开发人员编码技能的提高提供契机。

二.过程
每次迭代都要对修改过和新编的代码进行走查,走查的过程如下图:
三.Checklist
说明:本checklist用于走查人员走查代码。

开发人员用于自我检查的checklist可以参照此checklist,依自身实际情况制定。

说明:本checklist应随着组织开发过程中出现的实际情况,对检查项具体内容进行增、删、改,以使得此checklist更具效率,但要注意保持检查项数目的简洁。

类名:走查的类的名字。

代码检查与代码走查

代码检查与代码走查

代码检查与代码⾛查
代码检查与代码⾛查是基于⼈⼯测试的⽩盒测试⽅法。

⽬的:找出错误,⽽不是改正错误,是测试⽽不是调试。

优点:能够精确地定位的错误,降低调试成本。

可以成批的发现错误,⽽计算机测试往往是逐个发现错误并改正。

注意:代码检查、代码⾛查、基于计算机的测试三者是互补的
代码检查:以组为单位阅读代码,是⼀系列规程和错误检查技术的集合。

代码检查⼩组由⼩组主导者、代码编写者、设计⼈员、测试专家组成。

代码编写者组逐条语句讲解程序的逻辑结构,⼩组参考代码检查错误列表分析程序。

代码检查错误列表有:数据引⽤错误、数据声明错误、运算错误、⽐较错误、控制流错误、接⼝错误、输⼊/输出错误、其他错误。

代码⾛查的概念和代码检查的概念相似,但是代码⾛查⼩组中指定的测试⼈员会携带书⾯的测试⽤例来参加会议。

这些测试⽤例必须是结果简单数量少,在代码⾛查过程中,这是测试⽤例并不起到关键性作⽤,测试⽤例在⼩组成员脑袋中推演的过程,很多问题是在向程序员提问的过程中发现的,⽽不是有测试⽤例本⾝发现的。

桌⾯检查是由单⼈进⾏的代码检查或代码⾛查,效率低,但是⽐没有检查好。

检查代码的方法

检查代码的方法

检查代码的方法全文共四篇示例,供读者参考第一篇示例:在软件开发过程中,代码检查是非常重要的环节。

它可以帮助开发人员发现潜在的bug和错误,并且提升代码质量。

本文将介绍一些常用的检查代码的方法,帮助开发人员更好地进行代码检查。

一、代码审查代码审查是最常用的一种检查代码的方法。

一般情况下,代码审查包括两种形式:静态代码审查和动态代码审查。

静态代码审查是通过检查源代码或编译后的代码进行审查。

它可以发现一些潜在的bug和编码风格问题。

常用的静态代码审查工具包括Lint、PMD、Checkstyle等。

动态代码审查是通过运行程序来检查代码的质量。

可以使用断点调试工具来检查代码的执行过程,查看变量的值是否正确、程序的执行路径是否正确等。

二、单元测试单元测试是一种非常有效的代码检查方法。

通过编写单元测试用例,可以测试代码的各个功能模块是否正常工作。

如果单元测试用例都通过了,那么说明代码的质量较高。

在编写单元测试用例时,需要考虑尽可能多的测试场景,包括正常情况和异常情况下的处理逻辑。

可以使用Mock框架来模拟一些外部依赖,从而使测试更加容易。

代码走查是一种通过团队协作来检查代码的方法。

一般在代码走查会有一个专门的评审小组,由团队成员轮流担任Leader,负责主持代码走查的过程。

在代码走查中,团队成员可以提出自己的看法和建议,帮助发现代码中的问题。

这种方法可以增强团队之间的沟通和合作,提升整个团队的代码质量。

四、代码规范检查代码规范检查是一种通过检查代码是否符合编码规范来评估代码质量的方法。

编码规范是一种统一的编码风格,可以帮助开发人员编写易读、易维护的代码。

在进行代码规范检查时,可以使用代码检查工具来自动检查代码中的规范问题,如缩进、命名规范、文档注释等。

这种方法可以节省开发人员的时间,同时提高代码的一致性和可读性。

五、自动化测试自动化测试是一种自动化进行测试的方法。

通过编写自动化测试脚本,可以帮助开发人员快速地测试代码的各个功能,提高测试效率和代码质量。

软件测试(代码走查、检查与审查)

软件测试(代码走查、检查与审查)
4、传递给被调用模块的实参属性是否与其形参属性匹配?
5、传递给被调用模块的实参量纲是否与其形参量纲匹配?
6、调用内部函数的实参的数量、属性、顺序是否正确?
7、是否引用了与当前入口点无关的形参?
8、是否改变了某个原来仅为输入值的形参?
9、全局变量的定义在模块间是否一致?
10、常数是否以实参形式传递过?
1)程序是够易于理解?
2)高层次的设计是够可见且合理?
3)低层次的设计是否可见且合理?
4)修改此程序对评审者而言是否容易?
5)评审者是否会以编写出该程序而骄傲?
还要要求评审人给出总的评价和建议的改进意见。
评审结束后,参与者会收到自己的那两个程序的匿名评价爱表,此外还会收到一个带统计的总结,说明在所有的程序中其程序的整体和具体得分情况,以及他对其他程序的评价爱与其他评审人同意程序打分的比较分析情况。
2、桌面检查胜过没有极限嘻哈,但其效果远远逊色于代码检查和代码走查。
同行评审
(peerrating)
1、同行评审的概念
同行评分是一种依据程序整体质量,可维护性、可扩展性、易用性和清晰性对匿名的程序进行技术评价的技术。改技术的目的是为程序员提供自我评价的手段。
2、实施过程:
选出一名程序员来担任这个评分过程的管理员,管理员又会挑选出大约2~20名参与者,保持匿名,这些参与者否应具有相似的背景要求每名参与者都挑选出两个由自己编写的程序以供评审。其中的一个程序应是参与者自认为能代表其自身能力的最好的作品,而了另一个则是参与者自认为质量较差的作品。
3、代码走查的意义:
提出的建议应针对程序本身,而不是针对程序员。换句话说,软件中存在的错误不应该被视为编写程序人员自身的弱点。相反,这些错误应被看作是伴随着软件的艰难性所固有的。

【软件工程】【CMMI】代码走查单

【软件工程】【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是否某个⼦类仅使⽤了⽗类的部分属性或⽅法?。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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下拉列表。

相关文档
最新文档