咨询与建议

看过本文的还看了

相关文献

该作者的其他文献

文献详情 >模块独立型Code Smell检测技术研究 收藏
模块独立型Code Smell检测技术研究

模块独立型Code Smell检测技术研究

作     者:秦业 

作者单位:上海师范大学 

学位级别:硕士

导师姓名:高建华

授予年度:2018年

学科分类:08[工学] 0835[工学-软件工程] 081202[工学-计算机软件与理论] 0812[工学-计算机科学与技术(可授工学、理学学位)] 

主      题:Code Smell Jaccard距离 Feature Envy 相似度量 ByteParse 

摘      要:在面向对象程序设计过程中,Code Smell是一个影响程序设计、运行效率和维护成本的问题,是一种由于不好的设计和实现所带来的症状。在某种情况下,Code Smell源于开发人员在一种紧急状态下作出的行为或简单实现功能需求;在另一种情况下,也可能来自于一种反复出现的、被称为“反模式的设计方案。它带来的最大危害就是影响了程序的模块独立性,因此模块独立型Code Smell是最需要关注的。模块独立型Code Smell主要包括Divergent Change、Shotgun Surgery、Feature Envy三种。在开发过程中,开发人员出现最多的行为就是在编写一个类的代码时大量使用其它类的内容,所以最为典型的、广泛存在程序当中的模块独立型Code Smell就是Feature Envy,它属于类间Code Smell。与其它类间Code Smell不同的是,Feature Envy并不直观,开发人员很难通过观察找出这种Smell,往往需要通过距离度量算法计算确定这种Code Smell的存在。在距离度量算法中,主要有欧式距离、余弦距离和Jaccard距离等,考虑到实际应用场景是检测类和类中实体的依赖关系,抽象成集合与集合之间距离最合适,因此衡量集合与集合之间相似度的Jaccard距离最合适。但传统Jaccard距离度量算法只能反应代码的调用与否问题,不能反映代码运行中的调用频次问题,而代码的运行频率不同是程序中普遍存在的问题,因此传统方法存在一定的局限性。本文在集合间相似度算法Jaccard相似系数的基础上,结合实体间的调用关系和频次,提出了权值Jaccard距离度量方法,将方法、属性与类之间的远近关系抽象成基于频率的权值Jaccard相似度距离,通过比较各个方法或者属性和各类之间的距离大小,确定是否存在Feature Envy,筛选出目标候选类列表。考虑到Feature Envy的检测要符合类的职能和上下文环境,因此,又提出结合上下文语义相似度量,通过计算余弦相似度和权值Jaccard相似度的和作为指标判断是否存在异味。这种做法既保证了检测算法符合Feature Envy的定义,同时考虑到了代码的功能职责,而且也降低了寻找最后目标类的时间复杂度。这很大程度提高了最后的检测效果。在实验中,利用5个Github中的开源工程作为数据集,在Eclipse环境中利用ByteParse解析数据集并收集类相关信息,据此将本文方法和传统JDeodorant做对比,做到了P、R、F值三个指标平均约15%的提高。当然本文方法在F值的离散程度上还有欠缺,这也是以后改进的方向。

读者评论 与其他读者分享你的观点

用户名:未登录
我的评分