全文预览已结束
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
收稿日期 2005 04 16 修返日期 2005 07 05 基金项目 教育部科学技术研究重点资助项目 01024 中石 化科学技术研究开发资助项目 E03007 基 于 源 代 码 分 析 的 逆 向 建 模 彭四伟 朱群雄 北京化工大学 信息科学与技术学院 北京 100029 摘 要 逆向建模通过对源代码进行分析 提取出代码中的对象信息 结构信息 流程信息等 生成对象间的关 系描述 结构描述 系统流程描述等设计模型描述 逆向建模过程中对源代码的分析处理与编译过程的前端处 理相似 只是处理的复杂程度与产生的目标结果不同 因此可以采用编译技术对源代码进行处理 通过逆向建 模可以弥补软件设计中缺少或缺失的模型设计文档 帮助代码阅读者更好地理解程序 帮助软件的测试和优化 介绍了对C C 源代码进行逆向建模的实现 关键词 源代码分析 软件建模 逆向建模 中图法分类号 TP311 文献标识码 A 文章编号 1001 3695 2006 07 0052 03 Inverse Modeling Based on Source Code Analysis PENG Si wei ZHU Qun xiong College of Information Science Software Modeling Inverse Modeling 1 引言 1 逆向建模 应用建模方法对软件的设计需求 总体构架 内部结构等 进行描述已经成为软件设计过程中一种行之有效 并被广泛运 用的设计技术 1 4 软件的逆向建模过程与软件设计过程中 的建模过程相反 是对已经存在的软件源代码进行分析 逆向 生成软件模型描述的过程 人们习惯于把源代码视为软件设计中最主要的成果 但随 着软件工程理论的发展 人们逐渐意识到软件的设计模型描述 能够比源代码更准确 更深刻和更清晰地反映软件的设计思想 和设计框架 5 然而 软件设计模型的描述文档并非总能与 软件的实际设计保持一致 在开发过程中 由于代码编写与文 档编写的不同步 常常出现模型文档的缺少 缺失 与代码不一 致等情况 而通过购买或免费取得的源代码产品则往往没有提 供相应的详细模型文档 逆向建模即是通过对源代码的自动 分析 提取出代码各个层次上各类对象的相关信息 分析各对 象间的相互关系并生成多种类型的模型描述文档 6 在许多开发工具中已经加入了逆向建模的工具 但所提供 的功能还比较有限 能够生成的模型文档也比较简陋 例如在 Microsoft的 Visual Studio 开发工具中 可以通过逆向工程功能 生成 Visio 格式的类模型文档 但文档中只包括了分别对各个 类的描述信息 没有更多关于类体系结构 对象体系结构等的 描述 如何通过逆向建模生成更为详细 更深层次的模型文 档 还有待进一步的讨论和研究 2 逆向建模的应用 通过对源代码的自动分析和逆向建模可以获得代码中的 各种信息 如源文件 模块 对象 变量的定义 各对象间的引用 关系 类的定义 类系的组织结构 系统的工作流程 模块的控 制流程等 通过对分析得到的各类信息进行组织和描述 可以 生成不同 层次 不 同类 型 不同 角度 上 的设 计模 型描 述 文 档 7 8 从而可以弥补在设计阶段中缺少 缺失或与源代码不 一致的模型文档 对于具有一定规模的软件 通过直接阅读源代码来理解软 件的设计将是极为艰苦的工作 通过逆向建模则可以将代码 中的各类信息收集和存储到模型数据库中 并将软件的设计结 构以更为直观的形式 如关系图 流程图等 表达出来 使阅读 者可以更容易地理解软件的组织结构 设计结构 还可以快速 进行各种信息检索 从而更有效地阅读 分析和理解代码 9 对源代码进行深度建模可以获得更为深入的代码信息 如 25 计算机应用研究2006 年 流程控制逻辑 输入输出逻辑 模块间的数据相关性和控制相 关性分析 设计模式等 这些信息可以用于软件测试方案和测 试数据的自动设计或用于对软件进行自动优化 10 2 对C C 源代码的逆向建模 2 1 源代码分析 源代码分析是逆向建模的第一个步骤 这个过程与编译器 的前端工作过程相同 因此可以采用编译器的设计技术来实现 逆向建模的源代码分析 利用词法和语法分析器的自动生成 器 采用了 GNU的 Flex 和 Bison 按照C C 的语法规范 可 以方便地构造出C C 源代码的解析器 只是对分析结果的 处理与编译过程不同 2 1 1 符号信息 在对C C 源代码进行分析的过程中 首先得到的是各 类符号信息 包括源文件名 函数名 变量名 对象名 类名等 在模型数据库中只记录全局性的符号及其相关属性 不同类 型的符号具有不同的模型属性 基本属性如表 1 所示 表 1 符 号的基 本属 性 符 号 类 型基 本 属 性 全 局 变 量名 称 数 据 类 型 定 义 位 置 注 释 全 局 对 象名 称 类 定 义 位 置 注 释 函 数名 称 原 型 类 型 内 联 成 员 模 板 普 通 定 义 位 置 注 释 类名 称 类 型 普 通 类 模 板 类 定 义 位 置 成 员 表 注 释 源 文 件名 称 注 释 2 1 2 符号间的关系 软件的模型描述中更为重要的是各类符号间相互关系的 描述 基本关系如表 2 所示 表 2 符号间 的基本 关系 关 系 类 型关 系 描 述 符 号 A 定 义 于 源 文 件 B 中 全 局 变 量 全 局 对 象 函 数 A 的 定 义 出 现 在 源 文 件 B 中 源 文 件 A 包 含 源 文 件 B源 文 件 A 中 出 现 了 include B 语 句 源 文 件 A 引 用 源 文 件 B 源 文 件 A 中 的 符 号 与 源 文 件 B 中 的 符 号 存 在 引 用 关 系 函 数 A 引 用 全 局 变 量 全 局 对 象 B 函 数 A 中 出 现 了 对 全 局 变 量 全 局 对 象 B 的 访 问 函 数 A 引 用 函 数 B函 数 A 中 出 现 了 对 函 数 B 的 调 用 函 数 A 包 含 类 B在 函 数 A 中 定 义 了 类 B 的 局 部 对 象 函 数 A 引 用 类 B函 数 A 的 参 数 中 含 有 类 B 的 对 象 参 数 类 A 派 生 类 B类 B 是 类 A 的 派 生 类 类 A 包 含 类 B在 类 A 中 存 在 的 数 据 成 员 是 类 B 的 对 象 类 A 引 用 类 B在 类 A 的 成 员 函 数 的 参 数 中 含 有 类 B 的 对 象 参 数 类 A 引 用 函 数 B在 类 A 的 成 员 函 数 中 调 用 了 函 数 B 类 A 引 用 全 局 变 量 全 局 对 象 B 在 类 A 的 成 员 函 数 中 访 问 了 全 局 变 量 全 局 对 象 B 源文件之间的引用关系 全局变量 全局对象与函数之间 的引用关系构成了整个源代码的组织结构 类与类之间的派生 关系 包含关系 引用关系构成了整个源代码的类系结构 函数 与函数之间的引用关系构成了整个源代码的主流程结构 2 1 3 注释 逆向建模将源代码中的注释视为重要的说明文字 并记录 到相关对象的注释属性中 对注释所属对象的识别是按照就 近原则来进行的 即与符号定义同行的注释以及出现在符号定 义上方的注释被视为符号对象的相关注释 不能确定相关对象 的注释则被忽略 2 1 4 预编译指令 逆向建模时将略过源代码中除 include 和 define 外的预 编译指令 对 include 和 define 的处理与预编译过程相似 当遇到 include 指令时 先检索源文件表 检查被嵌入的 文件是否已被解析过 若未解析过 则将被嵌入文件名记入源 文件表中 记录被嵌入文件与宿主文件之间的包含于关系并将 解析过程递归地转向被嵌入文件 若该文件已经被解析过了 则只有记录被嵌入文件与宿主文件之间的包含于关系 当遇到 define 指令时 将被定义宏名及其宏值记录到宏 表中 当分词过程识别到一个宏名时 即用其宏值替换该宏名 重新进行解析 宏表只记录在内存中 并不记录到模型数据库 中 2 1 5 流程结构 函数之间的引用关系构成了系统的宏观流程结构 而函数 内部的流程结构则可以通过对流程控制语句的分析来获得 以流程控制语句为分界点 将函数划分为若干独立代码 块 每一个独立代码块是一个极大无流程转移的代码块 在模 型数据库中分别对每一个独立代码块进行标志和记录 每个独 立代码块记录中包括标志号 所属函数 代码 注释等属性 若 两个独立代码块 或独立代码块与其自身 在执行流程上存在 相继执行的可能 则记两个独立代码块之间存在执行关系 记 录在模型数据库中 并同时记录相关的条件表达式 独立代码 块之间的执行关系即反映了函数内部的流程结构 2 2 模型数据库 模型数据库中主要包括两大类数据 对象数据 记录全 局变量 全局对象 函数 类 源文件 独立代码块等对象的属 性 关系数据 记录各类对象之间的各种相互关系 模型数 据库结构如图 1 所示 2 3 模型描述文档 从源代码中提取出各类信息后 需要以适当的形式组织为 模型描述文档 生成的模型描述文档主要有两类 表格文档和 图形文档 符号及其属性用表格的形式描述 关系则用图形的 方式来描述 关系图包括源代码组织结构图 符号 源文件从属关系 图 源文件包含关系图 源文件引用关系图 函数耦合图 全 局变量 全局对象 函数引用关系图 函数 全局变量 全局对 35 第 7 期彭四伟等 基于源代码分析的逆向建模 类轧对象引用关系表 FK1 FK2 类 ID 对象 ID 注释 类表 PK ID FK1 名称 类型 源文件 ID 所属命名空间 成员表 注释 源文件表 PK ID 名称 注释 函数表 PK ID FK1 名称 原型 源文件 ID 所属命名空间 注释 独立代码块表 PK ID FK1 函数 ID 代码文本 注释 执行关系表 FK1 FK2 前代码块 ID 后代码块 ID 流程控制条件 注释 函数引用关系表 FK1 FK2 宿主ID 被引用ID 注释 函数轧类关系表 FK1 FK2 函数 ID 类 ID 关系 注释 类派生关系表 FK1 FK2 基类 ID 派生类 ID 派生类型 注释 类包含引用关系表 FK1 FK2 主 ID 属 ID 关系 注释 源文件关系表 FK1 FK2 主 ID 属 ID 关系 注释 对象轧函数 引用关系表 FK1 FK2 函数 ID 对象 ID 注释 变量轧函数引用关系表 FK1 FK2 函数 ID 对象 ID 注释 全局对象表 PK ID FK1 FK2 名称 类 ID 源文件 ID 所属命名空间 注释 全局变量表 PK ID FK1 名称 数据类型 源文件 ID 所属命名空间 注释 类轧变量引用关系表 FK1 FK2 类ID 变量 ID 注释 图1模型数据库结构图 象引用关系图 类系结构图 类派生 包含 引用关系图 系 统流程图 函数引用关系图 函数流程图 独立代码块执行关 系图 在组织结构图中 用折角的矩形表示源文件 矩形表示符 号 带箭头的连接线表示关系 在函数耦合图中 用折角的矩形 表示函数 矩形表示全局变量和全局对象 带箭头的连接线表 示关系 类系结构图直接采用 OMT 表示法进行描述 在系统流 程图和函数流程图中 用矩形表示函数和独立代码块 带箭头 的连接线表示执行关系并在连接线上标注运行条件 模型文档采用 Microsoft Office 应用程序对象模型来生成 其中表格文档采用 Microsoft Word 对象模型生成 关系图采用 Microsoft Visio 对象模型生成 在自动生成的关系图中 图元 被均匀分布到页面上 用户可以在生成文档上对布局进行重新 调整以达到更理想的表达效果 2 4 深度分析 通过源代码分析所获得的基本模型信息能够反映软件设 计的基本结构框架 在基本模型信息的基础上做进一步的深度 分析可获得更深层次的模型信息 例如 通过对独立代码块间 执行关系的分析可以确定代码段的所有可能运行流程以及相 应的运行条件 这是源代码测试数据设计的重要依据 通过对 软件模型中的结构分析 流程分析和数据流分析 还可以帮助 设计者找出代码设计中的冗余结构 从而对代码设计做出优 化 另外 在处理实际开发项目时 通常会涉及到许多具体的 设计模式 要更有效地对这些具体设计模式做出分析和处理 也需要对基本模型信息做进一步的建模和分析 3 小结 逆向建模与编译都是对源代码进行分析和处理的过程 可 以采用相同的设计技术 但两者处理的深度 细度和目标不同 虽然目前很多开发环境已提供了逆向建模的功能 但所生 成的模型文档还比较简单 远远不能满足应用需求 基于源代 码分析的逆向建模可以提取出源代码中的各种对象信息 分析 对象之间的相互关系 建立模型数据库并生成模型描述文档 从而更准确 更直观 更深入地表现软件的设计结构和设计框 架 帮助阅读者更直观 更方便地阅读 理解和分析源代码 通 过进一步的深度分析和建模还可帮助设计人员制定软件的测 试方案和测试数据 帮助其对软件的设计进行优化 在基于 Web Sphere 的化工数据库搜索引擎开发项目中 即采用逆向建模的方法生成了对 Web Sphere 源代码的结构模 型描述和流程描述 为分析 理解和改进源代码提供了极大的 方便 从而提高了项目的开发效率 需要注意的是 逆向建模 可以作为编写模型文档的辅助手段 但并不能作为编写模型文 档的替代手段 在模型文档中包含着很多设计思想 设计逻辑 的表述 而逆向建模过程只能对代码进行静态分析 并不能完 全 自动地解释与表现其中的思想和逻辑 参考文献 1 aniel Jackson Alloy A New Technology for Software Modeling C Tools and Algorithms for the Construction and Analysis of Sys tems Grenoble Springer Verlag GmbH 2002 20 21 2 Gill J Y Kent S Three Dimensional Software Modeling C Pro ceedings of the 1998 International Conference on Software Enginee ring 1998 3 F J Argul M Castro A Delgado Software Modeling of Grid connec ted Photovoltaic Buildings J Progress in Photo Voltaics 2003 11 255 273 4 麻志 毅 孟 祥 文 面 向 对 象 的 软 件 建 模 工 具 的 研 制 C 北 京 2001 全国软 件技 术研讨 会 2001 5 Balmas F Using Dependence Graphs as a Support to Document Pro grams C Proceedings of the 2nd IEEE International Workshop on Source Code Analysis and Manipulation 2002 6 刘亚军 高建国 一 种表 单驱动 的逆 向 建 模 方法 J 小 型 微型 计 算机系 统 2002 23 6 747 750 7 Giuseppe Antonio Di Lucca Anna Rita Fasolino Porfirio Tramon tana et al Recovering a Business Object Model from Web Applica tions C Dallas The 27th Annual International Computer Software and Applications Conference COMPSAC 2003 2003 8 Giuseppe Antonio Di Lucca Anna Rita Fasolino Porfirio Tramon tana et al Abstracting Business Level UML Diagrams from Web Ap plications C Amsterdam The 5th IEEE International Workshop on Web Site Evolution WSE 2003 2003 9 Pinzger M Oberleitner J Gall H Analyzing and Understanding Ar chitectural Characteristics of COM Components C The 11th IEEE International Workshop on Program Comprehension 2003 10 Krzysztof Ciebiera Piotr Sankowski Improving Web Sites by Auto matic Source Code Analysis and Modifications C Munich The 4th Web Engineering 2004 作者简介 彭 四伟 1970 男 副 教 授 在 读 博 士 生 研 究 方 向 为 过 程 工
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年医院老年病科年度工作总结与慢病管理报告
- 矿产资源补偿费
- 2026天津农商银行校园招聘备考题库及完整答案详解
- 2025河南商丘市城乡一体化示范区招聘社区工作者60人备考题库附答案详解
- 2026年度秋季中国工商银行厦门市分行校园招聘195人备考题库及答案详解(真题汇编)
- 2026福建省面向东北大学选调生选拔工作备考题库及答案详解(基础+提升)
- 2025昆明市盘龙区东华街道办事处辅助性岗位劳务派遣工作人员招聘备考题库(1人)及答案详解(网校专用)
- 2026年度中国建设银行黑龙江省分行校园招聘430人备考题库及一套答案详解
- 2026福建省面向西南政法大学选调生选拔工作备考题库及参考答案详解
- 2026长乐农商银行校园招聘6人备考题库含答案详解(预热题)
- 湘教版八年级上册数学期中考试试题含答案
- 转运呼吸机的使用和管理
- 行政伦理学-终结性考核-国开(SC)-参考资料
- 2024版《工程制图》教案:教学实践与反思
- 英语演讲技巧与实训学习通超星期末考试答案章节答案2024年
- 巴黎奥运樊振东乒乓球故事介绍课件(图文)
- 小学五年级英语一对一个性化辅导方案
- 四川省遂宁市2023年中考地理试卷
- 幼儿园大班语言活动《新年礼物》课件
- 大国外交演讲与辩论智慧树知到期末考试答案章节答案2024年中国石油大学(华东)
- 大模型应用开发极简入门基于GPT-4和ChatGPT
评论
0/150
提交评论