前言
当前,很多软件经过多年积累,代码越来越复杂,造成持续开发和维护的困难,所以对已有软件代码完整而清晰描述愈发显得重要。 UML 建模语言可以对软件进行非常精准的描述,这就可以把已有的代码逆向为模型,然后再此基础上在进行正向设计、开发和维护。下面找了一个 QT 插件开发的示例,演示一下如何对已有的代码进行逆向。建模工具采用的是主流 UML/SysML/UAF 建模工具EA ,为了提高建模的效率,采用 EA 插件 代码正逆向工具CodeEngineer (火龙果科技开发) 进行了代码到模型的自动逆向。下面是 建模工具EA 和 代码正逆向工具CodeEngineer 逆向结果的截图。
如下是 代码正逆向工具CodeEngineer 功能目录:
下面首先了解一下 QT Plugin 示例项目。
示例项目简介: QT Plugin
如下是 QT Plugin 项目的构成,分为 2 部分:
Plugin_Demo :这是 QT 插件,提供可以装载到主程序的窗体。
Plugin_Test : QT 应用主程序,加载 Plugin_Demo ,创建该插件的窗体,然后加载到主窗体的 tabWidget 。 QT Creator 中的项目截图如下:
Plugin_Demo 的窗体如下:
Plugin_Test 的主界面加载 Plugin_Demo 的窗体后效果如下:
QT 插件示例项目源码如下。
PluginDemo 程序源码
PluginTest 程序源码
逆向的模型: QT Plugin 示例项目
代码逆向模型的并不只是把代码逆向为设计模型,而是应该从完整理解软件的角度进行梳理。这就需要参考正向工程的主线:需求、设计、实现,按照正向工程的主线进行梳理。如下是逆向的软件模型主要的图示:
下面分别介绍逆向的结果。
用例模型 采用用例图描述软件的功能需求,如下是插件示范项目的用例图。
《用例:使用插件》简介:用户在主应用界面点击《按钮:加载插件》,主应用界面加载插件界面。
逻辑模型
把已有的代码的结构逆向为 UML 类图。对于 QT 程序中的一些特殊定义建模工具 EA 无法处理,为此我在 建模工具EA 的插件 CodeEngineer (火龙果科技研发) 定制开发了 QT 代码的逆向功能。逆向出来的类图如下 :
Plugin_Demo 的类图如下:
说明: Plugin_Demo 类实现 PluginInterface , Plugin_Demo 类负责创建 Form 类的实例。 Plugin_Test 的类图如下:
说明: main 调用 MainWindow 创建主界面, MainWindow 通过插件接口 PluginInterface 创建插件 Plugin_Demo 的 Form 实例,然后显示在主界面。
对象的交互
主程序 Plugin_Test 的对象交互过程逆向为顺序图,如下所示:
说明:用户启动主应用, main 创建 Main Window 的实例,用户点击《按钮:加载插件》,触发 on_pushButton_clicked 的调用, mainWindow 加载插件文件 Plugin_Demo.dll, 然后调用《 pi : PluginInterface 》的 getWidget( ) 创建《 w : Form 》,最后调用 addTab ()加载插件界面。
为了提高逆向效率,采用 代码正逆向工具CodeEngineer 把函数 MainWindow::on_pushButton_clicked() 自动逆向为如下的活动图:
组件模型
采用组件模型描述了主程序 Plugin_Test.exe 和 Plugin_Test.dll 的集成关系,组件图如下:
组件交互
同时采用了顺序图描述了组件之间的交互。
如果希望了解 QT_Plugin_Demo 模型详细信息,请浏览 《 模型库:QT_Plugin_Demo 》

欢迎购买 MBSE 工具链(如下工具可以根据需要选择):
1) 建模工具【 EA 】
2) 代码工程师【 Code-Engineer 】
3) MBSE 平台与建模工具【 iSpace 】
4) 模型库 【Model-Center 】
5) 自动建模器【 Auto-Modeler 】
6) 模型检查器 【Model-Checker 】
7) 质量管理器【 Model-Reviewer 】
8) 文档生成器【 Doc-Generator 】
9) 系统仿真器【 Simulator-Sys 】
10) 需求管理器【 Req-Manager 】
11) 需求、质量与项目管理工具【 WebEA 】
12) 测试驱动器【 Test-Driver 】
13) 嵌入式集成测试平台【 Integrator 】
如果希望进一步学习 SysML 或 UML 有关的建模课程和工具,欢迎访问:
1) 课程: MBSE 体系与实践
2) 课程: 基于 SysML 和 EA 进行系统设计与建模
3) 课程: 基于 UML 和 EA 进行系统分析设计
4) 课程: 使用NML 进行系统分析与建模
5) 课程: UAF 体系架构与实践
6) 课程: DODAF 模型规范与实例
如果您希望了解更多信息:
|