软件构造lab4

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

实验针对 Lab 3 中写好的 ADT 代码和基于该 ADT 的三个应用的代码,使用以下技术进行改造,提高其健壮性和正确性:
错误处理
异常处理
Assertion 和防御式编程
日志
调试技术
黑盒测试及代码覆盖度

3.1Error and Exception Handling

通过自定义 Exception 类型,表示程序的一些常见错误类型,为代码可能发生的问题提供新的含义,区分代码运行时可能出现的相似问题,或给出程序中一组共性错误的特殊含义。
输入文件中存在不符合语法规则的语句,例如某个元素定义的标签非法、元素定义的内容格式与语法规范不一致、元素定义中分量的数目或次序与规范不符合(例如运动员信息需要 5 个分量但只提供了 4 个、运动员的姓名和号码颠倒次序等)等。

存在标签完全一样的元素。例如 TrackGame 中出现了多个同样名字的运动员、SocialNetworkCircle中出现两条社交关系但连接是同样的两个人(例如<A, B, 0.1>和<B, A, 0.2>)、出现指向自己的社交关系(例如<A, A, 0.2>)等。

在使用正则表达式进行文本解析的过程中,程序一旦发现这些非法情况,捕获异常,进行异常处理(提示错误),结束此文件的读取,将当前所遇到的不合法之处提示给用户,并让用户选择其他文本文件。

3.2. Assertion and Defensive Programming
针对每个类,它们有明确的 RI,据此撰写 checkRep()并加入各方法。

在 TrackGame 中,不管用户对比赛方案如何修改,每组比赛中的人数不超过跑道数;
在 SocialNetworkCircle 中,不管社交关系如何增加或删除,第 i 层轨道上的人与中心点的人之间的最短路径等于 i。

3.3. Logging

使用 java logging为经过异常处理、错误处理、断言处理的程序增加日志功能。
import java.util.logging.Logger;

为应用添加日志查询功能,用户可输入过滤条件
按类型、 按类、按方法、按操作类型
具体为使用正则表达式在日志文件中进行匹配

3.4. Testing for Robustness and Correctness

设计一组测试用例,人为制造非法输入的文件和非法输入的图操作指令,对程序进行健壮性和正确性测试并使用 Junit运行测试

使用 EclEmma 查看测试的语句覆盖度

3.5. Using SpotBugs tool
是个好用的工具

3.6. Debugging
不难

心得
Assertion和log技术会帮助我更有效的定位错误
让自己的程序能应对更多的异常情况,这一点是有必要的,但是过分谨慎的“防御”是没有必要的,也取决于编程场景的差异
Debug一个别人写的,错误的程序,很烦

猜你喜欢

转载自blog.csdn.net/weiaibeachsea/article/details/93404377