晋武侠

论文

中文主页
开源生态下软件架构的冲突与演化 代表论文
  • Wuxia Jin, Yitong Dai, Jianguo Zheng, et al, "Dependency Facade: The Coupling and Conflicts between Android Framework and Its Customization". IEEE/ACM International Conference on Software Engineering (ICSE), 2023 (CCF A会议)

 

摘要中文版:

       移动设备供应商基于谷歌维护的安卓开源项目(称为上游)开发定制化的安卓操作系统(称为下游),以支持新功能。在日常独立开发过程中,下游还会定期将来自上游的新版本的变更合并到其开发分支中,保持与上游的同步。由于需要合并大量提交,当自动合并操作失败时,通常会报大量的代码冲突。先前的研究已经探讨了这种场景下的冲突问题。然而,关于下游和上游之间的耦合关系(我们称之为耦合面),以及合并冲突与这种耦合关系之间的关系,仍然不清楚。针对这一问题,我们首先提出了DepFCD从三个方面揭示耦合面,包括表示明确设计边界的接口级依赖、模糊边界的侵入级依赖以及上游非SDK限制施加的依赖约束。然后,我们对这三个方面(RQ1、RQ2、RQ3)以及合并冲突(RQ4)进行了实证研究。为了支持研究,我们收集了4个开源下游项目和1个工业项目,涵盖了15个下游版本和15个相应的上游版本。我们的研究揭示了有趣的观察结果,并建议通过良好地管理耦合面来提前缓解合并冲突。本研究将有助于上下游之间耦合问题的研究,以及下游维护实践的改进。

 

  • Wuxia Jin, Jiaowei Shang, Jianguo Zheng, Mengjie Zheng, Zhenyu Huang, Ming Fan, Ting Liu. The Design Smells Breaking the Boundary between Android Variants and AOSP. ICSE 2025 (CCF A会议)

 

摘要中文版:

       手机供应商基于安卓开源项目(AOSP)定制其安卓版本,以增强系统功能。在独立开发的同时,安卓版本需要定期与上游的AOSP进行同步,并合并来自AOSP的代码变更。供应商们在维护其版本和解决合并冲突方面投入了大量的精力。本文使用重复出现的不良模式来刻画破坏定制安卓和AOSP之间设计边界的设计异味。这些设计异味表现为跨边界的依赖问题,妨碍了Android版本的可维护性,并阻碍了其与AOSP的协同演化。我们提出了DroidDS,旨在自动检测这些设计异味。我们收集了22个安卓版本及其对应的22个AOSP版本,涵盖了4个开源项目和1个工业项目。我们的研究结果表明:涉及设计异味的文件比其他文件消耗更高的维护成本;这些问题文件不仅仅是代码规模大、复杂度高和面向对象异味相关的文件;这些问题文件已经涉及到超过一半的因重新应用AOSP变更到安卓版本时引发的代码冲突;大部分设计问题是可以缓解的。从业者可以使用我们的DroidDS工具定位并确定解决安卓版本中的设计问题的优先级,重构这些问题将有助于保持不同版本与AOSP之间的健康耦合,潜在地提高可维护性并减少冲突风险。

代码静态分析与依赖解析 代表论文
  • Wuxia Jin, Yuanfang Cai, Rick Kazman, Qinghua Zheng, Di Cui, and Ting Liu. “ENRE: a tool framework for extensible eNtity relation extraction.” In Proceedings of the 41st International Conference on Software Engineering (ICSE): Companion Proceedings, pp. 67-70. IEEE Press, 2019


摘要中文版:
       理解代码实体之间的依赖关系是许多软件分析工具和技术的基础。然而,随着新的编程语言和范式的出现、越来越普遍的多语言编程实践以及动态语言的日益普及,现有的框架无法可靠地提取这些信息。也就是说,目前没有工具能够从多语言和动态语言系统中准确地提取依赖关系。为了解决这个问题,我们设计并实现了可扩展的实体关系抽取(ENRE)框架。ENRE支持从多语言系统中提取实体及其依赖关系,支持用户自定义感兴趣的依赖关系,并将隐式依赖显式化。为了证明此框架的可行性,我们开发了两个ENRE实例,用于分析Python和Golang程序。我们在12个Python和Golang项目上的实验展示了ENRE的有效性和灵活性。通过与商业静态分析工具的比较,我们展示了ENRE能够提取现有工具不支持的Golang程序中的依赖关系,并且可以揭示Python中的隐式依赖。

 

  • Wuxia Jin, Dinghong Zhong, ZiFan Ding, Ming Fan, Ting Liu. Where to Start: Studying Type Annotation Practices in Python. IEEE/ACM ASE 2021. (CCF A 会议)

 

