第三次博客作业
一. 规格设计的发展历程:
在1960年代末至1970年代初期,出现了一次软件危机:一方面需要大量的软件系统,如操作系统、数据库管理系统;另一方面,软件研制周期长,可靠性差,维护困难。人们希望编写出的程序结构清晰、易阅读、易修改、易验证,即产生良好结构的程序。60年代中期,大容量、高速度的计算机出现,随之出现的是代码量急剧提升,复杂度急剧增长、程序可靠性的重要性突出的问题。结果化程序设计随之提出,它要求程序设计时以模块为单位,每个模块专职自己的工作,而要在模块间交流,在开发者和用户,开发者和开发者之间交流,就只需要相应接口即可。到了80年代,“软件工程”的概念第一次被提出,计算机的速度和容量大大提高,程序的复杂度也急剧增长,人们开始在程序设计时以模块为单位,各部分有了自己各自独立的工作,开始出现规格化抽象。比如说C++和JAVA的类说明和类实现出现了分离。之后,随着计算机软件规模日渐庞大,结构化程序设计方法开始无法满足用户的需求,面向对象程序设计(OOP)应运而生。面向对象程序设计是一场重大的革命,提高了开发人员的效率,有效地控制了软件开发的复杂度,提高了软件的可维护性和可拓展性。(本部分来自于互联网和适当修订)
规格化的设计大大提高了程序的规范性和规模化,提高了程序可读性,并降低了维护难度,所以得到了广泛的重视。
二. 作业中出现的规格bug:
第九次作业无bug。
第十次作业中因为是对第九次的补充。。。导致一些地方忘了补充repok方法和其他规格而被报了bug。。。
第十一次还是落下了一个类没写repok。。。
这种bug。。。不分析也罢。。。
三. 分析BUG产生的原因:
不想写规格,所有的规格都是最后往上加,所以东丢西落。(胡乱分析)
四. 写法改进:
- 前置条件:
第一类(无限制):
/**
* 增删流量
* @REQUIRES: None;
* @MODIFIES: guigv.flowmap;
* @EFFECTS:
* increase and reduce the flow by time interval;
*/
改为* @REQUIRES: 0<=xbegin, ybegin, xend, yend<80;
第二类(未检查repok):
/**
* 获取乘客请求
* @REQUIRES: r1!=null;
* @MODIFIES: this.request,this.sign,this.state;
* @EFFECTS:
* request == r1;
* sign == 1;
* state == 3;
* r1.tapoint ="("+Integer.toString(this.x)+","+Integer.toString(this.y)+")";
*/
改为:* @REQUIRES: r1!=null && r1.repok()!=false;
2.影响:
/**
* 读地图
* @REQUIRES: None;
* @EFFECTS:
* initialize map
*/
加上* @MODIFIES: this.map;
3.后置:
基本都上的自然语言,没得改。
五. 心得体会:
好人有好报。善恶终有报。人在做,天在看。我就不信抓着一个crash换花样报三个点,没检查map格式扣四个bug,测试文件名里面加空格的人,能是什么好人。
就这些,没了。