【技术实现步骤摘要】
一种上下游软件系统间耦合面的建模与识别方法
[0001]本专利技术属于软件演化及再开发领域,涉及一种上下游软件系统间耦合面的建模与识别方法。
技术介绍
[0002]上下游软件系统之间耦合面,是一种下游项目耦合上游系统时产生的依赖子图。下游项目由上游开发的上游源代码和下游开发的大量代码组成,故将下游建模为具有不同属性的依赖图,并将上下游软件系统之间耦合面定义为子图。在安卓操作系统生态下的上下游软件系统之间耦合面举例:移动设备供应商开发的基于谷歌安卓的定制安卓操作系统,即安卓开源项目(AOSP)中,以增强安卓操作系统功能,支持新功能,并添加定制功能。AOSP的定制系统包括MiUI、MagicUI、LineageOS等。定制的安卓系统通常被称为下游项目,而谷歌维护的AOSP被称为上游。除了独立的开发之外,下游还需要定期地将来自上游的新版本的变化合并到它们的开发分支中,并与上游保持同步。由于要合并大量Commit,如果自动合并操作失败,VCS(版本控制系统)如Git将报告大量的代码冲突(命名为文本冲突)。
[0003]目前,对于下游是如何依赖于上游的,以及代码冲突是如何与这种耦合相关联的仍缺少研究,已有工作关注于上游和下游合并造成的冲突,调查项目的历史提交和上游项目的提交之间的重叠变化,同时复现下游合并的变化,揭示了代码冲突对安卓移动应用程序的影响,但并未从系统架构角度研究具体的耦合形式,以及不同的耦合形式带来的问题与影响。最后还有一个工业案例研究调查了在Microsoft Edge开发的背景下,上游合并导致的冲突问 ...
【技术保护点】
【技术特征摘要】
1.一种上下游软件系统之间耦合面建模,其特征在于,包括:上游和下游项目的依赖图模型,顶点表示实体,边表示依赖;下游项目对上游上游实体的侵入式修改和实体归属方表示为图模型的属性信息;上游项目和下游项目实体的访问限制级别表示为图模型的属性信息;下游项目合并上游项目新版本时产生的文本冲突表示为图模型的附属信息。2.根据权利要求1所述的上下游软件系统之间耦合面建模,其特征在于,所述根据所述项目代码和提交历史,得到下游项目耦合上游的耦合面包括:将各个下游项目耦合不同版本上游项目的源代码转为抽象语法树,并使用抽象语法树抽取项目源代码中实体和依赖信息;获取上游项目和下游项目各版本提交历史中每条commit的归属方,并根据项目的源代码中实体的属性信息以及提交历史中每条commit修改的实体信息,获取提交历史中每条commit中修改的实体,得到各实体的归属信息。根据所述各实体对应的commit组成,判断上游实体是否发生了侵入式修改,是否是被上游弃用的过时的实体,从而将上游实体分为三类:活跃的上游实体(actively native),侵入式修改的上游实体(intrusively native),以及被上游弃用的过时的上游实体(obsoletely native)。3.根据权利要求1所述的上下游软件系统之间耦合面建模,其特征在于,根据上游安卓提出的非SDK接口的限制,得到实体的依赖限制级别信息包括:对于安卓操作系统类别的项目,将代码仓clone到本地后,在本地仓中执行“mout/soong/hiddenapi/hiddenapi
‑
flags.csv”命令,获取项目的实体的访问限制级别(restriction level),并根据实体的属性信息对所述实体进行限制级别标定,得到项目的限制级依赖。4.根据权利要求1所述的上下游软件系统之间耦合面建模,其特征在于,所述根据所述项目代码和提交历史,得到下游项目耦合上游的耦合面包括:根据各实体的归属方信息以及commit组成,判断下游软件系统的实体依赖图中依赖边所连接的实体归属方,若一条依赖边连接着一个扩展实体和一个上游实体,则判定该边在耦合面上,从而得到下游项目耦合上游项目的耦合面子图模型。5.根据权利要求1所述的上下游软件系统之间耦合面建模,其特征在于,所述根据所述耦合面信息,结合合并冲突的发生情况包括:当存在文本合并冲突时,获取发生冲突的具体对应实体,并关注耦合面上实体及依赖与发生文本冲突实体的关联性。6.一种上下游软件系统之间耦合面识别方法,其特征在于,包括:获取上游项目与下游项目的实体依赖图;根据项目仓库中的版本信息及提交历史,检测下游项目中实体的归属方;根据组成实体commit信息归属,识别实体发生侵入式修改的操作;根据项目的限制级别信息和代码实...
【专利技术属性】
技术研发人员:晋武侠,戴铱彤,郑建国,刘烃,范铭,
申请(专利权)人:西安交通大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。