首页 > 其他 > 详细

实验四 代码审查

时间:2020-05-14 14:34:53      阅读:37      评论:0      收藏:0      [点我收藏+]

 

我们是14 / CIA&FBI 审查 15/写的都队  https://github.com/programmingsky/Coop_Program

 一、实验目的

1) 了解代码审查的含义;

2) 掌握相关编程规范检查工具的安装与使用;

二、实验内容及要求

Code Review中文应该译作“代码审查”或是“代码评审”或“代码复查”,是指通过阅读代码来检查源代码与编码标准的符合性以及代码质量的活动。Code Review主要用来在软件工程过程中改进代码质量,通过代码评审可以达到如下目的:

●在项目早期就能够发现代码中的BUG

●帮助初级开发人员学习高级开发人员的经验,达到知识共享

●避免开发人员犯一些很常见,很普通的错误

●保证项目组人员的良好沟通

●项目或产品的代码更容易维护

     代码评审主要内容是编程规范,重构方法,架构设计,性能安全,日志,可读性,扩展性等问题。通过代码评审可查找和修复引入到开发阶段的应用程序的错误,提高软件的整体素质和开发者的技能。代码评审的作用和意义已在很多技术团队内达成共识,可是很多时候并未被有效执行,甚至被认为是一项费时费力的工作。借助一些工具可以更容易,更有效率地来进行Code Review。

1、以小组形式,针对前面“实验一”中所完成的代码,进行代码评审(走查),重点检查以下情况。你也可有查询相关材料,建立更细化的检查清单(check list)

- 程序是否能正常工作,代码是否实现预期的功能,逻辑是否正确。

- 代码是否遵循的编程规范

- 代码是否尽可能的模块化

- 所有的数据输入是否都进行了检查

- 是否有注释,并且描述了代码的意图

- 代码的可理解性和可测试性

2、按“实验二”的分组方式,两人一组,随机分配另一组的代码作为本组评审和分析的对象

一些编码规范的检查工具如下,也可自行查找工具使用。

java语言      

- 采用使用eclipse Checkstyle插件 

- CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具。它能够自动化代码规范检查过程,从而使得开发人员从这项重要但枯燥的任务中解脱出来。它可以根据设置好的编码规则来检查代码。比如符合规范的变量命名,方法体的最大行数,重复代码检查等等。

如果你使用idea ,可以使用Alibaba Java Code Guidelines插件,参考链接如下:https://github.com/alibaba/p3c/wiki/IDEA%E6%8F%92%E4%BB%B6%E4%BD%BF%E7%94%A8%E6%96%87%E6%A1%A3

技术分享图片

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)配置代码审查工具。要求采用屏幕截图的方式配置的过程;

我的n+1组是用c写的代码。因此我安装的工具是。在初步百度以后,有两种主要办法,下载脚本配置到python的库中,或者直接用python代码pip install下载包。我选择了下载包,比较简单方便。我安装的是python3.7版本,用anaconda来管理python环境。之后遇到的问题就是因为anaconda……

因为3.7版本的安装第一个选项是默认c盘,为了省事我就没有自己选择安装位置。anaconda选择安装在e盘。之后我都是通过anaconda的prompt配置环境(目前是base)来操作py相关的任务。这时的默认环境是3.7,为了实验下载cpplint包,如下图所示

技术分享图片

 

 下完后,我就根据cpplint相关格式操作,一直都是格式错误,或找不到cpplint.py。在百度过后,我发现要通过cpplint.py这个脚本来操作,并且路径要正确(如果当前路径不在python下载库Lib\site-packages的话)。但是我在库文件夹中没找到,网上都说是下到这个文件夹,怎么会找不到呢。我直接搜索整个python37文件夹,都没有!但是通过pip list,可以看到,确实下载了cpplint,奇怪的是使用pip show cpplint却显示找不到。

技术分享图片技术分享图片

 

 

 我想可能是3.7的问题,又下载安装了2.7,结果还是一样。在经过很久很久很久很久的百度后,终于知道了,我用的是anaconda配置的的环境,跟我原本安装的2.7和3.7版本应该不属于同一环境下。这时候我还不知道anaconda可以配置多个环境。在配置了多个环境后用2.7下载cpplint,使用pip show找终于找到了cpplint.py!。

      

