2020软件工程第三次作业

博客信息沈阳航空航天大学计算机学院2020软件工程作业
作业要求 https://edu.cnblogs.com/campus/sau/Computer1701-1705/homework/10616
课程目标 熟悉一个“高质量”软件的开发过程
作业目标 熟悉代码规范及结对互审

题目要求:

(1). 首先在同学中找一个同伴,范围不限,可以在1~5班中随意组合,不要找同组的成员,女同学尽量找男同学结对,但是不做强制要求;
(2). 从以往个人完成的项目中选择一个作品,例如:以往的数据结构课程设计或者其它具有比较完整功能的小系统,代码至少要大于100行;
(3). 将代码上传至个人GitHub系统中,并将代码地址交给对方;
(4). 对同伴的作品进行代码复审,并参照C/C++代码审查表和 Java代码审查表 这两篇博文的内容将检查内容填入一下代码审查表中;

序号重要性审查项结论
1 重要/不重要 审查表中待检查内容 填写是/否/无(是代表符合规范,否代表不符合规范,无代表代码不涉及该项内容)
2      

(5). 将对伙伴审查的结果以表格的形式写到自己的博客作业里,博客中应该附有伙伴作业的GitHub代码地址;
(6). 对同伴的代码写一篇500字以上的评论,介绍同伴的优缺点。

源代码:

寝室管理系统

代码复查表:

 

功能模块名称 寝室管理系统
审查人 向宇平 审查日期 2020/4/17
代码名称 寝室管理.cpp 代码作者 李飞浪
文件结构
重要性 审查项 结论
  头文件和定义文件的名称是否合理?
  头文件和定义文件的目录结构是否合理?
  版权和版本声明是否完整?
重要 头文件是否使用了 ifndef/define/endif 预处理块?
  头文件中是否只存放“声明”而不存放“定义”
程序的版式
重要性 审查项 结论
  空行是否得体?
  代码行内的空格是否得体?
  长行拆分是否得体?
  “{” 和 “}” 是否各占一行并且对齐于同一列?
重要 一行代码是否只做一件事?如只定义一个变量,只写一条语句。
重要 If、for、while、do等语句自占一行,不论执行语句多少都要加 “{}”。
重要 在定义变量(或参数)时,是否将修饰符 * 和 & 紧靠变量名?注释是否清晰并且必要?
重要 注释是否有错误或者可能导致误解?
重要 类结构的public, protected, private顺序是否在所有的程序中保持一致?
命名规则
重要性 审查项 结论
重要 命名规则是否与所采用的操作系统或开发工具的风格保持一致?
  标识符是否直观且可以拼读?
  标识符的长度应当符合“min-length && max-information”原则?
重要 程序中是否出现相同的局部变量和全部变量?
  类名、函数名、变量和参数、常量的书写格式是否遵循一定的规则?
  静态变量、全局变量、类的成员变量是否加前缀?
表达式与基本语句
重要性 审查项 结论
重要 如果代码行中的运算符比较多,是否已经用括号清楚地确定表达式的操作顺序?
  是否编写太复杂或者多用途的复合表达式?
重要 是否将复合表达式与“真正的数学表达式”混淆?
重要 是否用隐含错误的方式写if语句? 例如  
  (1)将布尔变量直接与TRUE、FALSE或者1、0进行比较。
  (2)将浮点变量用“==”或“!=”与任何数字比较。
  (3)将指针变量用“==”或“!=”与NULL比较。
  如果循环体内存在逻辑判断,并且循环次数很大,是否已经将逻辑判断移到循环体的外面?
重要 Case语句的结尾是否忘了加break?
重要 是否忘记写switch的default分支?
重要 使用goto 语句时是否留下隐患? 例如跳过了某些对象的构造、变量的初始化、重要的计算等。
常量
重要性 审查项 结论
  是否使用含义直观的常量来表示那些将在程序中多次出现的数字或字符串?
  在C++ 程序中,是否用const常量取代宏常量? 无  
