公共信息区

博客信息 沈阳航空航天大学计算机学院
作业要求 https://edu.cnblogs.com//campus//sau//Computer1701-1705/homework/10583
课程目标 熟系一个“高质量”软件开发的过程
作业目标 单元测试练习

题目要求

  • 首先在同学中找一个同伴,范围不限,可以在1~5班中随意组合,不要找同组的成员,女同学尽量找男同学结对,但是不做强制要求;
  • 从以往个人完成的项目中选择一个作品,例如:以往的数据结构课程设计或者其它具有比较完整功能的小系统,代码至少要大于100行;
  • 将代码上传至个人GitHub系统中,并将代码地址交给对方;
  • 对同伴的作品进行代码复审,并参照C/C++代码审查表和 Java代码审查表 这两篇博文的内容将检查内容填入一下代码审查表中;
  • 将对伙伴审查的结果以表格的形式写到自己的博客作业里,博客中应该附有伙伴作业的GitHub代码地址;
  • 对同伴的代码写一篇500字以上的评论,介绍同伴的优缺点。将对伙伴审查的结果以表格的形式写到自己的博客作业里,博客中应该附有伙伴作业的GitHub代码地址;

伙伴代码

源代码地址

代码审查表

功能模块名称 四则运算式生成器
审查人张瑞源审查日期2020.4.11
代码名称main.cpp代码作者常文煜
序号重要性审查项结论
重要/不重要审查表中待检查项填写是/否/无(是代表符合规范,否代表不符合规范,无代表代码不涉及该项内容)
文件结构
1 头文件和定义文件的名称是否合理?
2 头文件和定义文件的目录结构是否合理?
3 版权和版本声明是否完整?
4重要头文件是否使用了 ifndef/define/endif 预处理块?
5 头文件中是否只存放“声明”而不存放“定义”
程序的板式
6 空行是否得体?
7 代码行内的空格是否得体?
8 长行拆分是否得体?
9 "{"和"}"是否各占一行并且对齐于同一列?
10重要一行代码是否只做一件事?如只定义一个变量,只写一条语句。
11重要If、for、while、do等语句自占一行,不论执行语句多少都要加“{}”。
12重要在定义变量(或参数)时,是否将修饰符*和&紧靠变量名?注释是否清晰并且必要?
13重要注释是否有错误或者可能导致误解?
14重要类结构的public,protected,private顺序是否在所有的程序中保持一致?
命名规则
15重要命名规则是否与所采用的操作系统或开发工具的风格保持一致?
16 标识符是否直观且可以拼读?
17 标识符的长度应当符合“min-length && max-information”原则?
18重要程序中是否出现相同的局部变量和全部变量?
19 类名、函数名、变量和参数、常量的书写格式是否遵循一定的规则?
20 静态变量、全局变量、类的成员变量是否加前缀?
表达式与基本语句
21重要如果代码行中的运算符比较多,是否已经用括号清楚地确定表达式的操作顺序?
22 是否编写太复杂或者多用途的复合表达式?
23重要是否将复合表达式与“真正的数学表达式”混淆?
24重要是否用隐含错误的方式写if语句? 例如
25 (1)将布尔变量直接与TRUE、FALSE或者1、0进行比较。
26 (2)将浮点变量用“==”或“!=”与任何数字比较。
27 (3)将指针变量用“==”或“!=”与NULL比较。
28 如果循环体内存在逻辑判断,并且循环次数很大,是否已经将逻辑判断移到循环体的外面?
29重要Case语句的结尾是否忘了加break?
30重要是否忘记写switch的default分支?
31重要使用goto语句时是否留下隐患?例如跳过了某些对象的构造、变量的初始化、重要的计算等。
常量
32 是否使用含义直观的常量来表示那些将在程序中多次出现的数字或字符串?
33 在C++ 程序中,是否用const常量取代宏常量?
34 如果某一常量与其它常量密切相关,是否在定义中包含了这种关系?
35 是否误解了类中的const数据成员?因为const数据成员只在某个对象
36 生存期内是常量,而对于整个类而言却是可变的。
函数设计
37 参数的书写是否完整?不要贪图省事只写参数的类型而省略参数名字。
38 参数命名、顺序是否合理?
39 参数的个数是否太多?
40 是否使用类型和数目不确定的参数?
41 是否省略了函数返回值的类型?/td>
42 函数名字与返回值类型在语义上是否冲突?
43重要是否将正常值和错误标志混在一起返回?正常值应当用输出参数获得,而错误标志用return语句返回。
44重要在函数体的“入口处”,是否用assert对参数的有效性进行检查?
45重要使用滥用了assert? 例如混淆非法情况与错误情况,后者是必然存在的并且是一定要作出处理的。
46重要return语句是否返回指向“栈内存”的“指针”或者“引用”?
47 是否使用const提高函数的健壮性?const可以强制保护函数的参数、返回值,甚至函数的定义体。“Use const whenever you need”
内存管理
48重要用malloc或new申请内存之后,是否立即检查指针值是否为NULL?(防止使用指针值为NULL的内存)
49重要是否忘记为数组和动态内存赋初值?(防止将未被初始化的内存作为右值使用)
50重要数组或指针的下标是否越界?
51 重要动态内存的申请与释放是否配对?(防止内存泄漏)
52重要是否有效地处理了“内存耗尽”问题?
53重要是否修改“指向常量的指针”的内容?
54重要是否出现野指针?例如(1)指针变量没有被初始化;(2)用free或delete释放了内存之后,忘记将指针设置为NULL。
55重要是否将malloc/free 和 new/delete 混淆使用?
56重要malloc语句是否正确无误?例如字节数是否正确?类型转换是否正确?
57重要在创建与释放动态对象数组时,new/delete的语句是否正确无误
其它常见问题
重要数据类型问题:
58 (1)变量的数据类型有错误吗?
59 (2)存在不同数据类型的赋值吗?
60 (3)存在不同数据类型的比较吗?
重要变量值问题:
61 (1)变量的初始化或缺省值有错误吗?
62 (2)变量发生上溢或下溢吗?
63 (3)变量的精度够吗?
重要逻辑判断问题:
64 (1)由于精度原因导致比较无效吗?
65 (2)表达式中的优先级有误吗?
66 (3)逻辑判断结果颠倒吗?
重要循环问题:
67 (1)循环终止条件不正确吗?
68 (2)无法正常终止(死循环)吗?
69 (3)错误地修改循环变量吗?
70 (4)存在误差累积吗?
重要错误处理问题:
71 (1)忘记进行错误处理吗?
72 (2)错误处理程序块一直没有机会被运行?
73 (3)错误处理程序块本身就有毛病吗?如报告的错误与实际错误不一致,处理方式不正确等等。
74 (4)错误处理程序块是“马后炮”吗?如在被它被调用之前软件已经出错。
重要文件I/O问题:
75 (1)对不存在的或者错误的文件进行操作吗?
76 (2)文件以不正确的方式打开吗吗?
77 (3)文件结束判断不正确吗?
78 (4)没有正确地关闭文件吗?

