第三次博客

第三次博客

一、 规格发展历史

从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:\result==>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:
    @ */

四、 聚焦关系

基本没有什么关系。

五、 思路体会

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

原文地址:https://www.cnblogs.com/Arsenalgooner/p/9107560.html

时间: 2024-10-11 06:43:37

第三次博客的相关文章

第三版博客装订完毕

html: <div class="header"> <div class="wrap"> <div class="logo"> <a href="http://www.cnblogs.com/qiuge227/"> <img src="http://images.cnblogs.com/cnblogs_com/qiuge227/565381/o_logo.png

第三周博客问题总结

1.学会了```的用法 一开始并没有成功,后来发现是因为输入法没有切换成英文,今后这样的问题要避免出现.--20145106 2.问题:教材86页,Guess的代码,猜数字,不知道原先没有设定好一个数字,为什么可以在0-9之间猜中一个数 解答:百度了(Math.random()10)这行代码的意思,知道了(Math.random())的意思是在[0,1)之间随机产生一个数字,10,所以变成了[0,10)之间随机产生一个数字,所以可以进行猜数字 --20145123 3.IntegerCache.

第三版博客修改计划

为了让自己在学习中不断进步,随时保持学以致用的心态是尤为重要的.这样,一来让人有一种成就感的同时,也有一种满足感. 二来让你永远保持着一种心态,那就是谦逊,释然. 什么是进步,进步就是在每天的点点滴滴中,有所获,有所得. 什么是付出,付出就是每天你都知道自己在做什么,为什么要做,并为之努力的做. 什么是收获,收获就是即使你看不到它微小的变化,但在不知不觉中让自己仿佛变了一个人似的. 记得,记忆中感受最深的一本书是斯宾塞·约翰逊著作的<谁动了我的奶酪?>(Who Moved My Cheese?

Android 博客园客户端 (三) 博客列表和内容显示

项目地址:https://github.com/ZhangTingkuo/AndroidCnblogs.git 经过很多天的努力,终于完成了博客界面的三个Fragment列表显示,分别是,首页.推荐.阅读排行.其实,距离上次,并没有增加更多的功能. 下一步,添加新闻界面的列表和内容显示.

oo第三次博客总结

1.规则化发展历史 形式化方法的研究高潮始于20世纪60年代后期,针对当时所谓"软件危机",人们提出种种解决方法,归纳起来有两类:一是采用工程方法来组织.管理软件的开发过程:二是深入探讨程 序和程序开发过程的规律,建立严密的理论,以其用来指导软件开发实践.前者导致"软件工程"的出现和发展,后者则推动了形式化方法的深入研究.经过30多 年的研究和应用,如今人们在形式化方法这一领域取得了大量.重要的成果,从早期最简单的形式化方法一阶谓词演算方法到现在的应用于不同领域.不

对于其中三篇博客我的感想

读完三篇文章使我想到了很多,同样都是从农村出来的孩子,但是现在的生活和他们那个年代相比简直就是一个天一个地.我们现在的生活待遇远远比他们好的多的多,他们上初中高中年代是艰辛的,我们的是优越的.父母是最疼爱自己的孩子的,他把所有好的东西都给了我们.我上学期间父母把我当宝贝一样宠着,但是他们不管我的学习,学好学坏他们都不管,我初中之前还是比较争气的,成绩都在班里前十名,但是高中之后我就不行了,成绩一落千丈.我是从初三从石家庄回来上高中的,回来之后没人管我,可以说我的学业是我一个人自主的学出来的,对于

第三篇博客

第一部分.指针及其应用 一.指针及其应用 1.指针.引用和取值 什么是指针?什么是内存地址?什么叫做指针的取值?指针是一个存储计算机内存地址的变量.从指针指向的内存读取数据称作指针的取值.指针可以指向某些具体类型的变量地址,例如int.long和double.指针也可以是void类型.NULL指针和未初始化指针. 根据出现的位置不同,操作符 * 既可以用来声明一个指针变量,也可以用作指针的取值.当用在声明一个变量时,*表示这里声明了一个指针.其它情况用到*表示指针的取值. &是地址操作符,用来引

20135221黄卫 第三周博客

Linux内核源代码 回顾: 计算机三大法宝 存储程序计算机 函数调用堆栈 中断 操作系统两把宝剑 中断上下文的切换 进程上下文的切换 Linux内核源代码简介 arch/x86目录下的代码是重点关注的 init目录:内核启动相关的代码基本都在init目录下 init/main.c中start_kernel函数就相当于普通C程序的main函数 fs目录:file system文件系统 ipc目录:进程间通信 kernel目录:Linux内核核心代码在kernel目录中 二.构造一个简单的Linu

C语言第三次博客作业---单层循环结构

一.PTA实验作业 题目1:最佳情侣身高差 1.实验代码 int N,i; double height; //height表示身高 char sex; //sex表示性别 (height>=1.0&&height<=3.0); (N>0&&N<=10); scanf("%d",&N); for(i=1;i<=N;i++){ scanf("\n%c%lf",&sex,&height)