JML理论基础

  • JML规定了一些语法,用这些语法可以描述一个方法,一个类的行为,理论基础是离散数学吧

JML常用语法

  • 前置条件: 使用 require + 表达式 ,表达式一般为布尔表达式
  • 副作用: assignable列出这个方法能够修改的类成员属性,\nothing是个关键词,表示这个方法不对任何成员属性进行修改,所以是一个pure方法。
  • 后置条件: 使用 ensures + 表达式 , 表达式一般为布尔表达式.
  • 常用语法:
    • 原子表达式:

      \result: 表示返回值.

      \old(expr): 用来表示一个表达式expr在相应方法执行前的取值.

      \not_assigned(x,y,...)表达式:用来表示括号中的变量是否在方法执行过程中被赋值。

    • 量化表达式(谓词逻辑):

      \forall x;P(x);Q(x) ,对于所有的x,P(x)为真则Q(x)为真,

      \exits x;P(x);Q(x),存在x,P(x)为真则Q(x)为真,

      \sum i; 求和范围 ;累加值, 类似于数学中的求和

      \prodoct i ;求积范围 ;累乘值, 类似于数学的求积

    • 集合表达式 没用到

    • 操作符: 等价 <==> 蕴含 ==>

    • 异常:

      public normal_behavior 正常行为

      public exceptional_behavior 要抛出异常的行为

      signals (***Exception e) b_expr; 当满足表达式时,抛出异常e

      signals_only Exception e 当满足前置条件时抛出异常e

    • 类型规格:

      invariant 可见状态下满足,可见状态一般指函数运行前后

      constraint 状态变化约束对前序可见状态和当前可见状态的关系进行约束

JML工具链

模型分析

本单元的作业基本按照规格来实现即可,在模型构建上也没有过多的思考过.

bug和修复情况

  • 第一次作业出现了没进互测的情况,一共出现了两个bug,其中一个是因为在修改checkstyle的时候删掉了一个空的if语句块,错了.另外一个是dfs写的复杂度太高了.
  • 第二次作业无bug
  • 第三次作业在求最短路径的时候又出现了tle的情况,基本是卡在了2秒多一点点,采用了堆优化加diji的算法,但是在实现上还是出了点问题,导致速度比别人慢了一秒多.bug修复时,疯狂修改代码的复杂度,最后发现是因为在network里面没有记录value导致了存取有一些时间上的差异.

规格撰写和理解

写规格真的不是一件容易的事情,感觉写规格要比写代码还要复杂,现实生活中应该不会有哪个团队写代码前先写一份规格吧.规格是站在更高的角度,使得对代码的测试更加遍历,那么你对规格的正确性的测试我自己感觉是远大于直接进行代码的测试,所以在这块感觉是很没有必要去搞这个规格的.如果规格就写错了,那实现者岂不是很尴尬.

