软件构造实验四总结
软件构造实验四总结
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
同第一个一样,要添加参数合法性判断。
然后要添加比较器,按起飞的时间升序排序。
之后不能随机选择飞机,要是没有飞机可分配,程序会陷入死循环,所以要遍历飞机。