• 关于工具的碎碎念


    关于怎么用那些工具

    下载说明,

    (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:Users73939 Solversz3-4.7.1.exe -esc C:Users73939 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)最后一步

     完成啦

  • 相关阅读:
    湘湖的雪
    Lua 如何调用C打包的动态库
    自己制作一个USB自动挖矿器
    二十五块DIY 带屏幕可远程的温湿度传感器
    来看下,C# WebService WSDL自动生成代码,数组参数的BUG。。。ArrayOfString
    记一次非常规方法对接硬件设备(Grason Stadler GSI 61)
    京享值超8万的京东钻石用户告诉你套路是这样的
    C# 显示纯文本对齐封装(控制显示字体长度)
    [开源] C# 封装 银海医保的接口
    [开源]使用C# 对CPU卡基本操作封装
  • 原文地址:https://www.cnblogs.com/pekopekopeko/p/12920417.html
Copyright © 2020-2023  润新知