Java建模语言是可执行的吗?

时间:2013-05-28 21:27:01

标签: java jml

我正在学习软件工程课程,在那里我看到了JML的用法。这是一段代码示例:

//@ requires f >= 0.0 
public float sqrt(float f) { 
   return f/2;
}

它说正式的JML规范是可执行的!

我的问题是,当我们用f = -4调用这个sqrt函数时,这段代码会出错还是抛出异常或发出警告?我在我的电脑上试过它它运作良好并打印出-2。那么JML是可执行的是什么意思?为什么我们不使用评论来做到这一点?谁能解释一下?

由于

3 个答案:

答案 0 :(得分:1)

你没有做平方根(Math.sqrt(f),见http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html#sqrt(double))但是除以2(f/2)。所以没有错。你需要的是使用Math.sqrt(...)如果这是我认为你需要查看你的方法的名称。

答案 1 :(得分:1)

JML不是Java的一部分。它是由研究人员联盟设计的扩展,但没有官方认可。因此,Java编译器不会考虑JML注释,但您可以使用特殊编译器编译带有JML注释的Java程序,以便考虑可执行规范。例如,JML4C

答案 2 :(得分:1)

嗯,此代码本身不会为您创建任何警告。存在各种利用JML规范的工具,例如:

  • jmlrac:测试执行期间是否违反断言
  • ESC / Java2:静态验证;编译时证明合同永远不会受到侵犯
  • jmldoc:javadoc-style documentation
  • jmlc:断言检查编译器
  • jmlunit:单元测试工具

除此之外,如果使用得当,JML规范可以向程序员的外国读者/维护者透露程序员的意图。