第九到十一次做业总结

1、规格化设计的大体发展历史

这里说到的规格化设计就是将程序进行结构化分析的表现方式。结构化分析在1980年代起开始广为使用。结构化分析包括将系统概念转换为用数据及控制的来表示。数据字典用来描述数据和指令的流动,而用程序规格来描述交易或数据转换的相关信息。结构化分析是许多结构化方法中的一部分。“结构化分析是系统分析、设计及编程技术的组合,其目的是为了处理1960至1980年软件开发所遇到的问题,也没有将需求及设计文件化的技术。可是随着系统愈来愈大也更加复杂,信息系统的发展也变得愈来愈困难。”为了方便管理大而复杂的系统,慢慢演进了更多的结构化方法。80年代后,面向对象的设计兴起,相比于单纯的结构化设计,面向对象的设计从审视问题的角度上就有了差别,程序发生了从围绕“行为”执行到围绕“客体”执行的变化,随之而来的,就是封装性地提升,可重用性的提升,能够说,面向对象进一步实现告终构化设计,是结构化设计更进一步的实现。算法

规格化设计的重要性就在于,可让软件设计者和真正写程序的人员之间进行有效的沟通。由于用天然语言进行交流老是会发生歧义,致使交流和沟通不便。只有双方维持着同一套系统的,高效的语言,才能真正发挥规格化设计的做用。编程

 

2、规格bug

modifies不完整 方法代码行数:150
不符合JSF规范 方法代码行数:1
overview是否明确抽象 类代码行数:162

3、规格bug的产生缘由

一、overview的问题是由于忘记撰写函数

二、不符合JSF规范是由于在遍历集合元素时,误把分号写做冒号学习

三、modifies不完整是由于成员变量没有加this.this

4、分别列举5个前置条件和5个后置条件的很差写法,并给出改进写法

REQUIRES:spa

(1)*@REQUIRES:String类型的地图路径,System.in。改:*@REQUIRES:path!=null;线程

(2)在方法的传入参数有限制的时候,*@REQUIRES:None;改:**!=null;设计

(3)传入参数涉及坐标时:int sx, int sy, int dx, int dy,*@REQUIRES:None; 改:@REQUIRES: 0<=sx<80&&0<=sy<80&&0<=dx<80&&0<=dy<80对象

(4)get类的方法中,待返回的值不加以约束,*@REQUIRES:None;改:this.*!=null;开发

(5)构造方法中,对传入的参数不进行约束,*@REQUIRES:None;改:**!=null;

EFFECTS:

(1)天然语言撰写。*@EFFECTS:查询是否重复;改:*@EFFECTS:n.exists==>(\result==true);!n.exists==>(\result==false);

(2)对异常的处理不明确。(Unknown situation)==>exceptional_behavior(Exception);改:(I/O error occurs)==>exceptional_behavior (IOException);

(3)涉及算法。(graph[sx*80+sy][dx*80+dy]==1)?true:false;改:

* @EFFECTS: (road.open)==>(\result==true);

* (road.close)==>(\result==false);

改:

(4)使用synchronized关键字没有进行线程约束。改:

* @THREAD_REQUIRES: \locked(this);

* @THREAD_EFFECTS: \locked(this);

(5)出现恒等式:

* @EFFECTS: requestQueue == requestQueue;

* cars == cars;

* taxiGUI == taxiGUI;

改:

* @EFFECTS:this.requestQueue == requestQueue;

* this.cars == cars;

* this.taxiGUI == taxiGUI;

5、功能bug与规格bug在方法上的汇集关系

方法名 功能bug 规格bug
pathlength 1个(搜索算法效率低) 1个

TargetChange

1个(红绿灯时间差别) 1个
noTargetChange 1个(流量最小的控制) 1个

在上述三个较为重要的方法中,实现的功能较多,所以而产生的bug会比较集中,也正由于实现功能较多,会致使规格的撰写较为冗长,也更容易出现错误。

6、设计规格和撰写规格的基本思路和体会

在撰写规格时,我关注的是这个方法究竟改变了什么,以modifies为纲,不去在意具体的算法,而是在这个方法实现以后,个人程序应该进行到什么程度,改变了什么,返回值是什么。在撰写过程当中,有些方法的篇幅较长,改变的东西较多,理清全部的内容须要较长的时间并且写出来的规格也较多较杂。惟一能解决的办法就是,在这个方法中继续拆分出更小的函数单元,分别撰写规格。由于,这几回的做业都是完成一个工程,咱们须要从一砖一瓦开始搭建,当有了一个详细的设计图(规格)以后,整个建筑的搭建就会容易不少。在之后的学习中就要学会先进行规格的设计,明确每一个类,每一个方法的做用,使这个过程再也不是零碎的,而是成体系的,有顺序的。

相关文章
相关标签/搜索