规格化设计的发展史
随着计算机硬件的飞速发展,以及应用复杂度越来越高,软件规模越来越大,原有的程序开发方式已经越 来越不能满足需求了。1960 年代中期开始爆发了第一次软件危机,典型表现有软件质量低下、项目无法 如期完成、项目严重超支等,因为软件而导致的重大事故时有发生。
1975年,Liskov等人发表了论文Specification Techniques for Data Abstractions,从数据抽象的角度论述了规格的优点、特性及重要性。
1976年,在第二届国际软件工程会议上,Belford等人在Specifications a key to effective software development一文中从开发复杂系统的角度论证了完整的、一致的规格的重要性。在系统研发周期中,规格提供了在概念和定义阶段的过渡。一个清楚、无歧义的规格是取得成功的关键,同时能减少开发过程中的开销。软件需求本身具有模糊的特点,所以需要一个定义明确的规格来开发出可靠的软件。
1993年,Liskov等人发表了Specifications and their use in defining subtypes,从类型层次的角度进一步论证了规格的重要性。
如今,北航的OO课程组也十分重视规格化的设计,提出了JSF规格设计,并且将其应用到计算机学院的面向对象课程中,让同学们更加深刻的理解到程序规格化设计的重要性。
可见,程序的规格化设计在计算机长期的发展中不断的完善和受到重视。
BUG分析
1.bug记录表
类型 | 方法代码行数 | 产生原因 |
EFFECTS内容为实现算法 | 15 | 内容表达的有些多 |
不符合JSF规范 | 23 | 线程规格写错误 |
REQUIRES逻辑错误 | 21 | 没写requires |
不符合JSF规范 | 10 | 没写requires |
2.功能性bug
出租车会回头,原因是GUI的流量刷新有延迟,出现线程不安全的问题,所以访问的数据不是最新的数据,导致车会回头;
出租车在去接单时没有模拟乘客上车,原因是没有搞清楚具体要求;
出租车输出的信息是抢单时刻的状态信息,测试者说是抢单窗口结束时的出租车状态,指导书中只说了输出抢单出租车信息,但是issue中有提到,,认栽,,没有勤刷issue.
功能性bug和jsf在我这个水平的来看,,好像并没有什么较大的联系,但是个人觉得设计规格还是十分重要的,如果有较好的规格的话,提供了从理论推理上来发现和避免bug的方法。
规格不好的写法
1.缺少REQUIRES
改进后:
2.后置条件格式错误
改进后:
3.前置条件书写不规范
改进后:
4.this使用未添加“\”
改进后:
总结与体会
从这门课里,与其说是学到了很多技能,不如说是懂得了何为重要。面向对象的编程思想很重要,规格化的程序设计很重要,设计原则很重要,工程化的思维方式很重要。一学期的训练中,我们可以看到老师们训练的重点在哪里,也得到了较好的锻炼,但是由于制度的不健全,可能在实施训练计划的时候往往会出现偏差。同学中有部分遭到恶意扣分,当然这不是仅仅我们这一届有,指导书不够明确,模棱两可,助教很辛苦,同学们的体验不够好,在这里,我是十分赞同昂神(大佬)所说的关于工程的看法,但是OO这门课的相关测试有时候却又让人不得不去纠结一些细节,其实很多地方是可以readme的。
有的时候说提出问题,发现问题是最重要的,但有的时候又说提出问题很简单,真正解决问题才是最难的,所以到底是如何,不知。就这门课,同学们在实践中提出了很多问题,但我发现能想到一个真正完美的解决方案还是挺难的。听说课程组最后会有一个最多BUG奖项,但是不知道有没有最具建设性意见奖项,如果有,说不定哪位同学就真的会提出非常不错的意见呢,也许当同学们知道解决问题难的时候,就会少一些抱怨吧。
学习是自己的,分数是别人的,最后还是希望所有努力认真的同学都能够取得不错的分数。