一、 规格发展历史

从20世纪60年代开始,就存在着许多不同的形式规格说明语言和软件开发方法。在形式规格说明领域一些最主要的发展过程列举如下:

1969-1972 C.A.R Hoare撰写了"计算机编程的公理基础(An Axiomatic Basis for Computer Programming)"和"数据表示的正确性证明"两篇开创性的论文,并提出了规格说明的概念。

1974-1975 B.Liskow/S.N. Zilles和J. Guttag引入了"抽象数据类型"的概念。

1976 E.W. Dijkstra定义了"最弱前置条件"的概念

1977 R.Burstall和J.Goguen提出了第一个代数规格说明语言:Clear

1988 Standford的SRI开发了代数规格说明语言OBJ3

1980-1986 C.Jones定义了VDM语言,也就是维也纳开发方法。

1985-1992 牛津大学的程序研究小组开发了Z规格说明语言。与此同时BP研究室开发了称之为B方法的面向模型的规格说明语言。

1985-1993 在MIT和Digital SRC开发了代数规格说明语言Larch

从1991年开始,面向对象的形式规格说明语言开始发展,例如,Object-Z, VDM++, CafeOBJ等语言。

1996-2000年 在欧洲CoFI(Common Framework Initiative)项目资助下开发"统一"代数规格说明语言CASL(Common Algebraic Specification Language)

上述规格说明语言可以分为两大类:

l 基于代数和公理方法(Clear, OBJ, Larch, CafeOBJ)

l 基于模型的方法(VDM, Z, B, Object-Z)

二、 bug统计及分析

功能bug

规格bug

是否有联系

第9次作业

2

1

第10次作业

5

0          

第11次作业

3

0

分析:

规格化的BUG因为当时助教群里没有要求必须使用布尔表达式,所以当时使用了大量的自然语言,结果就被同学上报了一个complete这个以后会格外注意,不会在使用自然语言。至于功能上的BUG,有的能被同学测试出来我比较感激,有的就不能使我信服,在持续申诉中,同学指出的让我比较感激的BUG有关于信誉度的选择,应该选择信誉度最高的出租车,因为当时阅读指导书不够仔细,所以优先选择了距离比较近的其次是信誉度最高的,已做改正,还有是关于流量问题的,因为指导书变更了为道路总流量,而我只在每一步行走的时候选择了一个流量最小的道路,所以被报了一个BUG。让我比较迷的BUG在于被乱报关于红绿灯的问题,一下子报了好几个,就粘贴一段我的代码,说我写的有问题我觉得很是不能接受。希望这种现象会越来越少。

三、 规格举例

  1、可以用布尔表达式但是使用了自然语言 

    /**@REQUIRES: 
       *@MODIFIES: this
    *@EFFECTS: 如果taxi没有初始化就给taxi赋值
    *@THREAD_REQUIRES:
    *@THREAD_EFFECTS:
    */

   改进后:

     /**@REQUIRES: 
       *@MODIFIES: this
    *@EFFECTS: (init==true)==>(a=new taxi())
    *@THREAD_REQUIRES:
    *@THREAD_EFFECTS:
    */

  2、没有关于异常的信息

    /** @REQUIRES: 
       *@MODIFIES: 
    *@EFFECTS:(a.contains(b))== > \result ==b;

    *@THREAD_REQUIRES:
    *@THREAD_EFFECTS:
    */

  改进后

    /**@REQUIRES: 
       *@MODIFIES: 
    *@EFFECTS: (a.contains(b))== > \result ==b;

                             otherwise==>NoSuchelement

    *@THREAD_REQUIRES:
    *@THREAD_EFFECTS:
    */

  3、直接在effect里粘贴代码

   

        /**@REQUIRES: 
        *@MODIFIES: 
     *@EFFECTS:(taxi!=null && requelist!=null)

     *@THREAD_REQUIRES:
     *@THREAD_EFFECTS:
     */

  改进后:

        /**@REQUIRES: 
        *@MODIFIES: 
     *@EFFECTS:(taxi!=null && requelist!=null)==>\result=true

            otherwise==>\result=false;

     *@THREAD_REQUIRES:
     *@THREAD_EFFECTS:
     */

  4、前置条件、后置条件不准确。

    /** @ REQUIRES: r!=null
    @ MODIFIES: this
    @ EFFECTS: RL[len++]=r
    @ THREAD_REQUIRES:
    @ THREAD_EFFECTS:
    @ */

    改进后:

    /** @ REQUIRES: r!=null
    @ MODIFIES: this
    @ EFFECTS: r.repOK()==true ==> (RL[len++]==r) && (RL.contain(r)==true);
    @ THREAD_REQUIRES:
    @ THREAD_EFFECTS:
    @ */

四、 聚焦关系

   只被抱了自然语言的描述,并没有出现关于规格与代码部分的BUG。

 

五、 基本思路和体会

      1、仔细阅读指导书,因为与指导书规定不符合被报BUG是最亏的

         2、注意写jsf时统一一个规范,这样在与别人合作的时候,也可以更好的对接,使用布尔表达式不会导致二义性

      3、时刻注意指导书的变化动态

