软件构造 Lab4

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

实验需要用到的知识: 异常处理、log日志、第三方插件工具的使用、Debug操作。

实验任务:

1、Error and Exception Handling
这一部分内容主要是进行异常处理的操作。
如图:
在这里插入图片描述
首先自定义了各种可能出现的异常。
包括三个类型文件的各自五种语法异常和一些逻辑上的异常。
在这里插入图片描述
之后使用throws在可能抛出异常的方法后进行声明。
在这里插入图片描述
之后在方法的具体抛出异常位置抛出异常。
在这里插入图片描述
向上传递,在GUI中统一catch这些异常,并进行异常操作。这里我选择输出提示框,如下图:
在这里插入图片描述
此时我用TrackGame的方式来读取SocialNetworkCircle的文件,就出现了文本类型不匹配的异常。

2、Assertion and Defensive Programming
在Lab3中我已经做了相应的防御性措施,来防止出现各种情况。
在这里插入图片描述
如上图,我在添加物体到轨道上时,就采取了措施,通过检查物体是否有所属轨道,保证物体只能在一条轨道上。

checkRep()检查invariants
在这里插入图片描述
在SocialNetworkCircle中,对于每一次对图的修改,我都使用了一个Update函数,其作用相当于checkRep,通过检查图中逻辑结构,来保证图的逻辑结构正确。
在这里插入图片描述

Assertion保障pre-/post-condition
断言确保程序的正确性。
在这里插入图片描述
在获取逻辑距离,返回值时,使用断言,保证返回的逻辑距离大于等于0,或是为-1(无连接,此处未展示)。

3、Logging
写日志
我在GUI初始化时,对logger也进行了初始化,确定日志文件位置,绑定FileHandler,保证logger的info以上信息写入日志文件中。
在这里插入图片描述
之后用logger就可以写入日志信息。
我用warning和info两个不同等级来区分异常和普通操作日志。
如下图:
上方就是用warning来写入异常日志,下方就是用info来写入普通操作日志。
在这里插入图片描述
在这里插入图片描述

日志查询
日志查询使用GUI选择筛选的方式。
在这里插入图片描述

GUI界面如图:在这里插入图片描述
给与三种方式进行信息筛选,按时间筛选、按类型筛选、按发生的类筛选。
在这里插入图片描述
在这里插入图片描述
按下按钮后,相应的筛选结果就会输出在控制台中。
如上图就是筛选INFO类型和TrackGame类型日志输出的结果。

4、Testing for Robustness and Correctness

Testing strategy
这里的测试方案我大部分是使用Lab3中的。
在这里插入图片描述
对于三种类型的场景,分别设计了相应的测试用例。

测试用例设计
以SocialNetworkCircle的测试为例,模拟文件的读取、增删关系等操作,检验checkRep()等的正确性。
对于TrackGame和AtomStructure也是类似的操作。

5、SpotBugs tool
这里发现了一些细小的问题,检查后就完成了代码修复。
因为都是warning,对程序影响并不大,但存在风险,以后应当注意。

6、Debugging
理解待调试程序的代码思想
1、程序1要求中位数
2、程序2用于删除代码注释
3、程序3查询选票最多的选举人

发现并定位错误的过程
以上三个程序,都存在各自的逻辑问题。使用Debug模式设置断点,配合内存查看内存信息,可以有效的快速定位错误发生的位置。

如何修正错误
1、程序1:
(1)中值计算因为向下取整的原因出现问题
(2)最大时出现逻辑问题。m+n为奇数时返回左值,将m+n+1改为m+n。
2、程序2:
(1)声明list对象时语法错误,应使用ArrayList。
(2)数组越界问题,修改i+1的判断条件可以解决问题
(3)缺少对“//”的注释情况的判断
3、程序3:
(1)构造函数传参出现问题
(2)二分查找出现问题

结果
在这里插入图片描述
设置相应测试样例,确认无误。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值