个人作业 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