第三单元总结

第三单元总结

JML相关

一 梳理JML语言的理论基础、应用工具链情况

  • JML是一种形式化的, 面向JAVA的行为接口规格语言( behavioral interface specification language) JML允许在规格中混合使用Java语法成分和JML引入的语法成分. JML主要是实现了设计与实现相分离, 使得设计时不会陷入实现的困难中去. 实现时, 由于JML实现已经设计完整, 也不必担忧设计上的缺陷.
  • JML相关的工具主要有OpenJML和JMLUnitNG, 前者类似于一个编译器, 主要用来检查JML语法的正确性. 后者主要用于根据JML对给定的单元进行测试.

二 部署SMT Solver,至少选择3个主要方法来尝试进行验证,报告结果( 有可能要补充JML规格)

  • 最新版作业已取消该部分

三 选择相关的简单方法,自己补充规格,确保未使用\exists或\forall表达式,使用jmlunit或jmlunitng来生成测试数据,并分析所生成数据的特点。

  • 使用的代码:

    Test.java:

    public class Test {
        /*@ public normal_behaviour
          @ ensures \result == va + vb;
        */
        public static int add(int va, int vb) {
            return va + vb;
        }
    
        public static void main(String[] args) {
            add(1000,2000);
            return ;
        }
    }
  • 结果:

  • 然后试了一些办法还是解决不了这个问题...后续步骤无法进行

作业总结

四 按照作业梳理自己的架构设计,并特别分析迭代中对架构的重构

  • 有了JML规格指引, 在后续开发中, 相对前两个单元的重构代码量, 重构难度等都显著降低, 可以看到JML是个好东西, 我们应该多多应用.
  • 第一次作业采用了两个HashMap来存储Path和PathId的一一对应关系, 这种解决办法很好. 但由于要用Path做HashMap的Key, 所有需要重写其HashCode方法.
  • 第二次作业增添了最短路径查询, 采用了简单好用的Floyd算法, Floyd算法也不负所托, 完美完成任务.
  • 第三次作业开始并不会写, 主要参考了讨论区wjy同学的算法( 称其为wjy算法) , 该算法虽然表面上看起来复杂度很高, 但实测结果( 强测100) 表明并不是那么回事, 采用了wjy算法之后也并没有对原有的架构产生冲突, 只是增加了几个建图模型.

五 按照作业分析代码实现的bug和修复情况

  • 第一次作业一开始没有使用双Map方式, 导致查询超时, 后来使用了双Map方式, 解决了该问题.
  • 第二次作业出了一个小bug, 求自圈的最短路径出现了问题, 有可能会算出1, 后来修改了Floyd算法的具体实现修复了该Bug.
  • 第三次作业由于采用了先进的wjy算法, 并未出现任何bug.

六 阐述对规格撰写和理解上的心得体会

  • 规格这个东西, 自我感觉更像是数学, 而不是计算机的东西, 要求在形式上描述所需. 类似于谓词逻辑体系.
  • 使用了规格之后, 能够更为精确地描述这些代码是做什么的.
  • 能够更方便地写成测试程序, 同时也能够高效地发现和修正程序中的 bug, 还可以在应用程序升级时降低引入 bug 的机会
  • 规格既可以直到编写代码的人, 反过来也可以成为程序的说明文档, 其描述比自然语言更贴近程序的功能.

原文地址:https://www.cnblogs.com/black-watch/p/10902201.html

时间: 2024-08-19 13:00:12

第三单元总结的相关文章

WORK_三单元同步机参数OLD

WORK_三单元同步机参数OLD 2017-03-29 11:22 80人阅读 评论(0) 收藏 举报  分类: 程序备忘(42)  高压变频(36)  常用(13)  work(4)  版权声明:本文为博主原创文章,可以转载

hOmewOrk 第三单元 总结

hOmewOrk 第三单元 总结 JML理论基础梳理 JML是用于对Java程序进行规格化设计的一种表示语言. 1. 注释结构 JML表示规格的内容包含在注释之中.可以使用行注释和块注释.行注释的表示方式为 //@annotation ,块注释的方式为 /* @ annotation @*/ . 2. JML表达式 JML表达式是在基于JAVA语法基础上,新增了一些操作符和和原子表达式组成的. 2.1 原子表达式 \result表达式:表示方法执行后的返回值. \old( expr )表达式:用