摘要中文版:
       动态编程语言已经开始逐步支持渐进类型,即在源代码中支持可选的类型注解。对一个复杂且长期维护的代码库进行类型注解,的确是一个渐进且昂贵的过程,其中有两个问题困扰着开发者。首先,由于存在非平凡的类型实践,关于如何实现类型注解的指导非常有限;其次,关于应该优先注解代码库的哪些部分,指导也很少。为了解决这些问题,本文研究了非平凡类型注解实践的模式以及类型注解代码文件的特征。我们的研究发现了六种类型注解实践模式,这些模式涉及恢复和表达设计关注点。此外,我们还揭示了类型注解文件的三种互补特征。为了支持这项研究,我们实现了一个用于研究可选类型实践的工具。我们建议:1)应考虑设计问题,通过遵循至少六种模式来改进类型注释实现;2)对软件架构至关重要的文件可以优先进行类型注解。我们相信,这些指导方针将促进动态语言中更好的类型注解实践。

 

  • Yi Hou (学生), Wuxia Jin*, ZJ Liu, LM Wang, SG Chen,  YH Wang, Lei Sang, HJ Wang, T Liu.  ERD-CQC : Enhanced Rule and Dependency Code Quality Check for Java. Internetware 2024. 

 

摘要中文版:
       在软件开发领域,代码质量检查工具的应用已经成为提高产品质量和开发效率的关键因素。虽然许多现有工具可以有效地检测代码中的常见问题,但仍存在一些限制。首先,这些工具依赖于预定义的规则,这些规则可能无法完全涵盖现实世界中的编码挑战。其次,工具缺乏对依赖关系的考虑,可能导致无法报告跨文件或模块发生的违规行为。第三,这些工具使用的度量标准主要集中在面向对象编程,限制了它们从国家化标准的角度评估软件质量的能力。为了解决这些问题,本文提出了一种名为ERD-CQC的依赖增强方法,用于代码质量检测和度量。ERD-CQC提供了88条检测规则和45个度量标准,补充了如断路器、可序列化和安全性等类别的检查规则。ERD-CQC通过集成抽象语法树(AST)、实体和依赖关系来构建注入图,用于违规检测。根据检测结果,ERD-CQC提供了一个具有4个国家化标准维度的代码质量度量系统,从多个角度评估代码质量。为了验证ERD-CQC的有效性,我们手动检查了647个合规和528个不合规的代码片段。ERD-CQC的召回率和F1得分超过98%。我们还收集了现实世界中的开源项目和闭源项目,共包含4,319个不合规的代码片段。在这个真实世界基准上,ERD-CQC的平均F1得分比高级工具SonarQube高11.44%。最后,我们基于度量标准可视化了质量度量结果,发现开源和闭源项目在度量表现上有一定的模式。我们的工作将有助于开发者全面检查、评估和监控他们的软件质量。

 

  •  Wuxia Jin, Shuo Xu, Dawei Chen, Jiajun He, Dinghogn Zhong, Ming Fan, Hongxu Chen, Huijia Zhang, Ting Liu. PyAnalyzer: An Effective and Practical Approach for Dependency Extraction from Python Code.  ICSE 2024 (CCF A会议)

 

摘要中文版:
       基于静态分析的依赖关系提取为广泛的应用程序奠定了基础。然而,Python中的动态语言特性使得代码行为变得模糊且不确定性,因此,静态分析在解析符号级依赖关系时面临巨大挑战。尽管现有的技术和工具已相当成熟,但它们仍然缺乏足够的能力来处理对象变化、一等公民、变化的调用点和库依赖关系。为了应对动态语言的这一根本性难题,本文提出了一种有效且实用的方法——PyAnalyzer,用于依赖关系提取。PyAnalyzer将函数、类和模块统一建模为一等堆对象,传播这些对象的动态变化以及类继承。这种方式更好地模拟了动态特性,如鸭子类型、对象变化和一等公民,从而在不影响精度的情况下实现了高召回率。此外,PyAnalyzer利用可选的类型注解作为快捷方式来表达变化的调用点,并按需解决库依赖关系。我们收集了2个微基准(278个小程序)、2个宏基准(59个真实应用)和191个真实世界项目(10MSLOC),与7种高级技术(即Understand、Sourcetrail、Depends、ENRE19、PySonar2、PyCG和Type4Py)进行了全面比较。结果表明,PyAnalyzer在提高召回率的同时,平均提高了24.7%的F1得分,且速度至少比其他方法快1.4倍,且内存效率没有明显影响。我们的工作将有助于各种客户端应用程序。 

