Page 51 - 《软件学报》2025年第4期
P. 51
沈阚 等: 基于静态分析的 Python 第三方库 API 兼容性问题检测方法 1457
100 90
90 80
80 70
70 60
正确率 (%) 50 时间 (s) 50
60
40
40
30
20
20 30
10 10
0 0
API 1 API 2 API 3 API 4 API 5 API 6 API 7 API 8 API 9 API 10 API 11 API 12 API 13 API 14 API 1 API 2 API 3 API 4 API 5 API 6 API 7 API 8 API 9 API 10 API 11 API 12 API 13 API 14
有检测方法结果 无检测方法结果 有检测方法结果 无检测方法结果
(a) 正确率 (b) 时间
图 5 人工实验的标注正确率和标注时间
表 12 人工实验中两个问题的得分情况
得分个数
问题 平均得分
(0) (1) (2) (3) (4) (5)
问题1 0 0 0 0 2 8 4.8
问题2 0 0 0 0 2 8 4.8
表 12 第 3 行展示了实验参与者对问题 1 (第 4.2.4.1 节) 的打分. 问题 1 的平均得分为 4.8, 这表明本文检测方
法能较好地帮助定位造成兼容性问题的代码元素, 如参数、语句、异常、返回值等.
RQ6-2: 本文检测方法是否能帮助理解造成兼容性问题的产生原因?
一方面, 图 5(a) 展示了不兼容 API 在有检测方法结果以及没有检测方法结果下的标注正确率. 标注正确率指
针对某一 API , 10 名参与者中标注正确的占比. 可以看到, 有检测方法结果的标注正确率均不低于无检测方法结
果的标注正确率, 并且部分 API 的标注正确率提升了 3 倍. 在检测方法结果的帮助下, 平均每个 API 的标注正确
率为 94.29%, 这也表明本文方法的结果受到开发者的认可. 如果没有检测方法的帮助, 平均每个 API 的标注正确
率为 62.86%.
另一方面, 表 12 第 4 行展示了实验参与者对问题 2 的打分. 问题 2 的平均得分为 4.8.
从上述两部分的实验结果可以看出, 本文检测方法能较好地帮助理解造成兼容性问题的产生原因.
RQ6-3: 本文检测方法是否能帮助缩短发现兼容性问题的所需时间?
图 5(b) 展示了不兼容 API 在有检测方法结果以及没有检测方法结果下的标注时间. 标注时间是指针对某一
API, 10 名参与者标注时间的平均值. 可以看到, 有检测方法结果的标注时间均低于无检测方法结果的标注时间,
并且部分 API 的标注时间缩短了一半. 当有检测方法结果时, 平均每个 API 的标注时间为 25.31 s, 即在本文检测
方法的帮助下, 开发者只需 25.31 s 即可发现兼容性问题的产生原因. 然而, 如果没有本文检测方法的帮助, 开发者
平均需要 49.44 s 才能发现兼容性问题的产生原因. 由此可见, 本文检测方法能较好地帮助缩短发现兼容性问题的
所需时间.
综合 RQ6-1、RQ6-2、RQ6-3 的结果可知, 本文检测方法对用户来说具有良好的易用性.
5 讨 论
5.1 威胁分析
本文提出的方法虽然能够根据兼容性问题产生原因检测出不兼容 API, 但在有效性和泛化性上存在威胁.
(1) 有效性威胁. 正如第 4.3 节有效性评估结果中指出, 制约方法有效性的主要原因有两个, 即未充分利用
API 外部代码的语义信息和未充分利用 API 内部代码的语义信息. 为了增加方法的有效性, 对于 API 外部代码, 本
文提取了全局语句信息 G, 并在检测输出不同的返回值 (CI7) 时将移动全局语句过滤为良性语义变化; 对于 API