软件系统分解弱点的识别、特征化与可视化探索
1. 识别进化集群
在大型软件系统中,如飞利浦医疗 MRI 软件系统,存在约 40,000 个文件,且有过去 10 年的版本管理历史记录,这导致我们遇到了数万个近似变更集。当我们的目标是找出分解弱点时,就需要总结由变更集提供的一起变更的软件实体信息,即识别相对频繁一起变更的软件实体集群。
我们从软件实体的构建块抽象级别进行考虑,因为架构师对该抽象级别的分解弱点感兴趣。构建块是文件之上的下一个抽象级别,定义了测试、构建、文档等单元。
为了识别一起变更的构建块集群,我们按以下步骤操作:
1. 计算 Jaccard 相似度系数 :对于每对构建块,基于近似的变更集计算 Jaccard 相似度系数。对于两个构建块 b1 和 b2,该系数基于它们一起变更的次数 (T) 和单独变更的次数 (S),计算公式为 (T / (T + S))。系数接近 1 表示构建块相对频繁一起变更,接近 0 则表示几乎不一起变更。
2. 聚合相似度系数 :将两个构建块之间的相似度系数聚合为构建块集合之间的相似度。对于两个构建块集合,通过取所有成对系数的平均值(平均链接)来聚合相似度系数。
3. 使用凝聚层次聚类分析 :从只包含一个构建块的集合开始,不断合并集合,直到只剩下一个集合。每次合并时,选择链接值最高的两个集合。这个算法会生成一个二叉树,即树状图,树状图中的节点就是进化集群。
树状图中进化集群的垂直排列表示相似度级别:进化集群越接近树状图的根,其中包含的构建块一起变更的频率越低。如果一个进化集群包含来自不同分解元
超级会员免费看
订阅专栏 解锁全文
5万+

被折叠的 条评论
为什么被折叠?