OO第三次博客总结的更多相关文章

  1. [BUAA OO]第三次博客作业

    OO第三次博客作业 1. 规格化设计的发展 我认为,规格化设计主要源自于软件设计的两次危机.第一次是由于大量存在的goto语句,让当时被广泛应用的面向过程式的编程语言臃肿不堪,在逻辑性上与工程规模上鱼 ...

  2. OO第三次博客作业——规格

    OO第三次博客作业——规格 一.调研结果: 规格的历史: 引自博文链接:http://blog.sina.com.cn/s/blog_473d5bba010001x9.html 传统科学的特点是发现世 ...

  3. OO第三次博客作业---透过代码看设计

    不得不说的JSF 经过前几次作业的煎熬.出租车的代码量不断地增多.而出租车问题在不断的完善,这也就牵涉到一个问题,那就是最初出租车程序的设计问题,如果一开始设计的就有问题的话,那么在后来的过程中就会遇 ...

  4. 渡过OO的死劫,了解规格的意义——OO第三次博客总结

    当熬过了一次次黑暗,迎接我们的却是被扣的惨不忍睹的JSF ┭┮﹏┭┮ 一.总结调研 规格的历史 传统科学的特点是发现世界,而软件的特点是构造世界.软件的最底层就是0,1,两个离散的值.程序设计语言的三 ...

  5. 2019年北航OO第三次博客总结

    一.JML语言理论基础及其工具链 1. JML语言理论基础 JML是用于对Java程序进行规格化设计的一种表示语言,是一种行为接口规格语言(Behavior Interface Specificati ...

  6. OO第三次博客作业

    一.规格化的发展历史 最早的程序设计都是面向机器,从一开始使用的机器语言,到后面的汇编语言,都是面向机器的语言,编写困难也容易出错.随着需求的发展,程序的编写从面向机器走向面向过程,但由于goto语句 ...

  7. OO第三次博客

    规格化设计的发展历史 在计算机的早期发展中,软件开发没有可以遵循的系统方法,往往只有源代码而没有软件说明书等文档,因此这段时期的软件通用性时很有限的.后来到了20世纪60年代,软件开始被广泛使用,软件 ...

  8. OO 第三次博客总结

    调研规格化设计 1950年代,第一次分离,主程序和子程序的分离程序结构模型是树状模型,子程序可先于主程序编写.通过使用库函数来简化编程,实现最初的代码重用.产生基本的软件开发过程:分析—设计—编码—测 ...

  9. oo第三单元博客作业

    JML语言理论基础 Java建模语言(Java Modeling Language,JML)是一种进行详细设计的符号语言,他鼓励你用一种全新的方式来看待Java的类和方法.JML是一种行为接口规格语言 ...

随机推荐

  1. 备忘:移植ucos-III到stm32f103c8t6

    由于本人对linux系统内核这块比较感兴趣,下一份工作想做linux驱动相关的:于是最近一旦有空都在研究linux内核源码,面对linux内核这个庞然大物,越看越觉得不能太过急躁,且由于还要工作,只能 ...

  2. eXosip2 编译安装

    eXosip2-3.6.0 编译安装 刚开始我使用了 下面文章介绍里版本  我以为不支持tcp 其实是因为我服务端的端口 没有写对. https://www.cnblogs.com/elisha-bl ...

  3. CSS3特性

    2018-08-20 CSS3:用于控制网页的样式和布局 1.transform:rotate(30deg);      CSS3 模块 选择器 盒模型 背景和边框 文字特效 2D/3D转换 动画 多 ...

  4. 1.moocs

    “三巨头”:Coursera.edX和Udacity Coursera:http://www.coursera.org 目前发展最大的MOOCs平台,拥有相近500门来自世界各地大学的课程,门类丰富, ...

  5. jQuery.support属性

    jQuery.support 属性包含表示不同浏览器特性或漏洞的属性集. 此属性主要用于 jQuery 的内部使用 jQuery.support主要包括以下测试: boxModel: 如果这个页面和浏 ...

  6. abap将内表数据导出为excel文件

    一个不错的方案: WHEN 'EXPORT'. "导出数据 DATA : GT_TEMP TYPE TABLE OF TY_ITEM WITH HEADER LINE. LOOP AT GT ...

  7. 寄存器(cpu工作原理)(一)

    cpu概述 一个典型的cpu由运算器.控制器.寄存器等器件组成,这些器件靠内部总线相连. 区别 内部总线实现cpu内部各个器件之间的联系 外部总线实现cpu外部和主板上其他器件的联系 8060cpu有 ...

  8. mybatis调用存储过程,获取返回的游标

    将调用存储过程参数放入map中,由于返回的游标中包含很多参数,所以再写一个resultmap与之对应,类型为hashmap.设置返回的jdbcType=CURSOR,resultMap设置为id对应的 ...

  9. 记录pycharm快捷键出错的其中一个原因

    #pycharm使用小技巧  最近在使用pycharm,所遇到的一些快捷键失效的问题.如ctrl+c,ctrl+v等:包括键入时,总是需要用“i”来实现等问题.  究其缘故,是在安装pycharm时, ...

  10. 考研计算机复试(C语言复试笔试题)(精华题选)

    1.以下选择中,正确的赋值语句是(C) A.a=1,b=2 B.j++ C.a=b=5; D.y=(int)x 解析:选项A.B.D都无分号 变量 = 表达式;//赋值语句是一定带分号的 int a= ...