HIT 软件构造 Lab4

2020年春季学期

计算机学院《软件构造》课程

Lab4实验报告

1 实验目标概述

本次实验重点训练学生面向健壮性和正确性的编程技能,利用错误和异常处理、断言与防御式编程技术、日志/断点等调试技术、黑盒测试编程技术,使程序可在不同的健壮性/正确性需求下能恰当的处理各种例外与错误情况,在出错后可优雅的退出或继续执行,发现错误之后可有效的定位错误并做出修改。

实验针对Lab 3中写好的ADT代码和基于该ADT的三个应用的代码,使用以下技术进行改造,提高其健壮性和正确性:

1.错误处理

2.异常处理

3.Assertion和防御式编程

4.日志

5.调试技术

6.黑盒测试及代码覆盖度

2 实验环境配置

沿用Lab1搭建的环境

在这里给出你的GitHub Lab4仓库的URL地址(Lab4-学号)。

https://github.com/ComputerScienceHIT/Lab4-1180300612.git

3 实验过程

请仔细对照实验手册,针对每一项任务,在下面各节中记录你的实验过程、阐述你的设计思路和问题求解思路,可辅之以示意图或关键源代码加以说明(但千万不要把你的源代码全部粘贴过来!)。

3.1 Error and Exception Handling

3.1.1 处理输入文本中的三类错误

  1. 输入文件中存在不符合语法规则的语句

根据3.13的要求,编写了相应的正则表达式

在从文件读入计划项信息时,会与相应的模式串进行匹配

一旦检测到不符合语法规则的语句,直接结束文件读取并弹出相应信息
HIT 软件构造 Lab4
HIT 软件构造 Lab4

  1. 输入文件中存在标签完全一样的元素

创建相应航班之前,先与已创建的航班做匹配,有完全相同的就结束文件的读取并弹出相应信息
HIT 软件构造 Lab4

  1. 输入文件中各元素之间的依赖关系不正确。

针对以下四种情况,对所需要判断的字符串进行切割,对比相应信息,如果不满足依赖关系,就结束文件读取,并弹出相应信息

(1)一行出现的航班日期与内部出现的起飞时间中的日期不一致;

(2)降落时间中的日期与航班日期差距大于1天;

(3)同一个航班号,虽然日期不同,但其出发或到达机场、出发或到达时间有差异;

(4)在不同航班计划项中出现编号一样的飞机,但飞机的类型、座位数或机龄却不一致;
HIT 软件构造 Lab4
HIT 软件构造 Lab4
HIT 软件构造 Lab4
HIT 软件构造 Lab4

3.1.2 处理客户端操作时产生的异常

1,2.

在进行删除资源及位置操作前,先检测是否被占用,如果被占用,则不允许删除
HIT 软件构造 Lab4
HIT 软件构造 Lab4

3.在entry类中,定义的所有操作都限制了计划项的状态,如果在非法的情况下调用了函数,就会throw抛出错误
HIT 软件构造 Lab4
HIT 软件构造 Lab4

4.在为计划项分配资源时,如果资源已被占用,操作将不被允许
HIT 软件构造 Lab4

3.2 Assertion and Defensive Programming

3.2.1 checkRep()检查rep
invariants

例如Timeslot类中start_time和end_time有格式限制,还有早晚的限制
HIT 软件构造 Lab4

那么在创建之后即调用chechRep来检查RI是否还成立
HIT 软件构造 Lab4
HIT 软件构造 Lab4

3.2.2 Assertion/异常机制来保障pre-/post-condition

不合法的输入不被允许传入到类中,要求客户继续输入直到输入的是合法的数据

或者针对数据是否合法进行返回
HIT 软件构造 Lab4

3.2.3 你的代码的防御式策略概述

  1. App

针对用户的输入有大量的匹配,以判断是否合法

为RI撰写相应的CheckRep

  1. 数据类型

清一色的String类型来保存数据

3.3 Logging

3.3.1 异常处理的日志功能

弹出时间,严重性,以及错误的位置
HIT 软件构造 Lab4

3.3.2 应用层操作的日志功能

记录操作的顺序,操作名称以及大概信息
HIT 软件构造 Lab4

3.3.3 日志查询功能

输入日志的关键词,正则匹配相应的日志
HIT 软件构造 Lab4

3.4 Testing for Robustness and Correctness

3.4.1 Testing strategy

使用等价类和边界值的测试思想

3.4.2 测试用例设计

针对文件输入设计语句不合法或者不满足依赖条件的文件

测试后发现覆盖率太低,主要是因为没有覆盖到App中命令行输入进行的操作

最后加入了对App.main的测试,需要手动粘贴测试文本(Test1.txt)

3.4.3 测试运行结果与EclEmma覆盖度报告

语句覆盖度(Instruction Counters)
HIT 软件构造 Lab4

分支覆盖度(Branch Counters)
HIT 软件构造 Lab4

路径覆盖度(Complexity)
HIT 软件构造 Lab4

3.5 SpotBugs tool
HIT 软件构造 Lab4

提示有6个创建而未使用的类

这是在测试用例中的

一部分没打在信息版上