论文部分内容阅读
实现程序的机器自动理解是目前软件研究的一个热点.文章试图通过模板匹配的方式,通过静态匹配和动态匹配,并辅之以可视化手段,在一定范围内实现程序功能的机器识别.系统以文章定义的Small-C语言的源程序为输入,以源程序是否匹配已知的某一功能实现为输出.文章在对Small-C语言源程序进行词法分析、语法分析和语义检查的基础上,以语法树、问题分析图PAD为静态理解的辅助手段,对程序源代码进行结构层的分析,在此基础上将源程序的结构与模板库中对应的模板进行比较,从静态结构上理解程序的功能;以伪指令代码图、单步运行程序、监视程序运行过程中各个变量的值为动态理解的辅助手段,动态执行源程序,并将源程序的输出与模板库中的数据相比较,从数据流来理解程序的功能.静态匹配以源程序的结构为切入点,以人工理解程序的方法为原型,从确定的程序算法中提取若干信息构成有序的特征向量,特征向量就是静态匹配的模板.如果特征向量中的特征值提取得越多,重要性越高,那么静态模板就越接近实际目标,称模板越能够清晰描述算法原型,反之,静态模板就会偏离实际目标,称模板只能模糊描述算法原型.文章阐述了静态匹配得方法,但是由于静态匹配的模板在静态匹配中的重要地位,如何定义静态模板成为静态匹配的关键问题.目前,静态匹配的模板完全是模拟人的思维靠人工定义的,这具有很大的随意性和偶然性,因此如何利用形式化的方式定义静态模板是我们今后工作的重点.动态匹配则是建立在程序执行过程中监视指定存储空间值的变化情况基础之上的,动态匹配的基本思路是对指定的监视变量,在给定初始值的情况下,考察程序运行过程中各变量值的变化是否与预期相符.程序能够匹配给定的一组测试值并不能说明程序就是实现模板对应的功能,因此,动态模板也存在描述算法清晰度的问题,动态模板中给定的测试用例越多,描述的数据变化程度越大,对动态匹配的贡献越大.文章将软件理解的对象和功能限定在一定的范围内,从简短的程序理解入手,并逐步增加理解的深度和难度.文章试图将复杂程序功能转换为若干简单的程序功能的组合,将复杂程序的理解建立在简单程序理解的基础上,并提出了匹配度的概念用来描述源程序和模板吻合的程度.