JPF Application Goals and Types

2017-12-30  本文已影响0人  Hecoz

JPF Application Goals and Types JPF应用程序目标和类型

  到目前为止,您已经知道在JPF上运行在编译的java程序,就像普通的java虚拟机。但是,使用JPF的目的是什么?而且基于这些目的,不同的JPF应用程序类型是什么。

Why to Use JPF?

  在我们对不同类型的jpf应用程序进行分类之前,值得一提的是为什么我们真的想应用它。忠告:如果你有一个严格的顺序程序,只有几个定义良好的输入值,你最好写几个测试用例 -- 使用JPF对你的帮助并不会太多。</br>
使用JPF的两大主要原因有:

JPF Application Types JPF应用类型

  有三种基本的JPF应用类型,它们各有不同的优势和劣势:JPF- aware, unaware"enabled" programs

app-types.png

JPF unaware programs
这是通常的情况 --- 在应用程序中运行jpf,该应用程序通常不知道验证。它只在任何兼容java的vm上运行。使用JPF检查这种应用的典型原因是查找难以测试的所谓的违反非函数属性,例如死锁或竞争条件。JPF特别擅长发现和解释与并发相关的缺陷,但你得知道代价:JPF比java虚拟机慢得多(它比正常的字节代码解释器做的更多),它可能不支持受测试系统使用的所有Java库。

JPF dependent programs
我们有模型的应用程序 --- 他们存在唯一目的是验证通过JPF(例如,检查某个算法),所以java恰好是实现语言因为这是JPF的理解。通常,这些应用程序是基于特定于域的框架(例如状态扩展?)编写的,以便JPF能够验证模型。因此,模型应用程序本身通常较小,规模很好,并且不需要额外的特性规范。缺点是开发底层域框架非常昂贵。

JPF enabled programs
第三类的投资回报可能是最好的,可以在任何VM上运行的程序,但是包含表示无法用标准Java语言表示的属性的java注释。

For example, assume you have a class which instances are not thread safe, and hence are not supposed to be used as shared objects. You can just run JPF and see if it finds a defect (like a data race) which is caused by illegally using such an object in a multi-threaded context. But even if JPF out-of-the-box can handle the size of the state space and finds the defect, you probably still have to spend a significant effort to analyze a long trace to find the original cause (which might not even be visible in the program). It is not only more easy on the tool (means faster), but also better for understanding if you simply mark the non-threadsafe class with a @NonShared annotation. Now JPF only has to execute up to the point where the offending object reference escapes the creating thread, and can report an error that immediately shows you where and how to fix it.

There is an abundance of potential property-related annotations (such as @NonNull for a static analyzer and JPF), including support for more sophisticated, embedded languages to express pre- and post-conditions.

上一篇 下一篇

猜你喜欢

热点阅读