个人作业 Week2 - 代码复审

一、代码复审Check List

1、概要部分

  • 代码能符合需求和规格说明么?
    符合。生成数独与解数独功能没有问题,对于错误输入也能发现。但建议有更好的错误提示信息。
  • 代码设计是否有周全的考虑?
    未考虑涉及的文件本身可读可写的问题。例如sudoku.txt本身只读,会导致程序崩溃。其余如参数判断、数字范围等均无问题。
  • 代码可读性如何?
    有简要注释。大部分函数、参数名有有意义的名字。结合博客能明白大致逻辑,但对于更具体的实现并不容易看懂。
  • 代码容易维护么?
    功能块划分较好。但部分函数针对的功能性较强,缺乏相应注释的情况下较难上手。
  • 代码的每一行都执行并检查过了吗?

2、设计规范部分

  • 设计是否遵从已知的设计模式或项目中的常用模式?
    划分了各个类及头文件。
  • 有没有硬编码或字符串/数字等存在?
    存在较多硬编码现象,特别是生成数独部分。 comment
  • 代码有没有依赖于某一平台,是否会影响将来的移植?(如Win32到Win64)
    没有
  • 开发者新写的代码能否用已有的Library/SDK/Framework中的功能实现?在本项目中是否存在类似的功能可以调用而不用全部重新实现?
    没有发现
  • 有没有无用的代码可以清除?
    未发现无用或重复部分。也没有注释的代码。

3、代码规范部分

  • 修改的部分符合代码标准和风格么(详细条文略)?
    • 使用了Tab作缩进符。以4个空格作缩进符更好。
    • 使用了"{"与上一行代码一起,"}"另起一行的方式。"{"、"}"各自独占一行更利于阅读。
    • 存在超过一行100字符的行
    • 函数、参数命名大多数存在意义且易懂
    • 对功能块的划分、头文件的引用做得很好

4、具体代码部分

  • 有没有对错误进行处理?对于调用的外部函数,是否检查了返回值或处理了异常?
    对参数以及文件内容的错误进行了处理。如打开文件,便没有检查返回值。
  • 参数传递有无错误,字符串的长度是字节的长度还是字符(可能是单/双字节)的长度,是以0开始计数还是以1开始计数?
    无。字节的长度,以0计数。
  • 边界条件是如何处理的?Switch语句的Default是如何处理的?循环有没有可能出现死循环?
    for语句采用特定参数值来判断,while语句多为文件读入是否完毕的判断。使用了Switch语句,但均未使用default来处理(如果使用该函数时传参正确并不会引发问题)。未发现死循环。
  • 有没有使用断言(Assert)来保证我们认为不变的条件真的满足?
    没有。
  • 对资源的利用,是在哪里申请,在哪里释放的?有没有可能导致资源泄露(内存、文件、各种GUI资源、数据库访问的连接,等等)?有没有可能优化?
    打开的文件均关闭。基本为直接申请的数组空间。以静态方式直接声明。
  • 数据结构中是否有无用的元素?
    未发现。

5.效能

  • 代码的效能(Performance)如何?最坏的情况是怎样的?
    生成数独效率非常好,100w 1.1s,解数独为100w 43.8s(来自助教大大的自动测试)
  • 代码中,特别是循环中是否有明显可优化的部分(C++中反复创建类,C#中string的操作是否能用StringBuilder 来优化)?
    未发现。
  • 对于系统和网络调用是否会超时?如何处理?
    无该部分。

6.可读性

  • 代码可读性如何?有没有足够的注释?
    功能划分和函数命名较好,有基本注释,可以了解代码逻辑,但对更具体的实现不容易了解。

7.可测试性

  • 代码是否需要更新或创建新的单元测试?
    暂时未发现。
  • 还可以有针对特定领域开发(如数据库、网页、多线程等)的核查表。
    无此部分。

二、设计一个代码规范

工具提供的代码规范和你个人的代码风格有什么不同?

  • 使用了cppline,大致有这几类
    Tab found; better to use spaces 没有使用四个空格代替缩进
    Lines should be <= 80 characters long 存在大于80字符的行
    Should have a space between // and comment 应该在//和注释之间有一个空格
    An else should appear on the same line as the preceding }
    If an else has a brace on one side, it should have it on both [readability/braces] 上两个错误经常一起出现,为大括号的位置不合规范
    Extra space for operator ++; ++符号和变量间不能有空格
    Redundant blank line at the end of a code block should be deleted. 代码块最后的空行应该被删除
    Line contains invalid UTF-8 (or Unicode replacement character) 使用了中文注释报的错
    Line ends in whitespace. 代码行最后存在空格
  • 工具提供的代码规范里有哪些部分是你之前没有想到的?
    最开始提示没有copyright,这个是完全没想过(笑)。
    如一行的最长字符数、注释与//间的空行、++运算符与变量间不能有空格,代码块最后的空行这些规范,完全没有想过。
  • 为什么要这样规范?这样的规范有意义吗?
    便于阅读,使代码结构更加清晰,减少因规格造成的阅读障碍及可能的错误发生。
    我觉得是有意义的。虽然说这些规范不影响代码功能本身,但是对一个团队来说,代码是给大家看的。格式统一的代码不仅赏心悦目,也能便于他人的阅读维护、减少自身由于格式复杂造成的不必要的错误。

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

  • 缩进方式
    4个空格

  • 行宽限制
    每行100字符

  • 大括号的用法
    每个{和}都独占一行

  • 变量命名
    名字要体现其意义。
    类/结构:每个单词首字母大写,如:SudokuSolver
    函数:使用“动词”或“动词+名词”的形式,每个单词首字母大写,如:Record(), SetValue()
    变量:由作用域前缀+一个或多个单词组成,第一个单词小写,其余单词首字母大写(少数用途简单明了的局部变量可用i,j,x,y等表示)

  • 变量类型举例
    局部变量:temp, outFile
    成员(member)变量:m_matrix
    静态(static)变量:s_count
    全局(global)变量:g_num

posted @ 2017-10-03 20:43  donemeb  阅读(992)  评论(0编辑  收藏  举报