为程序中所有可能路径的运行生成数据

时间:2012-10-30 16:57:27

标签: c++ z3

我是Z3的新手并在Google和Google上搜索了我的问题的答案。我没有成功。

这是产生问题的代码:

void test(string str) {
    if (str [0] == 'g') {
        cout << "\"The first letter g" case"<< endl;
        if (str [1] == 'a') cout << "Second letter is 'a'";
        else cout << "Second letter is not 'a'";
    } else {
        cout << "The non-g case" << endl;
        if (str [1] == 'b') cout << "Second letter is 'b'";
        else cout << "Second letter is not 'b'";
    }
}

我需要自动生成输入数据,以便代码一直运行。 是否可以使用z3完成此操作?如果是这样,我该如何使用z3 C / C ++ API执行此操作?

2 个答案:

答案 0 :(得分:1)

Z3不是测试用例生成器或模糊器,它是一个定理证明器。但是,Z3用于实现模糊器和测试用例生成器。其中一个是Pex,一个测试.NET的白盒子单元。 Z3还用于Sage x86二进制文件的白盒模糊器。不幸的是,我不知道任何基于Z3的C ++测试用例生成器。

答案 1 :(得分:0)

没有直接回答你的问题,但之前已经使用过SAT / SMT求解器来生成这样的“利用”向量并取得了相当大的成功。例如,查看Brumley的AEG系统:http://security.ece.cmu.edu/aeg/index.html等等。