zoukankan      html  css  js  c++  java
  • 第三次博客

    第三次博客

    一、 规格发展历史

    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次作业

    11

    0

    第10次作业

    10

    2          

    第11次作业

    6

    3

    分析:

    自己使用的自然语言太多,就不能很好的满足条件,而且,有些规格以为可以不写,就没写,比如repok。

     

    三、 规格举例

      1、使用自然语言 

    /** @REQUIRES: r!=null

    *@MODIFIES: this
    *@EFFECTS: 给this里的变量赋值
    *@THREAD_REQUIRES:
    *@THREAD_EFFECTS:
    */

    修改后:

    /** @REQUIRES: r!=null
    *@MODIFIES: this
    *@EFFECTS: this!=null
    *@THREAD_REQUIRES:
    *@THREAD_EFFECTS:
    */

      2前置条件必须为布尔表达式

       /** @REQUIRES: r范围为0-300

    *@MODIFIES: this
    *@EFFECTS:  this!=null

    *@THREAD_REQUIRES:
    *@THREAD_EFFECTS:
    */

    修改后:

    /** @REQUIRES: 0<=r<300
    *@MODIFIES: this
    *@EFFECTS: this!=null
    *@THREAD_REQUIRES:
    *@THREAD_EFFECTS:
    */

      3、忽略了effects   

            /**@REQUIRES: 
            *@MODIFIES: 
         *@EFFECTS:None

    *@THREAD_REQUIRES:
         *@THREAD_EFFECTS:
         */

      改进后:

            /**@REQUIRES: 
            *@MODIFIES: 
         *@EFFECTS: esult==>value

         *@THREAD_REQUIRES:
         *@THREAD_EFFECTS:
         */

      4、effect直接使用代码

        /** @ REQUIRES: r!=null
        @ MODIFIES: this
        @ EFFECTS: r=r+1
        @ THREAD_REQUIRES:
        @ THREAD_EFFECTS:
        @ */

        改进后:

        /** @ REQUIRES: r!==null
        @ MODIFIES: this
        @ EFFECTS: r==old(r)+1
        @ THREAD_REQUIRES:
        @ THREAD_EFFECTS:
        @ */

    四、 聚焦关系

    基本没有什么关系。

    五、 思路体会

    以后要更深入地理解规格,不用自然语言,为了提高代码质量而写规格,为了提升自己而去学习,让自己在这些方面变得完美。

  • 相关阅读:
    POJ 3630 Phone List/POJ 1056 【字典树】
    HDU 1074 Doing Homework【状态压缩DP】
    POJ 1077 Eight【八数码问题】
    状态压缩 POJ 1185 炮兵阵地【状态压缩DP】
    POJ 1806 Manhattan 2025
    POJ 3667 Hotel【经典的线段树】
    状态压缩 POJ 3254 Corn Fields【dp 状态压缩】
    ZOJ 3468 Dice War【PD求概率】
    POJ 2479 Maximum sum【求两个不重叠的连续子串的最大和】
    POJ 3735 Training little cats【矩阵的快速求幂】
  • 原文地址:https://www.cnblogs.com/Arsenalgooner/p/9107560.html
Copyright © 2011-2022 走看看