欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

软件构造实验四总结

程序员文章站 2024-02-08 18:14:16
...

软件构造实验四总结

P4主要是针对健壮性和正确性来编程

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

对于程序来说,正确性肯定是首选的,需求是第一生产力吗,需求都没有达到,那这个程序肯定不是个好程序。而健壮性呢,就是这个程序处理问题的能力,健壮性越强,这个程序遇到错误,问题都能做出越好的回应。所以健壮性和正确性强弱也是衡量一个程序好坏的重要因素。

本次实验是基于Lab3进行一系列的改进,从而提高Lab3的健壮性和正确性。

这里就运用到了异常处理,断言技术,防御性拷贝,日志管理和最开始学习的程序测试。
之后又练习了我们debug的能力。
这里我就说说那几道debug的题吧

Debug之前应该先根据spec和等价类来编写测试程序,看程序都会在哪里出错,然后根据错误位置进行针对性改进。

1.EventManager

首先就是函数规约,没有day参数声明
然后还要添加个参数合法性的判断,并对各种情况做出相应反应。

2.LowestPrice

该程序运用的动态规划思想。
于是就扔用动态规划来改动代码使其完整实现
//j遍历需求数组,等号要删掉
//如果该策略让某一种商品数量变为负值,则该策略不能用flag置为false
for (j = 0; j < needs.size(); j++) {
int diff = clone.get(j) - s.get(j);
if (diff < 0) {
flag = false;
break;
}
clone.set(j, diff);
}

	//若该策略不能用继续遍历下一个策略
	if(!flag) continue;
	
	//判断使用该策略便宜还是不使用该策略便宜,s价钱为s[j]
	if (j == needs.size())
		res = Math.min(res, s.get(j) + shopping(price, special, clone));

3.FlightClient

同第一个一样,要添加参数合法性判断。
然后要添加比较器,按起飞的时间升序排序。
之后不能随机选择飞机,要是没有飞机可分配,程序会陷入死循环,所以要遍历飞机。