这里说到的规格化设计就是将程序进行结构化分析的表现方式。结构化分析在1980年代起开始广为使用。结构化分析包括将系统概念转换为用数据及控制的来表示。数据字典用来描述数据和指令的流动,而用程序规格来描述交易或数据转换的相关信息。结构化分析是许多结构化方法中的一部分。“结构化分析是系统分析、设计及编程技术的组合,其目的是为了处理1960至1980年软件开发所遇到的问题,也没有将需求及设计文件化的技术。可是随着系统愈来愈大也更加复杂,信息系统的发展也变得愈来愈困难。”为了方便管理大而复杂的系统,慢慢演进了更多的结构化方法。80年代后,面向对象的设计兴起,相比于单纯的结构化设计,面向对象的设计从审视问题的角度上就有了差别,程序发生了从围绕“行为”执行到围绕“客体”执行的变化,随之而来的,就是封装性地提升,可重用性的提升,能够说,面向对象进一步实现告终构化设计,是结构化设计更进一步的实现。算法
规格化设计的重要性就在于,可让软件设计者和真正写程序的人员之间进行有效的沟通。由于用天然语言进行交流老是会发生歧义,致使交流和沟通不便。只有双方维持着同一套系统的,高效的语言,才能真正发挥规格化设计的做用。编程
modifies不完整 | 方法代码行数:150 |
不符合JSF规范 | 方法代码行数:1 |
overview是否明确抽象 | 类代码行数:162 |
一、overview的问题是由于忘记撰写函数
二、不符合JSF规范是由于在遍历集合元素时,误把分号写做冒号学习
三、modifies不完整是由于成员变量没有加this.this
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;
方法名 | 功能bug | 规格bug |
pathlength | 1个(搜索算法效率低) | 1个 |
TargetChange |
1个(红绿灯时间差别) | 1个 |
noTargetChange | 1个(流量最小的控制) | 1个 |
在上述三个较为重要的方法中,实现的功能较多,所以而产生的bug会比较集中,也正由于实现功能较多,会致使规格的撰写较为冗长,也更容易出现错误。
在撰写规格时,我关注的是这个方法究竟改变了什么,以modifies为纲,不去在意具体的算法,而是在这个方法实现以后,个人程序应该进行到什么程度,改变了什么,返回值是什么。在撰写过程当中,有些方法的篇幅较长,改变的东西较多,理清全部的内容须要较长的时间并且写出来的规格也较多较杂。惟一能解决的办法就是,在这个方法中继续拆分出更小的函数单元,分别撰写规格。由于,这几回的做业都是完成一个工程,咱们须要从一砖一瓦开始搭建,当有了一个详细的设计图(规格)以后,整个建筑的搭建就会容易不少。在之后的学习中就要学会先进行规格的设计,明确每一个类,每一个方法的做用,使这个过程再也不是零碎的,而是成体系的,有顺序的。