一、 规格发展历史

从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. 磁盘当前目录下存在文件 c1.txt,其中存放了一段英文文字。请编程实现将c1.txt中英文文字全部转换为答谢字母,并保存到c2.txt中。要求:c2.txt文件前面保存的是c1.txt文案中的原始文字,后面紧跟着的是转换后的文字

    #include"stdio.h"#include"string.h" void main(){ FILE *fp1,*fp2; char ch[1000]=& ...

  2. 基于VC++的网络扫描器设计与实现

    本文正文其实是自己的毕业论文,现在搬上来有两个原因. 一是之前大学的文档都放在百度网盘上,大概去年的时候百度网盘改版搞得不太稳定,文件夹移动次数一多里边就会有一些文件丢失了,也没有很在意.但前几天看申 ...

  3. 运用python绘制小猪佩奇

    用python绘制小猪佩奇 1.打开idle 2.点击File-New Files 3.输入以下代码 1. from turtle import * 2. 3. def nose(x,y):#鼻子 4 ...

  4. Webpack学习-Plugin

    原文地址:http://wushaobin.top/2019/03/15/webpackPlugin/ 什么是Plugin? 在Webpack学习-工作原理(上)一文中我们就已经介绍了Plugin的基 ...

  5. MOS管应用概述(四):基本参数

    mos管的基本参数,大家熟悉的必然是Ids电流,Ron导通电阻,Vgs的阈值电压,Cgs.Cgd.Cds这几项,然而在高速应用中,开关速度这个指标比较重要.<ignore_js_op> 上 ...

  6. python-之-深浅拷贝一

    深浅拷贝 一.数据为不可变类型 (str.int.bool) import copy v1 = "abc" v2 = copy.copy(v1) v3 = copy.deepcop ...

  7. 动态规划———最长公共子序列(LCS)

    最长公共子序列+sdutoj2080改编: http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Contest/contestproblem/cid/ ...

  8. OO第二单元的总结

    三周复三周,一轮又一轮,我似乎已经将OO是为我的生活必须品了.在与同学吐槽者身负-3楼与20楼重任的A电梯君,以及我们都是上一层下两层不用电梯的五号青年的等等欢声笑语中结束了第二轮的OO作业.当然这次 ...

  9. Mantis:Mantis rest api url 404 Not Found.解决过程纪录

    测试Mantis rest api时碰到的问题:404 Not Found. 根据文件,Mantis rest api的预设url是{{url}}/api/rest/{{controller}}. 其 ...

  10. ionic3样例应用

    https://github.com/jujunjun/ionic3-study 该应用包括的样例内容有: 文件上传,上拉更新,下拉加载,弹出层,列表,加载中,栅格,按钮等. php提供的文件上传接口 ...