没有合适的资源?快使用搜索试试~ 我知道了~
理论计算机科学电子札记94(2004)19-28www.elsevier.com/locate/entcsDelphi源代码Jens Knodel1和G. 卡尔德龙-梅萨2Fraunhofer Institute for Experimental Software Engineering(IESE)Sauerwiesen 6,D-67661 Kaiserweltern,Germany摘要通过解析提取事实通常是在逆向工程环境中分析软件系统的第一步。事实提取器的关键是底层元模型,它指定要提取的元素和关系在这项工作中,我们将介绍一个元模型的Delphi编程语言。元模型将与Dagstuhl中间模型(DMM)进行比较,并给出开发额外元模型的原因。此外,我们将报告我们使用目前正在开发的事实提取器的首次体验。我们用两个在开源社区开发的软件应用程序来评估我们的事实提取器。特别是,我们给出了数字和例子来指出我们的事实提取器的能力和尚未解决的开放问题,我们将回顾我们在案例研究中取得的经验。关键词:Delphi,事实抽取,元模型,解析,逆向工程1介绍逆向工程,特别是架构恢复,旨在提取更高级别的表示(例如,软件体系结构[6])直接来自软件系统(即,源代码),以支持开发人员评估,维护和发展大型软件系统[2]。为了生成这样的架构视图,当前的逆向工程工具处理了研究中的系统可用的各种工件,例如源代码、场景概要、文档、域信息和专家知识。1电子邮件地址:knodel@iese.fraunhofer.de2电子邮件地址:gcalde@ieee.org1571-0661 © 2004 Elsevier B. V.根据CC BY-NC-ND许可证开放访问。doi:10.1016/j.entcs.2004.01.00720J. Knodel,G. Calderon-Meza / Electronic Notes in Theoretical Computer Science 94(2004)从源代码中提取事实的目的是找到有关系统的信息(例如,一个事实是,一个类被命名为Class-1或函数- A调用函数-B)。这是逆向工程技术的基本步骤,通常必须作为第一步执行[4,7,8,11,13]。这意味着,在执行任何高级逆向工程分析或架构恢复活动之前,必须提取源代码中的可用信息并将其聚合到事实库或存储库中。这样的事实基础可以作为进一步分析或恢复任务的基础。从源代码中提取事实的常用技术是解析。在这篇文章中,我们将介绍一个Delphi编程语言的元模型[3]。我们介绍了一个元模型的Delphi编程语言和事实提取器在此元模型的基础上。事实提取器产生适合进一步分析的输出格式,Rigi标准格式RSF [14])。RSF格式是遵循“动词主语宾语”符号的三元组流。元模型和事实提取器目前支持Delphi 5。一旦它稳定下来,我们计划应用我们的事实提取器在逆向工程项目中收集有关使用Delphi的软件系统的信息。据我们所知,我们的工作是第一次尝试开发一个专门针对Delphi的事实提取器。本立场文件的其余部分结构如下:第2节简要介绍了Delphi编程语言,并将其与著名的编程语言C++进行了比较。第3节描述了我们的Delphi元模型,它是事实提取器的基础。我们想要提取的实体和关系在那里呈现。事实提取器(虽然仍在开发中)在第4节中通过两个案例研究进行了初步验证。然后第5节通过将我们的工作与语言无关的元模型(即Dagstuhl中间模型)进行比较来讨论相关的工作。第6节介绍了我们在这方面的未来工作。最后,第7节总结了我们的工作,并得出了一些结论。2Delphi编程语言Delphi是一个基于Pascal语言的Borland [1]产品,Pascal语言是第三代结构化编程语言,最初由Niklaus Wirth在20世纪70年代后期开发。Delphi面向Microsoft Windows和Linux环境,具有增强的面向对象功能。 最新版本是Delphi 7,但Delphi 5仍然更普遍。表1将Delphi的编程语言实体与C++的实体进行了匹配。这两种语言都支持过程编程范例以及面向对象的概念。有几种不同的情况:J. Knodel,G. Calderon-Meza / Electronic Notes in Theoretical Computer Science 94(2004)21• C++有两种不同类型的文件:实现(.c或.cpp文件)和头文件(.h或.hpp文件)。Header文件指定了可以由其他文件导入的接口和数据结构。 在特尔斐只有一个.pas文件,它包含接口定义和实现的部分,两者仅由特殊关键字分隔。• C++没有类属性的概念。当使用时,属性看起来和行为都像字段,但实际上,它们的功能是由方法实现的。属性取代了访问器和赋值器方法(通常称为getter和setter),但具有更强大的功能和更灵活的功能:属性有一个读取器和写入器来获取和设置属性的值。只允许受限访问的只读和只写值可以通过使用属性轻松实现。属性可以用两种方式使用,像字段和像例程,当使用属性而不是另一个概念时,它们没有性能损失。关于如何有效地使用属性的更多细节,请参见[10]。• 在C++中,函数(有返回类型)和过程(没有返回类型)之间没有明确的区别,就像在Delphi中一样,其中一个关键字清楚地表明了这一点。在C++中,只有函数,尽管返回类型可能是void。3Delphi元模型下面的图描述了Delphi编程语言中UML [16]符号的元模型。白色节点代表Delphi代码元素,灰色节点代表抽象元素。文件系统为元模型提供了一个起点。图1描述了Delphi元模型的物理组织方面。源代码文件可以位于文件系统中的任何位置。通常,源代码有一个公共根目录,该目录可以包含多个其他目录以及源代码文件。一个文件至少实现一个单元。一个单元可以被看作是一个命名空间,其中每个标识符都必须是唯一的。我们区分德尔菲单位和系统单位。Delphi单元是由开发人员自己实现的与应用程序相关的单元。必须对这些单元进行分析,以便提取有关应用程序的信息。系统单元是库或第三方单元,仅由应用程序使用。我们发现在这两种不同类型的单位之间有一个明确的分离是有用的。根据后续分析活动的目标,这种区分可以为逆向工程活动带来有价值的信息。图2显示了一个单元 可以包含类型、类、变量、属性、成员和字段,22J. Knodel,G. Calderon-Meza / Electronic Notes in Theoretical Computer Science 94(2004)DelphiC++实现文件:.pas实现文件:.c、.cpp-标题文件:.h单元命名空间类类类型Struct类的属性-构件构件领域领域类函数类方法分类程序类方法功能功能程序功能表1 Delphi与C++省略了图3中详细示出的例程。单元提供函数和过程,并包含类、类型和全局变量。一个类由类例程、字段(即,类的成员)和类属性。每一种类型都由一个或多个成员组成。元模型元素通过关系相互连接。RSF三元组中的关系形成动词(主语和宾语之间存在何种关系)。对于德尔菲,我们考虑以下关系:• 电话:电话(即,(类的)过程和(类的)函数)可以互相调用。• 导入:单位可以导入其他单位。然后,导入的内容对单元可见。• 继承:一个类可以从另一个类继承。• 等级:内容层次结构在级别关系中被捕获,即当元素A包含元素B时,我们有关系:级别元素A元素B• Set:例程能够设置实体的值(即,成员、变量、属性、字段)J. Knodel,G. Calderon-Meza / Electronic Notes in Theoretical Computer Science 94(2004)23*1德尔菲单位系统单元«摘要»单元*«摘要»实体继承1*11**可变构件领域类的属性类型类«摘要»实体目录1*含有1*进口*Fig. 1. 文件*图二. 实体• 用途:例程也可以使用实体。4案例研究在我们的案例研究中,我们分析了模型场景编辑器(MSE)[12]和SQL解析器(SQLP)[15],这两个都是Delphi社区的开源项目。MSE是一个3D场景编辑器,支持POVray V3.1和其他格式,如VRML和DirectX。它由113个文件和大约37个Kings组成。SQLP(版本0.01 alpha)是一个字符串解析器,能够将SQL语句解析为标记,更改这些标记并重建(修改)SQL语句。它由32个文件组成,包含约7个Kings。表2给出了关于元模型元素的数量的概述,而表3显示了事实库的不同关系的数量,«文件»文件24J. Knodel,G. Calderon-Meza / Electronic Notes in Theoretical Computer Science 94(2004)呼**1*设置/使***1课堂程序类函数程序功能课堂常规单元例程«摘要»«摘要»常规«摘要»«摘要»单元图三. 例程元模型元素出现次数MSESQLP类32589德尔菲单位11332目录11领域3098211文件11332功能1268类函数216141程序435课堂程序1025512类的属性4156系统单元4027类型41827可变368188表2元模型元素类«摘要»实体J. Knodel,G. Calderon-Meza / Electronic Notes in Theoretical Computer Science 94(2004)25关系出现次数MSESQLP呼叫772587包含11332进口1431221继承3538水平91621298设置40592使用354207表3关联结果应用我们的事实提取器总体而言,MSE的事实提取器的输出结果是21467个RSF [14]三元组,总共描述了9201个不同的元模型元素,而SQLP有3807个三元组和1329个不同的元素。在将事实提取器应用于两个开源软件系统时,我们面临着以下尚未完全解决的问题:• 事实提取器还没有覆盖以前的Delphi版本的所有功能,以及我们面临的问题,可能未来的Delphi.Net扩展可能需要在事实提取器的实现变化。imag-inable是建立一个事实提取器的产品系列,语言语法和功能,如输出和报告机制,作为共同的核心。Delphi版本之间的差异被显式地捕获为变量,因此可以为每个需要的版本派生实例。• 在单个状态中包含多个调用和使用的复杂表达式尚未完全识别,因为这些表达式需要能够处理此类语句的类型分析器• 类型的成员尚未完全解析(例如,如果类型表示数组,则忽略对数组元素的访问• 当表示类之间的继承时,不考虑对象的可见性,因此所有元素都被认为是我们在正确识别重载的类函数和过程方面仍然存在问题26J. Knodel,G. Calderon-Meza / Electronic Notes in Theoretical Computer Science 94(2004)• 我们的事实提取器仅在我们可以访问库和第三方软件的源代码时才能识别对该软件的调用。可能存在这样的情况,其中源代码中的实体以某种方式依赖于库中定义的其他实体(例如,继承)。这导致信息的缺乏。由于这个原因,也可能会丢失一些信息(元素和关系),除非这样的库的源代码可用。5相关工作元模型基本上存在于任何编程语言中。在本节中,我们将Delphi编程语言的具体元模型与[9]中提出的Dagstuhl中间模型(DMM)进行比较。DMM是一个独立于编程语言的元模型,其目的是促进再工程工具的互操作性,因为它独立于特定的编程语言。我们的元模型和DMM都代表了软件系统的静态结构。它们有很多相似的元素(有时名称不同,但含义相同),但也有一些不同:• DMM的一个优点是处理未经预处理的源代码以及可见性问题(即,Meta模型实体的私有、受保护、公共声明),我们将其视为元模型的开放点• DMM不完全支持Delphi编程语言,这是我们工作所需要的。具体来说,DMM既不支持命名空间(Delphi上下文中的单位),也不支持属性。我们认为这两个元素是Delphi语言的重要概念,我们的底层元模型支持这两个概念。因此,我们也忽略了应用程序单元和第三方库或系统单元之间的区别。• 由于DMM的目标是独立于语言,它必须照顾的元素和关系,不需要从Delphi源代码的事实提取。这三个层次结构允许表示更多的细节,但这增加了元模型的复杂性。我们的元模型是直接针对Delphi的,并且只支持我们的需求,这样我们就可以为未来的逆向工程任务提供足够的信息。当然,DMM小组的不同目标和我们的工作结果是两个不同的元模型,但我们看到德尔菲的特点可以集成到DMM中。J. Knodel,G. Calderon-Meza / Electronic Notes in Theoretical Computer Science 94(2004)276后续步骤我们未来工作的第一步显然是解决第4节提到的未决问题。为了有一个工作和稳定的事实提取器,我们的主要重点将在这个方向。然后,我们可以扩展元模型和事实提取器,以便也考虑可见性问题。此外,我们将考虑其他可提取的关系。在未来,我们计划在RSF格式之后建立第二种输出格式,即图形交换语言(GXL)[5],这是一种基于XML的图形标准交换格式。我们将进行进一步的案例研究,以验证我们的事实提取器的能力,因为事实提取器是基于引入的元模型,这将被检查。我们已经计划将事实提取器应用于建筑恢复项目。我们将使用有关软件系统的低级别信息来促进软件体系结构的恢复和文档编制。为了跟上时代的步伐,我们很可能首先将事实提取器扩展到Delphi 7,然后再扩展到Delphi. NET。我们希望底层的元模型保持稳定。7结论当使用(半)自动化工具对软件系统进行逆向工程时,重要的是要有一个公共的元模型作为工具的基础。在这项工作中,我们为Delphi编程语言引入了一个元模型,并通过将其应用于两个开源项目,反映了我们目前正在开发的事实提取器的第一次经验我们希望元模型和事实提取器,以帮助我们在未来的逆向工程和架构恢复项目与Delphi中实现的软件系统8确认我们非常感谢德国联邦教育和研究部为我们在EUREKA 2023/ITEA-ip00004“从概念到系统族工程应用(CAFE)”下的工作提供引用[1] 博兰,网址:http://www.borland.com。28J. Knodel,G. Calderon-Meza / Electronic Notes in Theoretical Computer Science 94(2004)[2] Chikofsky,E.J.,J.H. Cross,Reverse Engineering and Design Recovery:A Taxonomy,IEEE Software,1990年1月,pp. 13比17[3] 德尔菲,网址:http://www.borland.com/delphi/。[4] Guo , G.Y. , J.M. 阿 特 利 河 Kazman , A Software Architecture Reconstruction Method ,Proceedings of the 1st IFIP Working Conference on Software Architecture,pages 15-33,San Antonio,Texas,USA,February 1999。[5] 图形交换语言(GXL),URL:http://www.gupro.de/GXL/。[6] IEEE Std 1471-2000,IEEE推荐的软件密集型系统体系结构描述实践,IEEE-SA标准委员会,2000年9月。[7] 卡兹曼河,S.J. Carriere,建筑理解中的视图提取和视图融合,第五届软件重用国际会议论文集,1998年。[8] 克里哈尔河L.,复杂系统的逆向架构,国际软件维护会议论文集,ICSM 1997。[9] Lethbrigde , T.The Dagstuhl Middle Model : An Overview , in Proceedings of FirstInternational Workshop on Meta-models and Schemas for Reverse Engineering[10] 利施纳河Delphi in a Nutshell-A Desktop Quick Reference,[11] Mayrhauser,A. von,J. Wang,Q.李,以反向架构方法增进了解IEEE国际软件维护会议(ICSM)的经验,1999年。[12] 模型场景编辑器(MSE),URL:http://sourceforge.net/projects/mse/。[13] 奥布莱恩湖支持产品线扩展的体系结构重构,软件工程研究所,技术说明CMU/SEI-2001-TN-015,2001年7月。[14] Tilley , S.R. , K. Wong , M.- A. D. Storey , H. A. Mller , Programmable reverseengineering,International Journal of Software Engineering and Knowledge Engineering,第501-520页,1994年12月。[15] SQL解析器(SQLP),网址:http://sourceforge.net/projects/gasqlparser/网站。[16] 统一建模语言(UML),URL:http://www.uml.org/。
下载后可阅读完整内容,剩余1页未读,立即下载
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
cpongm
- 粉丝: 4
- 资源: 2万+
上传资源 快速赚钱
我的内容管理 收起
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
会员权益专享
最新资源
- BSC关键绩效财务与客户指标详解
- 绘制企业战略地图:从财务到客户价值的六步法
- BSC关键绩效指标详解:财务与运营效率评估
- 手持移动数据终端:常见问题与WIFI设置指南
- 平衡计分卡(BSC):绩效管理与战略实施工具
- ESP8266智能家居控制系统设计与实现
- ESP8266在智能家居中的应用——网络家电控制系统
- BSC:平衡计分卡在绩效管理与信息技术中的应用
- 手持移动数据终端:常见问题与解决办法
- BSC模板:四大领域关键绩效指标详解(财务、客户、运营与成长)
- BSC:从绩效考核到计算机网络的关键概念
- BSC模板:四大维度关键绩效指标详解与预算达成分析
- 平衡计分卡(BSC):绩效考核与战略实施工具
- K-means聚类算法详解及其优缺点
- 平衡计分卡(BSC):从绩效考核到战略实施
- BSC:平衡计分卡与计算机网络中的应用
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)