3 Star 0 Fork 0

openEuler2020 / 9-Radius

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

9-Radius

介绍

TOPIC_ID:9, TEAM_ID:1526185410, TEAM_NAME:Radius.

答辩展示用文稿

本项目对于赛题 基于 openEuler 的 ABI 检查工具,开发并提供了统一的框架,支持不同语言的插件式扩展,实现了对 Python 包多版本API接口信息导出,差异对比,以及报告呈现(以网页的形式)的功能。对于其他语言,由于框架的泛用性,也能较容易地组合进入本项目。

由于本项目涉及多种编程语言,每种语言的接口形式,库结构有很大不同,所以我们在实现一个统一架构的基础上,对每种语言,使用特定的技术和工具进行处理分析。

架构上,我们对每种语言独立处理,对于分析器,使用 JSON 作为 ABI/API 描述的表示形式;对于比对器,对从分析器得到的 API 描述信息,遍历并进行差分比对,得到 API 增加,移除,修改的信息,对每种 API 变更按照其可能造成的不兼容问题进行分级,使用 JSON 作为 API 差异描述的表示形式。对于报告生成器,根据 API 差异描述的表示形式,生成 HTML(或其他) 形式报告。

我们选择 JSON 作为中间信息表示的原因是 JSON 具有较强的描述结构化数据的能力,并且有很多高效解析,生成 JSON 的工具可用,跨平台,跨语言性很强,利于项目解耦和插件化设计。

我们选择 HTML 作为报告形式的原因是 HTML 交互式强,较 PDF 能展示更多信息,也有利于报告的跨平台阅读以及分发。

由于我们所有中间信息都采用 JSON 进行表示,我们的插件化设计也基于这一点,分析器,比对器,报告生成器均处理或生成统一标准下的 JSON 文件,使得无论插件使用何种语言开发,都能很容易的协作。我们也考虑将核心架构的一部分以 API 形式暴露给开发者,使得其能更容易地进行插件开发。

软件架构

工作流程

系统主要由三个部分组成:

  • 分析器:处理库原始输入(可以是源码或二进制文件),提取并生成 API 描述信息,从而统一二进制或源码间的 API 差异对比。
  • 比对器:处理两个 API 描述信息,比对,分级并生成差异描述信息。
  • 报告生成器:处理差异描述信息,生成指定类型的报告文件。

由于采用插件化设计,每部分可以有多种实现,或进行相应组合,所以另有一个 Master 工具 api-checker 管理各个插件,协调这三部分的工作,作为最终面向用户的接口。

系统工作流程如下:

输入(包/源码/二进制文件)-> 分析器 -> API 描述文件(JSON) -> 比对器 -> 差异描述文件(JSON) -> 报告生成器 -> 输出报告文件(默认HTML)

组成模块

具体的系统模块如下:

  • core:定义核心数据结构描述,插件公共接口和协作规范
    • analyzer-core:定义分析器的公共接口
    • differ-core:定义比对器的公共接口
    • reporter-core:定义报告生成器的公共接口
  • c:C/C++ 语言的相关模块:analyzer-c, differ-c, reporter-c
  • python:Python 语言的相关模块:analyzer-python, differ-python, reporter-python
  • java:Java 语言的相关模块:analyzer-java, differ-java, reporter-java
  • api-checker:面向用户的最终接口
项目结构
  • Apidiff.Apps.* 面向用户的统一界面
  • Apidiff.Core 核心数据结构描述,插件公共接口和协作规范
  • python/Apidiff.Python.Models Python 相关分析的数据结构描述
  • python/Apidiff.Python Python 相关分析的算法实现
  • python/Apidiff.Python.UI Python 相关分析特定用户界面以及报告生成

安装教程

  1. 安装 .NET 5 SDK (参见 https://docs.microsoft.com/zh-cn/dotnet/core/install/linux
  2. 安装 Docker 和 docker-compose 环境

使用说明

  1. 在项目根目录运行命令
dotnet run -p ./src/Apidiff.Apps.Web
  1. 浏览器访问 http://localhost:5000

  1. 在 Python Reference 页面,可以查看公开 API 信息

  1. 在 Python Difference 页面,可以查看两个版本的包的差异信息

可直接点击首页的 Dev Diff by Flask 快速访问demo页面。

框架依赖

  • .NET 5 & ASP.NET Core 5 & Blazor Server
  • Python & ast package & inspect package
  • Docker

空文件

简介

TOPIC_ID:9, TEAM_ID:1526185410, TEAM_NAME:Radius. 展开 收起
C# 等 4 种语言
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/openeuler2020/team-1526185410.git
git@gitee.com:openeuler2020/team-1526185410.git
openeuler2020
team-1526185410
9-Radius
master

搜索帮助