PyCT:Python 混合测试工具的创新与应用
1. 背景与需求
Python 凭借其高级交互特性和成熟的科学库生态系统,在现代应用开发中得到了广泛应用,涵盖了 Web 应用、数据分析、机器学习和机器人技术等多个领域。无论是学术研究还是工业生产,Python 都成为了算法开发和探索性数据分析的热门选择。然而,对于 Python 程序行为的系统分析,特别是软件测试和调试中的输入生成,仍然是一个关键挑战。
传统的具体执行只能探索特定路径,随机生成输入难以覆盖所有关键程序行为,而静态分析可能产生误报,需要运行时分析进行验证。符号执行通过在符号输入上执行程序来生成系统输入,但受限于约束求解器的能力。混合测试结合了符号执行和具体测试,能够在遇到求解器无法处理的约束时,用具体值替代部分约束以简化问题。目前,针对 C、JAVA、x86 二进制代码和 JavaScript 等语言已经有了大量的混合测试工具,但支持 Python 的却相对较少。
2. 现有工具的问题
在现有的 Python 混合测试工具中,PyExZ3 是最知名且先进的。它采用面向对象的方法实现混合测试,将每个基本数据类型(如整数和字符串)替换为同时维护具体值和符号值的混合版本,并提升了混合对象的成员函数以支持符号和具体值。然而,PyExZ3 存在两个主要问题:
- 成员函数支持有限 :只实现了基本类型的有限成员函数,例如整数类型的常见函数“abs”和“round”等未得到支持,这在分析大型项目时会导致代码覆盖率较低。
- 不必要的向下转换 :当遇到内置类型的构造函数时,会自动将混合对象向下转换为仅包含具体值的