第三单元JML规格总结

第三单元学习了JML规格描述语言,根据JML的规定编写对应的方法,同时也复习了数据结构的知识,并且也考察了程序的时间复杂度. 一.JML语言 理论基础 JML全名为Java Modeling Language(Java建模语言),在Java代码中增加一些不影响程序正常编译运行的符号用来标识一个方法是干什么的.通过使用JML,程序员能够描述一个方法的预期的功能而不管具体实现方式.JML把过程性的思考延迟到方法设计中,从而遵循了面向对象设计的一个原则即将过程性的思考尽可能地推迟.而且JML语言为了描

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

规格化设计--OO第三单元总结 一.JML语言理论基础.应用工具链 1.1 JML语言 ? JML(java modeling language)是一种描述代码行为的语言,包括前置条件.副作用等等.JML是一种行为接口规格语言 (Behavior Interface Speci?cation Language,BISL),基于Larch方法构建. ? 通过使用JML,我们可以忽略一个类.一个方法内部的具体实现,专注于描述方法的预期功能,从而把过程性的思考延迟到方法设计中,扩展了面向对象设计的原则

OO第三单元总结 JML

OO第三单元总结 JML JML语言的理论基础.应用工具链情况 JML是一种形式化的,面向JAVA的行为接口规格语言,它结合了Eiffel的契约方法和Larch方法,以及细化演算的一些元素,有着坚实的理论基础. JML最主要的语法有前置条件,后置条件,不变式,通过这些语法对输入和输出进行约束,也就是达成了一种契约.当模块实现后,只要输入输出满足这些约束表达式就满足了规格的要求.JML主要使用java的语法,除此之外还有自己的一些语法,比如/forall,/exist等等,来实现对输入输出的约束.

OO第三单元总结(规格设计)

OO第三单元总结 一.关于JML Java Modeling Language,即JML是一种规格化表示语言,主要用于对Java程序的各种方法功能的规范描述.这样做既可以给程序设计人员明确清晰的功能要求,又可以充分全面地验证已有的代码实现保证其满足规格描述的要求. 1.语法梳理 JML的语法清晰直观地描述了一个Java的各种特征.它的语法主要由以下三个部分组成. (1)表达式: 诸如 \result \old等有具体确定意义的固定关键词称为表达式.通过不同的搭配组合可以表示不同的含义,比如(\f

OO第三单元总结

JML语言理论基础 Java建模语言(Java Modeling Language,JML)是一种进行详细设计的符号语言,他鼓励你用一种全新的方式来看待Java的类和方法.JML是一种行为接口规格语言 (Behavior Interface Speci?cation Language,BISL),基于Larch方法构建.BISL提供了对方法和类型的规格定义手段.所谓接口即一个方法或类型外部可见的内容.通过在Java代码中增加了一些符号,这些符号用来标识一个方法是干什么的,却并不关心它的实现.使用

2019年北航OO第三单元(JML规格任务)总结

一.JML简介 1.1 JML与契约式设计 说起JML,就不得不提到契约式设计(Design by Contract).这种设计模式的始祖是1986年的Eiffel语言.它是一种限定了软件中每个元素所必需的责任与义务的开发模式,程序设计中的每个元素都需要用规范的语言精准地限定其前置条件(Preconditions).后置条件(Postconditions)和不变式(Invariants).通过这三项限定,我们可以清晰地获得对一个函数功能的刻画,从而达成设计与实现的分离,便于优化.测试和生成文档.

面向对象第三单元(JML)总结体会

一.JML语言 定义 Java建模语言(JML)是一种行为接口规范语言,可用于指定Java模块的行为 .它结合了Eiffel的契约方法设计 和Larch 系列接口规范语言的基于模型的规范方法 . 理论基础 JML是契约式语言的一种具体表现形式. 契约(Contact):声明一个函数/方法的时候,对函数的输入和输出所具备的性质是有所期望和规定的.有时候这种性质会被我们明确的写出来,有时候会被我们忽略掉.这些期望和规定就是Contract. 而契约设计的核心便是断言(assertion) :永远为真