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是一种行为接口规格语言 ...
随机推荐
- httpd-2.4基本使用及lamp基础(01)
Centos 6 默认安装http版本为2.2,如果想安装2.4版本则需要升级apr centos6默认:apr-1.3.9,apr-util-1.3.9 编译安装步骤: 1.4+版的apr和apr- ...
- java对象深度拷贝
如何利用序列化来完成对象的拷贝呢?在内存中通过字节流的拷贝是比较容易实现的.把母对象写入到一个字节流中,再从字节流中将其读出来,这样就可以创建一个新的对象了,并且该新对象与母对象之间并不存在引用共享的 ...
- Ubuntu 18.04 下 Redis 环境搭建
一.安装 Redis ① 下载 wget http://download.redis.io/releases/redis-3.2.8.tar.gz ② 解压 tar -zxvf redis-3.2.8 ...
- Linux下手动编译shogun
手动编译shogun,如果按照直接按照官网上的步骤进行,会踩非常多的坑,下面分享一下在下的编译过程,希望能为阁下提供些许借鉴. 1. git clone https://github.com/shog ...
- https环境搭建(本地搭建)
1.创建自签名证书 2. 在iis中绑定https 先解析一个域名. 运行网站 示不安全,点击继续浏览即可.在实际的环境中,你拿到的是一个实际的证书,所以不会产生类似的报告安全证书有问题.
- CodeBlocks中我遇到的无法调试问题及解决方案
CodeBlocks中遇到无法调试问题,可能有很多种,以下是我遇到的问题及解决方案 1.当无法调试时,如果IDE提示你出现下图中红色问题,说明你的调试器没有装好 2.在菜单栏点击Settings--D ...
- Windows 2008 安装Sql server 2005
Windows 2008 安装Sql server 2005 进入下载的文件中,双击打开:splash.hta 文件进行安装 根据自己的系统来选择性进行安装,这里我们选择第二项:基于 x64 的操作系 ...
- 假如有Thread1、Thread2、Thread3、Thread4四条线程分别统计C、D、E、F四个盘的大小
假如有Thread1.Thread2.Thread3.Thread4四条线程分别统计C.D.E.F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现? 实现1:用concur ...
- NFS, web,负载均衡,Nginx yum 源码安装
作业一:nginx服务1.二进制安装nginx 2.作为web服务修改配置文件 3.让配置生效,验证配置 [root@localhost ~]# systemctl stop firewalld.s ...
- matlab 将数字矩阵转换成图像
MATLAB中,常常使用imshow()函数来显示图像,而此时的图像矩阵可能经过了某种运算.在matlab中,为了保证精度,经过了运算的图像矩阵I其数据类型会从unit8型变成double型.如果直接 ...