【名词解释】concolic testing和instrumentation

(1)concolic testing

维基百科解释如下:

Concolic testing (a portmanteau of concrete and symbolic) is a hybrid software verification technique that performs symbolic execution, a classical technique that treats program variables as symbolic variables, along a concrete execution (testing on particular inputs) path. Symbolic execution is used in conjunction with an automated theorem prover or constraint solver based on constraint logic programming to generate new concrete inputs (test cases) with the aim of maximizing code coverage. Its main focus is finding bugs in real-world software, rather than demonstrating program correctness.

大致是说concolic 测试中,concolic是单词concrete(具体)和symbolic(符号)的混合体。

是一种混合的软件验证技术,它执行符号执行,将程序变量作为符号变量,沿着具体的执行路径(对特定输入进行测试)。符号执行与基于约束逻辑编程的自动定理证明器或约束求解器结合使用,以生成新的具体输入(测试用例),目的是最大化代码覆盖率。它的主要关注点是发现真实世界软件中的bug,而不是演示程序的正确性。

维基百科也给出了如下图所示的一个例子:

void f(int x, int y) {            //第一行
    int z = 2*y;                  //第二行
    if (x == 100000) {            //第三行
        if (x < z) {              //第四行
            assert(0); /* error *///第五行
        }
    }
}

这个例子大致讲了这么个事情:

我们平时用随机测试的时候,要不断尝试x,y的值,需要不切实际的大量尝试来重现bug。

而使用concolic思想,在具体执行中,对x,y进行随机选值如x=1,y=1,则z=2,但在第三行就不满足条件会测试失败。因为1≠100000。同时,符号执行遵循相同的路径,但将x和y视为符号变量。它将z设为表达式2y,并注意到,因为第3行中的测试失败,所以x≠100000。那么这是一条条件路径,我们希望在程序下一次运行时遵循不同的执行路径。所以我们取第一测试失败时遇到的最后一个路径条件x≠100000,并对其求相反条件,使x = 100000。然后调用一个自动定理证明程序,在给定符号变量值和符号执行过程中构造的路径条件的完整集的情况下,为输入变量x和y查找值。在这种情况下,定理证明者的有效响应可能是x = 100000, y = 0。这个数值的输入可以让程序顺利运行到第四行,因为x (100000)不小于z (z = 2y=0),所以不取内部分支,跳出测试,这又是一条路径。路径条件为x = 100000, x≥z,后者为负数,x < z,定理证明者寻找满足x = 100000, x < z, z = 2y的x, y;例如,x = 100000, y = 50001。这个输入达到了误差,找到了最后一条路径

总结为:concolic方法通过符号执行来改变具体执行输入值,从而找到不同的路径,以及触发可能的错误。

(2)instrumentation

In the context of computer programming, instrumentation refers to an ability to monitor or measure the level of a product’s performance, to diagnose errors, and to write trace information.

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值