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:
        @ */

    四、 聚焦关系

    基本没有什么关系。

    五、 思路体会

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

  • 相关阅读:
    app.config应该放哪?
    Connection 和Dispose的学习日志
    简单的sqlhelper的学习日志
    EF 事务(非分布式事务)
    Angularjs 地址联动2.1.1
    C# 如何物理删除有主外键约束的记录?存储过程实现
    C# 枚举基本用法及扩展方法
    JS 去除重复元素的方法
    MVC4程序运行报错
    ASP.NET MVC4 & Entity Framework 6.0 IIS 部署出错解决方案
  • 原文地址:https://www.cnblogs.com/Arsenalgooner/p/9107560.html
Copyright © 2011-2022 走看看