BUAAOO第三单元总结的更多相关文章

  1. linux学习笔记:第三单元 Linux命令及获取帮助

    第三单元 Linux命令及获取帮助 11) 了解Linux命令的语法格式:命令 [选项] [参数]2) 掌握命令格式中命令.选项.参数的具体含义a) 命令:告诉Linux(UNIX)操作系统做(执行) ...

  2. 面向对象OO第三单元总结

    第三单元OO总结博客 1 梳理JML语言的理论基础.应用工具链情况 由于篇幅原因,这里只梳理几个在本单元常用的 注释结构 行注释://@annotation 块注释:/* @ annotation @ ...

  3. SAP标准培训课程C4C10学习笔记(三)第三单元

    第三单元:Account and Contact management Account和Contact概念和SAP CRM里是一样的: 并且支持同ERP和CRM的客户主数据做同步. 关于具体的同步场景 ...

  4. OO第三单元总结——JML

    目录 写在前面 JML理论基础 JML工具链 JMLUnitNG的使用 架构设计 Bug分析 心得体会 写在前面 OO的第三单元学习结束了,本单元我们学习了如何使用JML语言来对我们的程序进行规格化设 ...

  5. OO第三单元作业总结

    OO第三单元作业总结--JML 第三单元的主题是JML规格的学习,其中的三次作业也是围绕JML规格的实现所展开的(虽然感觉作业中最难的还是如何正确适用数据结构以及如何正确地对于时间复杂度进行优化). ...

  6. 规格化设计——OO第三单元总结

    规格化设计--OO第三单元总结 一.JML语言理论基础.应用工具链 1.1 JML语言 ​ JML(java modeling language)是一种描述代码行为的语言,包括前置条件.副作用等等.J ...

  7. 【OO学习】OO第三单元作业总结

    [OO学习]OO第三单元作业总结 第三单元,我们学习了JML语言,用来进行形式化设计.本单元包括三次作业,通过给定的JML来实行了一个对路径的管理系统,最后完成了一个地铁系统,来管理不同的线路,求得关 ...

  8. OO第三单元(地铁,JML)单元总结

    OO第三单元(地铁,JML)单元总结 这是我们OO课程的第二个单元,这个单元的主要目的是让我们熟悉并了解JML来是我们具有规格化编程架构的思想.这个单元的主题一开始并不明了,从第一次作业的路径到第二次 ...

  9. BUAA OO 2019 第三单元作业总结

    目录 总 JML规格化设计 理论基础 工具链 规格验证 验证代码 代码静态检查 自动生成测试样例 生成结果 错误分析 作业设计 第九次作业 架构 代码实现 第十次作业 架构 代码实现 第十一次作业 架 ...

随机推荐

  1. idea没有错误提示的解决方法(一直处于错误分析中)

    仅作记录,以防再次发生却不记得. 原文链接:https://blog.csdn.net/a755199443/article/details/90084316 问题描述:idea没有自动报错.例如随便 ...

  2. 学习笔记-python基础

    一. 1.python按装 1.1 官网 https://www.python.org 1.2 点 downloads下的 windows下载64位python3.7.3版本 Download Win ...

  3. Redis缓存中的常见问题

    缓存穿透:是指查询一个Redis和数据库中都不存在的数据. 问题:查询一个Redis和数据库中都不存在的数据,大量请求去访问数据库,导致数据库宕机. 解决办法: 1.根据id查询,如果id是自增的,将 ...

  4. shell编程基础二

    一.流程控制 while循环:只要条件满足一直循环 read -p "请输入一个数字:" white_data while [ ${white_data} -lt 20 ] do ...

  5. WPF -- DataTemplate与ControlTemplate结合使用

    如深入浅出WPF中的描述,DataTemplate为数据的外衣,ControlTemplate为控件的外衣.ControlTemplate控制控件的样式,DataTemplate控制数据显示的样式,D ...

  6. 重磅!七国首脑会议决定制裁Go语言!

    2021年2月, 编程语言的七国集团峰会在风景优美的Linux庄园如期召开. C, Java, Python, JavaScript , C++ , C#,  PHP 相继入座. C语言作为主持人,在 ...

  7. go http库 设置代理

    func ProxyTest() { proxyAddr := "http://your IP:8080/" httpUrl := "http://your target ...

  8. 微信小程序和H5之间相互跳转

    1.微信小程序跳转小程序 wx.navigateToMiniProgram <script src='https://res.wx.qq.com/open/js/jweixin-1.3.0.js ...

  9. 面试准备——计算机网络(https)

    一.为什么要提出HTTPS? HTTP的缺点: 明文通信.不加密,可能被窃听. 无身份验证,可能遭遇伪装. 无法证明报文的完整性,可能被篡改. 二.HTTPS = HTTP+加密(防窃听)+认证(防伪 ...

  10. JS(ES6)、Vue.js、node.js

    JS行为(ESMAScript, JSdom, bom)$.ajax() <- (xmlhttpRequest由这个封装来的)  -> axios(vue版)  =  ajax技术jque ...