Page 236 - 《软件学报》2021年第8期
P. 236
2518 Journal of Software 软件学报 Vol.32, No.8, August 2021
信息源;另一方面,文本方式检测出了更多的、有效的信息.根据表 7 和表 8 中 Doc2Vec 和纯结构方式的对比,
易见前者使召回率有普遍提升,即检测到了更多的设计问题;Doc2Vec 检测出的额外信息没有对精确率造成严
重影响,在内聚问题的检测中还使精确率有显著提升,即检测到了有效的信息.
在文本方式的算法中,Doc2Vec 方法的整体优于 LDA.从表 7 和表 8 中的“重合度”可以看出,两种文本算法
的检测结果具有一定相似性;但从“非重合部分占比”数据可以看出,在余下的不重合部分,Doc2Vec 方法普遍比
LDA 能检测出更多不同的数据.根据 Q1 的结论,可见这些数据显著提升了检测效果.因此,Doc2Vec 更适合作为
本文的文本分析检测算法.
4.4 有效性威胁
对于 Q4,本文实验评估的有效性威胁包括以下 3 点.
[7]
(1) 数据集项目的选取问题.本文从 GitHub 和 JS 类检测的文献 中选取了运行环境多样、功能不同且将
类作为主要设计模式的 JS 项目用于验证实验结果,但仅涉及了 6 个开源项目,无法涵盖 JS 程序的全
部应用领域.
(2) 人工标注设计问题的主观因素.由于缺乏可供参照的同类工作和数据集,因此用于验证有效性的设计
[3]
问题是人工标注的,存在主观因素.因此,本文参考其他学者 的做法,引入具备 JS 开源项目经验的开
发者合作标注问题,以期还原现实的软件开发和维护情境.
(3) 动态阈值的选取问题.由于缺乏 JS 类度量指标的统计数据,为了保障检测方法的适应性,本文不使用
固定阈值检测.对于 Java Code Smell 的文献中采用固定阈值的度量(例如结构方式的 DC 和 FE),本文
根据阈值得出的方式针对每个项目分别统计,形成动态阈值.对于这类改为动态阈值的度量,图 7 展示
了全部数据集类中它们原始数值的分布,并用分别标注出了原始文献中的固定值(虚线)和统计数据
集得出的值(实线).根据两者差值的绝对值同固定值的比值计算,可以得出不同度量的动态阈值与固
定阈值有 5%(LCOM5)~20%(CINT)不等的差异.
Fig.7 Distributions and thresholds of 3 metrics
图 7 3 种度量的分布及阈值
对于 Q5,JS4C 可以量化代码异味强度,通过提升 JS 类的内聚、降低耦合来消除强度高的代码异味,进而实
现高效的 JS 类重构.然而,近期有研究指出:除了异味强度外,还有代码的运行环境、模块和组件的重要程度等情
境因素影响代码异味的重构优先级 [39] ,在特殊的情境下,代码异味可能不构成软件设计问题.因此,在实际应用