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

你可能感兴趣的:(oo第三单元总结)