OO第三单元总结
一、关于JML
Java Modeling Language,即JML是一种规格化表示语言,主要用于对Java程序的各种方法功能的规范描述。这样做既可以给程序设计人员明确清晰的功能要求,又可以充分全面地验证已有的代码实现保证其满足规格描述的要求。
1、语法梳理
JML的语法清晰直观地描述了一个Java的各种特征。它的语法主要由以下三个部分组成。
(1)表达式:
诸如 \result \old等有具体确定意义的固定关键词称为表达式。通过不同的搭配组合可以表示不同的含义,比如(\forall int i;0<i&&i<container.length;container[i]==4)可以表示container里每一个元素都是4;(\result==4)可以表示这个方法返回值是4。
这些表达式具有返回值,返回值视关键词而定有不同的类型。比如\forall的返回值是boolean型,\max的返回值是具体的值(int,float等)
(2)方法规格:
方法规格构成了JML的架构。它约束了一个java方法的运行环境条件,运行结果,可能的不同运行状态等。
其中比较重要的有requires 表示运行的前置条件,后接一个boolean型的表达式;ensures 表示运行结果,后接一个Boolean型表达式
(3)类型规格:
类型规格约束了一个类需要满足的条件。比如invariant修饰的条件是在可见状态下需要满足的特性,constraint描述的是前序可见和当前可见关系的约束。
二、JML Unit
当然作为一个值得用整整一个章节学习的内容肯定不会仅限于此。许多工具可以通过规格描述生成对代码的测试样例并完成许多边界情况的有效测试。JMLUnit就是一个例子。以下采用JML UnitNG对之前编写的Graph类中的方法作一些简单的测试。
原文地址:https://www.cnblogs.com/socrates1232/p/10908212.html