哈工大软件构造Lab4

1 实验目标概述

本次实验重点训练学生面向健壮性和正确性的编程技能,利用错误和异常处
理、断言与防御式编程技术、日志/断点等调试技术、黑盒测试编程技术,使程序
可在不同的健壮性/正确性需求下能恰当的处理各种例外与错误情况,在出错后
可优雅的退出或继续执行,发现错误之后可有效的定位错误并做出修改。
实验针对 Lab 3 中写好的 ADT 代码和基于该 ADT 的三个应用的代码,使用
以下技术进行改造,提高其健壮性和正确性:

  • 错误处理
  • 异常处理
  • Assertion 和防御式编程
  • 日志
  • 调试技术
  • 黑盒测试及代码覆盖度

2 实验环境配置

3 实验过程

3.1 Error and Exception Handling

在./src/txt/中构造错误数据并测试
在这里插入图片描述

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

1、不符合语法规则
元素定义的内容格式与语法规范不一致(例如最多 1 位小数但使用了 2
位小数、要求 2 位大写字母和 2-4 位数字但却使用了非大写字母或超过
4 位数字等)
在这里插入图片描述
2、输入文件中存在标签完全一样的元素,遍历所有计划项,判断是否有相同的标签
在这里插入图片描述
3、输入文件中各元素之间的依赖关系不正确
在这里插入图片描述

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

客户端捕获方法抛出的异常,然后直接向用户反馈提示信息。
在这里插入图片描述

3.2 Assertion and Defensive Programming

3.2.1 checkRep()检查rep invariants

以timeslot为例:
在这里插入图片描述
由此设计的checkRep()
在这里插入图片描述

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

以FlightEntry为例:
确保前置条件中的时间和地点的大小相同。
在这里插入图片描述

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

客户端的输入方法或API的方法起始阶段需要对用户输入进行检查。在方法中进行了对各项参数的检查,错误则抛出其在内的相应异常。

在修改ADT的内容之后,需要确认修改后的ADT符合RI。此时,可以调用ADT私有方法checkRep()进行校验。

3.3 Logging

3.3.1 异常处理的日志功能

配置日志
在这里插入图片描述
文件效果:
在这里插入图片描述

3.3.2 应用层操作的日志功能

捕获异常的同时日志记录
在这里插入图片描述

3.3.3 日志查询功能

从txt文件读取,通过正则表达式进行筛选,用户可输入过滤条件(显示输入时间前后一个月的时间)进行日志查询。
在这里插入图片描述
在这里插入图片描述

3.4 Testing for Robustness and Correctness

3.4.1 Testing strategy

使用等价类和边界值的思想,为ADT设计测试用例

使用等价类和边界值的思想,为ADT设计测试用例

以EventManager为例:
在这里插入图片描述
在这里插入图片描述

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

3.5 SpotBugs tool

3.6 Debugging

3.6.1 EventManager程序

3.6.2 LowestPrice程序

3.6.3 FlightClient/Flight/Plane程序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值