• oo第三单元总结


    一、JML规格与工具链应用

    JML 概述

      使用 JML 来说明性地描述所希望的类和方法的行为,可以显著地改善整个开发过程。将建模表示法添加到 Java 代码中,其好处包括以下几点:

      能更加精确地描述代码所完成的任务

      能有效地发现和纠正错误

      能减少随着应用程序的进展而引入错误的机会

      能较早地发现客户没有正确使用类

      能产生始终与应用程序代码保持同步的精确文档

      JML 注释始终位于 Java 注解(comment)内部,因此它们不会对进行正常编译的代码产生影响。当我们想将类的实际行为与其 JML 规范进行比较时,可以使用开放源码 JML 编译器。用 JML 编译器编译过的代码如果没有做到规范中规定它应该做的事,那么该代码在运行时会抛出 JML 异常。这不仅能捕获代码中的错误,还能确保文档(JML 注释格式)与代码保持同步。

    二、JML工具链

    可以使用的JML工具链包括

          OpenJML:可以实现JML语法错误检查。

      SMTSolver: 在逻辑层面、对代码实现形式化验证。

      JMLUnitNG: 根据JML规格生成对应的测试样例来测试程序。

    三、作业设计

    第九次作业:

    照搬规格即可。需要考虑的点有:

    1.people、value用什么来存储

    2.isCircle用什么算法来实现

    对于第一个问题,我用的是Arraylist。第二个问题,我用的是bfs搜索。

    第十次作业:

    添加了Group接口以及组内查询方法,按照规格书写即可。

    第十一次作业:

    添加了查询最短路径的方法,以及添加查询两点是否在同一点双的操作。

    其中前者我用了djstra算法,后者用了targan算法。

    四、bug情况

    这三次作业均通过了弱测中测,但是强测我出现了许多bug。

    五、感想

    JML是为契约式编程而生的。requires 描述先验条件,ensures 描述后验条件,old 描述副作用,exceptional_behavior 描述异常。理论上来讲,通过JML,可以进行形式化的验证,让bug不复存在。然而如何保证规格书写的全面和正确又是另一个问题。因此正确而全面的理解JML也成为了一个问题。通过对 JML 这门语言的学习,我对于契约式编程的理解更加深刻了。

  • 相关阅读:
    pipelinewise 学习二 创建一个简单的pipeline
    pipelinewise 学习一 docker方式安装
    Supercharging your ETL with Airflow and Singer
    ubuntu中使用 alien安装rpm包
    PipelineWise illustrates the power of Singer
    pipelinewise 基于singer 指南的的数据pipeline 工具
    关于singer elt 的几篇很不错的文章
    npkill 一个方便的npm 包清理工具
    kuma docker-compose 环境试用
    kuma 学习四 策略
  • 原文地址:https://www.cnblogs.com/zdfvv/p/12940781.html
Copyright © 2020-2023  润新知