个人作业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
posted @ 2017-10-01 12:27  silentic  阅读(193)  评论(2编辑  收藏  举报