软件构造实验4总结

实验目标

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

3.1. Error and Exception Handling
首先是异常类的设计以及异常的处理

抽象类FormatException继承Exception类:
private String exception;
protected String type;
子类为:
LabelNotRegularException //label格式错误
SameNameException //具有相同名字
SentenceNotRegularException //sentence格式错误
NumberNotRegularException /number格式错误

抽象类StellarSystemException继承Exception类:
protected String exception;
public String getException()
public static boolean degreeIsLeagel
public static boolean directionIsleagal
子类为:
DegreeNotRegularException //角度取值范围错误
DirectionException //旋转方向错误(不是CW或CCW)

抽象类AtomStructureException继承Exception类:
public static boolean elementNameIsLeagel
public static boolean numberOfTracksIsLeagel
子类为:
NumberOfTracksException //使用的轨道数与存在的轨道数不符
ElementNameException //元素名称不合法

抽象类PersonalAppEcosystemException继承Exception类:
public static boolean periodIsLeagel
子类为:
PeriodException //Period格式不正确
AppNotExistException //使用了不存在的App

在读取文件时,除了会遇到IOException以外,当读取Label类型、number类型、sentence类型的数据时,如果格式不正确也会抛出相应异常。
3个应用除去读取文件时发生的异常,其它异常均为相应应用名称异常的子类。

StellarSystem在构造函数中捕获到异常时会直接输出相应的错误
在这里插入图片描述

AtomStructure类在构造函数中捕获到异常时会直接输出相应的错误
在这里插入图片描述
PersonalAppEcosystem:
创建系统时抛出异常,需要在main函数中捕获并处理
在这里插入图片描述

3.2 Assertion and Defensive Programming
防御性编程
使用checkRep()检查invariants:
在这里插入图片描述
在这里插入图片描述
3.3 Logging
创建logger:
在这里插入图片描述
捕获到异常时进行记录
在这里插入图片描述
在这里插入图片描述

日志查询:
定义Record类
利用正则表达式将每一个标签抓取出来,存储到一个Record类中

在这里插入图片描述

实验总结
通过本次实验,我主要学习到了Exception的定义与处理和Log的使用。此外,这次实验还让我知道了要在编程中多使用防御性编程,考虑健壮性与正确性,使用日志记录错误,使用EclEmma评估代码覆盖率等。
最后,本次实验还提供了三个程序用来进行debug练习。
可以说这次实验让我学到了很多东西。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值