论文部分内容阅读
程序理解是人们将程序及其环境对应到面向人的概念知识的过程,它对于软件的维护,测试,度量具有十分重要的意义。程序理解可以手工进行,也可以在工具的支持下半自动地进行。随着软件规模及复杂度的不断加大,软件项目再也不是一两个人的工作,开发人员也不可能一直去维护自己的程序,而且历史上留下的大量的程序,它们要么没有文档,要么文档过时或不完整,要维护或修改它们显得十分的困难。
要对现有软件系统进行维护和修改,首先需要理解它们。在没有文档或文档不全的情况下,程序理解变得极其困难,需要耗费理解人员大量的时间和精力却往往得不到理想的效果。这时,如果完全用手工的方式去理解程序,代价就会非常之大。据统计,目前软件的维护费用约占软件生命期中总投资的70%,而对于源程序的理解所耗费的时间又约占整个系统维护时间的50%-90%。可见,研制程序理解系统,用以减轻维护人员理解的智力负担,增强程序理解的准确性和可靠性是十分必要的,这个领域也越来越多的引起众多计算机专家们的重视。
程序理解系统实质上实施的是一种逆向工程的技术,其总的追求目标是:对大型程序系统进行分析理解,弄清工作原理,恢复设计方案,抽象出其结构和功能,产生由源程序代码逆向生成用高层次方式精确地描述该程序系统的文档资料,辅助维护人员对程序系统的理解。
软件工程领域的专家们对程序理解的过程进行了深入的研究,提出了多种程序理解活动的过程模型,如Letovsky模型、Brooks模型、Soloway&Ehrlich模型、Pennington模型和综合的元模型。这些模型都试图从人类不同的思维模式去寻求某种通用的理解方法。例如,S&E模型主要是采用了一种自上而下的理解模式,而Pennington模型则是自下而上的。本文分析和比较了这五种程序理解活动的过程模型,并在其基础上结合MichaelL.VanDeVanter提出的源代码文档结构的概念,提出了一种改进的程序理解活动的过程模型。这个过程模型明确划分了程序理解活动中建模、抽取、合并&保存和抽象四个步骤;归纳出整个理解活动中的四种有效信息源并通过一系列的操作使得不同信息源相互关联;引入了知识库和人工智能技术并以程序建模作为整个理解活动的中心环节。
程序模型是对程序源代码的一种归纳抽象,并且以特定的结构把源程序的相关信息保存下来。本文提出了三种不同的程序模型,详细分析了这三种程序模型的结构和特点,并结合这三种程序模型进行了三种不同类型的程序理解活动。
本文提出的三种模型分别是:可扩展程序对象模型(EPOM),基于对象、域和型的层次式程序模型(OSTPM)和可扩展程序参考模型(EPRM)。
EPOM模型中囊括了C/C++语言中的所有的语法细节,而模型中的类又通过指针连接其他类型对象,使得程序中的各个语法单元相互关联,详尽且有序的展现了整个源程序的语法结构。OSTPM是基于对象、型和作用域的层次式的程序模型,它通过作用域把程序中的不同对象串联起来,同时使得对象和对象的类型相互匹配。简言之,OSTPM是以不同层次的作用域为基础,以对象为内容,以型作为主线的一种递归嵌套的程序表示模型。使用该模型检测程序中作用域误用和类型不匹配两种错误有着良好的效果。EPRM是在EPOM的基础上建立起来的有关程序统计信息的模型。它能够反映程序中的变量信息、函数信息、类型信息和枚举常量等信息,并以超文本的方式展现给用户。三种模型的特点各不相同,功能也有所区别。
程序模型在程序理解活动中扮演着非常重要的角色,许多的程序理解活动都可以直接或间接的从单个或多个程序模型中获得相应的信息。本文列举了三种不同的程序理解活动:软件度量、程序静态分析和程序信息显示。这三种类型的理解活动都是从上述程序模型中直接获取相关信息。软件度量和程序信息显示分别是基于EPOM和EPRM的模型,而静态分析则是在EPOM和OSTPM的共同协作下完成。
程序理解和逆向工程是伴随着软件产业的蓬勃发展而逐渐引起人们重视的,许多的理论和实践还都处于早期的探索研究阶段。今后,程序理解将会朝着智能化和全自动化的方向发展。我们相信,程序模型作为整个理解活动中的基础,将会得到更大的发展。