Page 137 - 《软件学报》2025年第7期
P. 137

3058                                                       软件学报  2025  年第  36  卷第  7  期


                                                表 10    Maven  项目检测结果  (续)

                                                                          不在基准集中的检出数 (占比 (%))
                  异味类别     基准集    检测结果集     基准集中的检出数 (召回率 (%))
                                                                     人工验证为真的检出数        人工验证为假的检出数
                    1.8      0        0                0                    0                  0
                    2.1      0        0                0                    0                  0
                    2.2      0        0                0                    0                  0
                    2.3      0        0                0                    0                  0
                    2.4     36       58              36 (100)             22 (100)             0
                    2.5      0        0                0                    0                  0
                    合计      125      192             120 (96)             63 (87.5)          9 (12.5)


                                                  表 11 Gradle 项目检测结果

                                                                          不在基准集中的检出数 (占比 (%))
                  异味类别     基准集    检测结果集     基准集中的检出数 (召回率 (%))
                                                                     人工验证为真的检出数        人工验证为假的检出数
                    1.1      1        1                1                    0                  0
                    1.2      0        0                0                    0                  0
                    1.3      3       20              3 (100)              17 (100)             0
                    1.4      0        0                0                    0                  0
                    1.5      0        0                0                    0                  0
                    1.6      6        7              5 (71.4)             2 (100)              0
                    1.7      0        0                0                    0                  0
                    1.8      6        6              6 (100)                0                  0
                    2.1      4        4              4 (100)                0                  0
                    2.2      2        2              2 (100)                0                  0
                    2.3      0        0                0                    0                  0
                    2.4      0        0                0                    0                  0
                    2.5      0        0                0                    0                  0
                    合计      22       40             21 (95.4)             19 (100)             0

                    ● 假阴分析. 我们进一步分析基准集中未被检出的异味实例                   (假阴), 发现它们都属于异味        1.6  依赖范围误用.
                 未被检出的主要原因是项目中存在其他未解决的异味问题, 导致                      JDepAna 错误地将对应的异味认定为其他类型
                 的异味, 从而导致假阴. 举例来说, #INLONG-4771       [49] 中的模块  inlong-manager/manager-plugins, 其依赖库  org.junit.
                 jupiter:junit-jupiter 出现了异味  1.6  依赖范围误用, 预期范围应为  test, 但实际范围为   compile. 然而, 该模块中还存
                 在与  junit-jupiter 相关的异味  1.4  未声明依赖和    1.5  未使用依赖的特征. 因此, JDepAna      会优先检测依赖库
                 org.junit.jupiter:junit-jupiter 是否出现异味  1.5, 但在解决了异味  1.4  和  1.5  之后, JDepAna 可以正常检出异味  1.6.
                    ● 假阳分析. 我们进一步分析了不在基准集中但在检测结果集的实例. 在                      Maven  中, 这类实例共计    72  个, 其
                 中  9  个  (12.5%) 经人工验证为假; 而在  Gradle 中, 这类实例共   19  个, 经人工验证均为真. 对于被验证为真的实例,
                 它们是在提出问题报告时仍然存在但尚未被发现的问题, 但由于问题报告对应的项目版本与项目当前版本有较大
                 的差异, 我们没有寻求开发者的反馈, 开发者反馈会在                RQ4  中讨论. 而对于被验证为假的        9  个实例  (假阳), 我们发
                 现它们都属于异味       1.5. 主要原因在于异味     1.5  的检测对项目调用图的精度要求较高. 如果项目中大量使用诸如反
                 射和动态特性等功能, 静态分析的缺陷可能导致调用图与实际不一致, 从而使得误报更容易发生. 以项目                                  Hapi-
                 Fhir-Jpaserver-Starter [50] 为例, 7  个假阳实例均出现在此项目中. 主要是因为项目使用了      Spring  框架  [51] , 而  Spring  框
                 架大量使用    Java 的反射和动态类加载等特性, 导致静态分析无法准确分析.
                    基于以上发现, 我们回答研究问题           RQ3  如下: 在我们收集的包含       147 个依赖异味实例的基准集中, JDepAna
                 达到了   95.9% 的召回率和   96.1% 的精确率, 在确保高精确度的同时保持了较高的召回率, 有效识别并报告了项目
                 中的依赖异味.
   132   133   134   135   136   137   138   139   140   141   142