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: 本文检测方法是否能帮助定位造成兼容性问题的代码元素?