JavaPath Finder结构

记录下学习JavaPath Finder过程,差不多就是简单翻译下官方wiki把

jpf是执行字节码指令的。官方参考文档jpf-wiki
下图为JPF Top-level Design
在这里插入图片描述

虚拟机(VM)

状态生成器,通过执行字节码指令,生成状态描述,可用来检查状态是否被访问过,询问数据(线程状态、数据值等),存储状态,恢复状态。
VM主要参数为实现状态管理(匹配,存储、回溯)的类。多数执行机制委派给了SystemState,然后使用Scheduler

搜索策略

Search用来选择VM所需前行的下一个状态,或指导VM产生下一个状态(forward),或告诉VM回溯到先前的状态(backtrack).该类作为VM的一个驱动器使用。
Search通过评估性质对象,也能用来检查某种性质。

包结构

src
|__annotations
|__classes
|__examples
|__main
|__peers
|__tests

src/annotations 包含JPF annotations 的声明
src/classes 包含样板(库)类,以及通过MJI访问本地代码的类
src/main包含JPF核心实现代码
src/peers包含和src/classes中相符的同等类?
src/tests. 包含JPF的单元测试

需要关注的包为src/main

gov.nasa.jpf

这个包主要用于配置和实例化JPF对象,即SearchVM。初始化时,jpf.properties中包含的多数类都会被实例化。如:gov.nasa.jpf.search.DFSearch、gov.nasa.jpf.vm.SingleProcessVM、gov.nasa.jpf.jvm.JVMSystemClassLoaderInfo、gov.nasa.jpf.vm.DefaultBacktracker、gov.nasa.jpf.vm.OVHeap等
Config类 用于加载配置文件.properties和.jpf等,使用也包含多个创建对象的函数等。

gov.nasa.jpf.vm

这个包包含核心代码的主要部分,以及实现Java状态生成。主要的类为VM,该类将大部分工作分配给其下的类中,以实现JPF的主要功能,这些类主要分为三类:

  1. 类管理 - 由ClassInfo类封装,包含有关类的属性和方法的捕获由FieldInfoMethodInfo封装。
  2. 对象模版 - JPF的所有对象数据都有Field类封装为存储为整型数组。Monitor实例补货对象的执行状态?FieldsMonitor实例一起组成对象,存储在ElementInfo中。heap包含ElementInfo对象的动态数组,其中数组索引用作对象引用值。
  3. 字节码执行 - 字节码指令的执行由SystemStateThreadInfo类写作完成,其中一些工作也委派给了policy对象,以实现 partial order reduction。从VM对象调用SystemState.nextSuccessor(),然后到ThreadInfo.executeStep()(这两个方法封装了运行时POR),然后调用ThreadInfo.executeInstruction()来执行字节码。实际的执行然后由委派给了字节码具体指令实例gov.nasa.jpf.vm.bytecode。

gov.nasa.jpf.search

这个包主要包含Search类,即搜索策略的抽象层,主要的方法为Search.search(),由VM驱动(调用方法forward,backtrack和restore)。这个包也包含其他的搜索策略如DFSearchgov.nasa.jpf.search.heuristic中有更多启发式搜索策略

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值