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] ,在特殊的情境下,代码异味可能不构成软件设计问题.因此,在实际应用
   231   232   233   234   235   236   237   238   239   240   241