OO第三次博客总结
一、 规格发展历史
从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第三次博客总结的更多相关文章
- [BUAA OO]第三次博客作业
		
OO第三次博客作业 1. 规格化设计的发展 我认为,规格化设计主要源自于软件设计的两次危机.第一次是由于大量存在的goto语句,让当时被广泛应用的面向过程式的编程语言臃肿不堪,在逻辑性上与工程规模上鱼 ...
 - OO第三次博客作业——规格
		
OO第三次博客作业——规格 一.调研结果: 规格的历史: 引自博文链接:http://blog.sina.com.cn/s/blog_473d5bba010001x9.html 传统科学的特点是发现世 ...
 - OO第三次博客作业---透过代码看设计
		
不得不说的JSF 经过前几次作业的煎熬.出租车的代码量不断地增多.而出租车问题在不断的完善,这也就牵涉到一个问题,那就是最初出租车程序的设计问题,如果一开始设计的就有问题的话,那么在后来的过程中就会遇 ...
 - 渡过OO的死劫,了解规格的意义——OO第三次博客总结
		
当熬过了一次次黑暗,迎接我们的却是被扣的惨不忍睹的JSF ┭┮﹏┭┮ 一.总结调研 规格的历史 传统科学的特点是发现世界,而软件的特点是构造世界.软件的最底层就是0,1,两个离散的值.程序设计语言的三 ...
 - 2019年北航OO第三次博客总结
		
一.JML语言理论基础及其工具链 1. JML语言理论基础 JML是用于对Java程序进行规格化设计的一种表示语言,是一种行为接口规格语言(Behavior Interface Specificati ...
 - OO第三次博客作业
		
一.规格化的发展历史 最早的程序设计都是面向机器,从一开始使用的机器语言,到后面的汇编语言,都是面向机器的语言,编写困难也容易出错.随着需求的发展,程序的编写从面向机器走向面向过程,但由于goto语句 ...
 - OO第三次博客
		
规格化设计的发展历史 在计算机的早期发展中,软件开发没有可以遵循的系统方法,往往只有源代码而没有软件说明书等文档,因此这段时期的软件通用性时很有限的.后来到了20世纪60年代,软件开始被广泛使用,软件 ...
 - OO 第三次博客总结
		
调研规格化设计 1950年代,第一次分离,主程序和子程序的分离程序结构模型是树状模型,子程序可先于主程序编写.通过使用库函数来简化编程,实现最初的代码重用.产生基本的软件开发过程:分析—设计—编码—测 ...
 - oo第三单元博客作业
		
JML语言理论基础 Java建模语言(Java Modeling Language,JML)是一种进行详细设计的符号语言,他鼓励你用一种全新的方式来看待Java的类和方法.JML是一种行为接口规格语言 ...
 
随机推荐
- 【转】链接伪类(:hover)CSS背景图片有闪动BUG
			
来源:http://www.css88.com/archives/744 --------------------------------------------------------------- ...
 - 数据库 ACID
			
ACID是指一个事务本质上有四个特点: Atomicity:原子性 Consistency:一致性 Isolation:隔离性 Durablilty:耐久性 原子性 原子性是指事务是一个不可分割的工作 ...
 - c# 使用Renci.SshNet.dll操作SFTP总结
			
1.操作类 /// <summary> /// SFTP操作类 /// </summary> public class SFTPHelper { #region 字段或属性 p ...
 - Qt UI tips
			
窗口居中: adjustSize(); move((availableGeometry.width() - width()) / 2, (availableGeometry.height() - h ...
 - 信用卡欺诈数据的分析-excel篇
			
本篇文章为大家提供了数据集分析的思路和步骤,同时也分享了自己的经验. 一.背景 反欺诈是一项识别服务,是对交易诈骗.网络诈骗.电话诈骗.盗卡盗号等行为的一项风险识别.其核心是通过大数据的收集.分析和处 ...
 - 数据库SQL优化大总结1之- 百万级数据库优化方案
			
转载自:https://blog.csdn.net/wuhuagu_wuhuaguo/article/details/72875054
 - webclient上传数据到ashx服务
			
1.上传参数 UploadData()方法可以上传数据参数,需要将所要上传的数据拼成字符. // 创建一个新的 WebClient 实例. WebClient myWebClient = new ...
 - 假如有Thread1、Thread2、Thread3、Thread4四条线程分别统计C、D、E、F四个盘的大小
			
假如有Thread1.Thread2.Thread3.Thread4四条线程分别统计C.D.E.F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现? 实现1:用concur ...
 - CodeForces - 1101B
			
题目: B. Accordion time limit per test 3 seconds memory limit per test 256 megabytes input standard in ...
 - mongodb数据迁移到hbase
			
mongodb数据迁移到hbase 导入包 # encoding: utf-8 ''' @author: zcc @license: (C) Copyright 2013-2017, Node Sup ...