本发明涉及软件工程,特别涉及一种汽车软件模块划分系统、方法及存储介质。
背景技术:
1、软件模块聚类是软件工程中一个重要而富有挑战性的问题。聚类分析是一种无监督的数据挖掘技术,将一组数据点分组为几个模块。当几个点落在一个模块内时,它们在某些特征上是相似的。相似性和相异性的测量取决于数据点共享相同特征的程度。通常来说,一个好的软件工程是兼具高内聚性和低耦合性的模块结构,具有这种结构的软件系统对于开发人员而言更容易进行开发和后期维护。但是,随着软件的发展,软件的功能变得越发复杂,随之规模增大,导致其模块化结构往往会出现退化的情况,从而持续增加后续软件维护和测试所花费的时间,同时也会消耗人力资源进行维护和测试,增加软件开发的成本。
2、此外,汽车嵌入式系统是汽车的安全关键系统,汽车软件开发必须在整个开发周期中保持着高安全的规范标准。为满足这些安全规范和复杂的功能要求,汽车软件采用基于模型的软件开发方式。在实际的应用当中,基于模型的软件开发通常采用正向开发流程(如经典的v模型),以保证开发的高效率和软件的高质量。正向开发过程定义了开发和测试的不同阶段,包括需求分析、架构设计(高级设计)、详细设计(低级设计)、代码开发、软件测试等等。成功的软件应用程序注定要不断地进化和发展,同时随着软件应用程序的发展和增长,其架构也在发展。相对于实现的物理体系结构,概念体系结构经常变得不准确。因此在软件开发生命周期中,软件架构设计阶段是最重要的阶段之一,因为它有助于实现软件重用,并对于后续的详细设计和编程具有指导意义。汽车软件架构设计将一个软件项目划分为多个模块,各模块下包含多个软件组件,并定义这些软件组件之间的交互关系,基于该交互关系便能很好的进行模块聚类,从而对汽车软件架构的模块设计进行重构。
3、随着技术的发展,由于人们对于汽车软件工程所包含的功能和特性的要求逐渐增加,软件系统从简单的单层或双层结构发展到多层体系结构,导致汽车软件应用程序的规模急剧增加,同时这反过来又导致这些汽车应用程序的模块数量增加,从而影响汽车软件的模块化。这导致工程师在设计架构时对于模块的设计主要基于主观的经验,可能会有偏差。同时,影响汽车软件架构度量质量的主要因素之一是汽车软件架构中组件之间的耦合性较大,如果能够降低耦合性、实现高内聚便能有效提升汽车软件的质量。
4、为此,需要一种能够有效的降低组件耦合,提高模块的内聚性,满足软件工程“高内聚低耦合”要求的汽车软件模块划分系统、方法及存储介质。
技术实现思路
1、本发明的目的之一在于,提供了一种汽车软件模块划分方法,能够有效的降低组件耦合,提高模块的内聚性。
2、为了解决上述技术问题,本技术提供如下技术方案:
3、一种汽车软件模块划分方法,包括如下内容:
4、s1、导入文件提取架构元素:导入汽车软件的项目配置文件夹和目录结构,从目录结构中获取模块组件对应关系;
5、通过解析项目配置文件获得架构中所有的软件组件以及每个软件组件所包含的端口,还根据解析出的节点值为端口赋予属性,整理得到包括端口信息和模块组件对应关系的架构元素;
6、s2、构建软件组件交互关系:根据提取出的架构元素,汇总端口集合,对端口进行预处理,根据端口和软件组件的发送、接收对应关系创建边集,遍历边集获得软件组件之间的交互关系,根据交互关系得到软件组件的依赖矩阵;
7、s3、进行模块划分:对依赖矩阵进行处理作为社区发现算法的输入,采用不同社区发现算法对组件进行模块划分,计算划分后的模块度;
8、s4、对比聚类前后架构情况:对比不同社区发现算法得到的模块度和模块数,得出推荐的划分结果。
9、进一步,所述步骤s3中,分别采用社区发现算法中的gn算法和cnm算法对组件进行模块划分,计算划分后的模块度;
10、步骤s4中,对比gn算法和cnm算法得到的模块度和模块数,得出推荐的划分结果。
11、进一步,所述步骤s4中,还将推荐划分方式和划分前的初始汽车软件架构进行对比,对比项包括模块度、模块数、各模块包含组件情况。
12、进一步,所述步骤s1具体包括:
13、读取汽车软件的目录结构,根据目录结构中,每个模块文件夹下包含的软件组件,得到模块组件对应关系,根据模块组件对应关系,生成模块关系映射表格;
14、读取汽车软件的项目配置文件夹;项目配置文件夹中包含多个xml文件,每个xml文件对应汽车软件架构中的一个软件组件;通过递归获取项目配置文件夹中所有的xml文件,获取xml文件的xml文档对象;查找xml文档对象中的指定节点,并递归查找指定节点下的所有子节点;根据子节点的节点名判断所属属性,将子节点的节点值赋予属性;整理节点的属性,根据节点的属性赋予端口属性,得到端口信息。
15、进一步,所述步骤s1中,属性包括所在软件组件名称、端口名称、端口类型、接口以及接口类型。
16、进一步,所述步骤s2具体包括:
17、s201、获得架构元素中的端口信息后,根据端口信息汇总端口集合,根据端口的元素属性划分为提供端口或为需求端口,分别为提供端口添加pp_前缀,为需求端口添加rp_前缀,将预处理后的端口及其元素属性汇总,形成端口集合;
18、s202、依据端口的名称进行排序;
19、s203、创建n个集合对具有相同名称的端口进行保存,遍历集合中的每个端口,若端口的前缀为pp_,则将该端口所在的软件组件标记为发送组件,将集合中的其他软件组件标记为接收组件;
20、s204、根据端口和软件组件的发送、接收对应关系创建边集,遍历边集获得软件组件之间的交互关系,得到软件组件的依赖矩阵。
21、进一步,所述步骤s3具体包括:
22、对依赖矩阵进行处理,将依赖矩阵中所有的软件组件以及软件组件之间的交互关系抽象成网络结构,将依赖矩阵中的非0值作为软件组件节点之间的边;
23、采用gn算法,遍历网络结构,找出网络结构中每一个软件组件节点到其他软件组件节点的最短路径,遍历网络结构中的边,统计所有最短路径经过每条边的次数作为每条边的边介数,找到边介数最大的边将其移除网络结构,重新计算移除后网络结构中剩余边的边介数,并保存当前的划分情况与模块度,重复以上两步操作,直到网络结构中每个软件组件节点都为一个独立的模块,选取每次划分后模块度最大的划分结果作为最终的划分结果;
24、采用cnm算法,将网络结构中的每个顶点都作为一个单独的模块,合并使得目前网络结构的模块度的增值最大的社区对;当网络结构中的所有节点属于同一社区时,则停止合并;得到一个树图,树图中的叶子节点表示网络结构中的顶点,每一层对应网络结构的某一划分过程,从所有层次划分中选择模块度值最大的划分为最终的划分结果。
25、进一步,所述步骤s4中,选择模块度更大的划分结果作为推荐划分结果。
26、本发明的目的之二,提供一种汽车软件模块划分系统,包括:
27、元素提取模块,用于获取汽车软件的项目配置文件夹和目录结构,从目录结构中获取模块组件对应关系;
28、还用于通过解析项目配置文件获得架构中所有的软件组件以及每个软件组件所包含的端口,还根据解析出的节点值为端口赋予属性,整理得到包括端口信息和模块组件对应关系的架构元素;
29、交互关系分析模块,用于根据提取出的架构元素,汇总端口集合,对端口进行预处理,根据端口和软件组件的发送、接收对应关系创建边集,遍历边集获得软件组件之间的交互关系,根据交互关系得到软件组件的依赖矩阵;
30、划分模块,用于对依赖矩阵进行处理作为社区发现算法的输入,分别采用社区发现算法中的gn算法和cnm算法对组件进行模块划分,计算划分后的模块度;
31、对比模块,用于对比gn算法和cnm算法得到的模块度和模块数,得出推荐的划分结果;还用于将推荐划分方式和划分前的初始汽车软件架构进行对比,对比项包括模块度、模块数、各模块包含组件情况。
32、本发明的目的之三在于,提供一种存储介质,所述存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述方法的步骤。
33、在当前的汽车领域对汽车软件组件进行模块划分通常为工程师根据经验进行人工划分,欠缺在内聚性和耦合性方面的考虑。本方案采用社区发现算法,基于汽车软件组件的交互关系对汽车软件架构进行重构,得到的模块划分结果比工程师人为划分的模块更加合理,能有效的降低组件耦合,提高模块的内聚性,为架构工程师提供参考,满足软件工程“高内聚低耦合”的要求,从而缩短开发周期,提高开发效率,有效提高汽车软件系统的质量。