背景

(栏目建设中)

技术路线

1. 代码异味检测:软件仓库挖掘(MSR)、静态分析
2. 数据驱动的代码异味影响分析:开源社区、社会-技术(Socio-Technical)分析
3. 自适应重构:代码推荐、程序理解

代表作简介

(栏目完善中)

面向开发者特征和过程度量的多粒度开源社区异味预测(ICPC, JCST)

Community Smell Occurrence Prediction on Multi-Granularity by Developer-Oriented Features and Process Metrics
作者: 黄子杰 邵志清 范贵生 虞慧群 杨星光 杨康 周子宜
完整版本 发表于B类2区SCI期刊《计算机科学技术学报》(Journal of Computer Science and Technology)
会议版本 已发表于 ICPC 2021 国际会议

关键词
开源社区异味; 开发者情感; 社会-技术分析; 实证软件工程

研究背景
开源软件开发是由开源社区组织的、具有社会化属性的活动。近期的研究表明开源软件质量和生产效率受技术和社交等多方面因素影响,与技术债务相对应的社交债务(Social Debt,指由于开源社区在沟通或合作方面的低内聚导致的额外开发成本)缺乏足够的关注和研究。开源社区异味(简称社区异味)是开源社区中不健康的组织结构,它可用于衡量社交债务。实证研究表明社区异味会显著影响代码重构等工作的效率,缺乏有效的代码重构会造成软件的质量下降、加速软件老化,进而导致软件失效。社区异味的相关工作主要面向开源社区的管理者展开,并试图用自上而下的方式来重构开源社区。然而,相对传统开发使用的、集中式和分层的组织形式而言,开源社区的参与者更为多样化,开源社区的运作方式更为平等。因此,仅从自上而下的视角出发不足以有效地预防和应对社区异味。

研究目的
社区异味的发生源于开发活动,由开发者直接驱动。因此,本文考虑开发者个人的开发经验、情感特征和开发过程特征,并试图在开发者个人的层面预防社区异味的出现。研究不仅衡量上述特征和模型是否足以预测社区异味,而且分别从开发者个人和开发社区整体的视角理解这些因素对社区异味的影响,进而为研究人员和开发者提供对开源社区建构的新视角和实践的建议。

研究方法
本文使用开发经验、情感特征和开发过程特征建构了一个机器学习模型以预测开发者是否受到3种常见的社区异味影响。这些社区异味包括独狼效应、组织隔离和瓶颈效应。另外,模型还预测开发者是否在受到异味影响后退出开源社区。在开发者个人的预测粒度上,本文对效果良好的模型使用SHAP计算特征重要性及其显著程度,并分析特征值分布及其效应值的区别,以确定与异味发生最相关的特征,为结论的得出提供可量化的依据。在开源社区的粒度上,本文预报受异味影响的开发者数量,使其能够辅助开源社区维护者做出重构决策。

结果
在开发者个人的粒度下,本文使用项目内、时间敏感和跨项目三种模型性能验证方式,模型取得了F1值0.73到0.92的性能。在社区粒度下,本文对受异味影响开发者数目的预报模型获得了0.68的R2性能。根据SHAP特征重要性数值,经验特征和开发过程度量是社区异味预测中最重要的特征,情感特征也拥有均衡和中等的重要性。

结论
在实践中,本文建议工作量较重的开发者主动加强与社区成员的沟通,并在沟通中使用直接和礼貌的方式,这些措施有助于建构健康的开源社区。本文也建议开源社区管理人员使用预报模型来指导开源组织的重构。


HBSniff: 基于静态分析的Java Hibernate对象-关系映射代码异味检测工具(SCP)

HBSniff: A Static Analysis Tool for Java Hibernate Object-Relational Mapping Code Smell Detection.
作者:黄子杰 邵志清 范贵生 虞慧群 杨康 周子宜
全文发表于B类SCI期刊《计算机编程科学》(Science of Computer Programming),另附工具文档和预印本

关键词
代码异味; 对象-关系映射(ORM); Hibernate; 静态分析; 面向对象编程

