实验四 代码评审
实验四 代码评审
一、实验目的
1) 了解代码审查的含义;
2) 掌握相关编程规范检查工具的安装与使用;
二、实验内容及要求
Code Review中文应该译作“代码审查”或是“代码评审”或“代码复查”,是指通过阅读代码来检查源代码与编码标准的符合性以及代码质量的活动。Code Review主要用来在软件工程过程中改进代码质量,通过代码评审可以达到如下目的:
●在项目早期就能够发现代码中的BUG
●帮助初级开发人员学习高级开发人员的经验,达到知识共享
●避免开发人员犯一些很常见,很普通的错误
●保证项目组人员的良好沟通
●项目或产品的代码更容易维护
代码评审主要内容是编程规范,重构方法,架构设计,性能安全,日志,可读性,扩展性等问题。通过代码评审可查找和修复引入到开发阶段的应用程序的错误,提高软件的整体素质和开发者的技能。代码评审的作用和意义已在很多技术团队内达成共识,可是很多时候并未被有效执行,甚至被认为是一项费时费力的工作。借助一些工具可以更容易,更有效率地来进行Code Review。
1、以小组形式,针对前面“实验一”中所完成的代码,进行代码评审(走查),重点检查以下情况。你也可有查询相关材料,建立更细化的检查清单(check list)
- 程序是否能正常工作,代码是否实现预期的功能,逻辑是否正确。
- 代码是否遵循的编程规范
- 代码是否尽可能的模块化
- 所有的数据输入是否都进行了检查
- 是否有注释,并且描述了代码的意图
- 代码的可理解性和可测试性
2、按“实验二”的分组方式,两人一组,随机分配另一组的代码作为本组评审和分析的对象
一些编码规范的检查工具如下,也可自行查找工具使用。
java语言
- 采用使用eclipse Checkstyle插件
- CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具。它能够自动化代码规范检查过程,从而使得开发人员从这项重要但枯燥的任务中解脱出来。它可以根据设置好的编码规则来检查代码。比如符合规范的变量命名,方法体的最大行数,重复代码检查等等。
C++语言
- 可使用Google代码规范工具Cpplint。
- Cpplint是一个python脚本,Google使用它作为自己的C++代码规范检查工具,VSCcode可配置Cpplint对C++代码进行规范检查。
python
- 可采用pylint
- Pylint 是一个 Python 代码分析工具,它分析 Python 代码中的错误,查找不符合代码风格标准(Pylint 默认使用的代码风格是 PEP 8,具体信息,请参阅参考资料)和有潜在问题的代码。目前在 eclipse 的 pydev 插件中也集成了 Pylint,VSCcode可安装pylint插件
当发现了项目存在的问题后,可通过Bug跟踪系统向项目维护者反馈问题(issue),管理Issue的系统称为BTS(Bug Tracking System,Bug跟踪系统)。当今具有代表性的BTS有Redmine、Trac、BugZilla等。GitHub自身也加入了BTS的功能。在GitHub上,可以将它作为软件开发者之间的交流工具。通过github的issues功能开发者可以便捷的发现软件的BUG并报告,想向项目所有人询问或用来追踪各种想法探讨准备实施的任务。
三、实验过程
1、检查评审小组项目
(1)检查并克隆项目:
被评审程序github地址:https://github.com/Wjinfiny/daimaqiaobu
👉 评审代码小组的仓库:
👉 克隆结果
(2)运行程序
在进行代码评审之前,先运行第三小组的程序,检查程序能否正常运行;
2、配置代码的审查工具
本次实验所审查的小组为第三小组,克隆需要审查的项目,经判断,该项目是由C++语言完成的,可以使用Google代码规范工具Cpplint进行代码审查;本次实验我使用两种方式对第三组代码进行审查;
(一)运行命令行检测
(1)下载配置cpplint插件;
(2)下载python并配置环境
进入高级系统设置,配置环境变量;
在cmd命令行中输入python,出现如下内容则表示配置成功;为了防止版本出现问题,我下载了几个版本的python供使用;
(3)对代码进行评审
在命令行输入 D:\张静下载的软件\cpplint\cpplint.py D:\daimaqiaobu\Wjinfiny\daimaqiaobudui\sizeyunsuan.cpp,按回车键继续,此时会跳出弹框让你选择运行的程序(!!注意这里一定要选择python)选择后就会出现评审代码的分析结果;(图没有贴完,一共有174个 error )
(二)集成到VS中使用
在vs中使用的配置比较方便,支持错误双击跳转;
(1)下载安装python软件
在第一个方法中已经配置成功;
(2)配置VS
打开VS,在工具栏中选择外部工具添加cpplint工具;
配置成功后,在VS主页面的工具栏中可以看到cpplint工具,点击,VS将自动弹出检测代码框;
(3)对代码进行评审
3、人工分析及修改建议
(一)人工分析
(1)缺少空格
👉 Missing space before (in if( /(in while( 在if与(间/while与(间缺少空格
👉 Missing space around </=/== 在</=/==周围缺少空格
👉 Missing space after ,/; 在逗号后/分号后缺少空格
(2)else处的错误
👉 Else clause should never be on same line as else else子句不应与else在同一行
👉 If an else has a brace on one side,it should have it on both 如果一个else一边有括号,另一边也要有
👉 An else should appear on the same line as the preceding } 一个else应该出现在与前面 }相同的行上
(3)空格的错误
👉 Weird number of spaces at line-start .Are you using a 2-space indent 行首的空格数很奇怪,你是否使用了2位缩进
👉 Line ends in whitspace. Consider deleting these extra spaces 行尾为空格,考虑删除这些多余的空格
👉 Tab found;better to use spaces 发现tab键,最好使用空格键
👉 At least two spaces is best between code and comments 代码和注释之间最好至少有两个空格
👉 Should have a space between // and comment 应该在//和注释之间有一个空格
(二)修改建议
(1)关于空格的建议
👉 函数名之后不要留空格,紧跟左括号‘ (’,以与关键字区别;
👉 象 if、 for、 **while **等关键字之后应留一个空格再跟左括号‘ (’,以突出关键字;
👉 ‘,’之后要留空格。在for语句中的‘;’其后要留空格,如 for (i=0; i<5; i++);
👉 对于表达式比较长的 **for **语句和 **if **语句,为了紧凑起见可以适当地去掉一些空格;
👉 赋值操作符、比较操作符、算术操作符、逻辑操作符、位域操作符,如“ =”、“ +=” “>=”、“ <=”、“ +”、“ *”、“ %”、“ &&”、“ <<”、 “ ^”等二元操作符的前后应当加空格;
👉 一元操作符如“ !”、“ ~”、“ ++”、“ --”、“ &”(地址运算符)等前后不加空格;
(2)关于代码行格式的建议
👉 一行代码只做一件事情。
👉 长表达式要在低优先级操作符处拆分成新行,操作符放在新行之首 (以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐,语句可读。
4、提交issues
通过github issues向项目维护者提交问题(issue),注意一个issue 只报告一个问题,多个问题需放在多个issue中,以便跟踪;
5、实验中遇到的问题及解决
(1)在配置python的时候,由于版本问题,一直没办法正常使用cpplint,我下载了很多版本的python,最后才发现2.7是可以正常使用的;cpplint是一个使用python2.X版本写的脚本,所以执行的时候只能在安装python2.X版本上面,建议安装python2.7,如果有喜欢3.X版本的爱好者,也可以尝试修改脚本中的部分语法以让它支持3.X,具体修改方法可以在网上查找;
(2)在安装并配置好python后,我在cmd命令行中输入python想检测是否配置成功,但命令行不显示内容,还总是自动打开软件商城 ,解决方法如下;
(3)在命令行进行代码审查时,输入审查的文件路径,按回车键出现app的选择,我一开始一直选择pycharm,弹出pycharm 的主页面,但是却一直无法进行审查;最后发现必须要选择 python !!
(4)还有一些细碎的小问题,在此不赘述;
四、实验小结
1、本次实验针对代码规范进行了代码的评审工作,在实验二,我使用c语言完成了一个小程序,在编写代码的过程中,我上网查询了很多关于c语言规范的规定,而在本次实验中,由于我所评审的代码使用c++写的,所以我又查询了很多关于C++代码规范的规定,其实这两种语言的规范规则有很多互通的地方,也更深刻理解了代码规范的意义;
2、本次实验我使用cpplint插件对c++代码进行评审,cpplint是Google开发的一个C++代码风格检查工具,cpplint是一个使用python2.X版本写的脚本,所以执行的时候只能在安装python2.X版本上面,因为事先不了解这个,所以在配置环境的时候花费了很多时间;
3、汇总代码错误的时候,才能真正感受到代码规范的重要,一个微不足道的点,都会产生错误,仅仅是几百行的小程序,都有那么多错误(有很多重复的),在编写程序的过程中,一定要时刻注意代码规范的问题,不能只在意代码的性能。