zoukankan      html  css  js  c++  java
  • 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 这门语言的学习,我对于契约式编程的理解更加深刻了。

  • 相关阅读:
    Dapper and Repository Pattern in MVC
    在linux中使用多个redis端口来构建redis集群
    搭建Sql Server AlwaysOn 视频教程
    支付宝支付插件使用文档
    NopCommerce添加事务机制
    NopCommerce(3.9)作业调度插件
    微信扫码支付插件使用文档
    生成HTML表格的后台模板代码
    json字符串和字典类型的相互转换
    NopCommerce适应多数据库方案
  • 原文地址:https://www.cnblogs.com/zdfvv/p/12940781.html
Copyright © 2011-2022 走看看