研究背景
为了在数据密集型(Data-Intensive)应用中实现面向对象编程(OOP),缓解应用程序逻辑和数据表的“阻抗不一致”问题,开发者经常应用对象-关系映射工具完成OOP类和表结构的绑定,进而实现数据持久化。然而,OOP的一系列继承和多态等特性结合不恰当的数据获取配置,容易放大ORM的性能问题(e.g., N+1),造成大量慢查询和服务失败等性能问题,即ORM Smell。
研究目的
通用的代码异味检测工具无法捕捉这类领域特定的问题,因此设计一个工具,实现对ORM Smell的检测,为后续的实证研究提供工具和数据支持。
研究方法
HBSniff是基于JavaParser的静态分析工具,它可以检测14种Java Hibernate ORM代码异味、计算4种映射度量指标.

结果和结论
HBSniff拥有完善的测试和文档,其效果经过了人工验证,并且可以对每个项目生成高可读性和可定制性的检测报告.另外,它将有益于软件代码仓库挖掘(MSR)研究,因此静态分析无需编译程序,可以实现对大规模程序的检测.


检测JavaScript类的内聚耦合Code Smell(软件学报)

Detecting Coupling and Cohesion Code Smells of JavaScript Classes
作者:黄子杰 陈军华 高建华
全文已发表于中文A类期刊《软件学报》

关键词
代码异味; JavaScript; 内聚; 耦合; 类

研究背景
Code Smell是软件程序中存在不良设计和不良实现的征兆.正确地检测和识别Code Smell可以指导软件重构,提高软件的可用性和可靠性.通过Code Smell的度量指标,可以量化软件的设计问题.JavaScript已成为最常用的编程语言之一,类是JavaScript的设计模式,优秀类的设计体现为高内聚和低耦合.

研究目的
现有关于JavaScript内聚耦合的Code Smell研究均在微观的层面,即函数和语句上进行.它们可以提供程序实现的重构建议,但无法分析内聚耦合相关的软件系统设计问题.

研究方法
针对FE、DC和Blob这3种类的内聚耦合Code Smell,提出一种JavaScript类的内聚耦合Code Smell检测方法JS4C.该方法基于静态分析,同时适用于客户端和服务端程序.它通过遍历软件系统中所有的类,利用源程序的文本相似度特征和结构特征,识别Code Smell并检测其强度.在结构特征检测中,JS4C使用了经扩展的对象类型推断及非严格的耦合分散度度量法NSCDISP,有效地降低了解释型语言的静态分析过程中,类型信息缺失对检测产生的影响.

结果和结论
实验通过对6个开源项目的分析表明,JS4C对内聚耦合设计问题有良好的检测效果.


Code Smell视角下分层Web应用失血及充血现象的量化分析(电子学报)

Quantifying Anemia and Bloodshot of Layers in Web Applications from the Perspective of Code Smell
作者:黄子杰 陈军华 高建华
全文已发表于中文A类期刊《电子学报》

关键词
软件可维护性; web应用; 分层结构; 代码异味; 领域建模

研究背景
分层Web应用的领域层由领域模型构成.仅存储数据且不实现行为的领域模型被称作失血领域模型,其状态和数据由非领域层中的类维护,造成后者的充血现象.失血和充血现象损害了Web应用的可维护性.

研究目的
由于缺乏量化分析和研究,其论据多基于主观经验得出,本文将实证地衡量失血和充血现象对分层Web应用架构的影响.

研究方法
本文度量三种Code Smell(Feature Envy、Blob和Data Class)的强度,将它们作为衡量失血和充血现象的标准,对现象进行量化分析,进而得出它们之间的相关性.

结果和结论
本文对一个公开数据集的91个Java Web项目及10个不同领域的开源Java Web应用的多个版本进行了实验,实验发现至少有75%的项目受领域层失血和服务层充血现象的影响,这些现象极少被解决或减弱,两者的强度在不同类间存在相关性,且两者强度的增量在同一软件项目的不同版本间亦存在相关性.