29、符号执行与测试用例生成技术解析

符号执行与测试用例生成技术解析

1. 符号执行概述

符号执行是一种诞生于20世纪70年代的程序验证技术。它介于非正式和正式的验证方法之间。非正式方法是开发者创建测试用例,将输入值提供给应用程序,运行后将测试结果与预期结果进行正确性比对;而正式方法则是用规范语言描述应用程序,再通过证明过程来证明程序按预期执行。非正式方法需要实际执行应用程序,正式方法甚至可以在系统原型存在之前应用。

符号执行的出现填补了这两种技术之间的空白。它主要用于探索应用程序可能的执行路径,与使用样本输入值的非正式测试不同,符号执行的输入是代表一类值的符号。例如,若应用程序期望一个数值,会传入一个代表所有数值集合的通用符号 x ,执行的输出将是输入符号的函数。

由于符号执行是对未定义的值进行的,所覆盖的控制路径需要在运行时通过启发式方法或人工来定义。特别是条件结构的符号执行很关键,当评估一个符号条件时,结果可能为真、假或无法判定。若为真或假,能明确应遵循的控制路径;若无法明确判定条件分支,则程序的符号执行会分裂为两条路径。每个可能的程序控制路径都对应着执行过程中决策积累的条件合取,定义控制路径的条件集合称为路径条件。

2. 测试用例生成

符号执行可生成测试用例,其主要目标是分析程序的控制结构并发现其中的错误。通过找到描述控制路径的方程的解,可提取用作测试用例的值,这些值会迫使应用程序遵循定义该路径条件的控制路径。

符号执行主要用于白盒测试,但也可从抽象规范(如状态机)开始应用相同技术。符号化搜索状态空间有助于应对状态空间爆炸问题,因为它通过关联输入类来减少可能的路径数量。

3. 符号执行技术详解
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值