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
   46   47   48   49   50   51   52   53   54   55   56