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

1456                                                       软件学报  2025  年第  36  卷第  4  期


                 4.5   时间性能和空间性能评估结果        (RQ5)
                    一方面, 实验时指定方法检测上文在共计             12  个版本对上收集到的      196  个不兼容  API 对和  179  个兼容  API 对,
                 表  10  展示了具体的检测时间开销和内存占用. 在时间开销上, 检测                375  个  API 共耗时  2 036.24 s, 平均每个  API 的
                 检测大约需要     5.43 s. 在内存占用上, 检测   375  个  API 共占用内存  498.04 MB.
                    另一方面, 实验时使用方法直接检测            12  个版本对中的所有变更       API, 表  11  展示了具体的时间开销和内存占
                 用. 在时间开销上, 检测     12  个版本对中的    5 243  个变更  API 共耗时  30 858.09 s, 平均每个版本对的检测大约需要耗
                 时  42.86 min, 平均每个变更  API 的检测大约需要      5.88 s. 在内存占用上, 检测   12  个版本对中的    5 243  个变更  API
                 共占用内存    1 494.24 MB, 平均每个版本对的检测大约需要占用内存            124.52 MB.


                                       表 10 方法在指定数据集上的时间性能、空间性能结果

                  第三方库       版本对v1→v2        代码行数    检测API数量 (个)   检测时间 (s)   平均检测时间 (s/个)   内存占用 (MB)
                          major  1.1.4→2.0.0  4k→4k        16         65.91        4.12         14.35
                   flask  minor  2.1.3→2.2.0  4k→4k        16         48.53        3.03         15.48
                                                3 650→3 659
                          patch  2.1.0→2.1.3  4k→4k        4          20.82        5.21         14.64
                          major  0.25.3→1.0.0  78k→77k     87        342.06        3.93         63.41
                   pandas  minor  1.4.4→1.5.0  104k→111k   73        413.18        5.66         76.23
                          patch  1.4.0→1.4.4  101k→104k    20        140.15        7.01         61.42
                          major  0.24.2→1.0.0  54k→64k     41        253.77        6.18         51.09
                   sklearn  minor  1.1.3→1.2.0  66k→68k    39        271.83        6.97         36.80
                          patch  1.1.0→1.1.3  64k→66k      12         68.24        5.69         46.93
                          major  1.26.4→2.0.0  69k→108k    46        266.54        5.79         45.23
                   numpy  minor  1.25.2→1.26.0  68k→68k    6          41.35        6.89         37.19
                          patch  1.26.0→1.26.4  68k→69k    15        103.86        6.93         35.27
                                 总计                       375        2 036.24      5.43         498.04



                                      表 11 方法在所有变更       API 上的时间性能、空间性能结果

                 第三方库     版本对v1→v2      代码行数 API总数量 (个) 变更API数量 (个) 检测时间 (s) 平均检测时间 (s/个) 内存占用 (MB)
                        major  1.1.4→2.0.0  4k→4k  324→312     258      1 137.23     4.41        27.09
                   flask  minor  2.1.3→2.2.0  4k→4k  315→336   103       447.77      4.35        22.82
                        patch  2.1.0→2.1.3  4k→4k  314→315     47        197.15      4.19        17.94
                        major 0.25.3→1.0.0  78k→77k  5 125→4 954  1 814  10 565.17   5.82        364.48
                  pandas  minor  1.4.4→1.5.0 104k→111k 5 885→6 103  1 636  9 373.08  5.74        370.52
                        patch  1.4.0→1.4.4 101k→104k 5 881→5 885  94     560.73      5.97        115.46
                        major 0.24.2→1.0.0  54k→64k  2 829→2 939  492   3 101.86     6.30        184.59
                  sklearn  minor  1.1.3→1.2.0  66k→68k  3 075→3 182  587  4 078.09   6.95        195.41
                        patch  1.1.0→1.1.3  64k→66k  3 071→3 075  41     263.50      6.43        57.44
                        major 1.26.4→2.0.0 69k→108k  3 677→3 448  125    838.39      6.71        51.15
                  numpy  minor 1.25.2→1.26.0 68k→68k           17        106.15      6.24        46.01
                        patch 1.26.0→1.26.4 68k→69k  3 659→3 677  29     188.97      6.52        41.33
                                    总计                         5 243    30 858.09    5.88       1 494.24

                    因此, 本文方法具有良好的时间性能和空间性能. 此外, 通过分析代码行数可以看出, 本文方法具有良好的处
                 理大型代码库的能力.

                 4.6   易用性评估结果   (RQ6)
                    图  5  和表  12  展示了人工实验的结果. 基于上述结果, 本文使用以下            3  个子问题来评估方法的易用性.
                    RQ6-1: 本文检测方法是否能帮助定位造成兼容性问题的代码元素?
   45   46   47   48   49   50   51   52   53   54   55