(2)使用工具对原始代码进行评审和分析,记录结果,期间不要有任何修改;  

 先通过-help或者cpplint.py查找格式和介绍。再与网络搜索结果对照理解使用。

Syntax: cpplint.py [--verbose=#] [--output=emacs|eclipse|vs7|junit]
                   [--filter=-x,+y,...]
                   [--counting=total|toplevel|detailed] [--root=subdir]
                   [--repository=path]
                   [--linelength=digits] [--headers=x,y,...]
                   [--recursive]
                   [--exclude=path]
                   [--extensions=hpp,cpp,...]
                   [--quiet]
                   [--version]
        <file> [file] ...

 

技术分享图片

15组用的是php格式文件保存的c代码,我就想着能不能直接审查php文件,文档给出的没有,我就直接复制粘贴到cpp文件。

 

verbose=#
      Specify a number 0-5 to restrict errors to certain verbosity levels.
      Errors with lower verbosity levels have lower confidence and are more
      likely to be false positives.

 根据描述,我决定所有问题都使用4以上的等级来审查,据网上说审查的几个等级都不怎么靠谱,所以找出最可能出错的地方比较有效率,也更好的能提出值得修改的issue我决不是偷懒因为<=3全都是关于空格的可能建议(verbose=0输出了上百个,参数我还有点看不懂),这里的输出格式vs7,和默认输出没什么不同。

技术分享图片

 

 

 技术分享图片

 

 技术分享图片

 

filter=-x,+y,...
      Specify a comma-separated list of category-filters to apply: only
      error messages whose category names pass the filters will be printed.
      (Category names are printed with the message and look like
      "[whitespace/indent]".)  Filters are evaluated left to right.
      "-FOO" and "FOO" means "do not print categories that start with FOO".
      "+FOO" means "do print categories that start with FOO".

      Examples: --filter=-whitespace,+whitespace/braces
                --filter=whitespace,runtime/printf,+runtime/printf_format
                --filter=-,+build/include_what_you_use

 关于--filter输出类型,cpplint.py的介绍里有几个参数介绍和举例,但是我全都加上为+,输出总是少于不加,所以filter默认应该是全部输出。而且下面的函数和构造类型太多了,找不到具体的参数列表,就不添加--filter=了。

########################################

‘build/class‘,
    ‘build/c++11‘,
    ‘build/c++14‘,
    ‘build/c++tr1‘,
    ‘build/deprecated‘,
    ‘build/endif_comment‘,
    ‘build/explicit_make_pair‘,
    ‘build/forward_decl‘,
    ‘build/header_guard‘,
    ‘build/include‘,
    ‘build/include_subdir‘,
    ‘build/include_alpha‘,
    ‘build/include_order‘,
    ‘build/include_what_you_use‘,
    ‘build/namespaces_literals‘,
    ‘build/namespaces‘,
    ‘build/printf_format‘,
    ‘build/storage_class‘,
    ‘legal/copyright‘,
    ‘readability/alt_tokens‘,
    ‘readability/braces‘,
    ‘readability/casting‘,
    ‘readability/check‘,
    ‘readability/constructors‘,
    ‘readability/fn_size‘,
    ‘readability/inheritance‘,
    ‘readability/multiline_comment‘,
    ‘readability/multiline_string‘,
    ‘readability/namespace‘,
    ‘readability/nolint‘,
    ‘readability/nul‘,
    ‘readability/strings‘,
    ‘readability/todo‘,
    ‘readability/utf8‘,
    ‘runtime/arrays‘,
    ‘runtime/casting‘,
    ‘runtime/explicit‘,
    ‘runtime/int‘,
    ‘runtime/init‘,
    ‘runtime/invalid_increment‘,
    ‘runtime/member_string_references‘,
    ‘runtime/memset‘,
    ‘runtime/indentation_namespace‘,
    ‘runtime/operator‘,
    ‘runtime/printf‘,
    ‘runtime/printf_format‘,
    ‘runtime/references‘,
    ‘runtime/string‘,
    ‘runtime/threadsafe_fn‘,
    ‘runtime/vlog‘,
    ‘whitespace/blank_line‘,
    ‘whitespace/braces‘,
    ‘whitespace/comma‘,
    ‘whitespace/comments‘,
    ‘whitespace/empty_conditional_body‘,
    ‘whitespace/empty_if_body‘,
    ‘whitespace/empty_loop_body‘,
    ‘whitespace/end_of_line‘,
    ‘whitespace/ending_newline‘,
    ‘whitespace/forcolon‘,
    ‘whitespace/indent‘,
    ‘whitespace/line_length‘,
    ‘whitespace/newline‘,
    ‘whitespace/operators‘,
    ‘whitespace/parens‘,
    ‘whitespace/semicolon‘,
    ‘whitespace/tab‘,
    ‘whitespace/todo‘,

#############################让我找到了,但是也太多了,还是不添加了,默认全部输出,反正也也不知道这些参数都是什么意思

 输出就直接默认emacs。

统计使用--counting=detailed,可以查看下各个类型的错误有多少,方便代码原作者修改。

每行最长长度采用默认80字符。

目标审查文件时cpp格式,就不再添加extensions选项。

 

 repository=path
      The top level directory of the repository, used to derive the header
      guard CPP variable. By default, this is determined by searching for a
      path that contains .git, .hg, or .svn. When this flag is specified, the
      given path is used instead. This option allows the header guard CPP
      variable to remain consistent even if members of a team have different
      repository root directories (such as when checking out a subdirectory
      with SVN). In addition, users of non-mainstream version control systems
      can use this flag to ensure readable header guard CPP variables.

应该是查找路径的,要审查的只有一个cpp,所用的头文件.h都在里面,用不上。

--quiet、--verision、--root、--headers、--excloude等全部省略。

结果如下图所示:

 

技术分享图片技术分享图片

 

 

 

(3)对工具执行结果进行人工分析,结合检查清单和人工走查的出代码修改建议;

根据以上结果可以看到,绝大部分的格式错误都在空格缩进上,这也是我们学生常常忽略的地方。

 

=前后都要有空格。

 技术分享图片

 

 

if、for和while要与(之间有空格。

技术分享图片

 

每一行结束不能有空格。

技术分享图片

 

 

注释//与文本之间要有空格。

技术分享图片

 

 

还有一个错误legal/copyright是目前我们还涉及不到的版权问题。

E:\VsCode\workplace\lifegame.cpp:0:  No copyright message found.  You should have a line: "Copyright [year] <Copyright Owner>"  [legal/copyright] [5]

 

左大括号 { 应该在每一行的最后。

技术分享图片

 

 

头文件引用错误,应使用尖括号。

技术分享图片

 

 

  (4)通过github issues向项目维护者提交问题(issue),注意一个issue 只报告一个问题,多个问题需放在多个issue中,以便跟踪。

 每个错误,提交一个issue,并贴上错误提示。没有给出哪一行,行太多了,一个个数太费事。

技术分享图片

 

 技术分享图片

 

 

 

(5)记录总结实验过程中遇到的问题和解决过程

 实验中,遇到了很多问题。比如(1)中因为不熟悉anaconda的python多个环境的管理,就导致我下载了cpplint却找不到,ptython37对cpplint还不太兼容。网上说1.44以后版本的cpplint支持python37,但在实际应用中还是会出错,并且按照网上对cpplint.py的修改还是不行(可能是我自己的问题)。为了省事还是直接用python比较好,以及对python的pip等常用的基本命令不熟悉,也是我浪费时间的原因。因为英文较差,对cpplint.py阅读乏力,经常要靠有道帮忙。有些格式属性的参数理解不太懂,也就用。要学会找到文档阅读文档,才能更好的理解参数意义。

 

 参考

Anaconda配置多个Python环境 --https://www.jianshu.com/p/7b4c895a8ce5

cpplint使用详解 --https://www.cnblogs.com/GODYCA/archive/2013/05/31/3109951.html

# 代码风格审查工具Cpplint --https://www.jianshu.com/p/f15106e8a3bf

怎样找到已安装Python包的位置 --https://www.cnblogs.com/icemaster/p/10593805.html

实验四 代码审查

原文:https://www.cnblogs.com/ShiNiba/p/12883602.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!