我的发布是否违背了语义化版本控制?基于语义差异的静态检测
软件工程
2022-09-02 v1
摘要
为增强Java第三方库(TPL)版本控制的兼容性,Maven采用语义化版本控制(SemVer)来规范版本的内在含义,但用户即使在编译与链接成功后,仍可能在升级后遭遇异常执行与崩溃。这由语义破坏性(SemB)问题引起,即用户直接使用的API在跨版本时签名相同但语义不一致。为强化对SemVer规则的遵从,开发者与用户应被警示此类问题。遗憾的是,静态检测颇具挑战,因为API内部方法的语义变更难以捕捉。动态测试能确证地发现部分问题,但受覆盖率不足的局限。为按SemVer规则检测兼容升级(补丁与次要版本)中的SemB问题,我们对180个SemB问题开展实证研究以理解其根因,并受此启发提出Sembid(语义破坏性问题检测器),为开发者与用户静态检测TPL的此类问题。由于API由用户直接使用,Sembid基于API检测并报告SemB问题。对于一对API,Sembid遍历源自该API的调用链,通过度量语义差异定位破坏性变更,继而检查这些变更是否能沿调用链影响API的输出。评估显示Sembid取得了90.26%的召回率与81.29%的准确率,并在SemB API检测上优于其他API检查器。我们还揭示,Sembid检测出的SemB API数量超过单元测试这一常用方案的3倍且覆盖率更优。此外,我们对来自546个顶级Java库版本对的1,629,589个API进行实证研究,发现SemB API数量是基于签名的问题的2至4倍。
引用
@article{arxiv.2209.00393,
title = {Has My Release Disobeyed Semantic Versioning? Static Detection Based on Semantic Differencing},
author = {Lyuye Zhang and Chengwei Liu and Zhengzi Xu and Sen Chen and Lingling Fan and Bihuan Chen and Yang Liu},
journal= {arXiv preprint arXiv:2209.00393},
year = {2022}
}
备注
11 pages, ASE2022