C 源代码模型分析文献综述
2020-04-08 16:48:06
引 言
随着计算机技术的迅速发展, 计算机技术应用的领域也逐渐扩大, 人们希望计算机这一智能体能够解决各个领域的更多、更复杂的问题, 从而也对计算机软件产品的功能、质量、开发成本和时间提出了越来越多的要求, 软件技术受到了前所未有的挑战。传统的软件工程主要关注新软件的分析与设计, 但随着软件系统的规模和复杂度日益增长, 软件的生命周期越来越长, 软件开发的很大一部分工作集中于维护和改造现有的软件系统, 而这些现有系统的需求、设计决策、业务规则、历史数据等统称为遗产系统( LS , LegacySystem) , LS 是一种巨大的、长期的投资, 因为如何充分利用这些有用的资产对新系统的开发显得尤其重要。另一方面, 随着Int ernet 技术的普及, Web 用户增多, 很多软件厂商需要将系统移植到Web 上, 进一步加剧了对软件维护的需求。实践研究表明, 软件资源预算的50%~ 80% 消耗在对现有系统的维护上, 而软件维护者理解程序源代码的时间要占整个软件维护的47%~ 62% 。软件维护已经成为软件工程面临的重要课题之一, 而正确和全面地理解软件系统是对软件进行维护的前提, 软件逆向工程应运而生, 成为软件工程领域的一个新兴分支, 其目标就是开发帮助人们理解已有软件系统的方法、工具, 为软件系统的维护和演化提供支持。
文中主要介绍逆向工程的基本概念、主要步骤、分析方法、研究现状、存在的问题以及发展方向。1 逆向工程的基本概念/ 逆向工程这个名词最早出现在对硬件产品的分析中, 人们分析硬件产品以便改进自己的产品, M.G. Rekoffjr将逆向工程定义为: 对一个复杂的硬件系统实施有条理的检查, 以开发出关于这个系统的一组规范说明的过程。在把这个概念应用到软件系统过程中, 研究人员发现利用其中的许多方法可以获得对系统以及系统结构的理解。然而, 对一个硬件系统实施
逆向工程, 一般是为了得到这个系统的复制品, 对一个软件系统实施逆向工程, 一般是为了获得对这个系统在设计层次上的理解, 以便于系统的维护、巩固、移植、改进。
软件逆向工程的基本原理是抽取软件系统的主要部分而隐藏细节, 然后使用抽取出的实体在高层上描述软件系统。在软件工程领域, 迄今为止没有统一的逆向工程定义, 较为通用的是Elliot Chikofsky 和Cross 1990 年在文献中定义的逆向工程的相关术语。
1 主要步骤和分析方法
由逆向工程定义可知: 软件逆向工程的任务包括分析系统、抽象系统和展现系统, 从而实现协助用户理解系统的目的分析系统是指分析系统的结构及运行过程, 但不管目标系统面向何种应用领域, 分析系统不外乎是分析系统的静态信息和动态信息。目标系统面对不同的应用领域, 要实现抽象目标系统的任务, 需要领域知识和专家的经验。展现系统最好的方式是使系统可视化。
现有的逆向工程分析方法主要有以下4 种:
( 1) 词法分析和语法分析。
该方法主要是对程序源码进行分析, 得到程序信息的多种有用表示, 其中最常用的就是交叉引用列表。通过语法分析可以得到两类表示: 分析树( parse t ree) 、抽象语法树AST( abstract synt ax t ree) , 其中AST 是更复杂的程序分析工具基础, 包含了和程序的实际内容相关的细节。