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

孙伟杰 等: Java 依赖异味的实证研究与统一检测技术                                                    3067


                     46th IEEE/ACM Int’l Conf. on Software Engineering. Lisbon: ACM, 2024. 212. [doi: 10.1145/3597503.3639230]
                 [88]  Guo WB, Xu ZZ, Liu CW, Huang C, Fang Y, Liu Y. An empirical study of malicious code in PyPI ecosystem. In: Proc. of the 38th
                     IEEE/ACM Int’l Conf. on Automated Software Engineering (ASE). Luxembourg: IEEE, 2023. 166–177. [doi: 10.1109/ASE56229.2023.
                     00135]
                 [89]  org.json classes conflict with the current json library. #8, 2024. https://github.com/SAP/gigya-java-sdk/issues/8
                 [90]  Dependency tree issue. #127, 2024. https://github.com/SpaiR/imgui-java/issues/127
                 [91]  google-auth-library-credentials version collision in dependency tree. #79, 2024. https://github.com/spring-attic/spring-cloud-gcp/issues/79
                 [92]  Evaluate Maven-wrapper to fix inconsistencies in dependencies.md. #441, 2024. https://github.com/exasol/project-keeper/issues/441
                 [93]  Centralize versions for common dependencies. #235, 2024. https://github.com/stargate/stargate/pull/235
                 [94]  Duplicate classes caught by maven-enforcer-plugin. #2642, 2024. https://github.com/apache/pulsar/issues/2642

                 附中文参考文献:
                 [59]  许畅, 秦逸, 余萍, 曹春, 吕建. 可成长软件理论方法和实现技术: 从范型到跨越. 中国科学: 信息科学, 2020, 50(11): 1595–1611. [doi:
                     10.1360/SSI-2020-0079]
                 [60]  金芝, 周明辉, 张宇霞. 开源软件与开源软件生态: 现状与趋势. 科技导报, 2016, 34(14): 42–48. [doi: 10.3981/j.issn.1000-7857.
                     2016.14.005]
                 [71]  王莹, 伍盈欣, 高天, 陈子莺, 许畅, 于海, 张成志. 开源软件库生态治理技术研究综述: 二十年进展. 软件学报, 2024, 35(2): 629–674.
                     http://www.jos.org.cn/1000-9825/6983.htm [doi: 10.13328/j.cnki.jos.006983]
                 [72]  梁冠宇, 武延军, 吴敬征, 赵琛. 面向操作系统可靠性保障的开源软件供应链. 软件学报, 2020, 31(10): 3056–3073. http://www.jos.org.
                     cn/1000-9825/6070.htm [doi: 10.13328/j.cnki.jos.006070]


                 附录 A
                    在本附录中, 我们将继续探讨          Java 项目中的依赖异味, 描述正文中未涉及异味的特征, 可能危害与触发场景
                 以及对应检测算法. 通过实证研究, 我们确定了             13  类依赖异味, 而正文已经涵盖了其中          5  类异味的特征, 3   类异味
                 的部分危害与相应触发场景以及            1  类异味的检测算法. 接下来, 我们将详细介绍剩余未涉及的异味和对应检测
                 算法.

                 A1   依赖异味分类与特征
                    在正文中, 我们已经对异味        1.6、1.7、1.8、2.2  和  2.3  进行了详细的介绍, 下面将继续介绍剩余的异味.

                 A1.1    模块粒度
                    1) 类别  1.1 内外类名冲突: 模块与依赖库中包含完全限定名相同的类                 (2/47). 模块源代码中的类与模块所使用
                 的某依赖库中的类名相同. 模块源代码中实现的类与模块所使用的某依赖库中的类名相同. 在图                                 A1(a) 对应的
                 #GJS-8 [89] 中, 模块  gigya-java-sdk  中声明类  org.json.JSONObject, 而这个类同样在其依赖库  json  中存在, 从而导致
                 模块与依赖库      json  中包含了完全限定名相同的类. 这导致用户在试图使用与                   gigya-java-sdk  中版本不同的
                 JSONObject 时出现  NoSuchMethodError, 最终  gigya-java-sdk  中移除了冲突的类.
                    这类异味在     Maven  和  Gradle 中皆存在, 产生原因主要是    Java 虚拟机  (JVM) 在提供的路径中发现多个同名类
                 时, 只会加载其中一个, 并忽略其他类. 这类异味往往不易被察觉, 尤其在构建可执行                        Jar 包时, 由于配置文件未将
                 当前模块自身声明为依赖库, 当遇到冲突类时, Maven              和  Gradle 会优先选择依赖库中的类进行打包, 而忽略当前
                 模块中声明的类.
                    2) 类别  1.2 外部类名冲突: 模块的依赖库之间包含完全限定名相同的类                  (7/47). 模块所使用的依赖库之间包含
                 完全限定名相同的类.在图         A1(b) 对应的#IJA-127 [90] 中, 模块引用直接依赖  imgui-java-app  和被其引入的传递依赖
                 imgui-java-binding, 但  imgui-java-app  在打包时将一系列  imgui-java-binding  中的类也包含在其中, 导致两个依赖库
                 之间出现了完全限定名相同的类, 最终开发者移除了                 imgui-java-binding  中的类解决了类冲突.
                    这类异味在     Maven  和  Gradle 中皆存在, 产生原因和异味     1.1  相似. 不同之处在于, 这种异味涉及依赖库之间
   141   142   143   144   145   146   147   148   149   150   151