论文部分内容阅读
软件测试技术保证了软件质量、提高了软件可靠性、降低了软件生产成本,静态测试作为其重要构成部分,侧重于程序的结构分析与规范性检测,其不具有时间依赖性,可以在不运行程序的情况下,尽早发现软件中的错误和缺陷,避免了动态测试中较高的人工成本花费,并可对程序进行控制流分析和数据流分析来发现其中存在的错误,提高软件生命周期中的评审、测试以及维护的效率。符号执行作为重要的静态测试方法,采用抽象化符号的形式表示程序中变量的值,模拟程序的运行,可对程序进行运算规律检验以及变量间的约束关系理解,克服了分析过程中变量值不能被确定的问题,在对路径敏感程序的项目评估、测试用例生成及代码质量分析中具有重要意义。本文基于符号执行理论,提出了一种针对C程序的分析方法。通过遍历抽象语法树,对满足路径约束条件的过程进行符号执行,以符号代替数值求得程序的结果。该方法支持基于C语言文法的程序规范性检查,便于代码质量度量。利用该方法中抽象语法树,可开展静态构架分析,同时利用变量值的符号表达式可辅助测试用例生成。本课题改进了针对C/C++代码预处理过程的符号执行算法,提出了一种基于条件值理论的符号预测方法。通过词法分析得到预处理变量和编译条件,再通过条件值模块对程序信息进行处理,得到以条件值形式表示的变量值与代码行的可达性条件表达式。该方法避免了路径可行性分析,降低了算法复杂度。利用该方法可以辅助用户对头文件层构架进行理解与优化操作。最后,本文利用VC++2005实现了面向宿主的符号执行系统SiC_SE,对嵌入式Linux平台下的实例代码进行静态分析,并得到预期的分析结果,很好地验证了本课题方法设计的正确性与实用性。