OO第三次博客作业

一、 规格化设计的发展历史


 

  高级语言的发展经历了从早期语言到结构化程序设计语言,从面向过程到非过程化程序语言的过程。相应地,软件的开发也由最初的个体手工作坊式的封闭式生产,发展为产业化、流水线式的工业化生产。

  6 0年代中后期,软件越来越多,规模越来越大,而软件的生产基本上是人自为战,缺乏科学规范的系统规划与测试、评估标准,其恶果是大批耗费巨资建立起来的软件系统,由于含有错误而无法使用,甚至带来巨大损失,软件给人的感觉是越来越不可靠,以致几乎没有不出错的软件。这一切,极大地震动了计算机界,史称“软件危机”。人们认识到:大型程序的编制不同于写小程序,它应该是一项新的技术,应该像处理工程一样处理软件研制的全过程。程序的设计应易于保证正确性,也便于验证正确性。1 9 6 9年,提出了结构化程序设计方法,1 9 7 0年,第一个结构化程序设计语言—P a s c a l语言出现,标志着结构化程序设计时期的开始。

  针对一个规格抽象的实现与针对其他规格抽象的实现无关,相互之间不会产生影响;当修改一个规格抽象的实现时,不需要对使用该抽象的其他任何规格抽象及其实现进行调整。所以规格化设计慢慢得到了人们的重视。

二、规格bug


序号

bug类别

对应方法的代码行数

产生原因

1

未写JSF

4

忘记写JSF

2

未写JSF

65

忘记写JSF

三、 分别列举5个前置条件和5个后置条件的不好写法,并给出改进写法


 

例1.

修改前:

void jiedan(TaxiThread taxi)

       {

              /**

               * @REQUIRES: None;

               * @MODIFIES: this.jiedanlist;

               * @EFFECTS: the given taxi is added to this.jiedanlist;

               */

              jiedanlist.add(taxi);

       }

修改后:

void jiedan(TaxiThread taxi)

       {

              /**

               * @REQUIRES: None;

               * @MODIFIES: this.jiedanlist;

 * @EFFECTS: this.jiedanlist.size ==\old(this.jiedanlist).size+1

*&& this.jiedanlist.contains(taxi)==true

               */

              jiedanlist.add(taxi);

       }

例2.

修改前:

public TaxiThread(int num,TaxiGUI gui,int[][] map,List<Command> list,int[][] light)

       {

              /**

               * @REQUIRES: None;

               * @MODIFIES: this.num,this.gui,this.map,this.list;

               * @EFFECTS: this.num==num,this.gui==gui,this.map==map,this.list==list;

               */

              this.num=num;

              this.gui=gui;

              this.map=map;

              this.list=list;

              this.light=light;

       }

修改后:

public TaxiThread(int num,TaxiGUI gui,int[][] map,List<Command> list,int[][] light)

       {

              /**

               * @REQUIRES: (\all int num;0<=num<100);

               * @MODIFIES: this.num,this.gui,this.map,this.list;

               * @EFFECTS: this.num==num,this.gui==gui,this.map==map,this.list==list;

               */

              this.num=num;

              this.gui=gui;

              this.map=map;

              this.list=list;

              this.light=light;

       }

例3.

修改前:

public Command(Point src,Point dst,long time,String str)

       {

              /**

               * @REQUIRES: None;

               * @MODIFIES: this.src,this.dst,this.time,this.str;

               * @EFFECTS :Set these variables to their initial values;

               */

              this.src=src;

              this.dst=dst;

              this.time=time;

              this.str=str;

       }

修改后:

public Command(Point src,Point dst,long time,String str)

       {

              /**

               * @REQUIRES: None;

               * @MODIFIES: this.src,this.dst,this.time,this.str;

               * @EFFECTS:this.src=src,this.time=time,this.str=str;

               */

              this.src=src;

              this.dst=dst;

              this.time=time;

              this.str=str;

       }

例4.

修改前:

       void setpoint(int n,int m)

       {

              /**

               * @REQUIRES: None;

               * @MODIFIES: this.pointx,this.pointy;

               * @EFFECTS: this.pointx,this.pointy is set to be the given number;

               */

              pointx=n;

              pointy=m;

       }

修改后:

       void setpoint(int n,int m)

       {

              /**

               * @REQUIRES: (\all int n;0<=n<80);

                      (\all int m;0<=m<80);

               * @MODIFIES: this.pointx,this.pointy;

               * @EFFECTS: this.pointx,this.pointy is set to be the given number;

               */

              pointx=n;

              pointy=m;

       }

 

四、 按照作业分析被报的功能bug与规格bug在方法上的聚集关系


 

序号

方法名

功能bug数

规格bug数

1

stata1

1

0

2

Main

1

0

3

LightThread

1

0

4

getlight

0

1

5

cross

0

1

6

state2

1

0

7

MapInfo

1

0

功能bug与规格bug在方法上没有聚集关系。

五、 思路与体会


 

  REQUIRES需要我们看传到方法里的参数有哪些限制条件;MODIFIES要查看这个方法里需要改变的变量;EFFECTS:对于需要修改的变量,观察它是如何变化的,从而得到它的布尔表达式。

  这几次遇到的同学都挺善良的,但是有一次我测的那个同学很不友好,申诉的时候友好的交流都不行,上来第一句话就好像我欠了他多少钱,又不是说不给他改申诉,你好好说出自己的理由就行了呗,非得带着令人很不爽的语气交流。

  这几次作业都比较简单,主要训练我们写JSF的能力。OO课程快结束了,还是学到了不少东西,行百里者半九十,剩下的几次好好加油哈!


 

posted @ 2018-05-30 08:43  孟祥景  阅读(151)  评论(0编辑  收藏  举报