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. HTML5 Server-Sent Events

    HTML5 Server-Sent Events SSE demo https://www.w3schools.com/html/tryit.asp?filename=tryhtml5_sse htt ...

  2. Flutter 使用p5

    p5 工作示例 install dependencies: p5: ^0.0.5 main.dart import 'package:flutter/material.dart'; import &q ...

  3. Excel和CSV格式文件的不同之处

    来源:https://blog.csdn.net/weixin_39198406/article/details/78705016 1.个人理解:为何选择使用csv来存储接口测试用例相关字段数据,而不 ...

  4. springboot项目启动后tomcat服务器自动关闭 解决方法

    需要在pom.xml中添加 <dependency> <groupId>org.springframework.boot</groupId> <artifac ...

  5. MySQL 导出 select 结果集

    reference: https://blog.csdn.net/huaishuming/article/details/74762652法一:SELECT * from jc_archives wh ...

  6. 使用 Tye 辅助开发 k8s 应用竟如此简单(六)

    续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们将进一步研究 Tye 与分布式应用程序运行时 Dapr 如何碰撞出更精彩的火花. Newbe.Claptrap 是一个用于轻松应对并发问题 ...

  7. 第七届蓝桥杯JavaB组——第7题剪邮票

    题目: 剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2.jpg],[图3.jpg]中,粉红色所示 ...

  8. .Net Core 处理跨域问题Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource

    网页请求报错: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Or ...

  9. Docker安装开发环境

    目录 Docker Docker 安装 Mysql Docker 安装Redis Docker 安装Zookeeper Docker Docker 安装 Mysql Docker 查看可用Mysql镜 ...

  10. Mock 框架 Moq 的使用

    Mock 框架 Moq 的使用 Intro Moq 是 .NET 中一个很流行的 Mock 框架,使用 Mock 框架我们可以只针对我们关注的代码进行测试,对于依赖项使用 Mock 对象配置预期的依赖 ...