代码评价

  • 程序的基本功能为实现小学生四则运算生成器。总体来看程序的规模较大,实现的功能也较多。并且设计的界面整洁,美观,整体给人一种舒适的感觉,而且程序内容体现出整 体逻辑思路清晰,代码内容较多,却能很好的实现相应的功能,但是也存在重复的内容较多,存在代码冗余,降低可读性,不便修改。
  • 程序的优点在于设计的运行界面整洁美观,代码排版规范,函数命名可以看出函数实现的功能,遵循一定的规则,设置合理,有些变量命名也较为合理。函数之间加有空行,方便阅读,并且程序在判断完结果后调用system("cls")进行清屏,然后显示后面的界面,较为方便。同时程序的表示也相对清晰,将数据写入文件,将数据从文件显示出来等。
  • 程序的缺点是对于一些代码并没有给出相应的注释,这样就给人理解造成一定的困难,而且程序实现的功能中并没有展现出小学生四则运算界面,仅是在进入界面后在选择相应的日期班级后下发题目,可以增加一些功能,调用一些函数实现小学生进行四则运算,使功能更加完善。程序中的一些变量名,设置的不够明确,像con,a,b这种命名方式使代码的可读性变差。程序中存在重复的代码较多,降低性能,不便修改。
  • 总体来看程序所设计的很好,界面完整美观,程序内容结构清晰,代码较为规整,整体性好。而且程序的规模较大,但完成质量较高。但是代码没有注释,在基于程序的规模又较大时,影响代码的可读性。建议在代码中添加相应的注释,增加代码的可阅读和可理解性。在程序实现功能中并没有给出错误的判断,当用户输入的指令不符合时,建议给出提示,否则可能会继续返回开始选择的界面,造成重复。
posted on 2020-04-13 17:23  cherry-zry  阅读(132)  评论(0)    收藏  举报