检测JavaScript 类的内聚耦合Code Smell∗
2021-11-09黄子杰陈军华高建华
黄子杰 ,陈军华 ,高建华
1(上海师范大学 计算机科学与技术系,上海 200234)
2(华东理工大学 计算机科学与工程系,上海 200237)
JavaScript(简称JS)是一种使用弱类型和动态类型的解释型编程语言,JS 程序的结构和变量类型在运行时才会明确,因此,大量为Java 等强类型语言设计的静态分析手段难以奏效,导致其代码质量缺乏工具保障.同时,它还包含诸多增强语言灵活度(flexibility)的特性,例如原型链、闭包、头等函数等,它们形成了复杂的代码组件继承、组合方式.因此,编写JS 程序颇具挑战性,期间易产生Code Smell 和Bug[1,2].
Code Smell 是软件程序中存在不良设计和不良实现的征兆[3],其强度可由度量指标(metric)量化.正确地检测和量化Code Smell 可以指导软件重构,提高软件的可用性和可靠性.
然而,现有Code Smell 度量不足以理解JS 程序的复杂性和程序质量,常见的Code Smell 度量很少被JS 相关的研究使用[4],需对其进行开发或改进,以适应JS.目前已出现面向JS 的Code Smell 检测工具,例如SonarQube,JSNose[1],它们仅面向微观层面上(即函数、语句)的内聚或耦合问题.
JSNose 主要讨论了函数、代码块及对象内部的Code Smell,并引入了3 种通用类Code Smell 的检测方式来检测对象内部的问题,例如过大对象和不当的继承,但研究不涉及多个对象间的设计问题.研究还提及了一种文件层面的Code Smell,它面向JS,HTML 和CSS 这3 种语言在代码中混写的耦合问题.Saboury 等人[5]根据语言标准的新变化,扩充并修正了JSNose 的定义,此类修正主要发生在语法和语句层面上,涉及作用域和闭包等问题.该研究还就Code Smell 对JS 代码易错性(fault-proneness)的影响排序,结果显示……
