一种微服务软件架构识别与度量方法技术

技术编号:27877255 阅读:39 留言:0更新日期:2021-03-31 00:57
本发明专利技术提出了一种微服务软件架构识别与度量方法,对待检测的原始微服务JAR包进行预处理,将JAR包进行文件目录解构和冗余项过滤;根据微服务软件架构特征体系,提取待测软件的微服务规模特征、微服务构件特征和微服务拓扑特征,其中微服务规模特征采用子服务数量作为特征项,构件特征采用服务注册与发现组件、负载均衡组件作为特征项,微服务拓扑特征采用网关组件作为特征项;构建微服务软件架构符合度模型,计算待测软件遵循微服务架构的概率,决策得到待测软件是微服务程序的可能性。本发明专利技术填补了传统软件评测在技术框架符合性评估领域的空白,能够自动恢复待测软件的技术框架,并分析软件对微服务架构的符合性。

【技术实现步骤摘要】
一种微服务软件架构识别与度量方法
本专利技术属于软件测试和软件缺陷预测领域,具体涉及一种微服务软件架构识别与度量方法。
技术介绍
软件架构是系统的骨架,描述的对象是直接构成系统的抽象组件,各组件之间的连接则明确和相对细致地描述组件之间的通信。软件架构风格又称软件架构惯用范型,是描述某一特定应用领域中系统组织方式的惯用范型,为软件设计与开发提供公共的术语空间,促进设计复用与代码复用[1]。软件架构风格多样,典型的软件架构风格包括管道-过滤器风格[2]、面向对象风格[3]、多层结构风格[4]等。随着云计算和大数据技术的发展,微服务因其轻量化、高可扩展性和弹性部署等优势,成为当前被广泛使用的软件架构。软件架构识别与度量一般采用逆向工程恢复软件系统结构,以及组件之间的关系。软件架构恢复通常有三种方法:自顶向下、自底向上和混合方法。自顶向下方法建立设计视图与代码之间的对应关系,对代码进行扫描,检查是否存在对应关系,评价结构是否合理,代表性方式是反射模型。自底向上方法从源代码提取各种不同信息,如依赖信息、模式信息等,然后将相关联的源代码实体聚合为一个组件,从而得到软件架构,如ARMIN、Alborn、DSM等。混合方法结合自顶向下和自底向上两种方法,一方面,来自底层的架构信息可以通过各种技术提取出来,在此基础上恢复出架构视图;另一方面,来自高层的架构信息可以用来校验恢复出来的架构实体是否合理,典型代表有Focus、ManSART[、DiscoTect等。然而,上述研究主要考虑如何恢复软件架构,进而对软件的可维护性、可靠性、可演进性等特征进行评估,尚未研究如何辨别恢复出的软件架构是否采用了指定架构(如微服务架构),并定量评估目标系统/软件对架构的符合程度,这在软件检测与评估领域是一个全新的问题。
技术实现思路
本专利技术的目的在于提出一种微服务软件架构识别与度量方法,定量分析软件对微服务架构的符合性。实现本专利技术目的的技术解决方案为:一种微服务软件架构识别与度量方法,包括如下步骤:对待检测的原始微服务JAR包进行预处理,将JAR包进行文件目录解构和冗余项过滤;根据微服务软件架构特征体系,提取待测软件的微服务规模特征、微服务构件特征和微服务拓扑特征,其中微服务规模特征采用子服务数量作为特征项,构件特征采用服务注册与发现组件、负载均衡组件作为特征项,微服务拓扑特征采用网关组件作为特征项;构建微服务软件架构符合度模型,计算待测软件遵循微服务架构的概率,决策得到待测软件是微服务程序的可能性。进一步的,所述文件目录解构的目的是,将编译好的原始微服务JAR包进行软件架构恢复,将JAR包内的文件解构组织成多个子服务的树状结构文件,具体过程是:将原始微服务JAR包作为最顶层根节点,对应一个顶层文件夹,采用解压缩方法,将原始微服务JAR包内每个子JAR包解构成一个子服务,作为根节点的子节点,并单独生成一个子文件夹存放在顶层文件夹中,子文件夹中包含该子服务的所有字节码和运行依赖包,据此,通过构造软件包的根节点和子节点,完成待测软件文件目录解构。进一步的,所述冗余项过滤是从解构出的子服务节点中去除掉依赖型JAR包,具体过程是:检测JAR包是否存在启动配置文件,如果存在,进一步判断配置文件中是否指定启动类,如果存在启动类,则该JAR包为可执行JAR包,并保持该JAR包的子服务标识;否则该JAR包为依赖型JAR包,去除该JAR包的子服务标识。进一步的,所述提取待测软件的微服务规模特征、微服务构件特征和微服务拓扑特征是,采用软件粒度信息提取得到微服务规模特征,采用配置文件信息提取、构建工具信息提取和依赖包静态检测得到微服务构件特征,采用配置文件信息提取和服务间关系提取得到微服务拓扑特征,具体方法为:①软件粒度信息提取:微服务程序预处理过程中,得到的可执行JAR包即为软件的子服务粒度实体,每个软件粒度实体包含子服务名、子服务路径;②配置文件信息提取:不同微服务框架采用不同的配置文件,可归纳为xml、yml和properties三种类型,通过配置文件,能够获取到服务名、端口信息,如果服务本身是网关服务,还能提取到路由信息,配置文件信息提取的基本思路是:通过编写配置文件的解析代码,采用正则表达式对配置文件进行命中,并以键值对的形式记录提取的信息;③构建工具信息提取:微服务工程在构建之前,所需要的依赖包通常无法从工程本身直接检测到,而是在构建之后才被打包引入,通过构建工具能够提取微服务工程的外部依赖,常见的构建工具包括Maven和Gradle,构建工具信息提取的基本思路是:对于Maven构建工具,解析pom.xml文件,其dependencies节点中内容即为引入的第三方依赖;对于Gradle构建工具,解析build.gradle文件,采用正则表达式来匹配外部依赖包;④依赖包静态检测:检测微服务工程中实际引入的JAR文件,提取基本思路是:经过预处理得到的可执行JAR包,执行JAR解压缩,扫描解压后的文件能够获得子服务依赖的完整第三方JAR包,通常存在于lib文件夹下;⑤服务间关系提取:服务间关系主要指服务注册中心与服务提供者、云配置中心与云配置客户端的关系,服务间关系提取的基本思路是:通过解压缩识别出的子服务组件信息,确定该子服务在整个微服务工程中所扮演的角色,并根据每个子服务的角色推断出子项目之间的联系。进一步的,所述构建微服务软件架构符合度模型,计算待测软件遵循微服务架构的概率,决策得到待测软件是微服务程序的可能性是,首先定义4个特征项对评价结果的贡献影响函数,包括子服务数量贡献度概率函数、服务注册与发现组件贡献度概率函数、负载均衡组件贡献度概率函数和网关组件贡献度概率函数,然后根据各特征项相互间的权重关系,加权求和得到待测软件对微服务架构的符合程度,具体方法为:②子服务数量贡献度概率函数定义子服务数量贡献度概率函数如下:f1(x)=1/(1+e3-x)(I)其中:x表示识别出的子服务数量;②服务注册与发现组件贡献度概率函数定义服务注册与发现组件贡献度概率函数如下:f2(x)=tanh(x)=(ex-e-x)/(ex+e-x)(II)其中:x表示包含服务注册与发现组件的子服务数量;③负载均衡组件贡献度概率函数定义负载均衡组件贡献影响函数如下:f3(x)=tanh(x)=(ex-e-x)/(ex+e-x)(III)其中:x表示包含负载均衡组件的子服务数量;④网关组件贡献度概率函数采用指示函数来定义网关组件贡献影响函数:f4(x)=IA(x)(IV)其中:x表示包含网关组件的子服务数量;(2)微服务架构符合度概率函数根据各特征项的影响度概率函数,通过加权求和得到待测软件对微服务架构的符合程度,微服务架构符合度概率函数如下:P=w1*f1(x)+w2*f2(x)+w3*f3(x)+w4*f4(x)(V)其中本文档来自技高网
...

【技术保护点】
1.一种微服务软件架构识别与度量方法,其特征在于,包括如下步骤:/n对待检测的原始微服务JAR包进行预处理,将JAR包进行文件目录解构和冗余项过滤;/n根据微服务软件架构特征体系,提取待测软件的微服务规模特征、微服务构件特征和微服务拓扑特征,其中微服务规模特征采用子服务数量作为特征项,构件特征采用服务注册与发现组件、负载均衡组件作为特征项,微服务拓扑特征采用网关组件作为特征项;/n构建微服务软件架构符合度模型,计算待测软件遵循微服务架构的概率,决策得到待测软件是微服务程序的可能性。/n

【技术特征摘要】
1.一种微服务软件架构识别与度量方法,其特征在于,包括如下步骤:
对待检测的原始微服务JAR包进行预处理,将JAR包进行文件目录解构和冗余项过滤;
根据微服务软件架构特征体系,提取待测软件的微服务规模特征、微服务构件特征和微服务拓扑特征,其中微服务规模特征采用子服务数量作为特征项,构件特征采用服务注册与发现组件、负载均衡组件作为特征项,微服务拓扑特征采用网关组件作为特征项;
构建微服务软件架构符合度模型,计算待测软件遵循微服务架构的概率,决策得到待测软件是微服务程序的可能性。


2.根据权利要求1所述的微服务软件架构识别与度量方法,其特征在于,所述文件目录解构的目的是,将编译好的原始微服务JAR包进行软件架构恢复,将JAR包内的文件解构组织成多个子服务的树状结构文件,具体过程是:
将原始微服务JAR包作为最顶层根节点,对应一个顶层文件夹,采用解压缩方法,将原始微服务JAR包内每个子JAR包解构成一个子服务,作为根节点的子节点,并单独生成一个子文件夹存放在顶层文件夹中,子文件夹中包含该子服务的所有字节码和运行依赖包,据此,通过构造软件包的根节点和子节点,完成待测软件文件目录解构。


3.根据权利要求2所述的微服务软件架构识别与度量方法,其特征在于,所述冗余项过滤是从解构出的子服务节点中去除掉依赖型JAR包,具体过程是:
检测JAR包是否存在启动配置文件,如果存在,进一步判断配置文件中是否指定启动类,如果存在启动类,则该JAR包为可执行JAR包,并保持该JAR包的子服务标识;否则该JAR包为依赖型JAR包,去除该JAR包的子服务标识。


4.根据权利要求1所述的微服务软件架构识别与度量方法,其特征在于,所述提取待测软件的微服务规模特征、微服务构件特征和微服务拓扑特征是,采用软件粒度信息提取得到微服务规模特征,采用配置文件信息提取、构建工具信息提取和依赖包静态检测得到微服务构件特征,采用配置文件信息提取和服务间关系提取得到微服务拓扑特征,具体方法为:
①软件粒度信息提取:微服务程序预处理过程中,得到的可执行JAR包即为软件的子服务粒度实体,每个软件粒度实体包含子服务名、子服务路径;
②配置文件信息提取:不同微服务框架采用不同的配置文件,可归纳为xml、yml和properties三种类型,通过配置文件,能够获取到服务名、端口信息,如果服务本身是网关服务,还能提取到路由信息,配置文件信息提取的基本思路是:通过编写配置文件的解析代码,采用正则表达式对配置文件进行命中,并以键值对的形式记录提取的信息;
③构建工具信息提取:微服务工程在构建之前,所需要的依赖包通常无法从工程本身直接检测到,而是在构建之后才被打包引入,通过构建工具能够提取微服务工程的外部依赖,常见的构建工具包括Maven和Gradle,构建工具信息提取的基本思路是:对于Maven构建工具,解析pom.xml文件,其dependencies节点中内容即为引入的第三方依赖;对于Gradle构建工具,解析build.gradle文件,采用正则表达式来匹配外部依赖包;
④依赖包静态检测:检测微服务工程中实际引入的JAR文件,提取基本思路是:经过预处理得到的可执行JAR包,执行JAR解...

【专利技术属性】
技术研发人员:刘亮王璐璐冯斌孟小峰姜丽孙靖爽赵珂
申请(专利权)人:中国科学院电子学研究所苏州研究院东南大学
类型:发明
国别省市:江苏;32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1