【面向对象】第三单元总结——JML
梳理JML语言的理论基础、应用工具链情况
JML语言理论基础
JML(Java Modeling Language)是一种行为规范接口语言,通过使用不会被编译的注释形式,和固定关键字的语法,指定Java模块代码的行为。这些行为包括需要满足的前置条件、后置条件,和可能产生的副作用等。它贯彻了契约方法设计理念,通过JML及其支持工具,不仅可以基于规格自动构造测试用例,并整合了SMT Solver等工具 以静态方式来检查代码实现对规格的满足情况。
JML的语法、关键字及其释义如下所示:
- JML以javadoc注释的方式来表示规格,有两种注释方式,行注释和块注释。其中行注释的表示方式 为 //@annotation ,块注释的方式为 /* @ annotation @*/ 。
- @requires 子句定义该方法的前置条件
- @assignment 子句列出该方法可以修改的类成员属性
- @ensure 子句定义了该方法的后置条件
- @pure 子句表明该方法无副作用,即仅具有查询功能
- @constraint 子句定义了状态变化约束
- @invariant 子句定义了全过程中的不变式
- \nothing 关键词表明该方法对类成员属性不进行修改
- \result 关键词代表该方法的返回值
- \forall表达式:全称量词修饰的表达式,表示对于给定范围内的元素,每个元素都满足相应的约束。
- \exists表达式: 存在量词修饰的表达式,表示对于给定范围内的元素,存在某个元素满足相应的约束。
- \sum表达式:返回给定范围内的表达式的和。
- \product表达式:返回给定范围内的表达式的连乘结果。
- \max表达式:返回给定范围内的表达式的最大值。
- \min表达式:返回给定范围内的表达式的最小值。
- \num_of表达式:返回指定变量中满足相应条件的取值个数。
JML的应用工具链:
- OpenJML:OpenJML可以对含有JML的代码进行编译 ,并提供不同类型的选项进行检查。-esc可以静态检查可能出现的隐藏bug,-rac是运行时检查,-check则可以检查代码是否符合JML规格要求。
- JMLUnitNG:可以根据代码中所写JML规范自动生成测试框架进行自动化测试。
构架设计分析
第一次作业
第一次作业主要是实现一个路径类Path和一个容器类PathContainer 。


第二次作业是在第一次作业的基础上实现数据结构类Graph,新增功能包括图的连通性和查找路径。



bug与修复
第一二次作业的bug主要是在添加重复的路径时,如分别在第一句和第三句添加 add path 1 2 3 / add path 1 2 3,我的作业会把其当成两条路径来记录,即id分别为1和2。
心得体会
这次作业给我留下了较为惨痛的教训,小bug不予以修改,会在之后的测试中很严重地影响到正确性。要防微杜渐。
【面向对象】第三单元总结——JML的更多相关文章
- OO第三单元——基于JML的社交网络总结
OO第三单元--基于JML的社交网络总结 一.JML知识梳理 1)JML的语言基础以及基本语法 JML是用于java程序进行规格化设计的一种表示语言,是一种行为接口规格语言.其为严格的程序设计提供了一 ...
- OO第三单元作业(JML)总结
OO第三单元作业(JML)总结 目录 OO第三单元作业(JML)总结 JML语言知识梳理 使用jml的目的 jml注释结构 jml表达式 方法规格 类型规格 SMT Solver 部署JMLUnitN ...
- 第三单元总结——JML契约式编程
OO第三单元博客作业--JML与契约式编程 OO第三单元的三次作业都是在课程组的JML规格下完成.完成作业的过程是契约式编程的过程:设计者完成规格设计,实现者按照规格具体实现.作业正确性的检查同样围绕 ...
- OO第三单元总结——JML
目录 写在前面 JML理论基础 JML工具链 JMLUnitNG的使用 架构设计 Bug分析 心得体会 写在前面 OO的第三单元学习结束了,本单元我们学习了如何使用JML语言来对我们的程序进行规格化设 ...
- 2020 OO 第三单元总结 JML语言
title: 2020 OO 第三单元总结 date: 2020-05-21 10:10:06 tags: OO categories: 学习 第三单元终于结束了,这是我目前为止最惨的一单元,第十次作 ...
- 面向对象第三单元博客(JML)
// demo/Graph.java package demo; import java.util.ArrayList; public class Demo { /*@ public norm ...
- OO第三单元总结——JML规格设计
• 1.JML语言的理论基础.应用工具链情况 JML(Java Modeling Language)—— java建模语言,是一种行为接口规范语言( behavioral interface spec ...
- 2019年北航OO第三单元(JML规格任务)总结
一.JML简介 1.1 JML与契约式设计 说起JML,就不得不提到契约式设计(Design by Contract).这种设计模式的始祖是1986年的Eiffel语言.它是一种限定了软件中每个元素所 ...
- OO随笔之追求完美的第三单元——初试JML
前言 这一章的JML比较简单,那么大家的关注点自然地移到了性能优化上.于是大家一股脑地去利用各种数据结构去做时间上的优化(当然很多人最后还是倒在了正确性上),故称追求完美的一单元.当然这也是得益于JM ...
随机推荐
- HTML5深入学习之鼠标跟随,拖拽事件
知识点(鼠标跟随): mousedown: 当用户用鼠标点击在某一元素上就会触发该事件 mouseover: 当鼠标指针在某一元素上移动就会触发改事件 下面这个例子的效果就是鼠标点击元素后,元素跟着 ...
- CSS 标签显示模式
标签的类型(显示模式) HTML标签一般分为块标签和行内标签两种类型,它们也称块元素和行内元素. 一.块级元素(block-level) 每个块元素通常都会独自占据一整行或多整行,可以对其设置宽度.高 ...
- Linux CentOS7 安装FTP服务器
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_39680564/article/de ...
- Httpd服务进阶知识-LAMP源码编译安装
Httpd服务进阶知识-LAMP源码编译安装 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 想必大家都知道,动态资源交给fastcgi程序处理,静态资源依旧由httpd服务器处理 ...
- 用 ConfigMap 管理配置
1. ConfigMap介绍管理配置 ConfigMap介绍 Secret 可以为 Pod 提供密码.Token.私钥等敏感数据:对于一些非敏感数据,比如应用的配置信息,则可以用 ConfigMap ...
- Go入门:创建第一个Go工程
前言 我是一名iOS开发. 因为公司后台都用的Go. 因为对服务端不了解. 所以想自己学习学习. 环境 因为自己的电脑是mac.然后在阿里云买的是centOS的服务器. 所以下面搭建的环境都是在cen ...
- 《TensorFlow2深度学习》学习笔记(一)Tensorflow基础
本系列笔记记录了学习TensorFlow2的过程,主要依据 https://github.com/dragen1860/Deep-Learning-with-TensorFlow-book 进行学习 ...
- spring mvc @RequestMapping method 不写的话,默认GET、POST都支持,根据前端方式自动适应
@RequestMapping(value="/") method 不写的话,默认GET.POST都支持,根据前端方式自动适应.
- file size php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- GeoIP简介与资源,定位经纬度,获取用户IP
所谓GeoIP,就是通过来访者的IP,定位他的经纬度,国家/地区,省市,甚至街道等位置信息.这里面的技术不算难题,关键在于有个精准的数据库.有了准确的数据源就奇货可居赚点小钱,可是发扬合作精神,集体贡 ...