• 个人作业Week2-代码复审


    复审项目

    15061122
    https://github.com/Donemeb/SudukuProject


    代码复审Check List

    1. 概要部分

    • 代码能符合需求和规格说明么?
      基本的需求(生成和求解数独)都能满足,也符合规格说明;对于非法参数,也能输出错误提示。
    • 代码设计是否有周全的考虑?
      对于sudoku.exe -c N的命令,没有检测N的最大范围,而需求中已规定1<=N<=1000000。由于使用的strtoInt()方法,参数若为2147483648,就会转化成负数,不符合期望。
    • 代码可读性如何?
      总体来说不错,详见下面第6点。
    • 代码容易维护么?
      比较容易。
    • 代码的每一行都执行并检查过了吗?
      根据她的博客来看,功能函数部分是达到了100%覆盖的。

    2. 设计规范部分

    • 设计是否遵从已知的设计模式或项目中常用的模式?
      由于一个类解决了所有问题,所以似乎没看出有什么模式。
    • 有没有硬编码或字符串/数字等存在?
      有。
    • 代码有没有依赖于某一平台,是否会影响将来的移植(如Win32到Win64)?
      不依赖。
    • 开发者新写的代码能否用已有的Library/SDK/Framework中的功能实现?在本项目中是否存在类似的功能可以调用而不用全部重新实现?
      重新实现了交换数组元素的swap(但这里我也重新实现了,因为发现比标准库的更快)
    • 有没有无用的代码可以清除?(很多人想保留尽可能多的代码,因为以后可能会用上,这样导致程序文件中有很多注释掉的代码,这些代码都可以删除,因为源代码控制已经保存了原来的老代码。)
      有,上面已经说过。

    3. 代码规范部分

    • 修改的部分符合代码标准和风格么(详细条文略)?
      命名、断行的风格始终如一。

    4. 具体代码部分

    • 有没有对错误进行处理?对于调用的外部函数,是否检查了返回值或处理了异常?
      有对错误进行处理,调用外部函数有返回值检查。
    • 参数传递有无错误,字符串的长度是字节的长度还是字符(可能是单/双字节)的长度,是以0开始计数还是以1开始计数?
      无错误,字节的长度,从0开始计数。
    • 边界条件是如何处理的?Switch语句的Default是如何处理的?循环有没有可能出现死循环?
      for边界条件处理正确,没有switch语句,不会死循环。
    • 有没有使用断言(Assert)来保证我们认为不变的条件真的满足?
      没有。
    • 对资源的利用,是在哪里申请,在哪里释放的?有没有可能导致资源泄露(内存、文件、各种GUI资源、数据库访问的连接,等等)?有没有可能优化?
      文件打开得过早,可以在数据都计算完毕后在输出前才打开。
    • 数据结构中是否有无用的元素?
      没有。

    5. 效能

    • 代码的效能(Performance)如何?最坏的情况是怎样的?
      效能不错,生成100万个终盘耗时3.891秒,解100万个数独耗时72.112秒。
    • 代码中,特别是循环中是否有明显可优化的部分(C++中反复创建类,C#中string的操作是否能用StringBuilder 来优化)?
      没有。
    • 对于系统和网络调用是否会超时?如何处理?
      不会,未涉及到。

    6. 可读性

    • 代码可读性如何?有没有足够的注释?
      注释写得不错,但存在以下问题。
      • 没有写头文件。关于C++头文件的意义,请看这篇文章。文中提到

        头文件的重要性不仅体现在它们可以告诉编译器某个类、结构或函数将有着怎样的行为,还体现在它们可以把这些消息告诉给程序员。

      • 不少代码采取注释的方式来从上下文删除,有些影响阅读。比如这里
        有了版本控制,尽量不要采用这样的方式,因为若想撤销代码的改动,reset即可。

    7.可测试性

    • 代码是否需要更新或创建新的单元测试?
      类中有大量private函数,未进行单元测试。
    • 还可以有针对特定领域开发(如数据库、网页、多线程等)的核查表。
      本项目未涉及到。

    设计一个代码规范

    这里先使用cpplint 1.3.0对个人项目的代码进行检测

    • 工具提供的代码规范和你个人的代码风格有什么不同?
      cpplint采用的是Google C++代码规范,主要检测出了以下问题。
    1. 没有copyright信息
    2. 使用的是tab而不是whitespaces
    3. 行宽应小于等于80字符
    4. .cpp should include its header file(可我include了它的.h头文件啊? )
    5. 某行包含无效的Unicode字符(是不支持中文吗?)
    • 工具提供的代码规范里有哪些部分是你之前没有想到的?
      开头要有版权的注释。
    • 为什么要这样规范?这样的规范有意义吗?
      1.制表符应换为空格。这是为了统一不同编译器对TAB的解释,防止代码风格在不同编译器下不一致。这点在VS工具选项里文本编辑器将制表符改为插入4个空格就好了。
      2.行宽小于80字符。由于老式终端每行最多显示80字符,因此有这个规定。但对于现在的设备,可以限制得长些。插件Editor Guidelines可在文本编辑器中加入提示线,帮助程序员注意行宽限制。

    本组结对编程使用的代码规范

    1. 缩进
      4个空格
    2. 行宽
      100字符
    3. 断行
      每个{和}都独占一行
    4. 命名
      名字要体现其意义。
    • 类/结构
      每个单词首字母大写,如:SudokuSolver

    • 函数
      使用“动词”或“动词+名词”的形式,第一个单词小写,其余单词首字母大写,如:generate(), setValue()

    • 变量
      由作用域前缀+一个或多个单词组成,第一个单词小写,其余单词首字母大写(少数用途简单明了的局部变量可用i,j,x,y等表示)

      变量类型 例子
      局部变量 temp, outFile
      成员(member)变量 m_matrix
      静态(static)变量 s_count
      全局(global)变量 g_num
  • 相关阅读:
    [硬件]_ELVE_VS2015下opencv3.3的配置问题
    [Linux]_ELVE_ssh登录远程阿里服务器
    [python]_ELVE_pip2和pip3如何共存
    U盘无法打开提示格式化?如何进行恢复
    [转]pycharm的一些快捷键
    文件上传Django
    ansible编译安装--操作系统环境Redhat6.4
    django的models字段介绍
    paramiko模块
    mysql安装等操作
  • 原文地址:https://www.cnblogs.com/silentic/p/7606313.html
Copyright © 2020-2023  润新知