关键词:
符号执行
测试案例生成
缺陷发现
模型检测
自动化测试
摘要:
计算机技术的迅猛发展导致软件代码空前膨胀,面对大量代码和日益提高的软件可靠性要求,如何通过全方位高精度、高效率的测试手段保证软件产品的质量便成为软件测试技术的核心问题。当下的测试技术中,无论是测试案例生成还是程序缺陷检测以及源码模型检测等方面都存在诸多不足:随机生成和人工编写测试案例这两种方法,存在测试案例有效性低、时间和人工成本高、测试质量和效率难以兼顾等问题;一般的编程IDE和静态分析工具只能检测程序中的语法错误和一些简单的逻辑错误,动态测试工具如valgrind检测的错误种类有限,检测全面性也依赖于测试案例的覆盖度;在模型检测领域,一般的软件模型检测都建立在人工提取程序模型的层面,提取布尔逻辑也无法真正从源码层面进行分析。基于以上亟待研究和解决的几大问题的思考,论文中基于符号执行技术对它们做了相对深入的探索。测试案例生成方面,基于LLVM中间码插桩,利用符号执行技术的高分支覆盖度生成高覆盖度的测试案例。缺陷检测方面,针对缓冲区溢出、内存泄露等缺陷对中间码插桩,然后通过高分支覆盖度的测试案例进行全面深入的动态检测。模型检测方面,建立了一种属性描述格式,然后将转换后的属性规则添加到符号约束条件中,最后通过符号执行进行属性判定。最后,为了将各个方向的测试功能进行整合同时结合程序开发流程和持续集成,论文中构建了一套全方位自动化测试系统,将自动化测试融入到代码版本管理和持续集成中,为符号执行技术在软件测试中的应用做了进一步的研究。从实验结果来看,系统能够对C/C++程序中包括浮点数在内的基本数据类型符号化,对小规模程序生成测试案例分支覆盖度可以达到百分之百;可以全面检测程序各条分支路径上的缓冲区溢出、内存泄露、内存二次释放等问题;可以根据逻辑属性描述生成符号化约束条件进行基本的源码属性判定,最后成功实现了开发和自动化测试的融合,以及在程序开发过程中的自动化测试案例生成、自动化动态缺陷检测和基于源码的模型检测。