重要 如果某一常量与其它常量密切相关,是否在定义中包含了这种关系?
函数设计
重要性 审查项 结论
  参数的书写是否完整?不要贪图省事只写参数的类型而省略参数名字。
  参数命名、顺序是否合理?
  参数的个数是否太多?
  是否使用类型和数目不确定的参数?
  是否省略了函数返回值的类型?
  函数名字与返回值类型在语义上是否冲突?
重要 是否将正常值和错误标志混在一起返回?正常值应当用输出参数获得,而错误标志用return语句返回。
重要 在函数体的“入口处”,是否用assert对参数的有效性进行检查?
重要 使用滥用了assert? 例如混淆非法情况与错误情况,后者是必然存在的并且是一定要作出处理的。
重要 return语句是否返回指向“栈内存”的“指针”或者“引用”?
  是否使用const提高函数的健壮性?const可以强制保护函数的参数、返回值,甚至函数的定义体。“Use const whenever you need”
其它常见问题
重要性 审查项 结论
重要 数据类型问题:  
  (1)变量的数据类型有错误吗?
  (2)存在不同数据类型的赋值吗?
  (3)存在不同数据类型的比较吗?
重要 变量值问题:  
  (1)变量的初始化或缺省值有错误吗?
  (2)变量发生上溢或下溢吗?
  (3)变量的精度够吗?
重要 逻辑判断问题:  
  (1)由于精度原因导致比较无效吗?
  (2)表达式中的优先级有误吗?
  (3)逻辑判断结果颠倒吗?
重要 循环问题:  
  (1)循环终止条件不正确吗?
  (2)无法正常终止(死循环)吗?
  (3)错误地修改循环变量吗?
  (4)存在误差累积吗?
重要 错误处理问题:  
  (1)忘记进行错误处理吗?
  (2)错误处理程序块一直没有机会被运行?
  (3)错误处理程序块本身就有毛病吗?如报告的错误与实际错误不一致,处理方式不正确等等。
  (4)错误处理程序块是“马后炮”吗?如在被它被调用之前软件已经出错。
重要 文件I/O问题:  
  (1)对不存在的或者错误的文件进行操作吗?
  (2)文件以不正确的方式打开吗?
  (3)文件结束判断不正确吗?
  (4)没有正确地关闭文件吗?

总结:

这次的作业是结对编程作业,在编程方面的压力小了,但是增加了对于观看陌生代码的难度,所以说这次的结对作业对于读代码这方面的能力有所考验,并且在读懂的过程中还可以学习到对方的代码的优点,并且当对方的代码出现了不好的地方的时候可以让自己的代码尽量避免这一系列的错误。我的结队队友是刘静同学,所批阅的代码是他课设的题目:学生宿舍管理系统。

对于这个管理系统最大的问题就在于存储和删除的灵活性,所以他打算使用链表指针的方式来灵活的操控这个链表,然后通过很清晰的删除、增加、修改等函数来将这一系列的操作清晰化,使得面向对象会更加的觉得这个系统的简单好操作。输入和输出都有着明确的提示,使得所有的操作都浅显易懂。对于函数分开也可以使得修改的时候更加的方便,保证了main函数的简便性,保证了一层一层的清晰透明。这种方式的,虽然在少量排数的代码中效果不大甚至有一些繁琐,但是一旦代码增加到了一定程度之后,效果会很明显。

在代码规范方面的问题有一些,类似于119排的for循环没有回车,还有一些for没有跟上{},因为只有一排所以不影响效果,但是在可读性方面就有些差劲了。其他的基本上都是跟正常的规格没有区别,(){}同列同空格,每深入一层就会增加4个空格等等。没有出现一些奇奇怪怪的变量声明,都是一些中文拼音的缩写,增加了可读性。

通过这次的结对编程作业,让我意识到了复查的重要性,以及我也了解了结对编程的过程,这对以后在工作和学习中会有很大的帮助。还有就是程序测试及程序的规范化书写的重要性,我们写的代码要增加可读性,不仅有助于他人,自己检查甚至修改代码的时候会更加赏心悦目,所以在以后的编程过程中按照规范书写,并且多多使用函数的功能。

posted @ 2020-04-17 22:49  ·向宇平  阅读(210)  评论(0编辑  收藏  举报