Page 31 - 《软件学报》2025年第4期
P. 31

沈阚 等: 基于静态分析的      Python  第三方库  API 兼容性问题检测方法                                  1437


                    本文主要贡献总结如下.
                    (1) 采用将更新日志与第三方库测试用例相结合的方法, 构建了                   Python  第三方库  API 兼容性问题的数据集,
                 包括  flask  库和  pandas 库中  6  个版本对上的  108  个不兼容  API 对.
                    (2) 开展了关于    Python  第三方库  API 兼容性问题的实证研究, 总结归纳了          Python  第三方库  API 兼容性问题
                 的表现形式和产生原因. 其中, 表现形式是从第三方库调用者的角度进行分析, 而产生原因是从第三方库开发者的
                 角度进行分析.
                    (3) 提出了基于静态分析技术的         Python  第三方库  API 兼容性问题检测方法, 并通过实验评估证明了所提方法
                 具有良好的有效性、泛化性、时间性能、空间性能以及易用性.
                    本文第   1  节介绍研究背景和相关工作. 第        2  节介绍  Python  第三方库  API 兼容性问题的实证研究. 第       3  节介绍
                 基于静态分析的      Python  第三方库  API 兼容性问题检测方法. 第      4  节对方法的有效性、泛化性、时间性能、空间
                 性能以及易用性进行评估. 第         5  节讨论方法面临的威胁和应用局限性. 最后总结全文.

                 1   研究背景与相关工作
                 可以检查不同, 解释性语言只有通过动态运行到不兼容

                 1.1   研究背景

                 1.1.1    API 兼容性问题
                    如图  1  所示, 上层应用通过     API 调用的形式, 使用了第三方库的代码, 并且在原版本                v o 上可以正确运行. 然
                 而, 由于第三方库新功能需要、版本存在漏洞或缺陷等原因需要升级或降级版本, 上层应用开发者必然面对切换
                 版本带来的    API 兼容性问题. 不兼容的       API 是指在上层    API 调用不变的情况下, 其在第三方库的原版本              v o 上可
                 以正确运行, 但在第三方库的其他版本            (v b 或者  v a ) 运行异常终止或者产生与    v o 版本不一致的结果     [19] . 考虑到版
                 本切换包括升级和降级, API 兼容性问题包括前向兼容性问题和后向兼容性问题. 从代码修改来看, API 兼容性问
                 题是由原   API 调用链中的方法发生了修改导致, 例如语句的增加、删除、更新.


                                                         上层应用代码
                                           后向兼容性问题                   前向兼容性问题
                                                           lib.API i

                                            第三方库          第三方库         第三方库
                                             版本 v b       版本 v o        版本 v a
                                              API 1        API 1         API 1
                                              API 2        API 2         API 2
                                              API 3        API 3         API 3
                                               …            …            …
                                                  图 1 API 兼容性问题图示

                 1.1.2    Python  语言特性
                    Python  语言特性导致其对兼容性问题更为敏感, 本文从解释性语言、参数和返回值等                         3  个方面讨论   Python
                 语言特性及其对兼容性问题的影响.

                 1.1.2.1    解释性语言
                    Python  为解释性语言, 在运行时逐行解释源代码, 将代码翻译成机器代码并执行. 与编译性语言在编译阶段就
                                                           API 时, 才可能发现兼容性问题导致的错误.

                 1.1.2.2    灵活的参数类别
                    Python  提供了  5  种类别的参数, 即位置参数、默认参数、可变参数、命名关键字参数以及关键字参数. 相较
                 于其他编程语言, Python    的参数传递方式更加灵活. 在参数变化导致的不兼容                  API 中, 可能使得原有    API 调用中
                 的输入参数格式与新        API 声明的参数格式不一致, 引起         API 兼容性问题. 示例代码      1  展示了  Python  中  API 的  5
   26   27   28   29   30   31   32   33   34   35   36