PalladioSimulator/Palladio-ReverseEngineering-Retriever
GitHub: PalladioSimulator/Palladio-ReverseEngineering-Retriever
Retriever 是一款软件架构逆向工程工具,通过规则引擎从异构项目工件中自动提取静态组件模型,供 Palladio 平台进行质量预测分析。
Stars: 3 | Forks: 0
# Retriever
[](https://github.com/PalladioSimulator/Palladio-ReverseEngineering-Retriever/actions/workflows/build.yml) [](https://github.com/PalladioSimulator/Palladio-ReverseEngineering-Retriever/actions/workflows/quality.yml) [](https://github.com/PalladioSimulator/Palladio-ReverseEngineering-Retriever/actions/workflows/product.yml)
从软件开发过程的[异构工件](#discoverers)中对软件组件模型进行逆向工程。为此,Retriever 内部使用[特定技术的规则](#rules)来自动提取系统的静态组件。为此,软件项目的异构工件首先被转换为模型表示。基于该模型,Retriever 将规则工件中指定的映射应用于每个模型实例,以识别最终软件架构模型的组件。
该组件提取支持基础组件、复合结构、接口、端口和连接器。然后,候选组件用于生成目标软件架构模型的元素,随后可在 [Palladio](https://www.palladio-simulator.com/) 环境中用于质量预测目的。提取的模型适用于增进对现有软件的理解,并支持进一步的质量分析。作为补充工具链的一部分,软件性能、可靠性和维护分析已经可用。
## 状态
规则引擎目前正在积极开发中。如果您对进一步的信息感兴趣,或者想提供您的个人想法或需求,请随时与我们联系。
## Retriever 架构
该 UML 图展示了 Retriever 方法如何与 Eclipse 平台协同工作。图的主要部分是 Retriever 组件,它与 Discoverer、Extraction、Finalization 和 Refinement 等其他流程协同工作。这些组件通过一个 orchestrator 进行工作,该 orchestrator 协调逆向工程,因此可以通过两种方式使用:以编程方式和图形化方式。它还展示了软件如何与外部模型和元模型交互。该图展示了 SoMoX SEFF 和 Vulnerability 等组件如何连接到主要的 Retriever 组件,以提取和显示软件模型信息。

### 平台
Retriever 是使用 [Eclipse Modeling Framework (EMF)](https://www.eclipse.org/modeling/emf/) 实现的。因此,它作为 [Eclipse 平台](https://www.eclipse.org/eclipse/)的一个插件提供。
基于 EMF metamodel 的源代码是在构建过程中生成的,因此未添加到代码仓库中。要生成源代码,必须运行 Maven 构建或 [EMF 生成工作流](https://www.eclipse.org/modeling/emf/docs/2.x/tutorials/clibmod/clibmod_emf2.0.html#step2)。
模型到模型转换的规则使用 [Xtend](https://www.eclipse.org/xtend/) 实现,它可以被编译为 Java 兼容的源代码。
### 发现器
* [CSV 发现器](https://github.com/PalladioSimulator/Palladio-ReverseEngineering-Retriever/blob/master/bundles/org.palladiosimulator.retriever.extraction.discoverers/src/org/palladiosimulator/retriever/extraction/discoverers/CsvDiscoverer.java)
* [ECMA 发现器](https://github.com/PalladioSimulator/Palladio-ReverseEngineering-Retriever/blob/master/bundles/org.palladiosimulator.retriever.extraction.discoverers/src/org/palladiosimulator/retriever/extraction/discoverers/EcmaScriptDiscoverer.java)
* [Java 发现器](https://github.com/PalladioSimulator/Palladio-ReverseEngineering-Retriever/blob/master/bundles/org.palladiosimulator.retriever.extraction.discoverers/src/org/palladiosimulator/retriever/extraction/discoverers/JavaDiscoverer.java)
* [JSON 发现器](https://github.com/PalladioSimulator/Palladio-ReverseEngineering-Retriever/blob/master/bundles/org.palladiosimulator.retriever.extraction.discoverers/src/org/palladiosimulator/retriever/extraction/discoverers/JsonDiscoverer.java)
* [Properties 发现器](https://github.com/PalladioSimulator/Palladio-ReverseEngineering-Retriever/blob/master/bundles/org.palladiosimulator.retriever.extraction.discoverers/src/org/palladiosimulator/retriever/extraction/discoverers/PropertiesDiscoverer.java)
* [SQL 发现器](https://github.com/PalladioSimulator/Palladio-ReverseEngineering-Retriever/blob/master/bundles/org.palladiosimulator.retriever.extraction.discoverers/src/org/palladiosimulator/retriever/extraction/discoverers/SqlDiscoverer.java)
* [XML 发现器](https://github.com/PalladioSimulator/Palladio-ReverseEngineering-Retriever/blob/master/bundles/org.palladiosimulator.retriever.extraction.discoverers/src/org/palladiosimulator/retriever/extraction/discoverers/XmlDiscoverer.java)
* [YAML 发现器](https://github.com/PalladioSimulator/Palladio-ReverseEngineering-Retriever/blob/master/bundles/org.palladiosimulator.retriever.extraction.discoverers/src/org/palladiosimulator/retriever/extraction/discoverers/YamlDiscoverer.java)
### 提取
* [Docker 容器](https://github.com/PalladioSimulator/Palladio-ReverseEngineering-Retriever/tree/master/bundles/org.palladiosimulator.retriever.extraction.rules/src/org/palladiosimulator/retriever/extraction/rules/DockerRules.xtend)
* [ECMAScript 6](https://github.com/PalladioSimulator/Palladio-ReverseEngineering-Retriever/tree/master/bundles/org.palladiosimulator.retriever.extraction.rules/src/org/palladiosimulator/retriever/extraction/rules/EcmaScriptRules.xtend)
* [Gradle 构建](https://github.com/PalladioSimulator/Palladio-ReverseEngineering-Retriever/tree/master/bundles/org.palladiosimulator.retriever.extraction.rules/src/org/palladiosimulator/retriever/extraction/rules/GradleRules.xtend)
* [Jakarta 部署](https://github.com/PalladioSimulator/Palladio-ReverseEngineering-Retriever/tree/master/bundles/org.palladiosimulator.retriever.extraction.rules/src/org/palladiosimulator/retriever/extraction/rules/JaxRSDeploymentRules.xtend)
* [Jakarta 服务](https://github.com/PalladioSimulator/Palladio-ReverseEngineering-Retriever/tree/master/bundles/org.palladiosimulator.retriever.extraction.rules/src/org/palladiosimulator/retriever/extraction/rules/JaxRSRules.xtend)
* [Maven 构建](https://github.com/PalladioSimulator/Palladio-ReverseEngineering-Retriever/tree/master/bundles/org.palladiosimulator.retriever.extraction.rules/src/org/palladiosimulator/retriever/extraction/rules/MavenRules.xtend)
* [Spring Boot](https://github.com/PalladioSimulator/Palladio-ReverseEngineering-Retriever/tree/master/bundles/org.palladiosimulator.retriever.extraction.rules/src/org/palladiosimulator/retriever/extraction/rules/SpringRules.xtend)
* [Spring 网关](https://github.com/PalladioSimulator/Palladio-ReverseEngineering-Retriever/tree/master/bundles/org.palladiosimulator.retriever.extraction.rules/src/org/palladiosimulator/retriever/extraction/rules/SpringGatewayRules.xtend)
* [Zuul 网关](https://github.com/PalladioSimulator/Palladio-ReverseEngineering-Retriever/tree/master/bundles/org.palladiosimulator.retriever.extraction.rules/src/org/palladiosimulator/retriever/extraction/rules/SpringZuulRules.xtend)
### 分析器
* [行为](https://github.com/PalladioSimulator/Palladio-ReverseEngineering-SoMoX-SEFF)
* [漏洞](https://github.com/PalladioSimulator/Palladio-ReverseEngineering-Retriever-Vulnerability)
### 终结器
* [质量预测](https://github.com/PalladioSimulator/Palladio-Core-PCM)
* [文档](https://github.com/hallvard/plantuml)
## 入门指南
### 前置条件
* [安装 PCM Nightly](https://sdqweb.ipd.kit.edu/wiki/PCM_Installation#PCM_Nightly)
* 需要 [Java Development Kit 17](https://adoptopenjdk.net/?variant=openjdk17&jvmVariant=hotspot) 和 [Eclipse 2022-12 Modeling Tools](https://www.eclipse.org/downloads/packages/release/2022-12/r/eclipse-modeling-tools)
* 从[更新站点](https://updatesite.palladio-simulator.com/palladio-build-updatesite/nightly/)[安装](https://help.eclipse.org/latest/topic/org.eclipse.platform.doc.user/tasks/tasks-124.htm) PCM Nightly
* 不要安装*已弃用*的类别
### 安装
#### 用于开发
* 从[更新站点](https://updatesite.palladio-simulator.com/palladio-addons-fluentapimodelgenerator/nightly/)安装 [Fluent Api Model Generator](https://github.com/PalladioSimulator/Palladio-Addons-FluentApiModelGenerator)
* 从[更新站点](https://download.eclipse.org/modeling/tmf/xtext/updates/composite/releases/)安装 [Xtend IDE](https://www.eclipse.org/xtend/download.html)
* 保留当前的安装,如有必要,请更改要安装的项目以使其兼容
* 检出[此仓库](https://github.com/PalladioSimulator/Palladio-ReverseEngineering-Retriever.git)并将[现有项目导入](https://help.eclipse.org/latest/topic/org.eclipse.platform.doc.user/tasks/tasks-importproject.htm) Eclipse
* 在 Eclipse 中对导入的代码进行修改
* 使用 [Maven](https://maven.apache.org/) 在本地验证仓库中的所有项目:`mvn clean verify`
* 启动一个新的 [Eclipse 运行时应用程序](https://help.eclipse.org/latest/topic/org.eclipse.pde.doc.user/guide/tools/launchers/eclipse_application_launcher.htm)
#### 用于直接使用
* [添加这些更新站点](https://help.eclipse.org/latest/topic/org.eclipse.platform.doc.user/tasks/tasks-127.htm),无需任何进一步的安装:
* [Fluent Api Model Generator](https://github.com/PalladioSimulator/Palladio-Addons-FluentApiModelGenerator) 的[更新站点](https://updatesite.palladio-simulator.com/palladio-addons-fluentapimodelgenerator/nightly/)
* 从[更新站点](https://updatesite.palladio-simulator.com/palladio-reverseengineering-retriever/nightly/)安装 Retriever
* 这将自动安装所有必需的依赖项
### 用法
* 创建一个新的运行配置以启动 Retriever
* 指定要分析的项目的根目录
* 选择那里使用的技术
* 指定用于保存 PCM 实例的目录
* 如果 PCM 实例未保存在工作区中,可以稍后导入它们
## 链接
* Palladio 主页:https://www.palladio-simulator.com/
* 综合文档:https://sdqweb.ipd.kit.edu/wiki/Palladio_Component_Model
* 问题追踪器:https://palladio-simulator.atlassian.net/jira/
* 更新站点:https://updatesite.palladio-simulator.com/palladio-reverseengineering-retriever/nightly/
* Javadoc:https://updatesite.palladio-simulator.com/palladio-reverseengineering-retriever/nightly/javadoc/
## 许可
本项目中的代码采用 [EPL-2.0 许可证](LICENSE)授权。
标签:JS文件枚举, 域名枚举