- 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倍,且内存效率没有明显影响。我们的工作将有助于各种客户端应用程序。




