针对多语言的代码结构信息抽取器的设计与实现

来源 :北京大学 | 被引量 : 0次 | 上传用户:leizi525
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
随着信息技术的不断发展,软件的应用领域愈加宽广,软件规模日益扩大,企业内部的遗产系统和散布于互联网上的开源项目也在不断增加。为了降低软件项目的开发成本,提高软件的开发效率,基于复用和迭代的开发泛型越来越受到欢迎;同时,对于软件质量的要求也在不断的提高,如何保证软件质量也成为软件工程领域的研究热点。   逆向工程技术通过对代码进行分析,抽取软件系统的主要部分,在更高层次对系统进行描述,隐藏不必要的细节,从而帮助用户更好的对系统进行理解、维护和改进。逆向工程工具一般基于代码抽象语法树的中间表示获得控制流图、依赖图、类图等程序结构和关联信息,通过图形化的方式显示给用户。程序结构信息的抽取是逆向工程的基础活动。程序分析和测试在程序的质量保证方面发挥着重要的作用,用于程序验证和缺陷查找的程序分析技术,基于源代码结构的测试用例生成、测试用例排序、测试覆盖率度量等技术,都需要从代码出发,抽取程序结构,并以此为基础进行后续分析。所以,程序结构信息的抽取也是计算机辅助程序分析与测试的基础活动。   当前,在企业级应用、Web开发、桌面开发等不同领域,多种编程语言依据自身特色,发挥着各自重要的作用。而现有的逆向工程与程序分析测试工具多针对单一语言,如Java或C/C++,对很多新型语言的支持不够;很多支持多语言的工具代码复用度低,也没有为针对新增语言的扩展提供支持。针对这些问题,本文通过对Java、C/C++、JavaScript等编程语言进行分析,依据其共有的特点,提出了一种通用代码结构(Common Program Structure)用于保存代码的结构信息,该结构模型忽略了编程语言的细节,有效保存了程序代码结构相关的重要信息。以该通用代码结构为基础,不同编程语言得以共享基于公共结构模型的同一分析程序,从而提高了相关软件工程工具的复用性和开发效率。   本文同时设计实现了对Java字节码、C/C++和JavaScript源代码的结构信息抽取器,抽取器以字节码结构模型或代码抽象语法树为基础,通过对其周游访问,转化为通用代码结构;同时,利用基于通用代码结构的分析程序,实现了分析程序对于多种语言的支持。我们将三个抽取器集成到了PolyFlow代码分析测试平台上,收到了较好的效果。  
其他文献
随着计算机网络应用的发展,数据存储的安全性变的越来越重要。而硬盘存储器作为数据存储的主要载体,其数据安全也越来越受到重视。因此,如何在硬盘数据丢失前备份数据,如何在
随着Internet技术的快速发展和日益普及,互联网信息迅速增长,如何从海量的Web信息中快速、准确、全面地查找用户所需要的信息是当前信息科学和技术领域面临的一大挑战。尤其
随着信息技术的发展,e-Learning越来越受到人们的关注,它是通过网络进行学习的全新的学习方式,提高了学习者的学习兴趣,也在一定程度上提高了学习效率。支持这种学习方式的平
航拍图像在对地观测和军事侦察等领域都有广泛应用,因此,基于航拍图像的目标检测算法和目标识别技术的研究,不仅具有重要的理论价值,也具有重要的现实意义。并且,随着海军在现代战
产品线工程技术在软件行业的广泛运用,使产品线家族的软件产品的开发周期缩短,开发质量大幅提高。产品线工程的一个重要特点是产品开发平台和相关文档系统的复用。本文为产品线
随着软件开发的工业化,软件建模越来越成为开发过程中一个不可缺少的环节。MDA的出现将软件开发的重点转向了模型,模型成为了软件开发的核心制品。如何有效的进行自动化的模
由于信息技术的快速发展,越来越多的新兴网络多媒体服务应运而生,例如网络视频和可视电话等。而这些多媒体服务具有数据量大,传输比率高,实时性强等特点。传统的信息表达以及传输
学位
随着信息技术的飞速发展,信息已成为全社会的重要资源,而网络检索正是我们获取信息或资源的重要手段。以Google为代表的第二代搜索引擎搜索的出现使网络检索变得非常方便,然
程序员在日常编写和维护代码时,常常需要参考一些文档和其他代码。特别是在近来软件外包和人员流动日趋普遍的情况下,新接手项目的程序员需要花费大量时间来寻找需要参考的文
随着计算机性能的日益提高,以及数字化技术的飞速发展,越来越多的研究者,把关注的目光投向了多媒体文件的存储和应用。近年来,由于电影工业的飞速发展,每年都有数以千计的影
学位