智混源软件中依赖冲突问题的分析与检测



  • 消息来源:公众号- CodeWisdom
    原文链接:https://mp.weixin.qq.com/s/aBd09pl7kvATuP2RW3JgpA

    本次分享的是东北大学王莹博士在12月19日复旦大学举行的“基于开源生态的企业软件演化与维护技术”专题研讨会上的分享《混源软件中依赖冲突问题的分析与检测》。

    报告内容

    在开源时代,软件不仅结构复杂、规模庞大,还包含大量不同来源,结构各异的第三方代码及构件,呈现出一种“混源”形态。混源软件包含自主代码、开源代码等不同来源的代码,因此具有更高的多样性和复杂性。Java项目频繁引用第三方开源软件更是容易带来多个版本的Jar包和类文件共存于同一个类路径中的隐患。一旦该类问题发生,Java虚拟机(JVM)只会加载优先声明的版本,进而遮蔽其他版本。当被加载的类或者第三方Jar包文件并非是软件项目所期望引用的版本之时,程序便可能发生运行异常行为,我们将上述问题定义为依赖冲突问题。
    现有的软件构建工具(如Maven和Gradle等)在处理依赖冲突问题时,利用自身定义的仲裁规则(例如路径最短优先,先声明优先等)选择加载冲突的版本,但却从不保证加载的正确性。虽然能够提供给开发人员重复版本的第三方Jar包或类文件的警告,由于并不是所有警告都会引起运行异常行为,所以常常被开发人员所忽视。在该项研究中,我们收集了开源社区中真实的依赖冲突问题,并且分析引发这些问题的原因、表现形式及修复模式。基于经验调查的结果,设计出自动化检测依赖冲突问题的工具Decca且评估依赖冲突问题警告的严重等级,以此帮助开发人员区分良性和有害的依赖冲突。评估结果显示,检测工具Decca的准确率可达0.923,召回率为0.766。

    0_1545726319184_1.jpg
    1_1545726319186_2.jpg
    2_1545726319186_3.jpg
    3_1545726319186_4.jpg
    4_1545726319187_5.jpg
    5_1545726319188_6.jpg
    6_1545726319188_7.jpg
    7_1545726319189_8.jpg
    8_1545726319189_9.jpg
    9_1545726319189_10.jpg
    10_1545726319190_11.jpg
    11_1545726319191_12.jpg
    12_1545726319191_13.jpg
    13_1545726319192_14.jpg
    14_1545726319194_15.jpg
    15_1545726319196_16.jpg
    16_1545726319196_17.jpg
    17_1545726319196_18.jpg
    18_1545726319196_19.jpg
    19_1545726319197_20.jpg
    20_1545726319197_21.jpg
    21_1545726319197_22.jpg
    22_1545726319197_23.jpg
    23_1545726319198_24.jpg
    24_1545726319198_25.jpg
    25_1545726319198_26.jpg
    26_1545726319199_27.jpg


Log in to reply
 

Popular Topics

|

Looks like your connection to SCC was lost, please wait while we try to reconnect.