软件架构分析与质量 代表论文
  • Wuxia Jin, DinghongZhong, Yuanfang Cai, Rick Kazman, Ting Liu. "Evaluating the Impact of Possible Dependencies on Architecture-level Maintainability".   IEEE Transactions on Software Engineering (TSE) 2023 (CCF A).

 

摘要中文版:
       软件实体之间的依赖关系是许多软件架构分析研究和架构分析工具的基础。动态类型语言,如Python、JavaScript和Ruby,容许缺乏显式的类型引用,这使得某些依赖关系无法通过对源代码的纯语法分析来区分。我们称这些为可能依赖,与源代码中直接表现出来的显式依赖形成鲜明对比。我们发现,现有的架构分析工具并没有考虑到可能依赖。因此,一个重要的问题是:这些缺失的可能依赖会在多大程度上影响架构分析?为了回答这个问题,我们对499个开源Python项目进行了研究,采用类型推断技术和类型提示实践来识别可能依赖。我们在三个软件维护上下文中调查了可能依赖的后果,包括捕捉版本历史记录中的共同变化关系、衡量架构可维护性,以及检测违反设计原则和影响可维护性的架构反模式。我们的研究揭示了可能依赖对架构级可维护性的影响是显著的——甚至高于显式依赖。我们的发现表明,架构分析及其工具应该考虑、评估并突出动态类型导致的可能依赖的影响。 

 

  • Wuxia Jin, Yuyun Zhang, Jiaowei Shang, Yi Hou, Ming Fan, Ting Liu. Identifying Code Changes for Architecture Decay via a Metric Forest Structure. ACM/IEEE International Conference on Technical Debt 2023 (TechDebt 2023). 

 
摘要中文版:
       在软件系统的演化过程中,随着变更的积累,架构腐化和架构债务是不可避免的。为了识别那些违反设计原则、降低软件可维护性的架构问题,开发了大量基于度量的方法。然而,正如业界从业者所指出的那样,基于度量的方法在检测架构问题时,缺乏可理解性、可解释性和指示性,在工业界应用时存在不足。为了解决这个问题,本文提出了dbMIT,用于识别可能导致架构衰退的代码变更。dbMIT首先通过语法依赖和演化依赖集成了如CK套件等流行的实现级别度量。然后,dbMIT构建了一个森林结构作为知识库,将这些度量联系在一起,其中关系贯穿多个粒度的度量。通过使用知识库中的预定义规则,dbMIT能够识别可能导致架构衰退的代码变更。由于使用了代码级度量的森林结构,开发者能够轻松理解度量结果,解释为何检测到的代码变更可能是导致架构衰退的原因,并指示如何解决这些问题。基于dbMIT,我们还贡献了一个基于Web的工具,用于测量、检测和可视化可能导致可维护性困难的软件架构。我们在收集的开源项目上的实验结果表明,dbMIT与现有方法相比具有良好的效果。
 

  • Jingwen Liu, Wuxia Jin * , Junhui Zhou, Qiong Feng, Ming Fan, Haijun Wang, Ting Liu. 3Erefactor: Effective, Efficient and Executable Refactoring Recommendation for Software Architectural Consistency, TSE 2024 (CCF A刊)


摘要中文版:
        随着软件的不断演进和业务功能的日益复杂,当实现架构偏离预期的架构设计时,就会出现架构不一致的问题。这种架构问题使得维护变得困难,并且需要付出大量的重构努力。为了帮助劳动密集型的重构,自动化重构得到了广泛关注,尤其是寻找最优重构方案。然而,目前仍然存在三个局限性:推荐的重构方案在解决架构一致性方面效果不足;重构方案的搜索过程效率低下;缺乏可执行的重构方案。为了解决这些问题,我们提出了一种有效、高效且可执行的重构推荐方法,称为3Erefactor,旨在解决软件架构一致性问题。为了实现有效的重构,3Erefactor使用NSGA-II生成重构方案,从模块级和实体级最小化架构不一致性。为了实现高效的重构,3Erefactor利用架构恢复技术定位需要重构的文件,帮助加速重构算法的收敛。为了实现可执行的重构,3Erefactor在重构方案的搜索和生成过程中设计了一套重构可执行性约束策略,包括改进重构前提条件和移除无效操作。我们在6个开源系统上评估了我们的方法。通过对实验数据的统计分析,我们的实验结果表明,3Erefactor生成的重构方案在减少架构不一致性数量、提高重构算法效率以及改善重构可执行性方面,性能明显优于 3 种最先进的方法。