关于工具的碎碎念

关于怎么用那些工具

下载说明,

(1)openjml+solver的zip:http://www.openjml.org/

 

 (2) jmlunitng:http://insttech.secretninjaformalmethods.org/software/jmlunitng/

           

           

           点击里面那个 1.4 进行下载

           正文第三段,单独一行那个 有个 1.4,点击下载

 

 

 

1 solver

java -jar .\openjml.jar -exec C:\Users\73939\t\Solvers\z3-4.7.1.exe -esc C:\Users\73939\t\Group.java

 

 

 这是我的文件树,可以参考一下,我进入这个文件夹弄得

 

2 神奇的jmlunitng

弄好文件,依次输入下面四条指令


java -jar jmlunitng.jar test/Group.java

javac -cp jmlunitng.jar test/*.java

java -jar openjml.jar -rac test/Group.java test/Person.java

java -cp jmlunitng.jar test.Group_JML_Test

 

文件树同上,把代码放到test里里面(我截图两个文件不参加编译,只留着两个副本备用的)

(我的是魔改版,去除了接口,更改了package的位置)

要是报加载找不到主类,就是你的文件package错了

package test;

import java.math.BigInteger;
import java.util.ArrayList;

public class Person {
    public int id;
    public String name;
    public BigInteger character;
    public int age;
    public ArrayList<Person> acquaintance;
    public ArrayList<Integer> value;

    public Person(int id, String name, BigInteger character, int age) {
        this.id = id;
        this.name = name;
        this.character = character;
        this.age = age;
        acquaintance = new ArrayList<>();
        value = new ArrayList<>();
    }

    void addAcq(Person person) {
        acquaintance.add(person);
    }

    void addValue(int x) {
        value.add(x);
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public BigInteger getCharacter() {
        return character;
    }

    public int getAge() {
        return age;
    }

    public boolean equals(Object obj) {
        if (obj != null && obj instanceof Person) {
            return (((Person) obj).getId() == id);
        } else {
            return false;
        }
    }

    public boolean isLinked(Person person) {
        if (person.getId() == id) {
            return true;
        }
        for (int i = 0; i < acquaintance.size(); i++) {
            if (acquaintance.get(i).getId() == person.getId()
                    || person.getId() == id) {
                return true;
            }
        }
        return false;
    }

    public int queryValue(Person person) {
        for (int i = 0; i < acquaintance.size(); i++) {
            if (acquaintance.get(i).getId() == person.getId()) {
                return value.get(i);
            }
        }

        return 0;
    }

    public int getAcquaintanceSum() {
        return acquaintance.size();
    }

    public Person getAcq(int x) {
        return acquaintance.get(x);
    }

    public int compareTo(Person p2) {
        return name.compareTo(p2.getName());
    }
}

魔改版person就是这个

理论上,运行到第三句之后,test文件夹这个样子

 

 剩下的大家摸索吧

(附上我jmlunitng全过程)

(1)开始

 

 (2)第一条指令

 

test如下

 

 

 (3)第二条指令

 

test如下

 

 

 (4)第三条指令

 

 

 

 众所周知,警告等于不存在

 

 test这样子

(5)最后一步

 

 完成啦

posted @ 2020-05-19 23:31  润羽るしあ单推人  阅读(906)  评论(4编辑  收藏  举报