暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
基于堆叠泛化的设计模式检测方法-冯铁,靳乐,张家晨,王洪媛.pdf
143
20页
0次
2022-05-24
免费下载
软件学报 ISSN 1000-9825, CODEN RUXUEW E-mail: jos@iscas.ac.cn
Journal of Software,2020,31(6):17031722 [doi: 10.13328/j.cnki.jos.005847] http://www.jos.org.cn
©中国科学院软件研究所版权所有. Tel: +86-10-62562563
基于堆叠泛化的设计模式检测方法
1,3
,
2
,
张家晨
1
,
王洪媛
1
1
(吉林大学 计算机科学与技术学院,吉林 长春 130012)
2
(吉林大学 软件学院,吉林 长春 130012)
3
(符号计算与知识工程教育部重点实验室(吉林大学),吉林 长春 130012)
通讯作者: 王洪媛, E-mail: hongyuan@jlu.edu.cn
: 设计模式检测是理解和维护软件系统的一项重要工作.以高效识别设计模式变体和提高设计模式识别准
确率为目的,将面向对象度量与模式微结构相结合,提出一种基于堆叠泛化的设计模式检测方法.该方法应用典型的
机器学习算法,分别训练度量分类器和微结构分类器,并基于两者的预测值和相关对象模型特征进一步训练,从而形
成堆叠分类器.为了评估该方法,基于该方法开发了一个原型工具 OOSdpd.该工具从 Java 字节码级别的系统实现中
抽取设计模式实例,并在 JUnit 等几个经典的开源项目上进行实验.通过与现有的两种工具进行对比分析,实验验证
了该方法在提高设计模式识别准确率及召回率方面的有效性.
关键词: 设计模式检测;面向对象软件度量;模式微结构;堆叠泛化;机器学习
中图法分类号: TP311
中文引用格式: 冯铁,靳乐,张家晨,王洪媛.基于堆叠泛化的设计模式检测方法.软件学报,2020,31(6):17031722. http://www.
jos.org.cn/1000-9825/5847.htm
英文引用格式: Feng T, Jin L, Zhang JC, Wang HY. Design pattern detection approach based on stacked generalization. Ruan
Jian Xue Bao/Journal of Software, 2020,31(6):17031722 (in Chinese). http://www.jos.org.cn/1000-9825/5847.htm
Design Pat tern Detec tion Approach Based o n Stacke d Ge nerali zatio n
FENG Tie
1,3
, JIN Le
2
, ZHANG Jia-Chen
1
, WANG Hong-Yuan
1
1
(College of Computer Science and Technology, Jilin University, Changchun 130012, China)
2
(College of Software, Jilin University, Changchun 130012, China)
3
(Key Laboratory of Symbolic Computation and Knowledge Engineering (Jilin University), Ministry of Education, Changchun 130012,
China)
Abstra ct : Design pattern detection plays an important role in understanding and maintaining software system. With the purpose of
identifying variants of design pattern efficiently and improving the accuracy of design pattern detection, an approach of design pattern
detection based on stacked generalization in combination with object-oriented software metrics and pattern micro-structures is proposed in
this study. Applying some typical machine learning algorithms, the approach trains a metric classifier and a micro-structure classifier for
each design pattern, after which a stacked classifier is further trained and constructed on the predictive values of the two classifiers and
some related object modeling features. To evaluate the proposed approach, a prototype tool, namely OOSdpd, is developed to detect
design pattern instances from Java bytecode files of a system. The experiments on several classic open source projects are carried out,
such as JUnit etc., and the proposed approach is compared with two existing tools. Experiments prove the effectiveness of the proposed
approach in terms of improving the accuracy and recall rate of design pattern detection.
Key words: design pattern detection; object-oriented software metric; pattern micro-structure; stacked generalization; machine learning
基金项目: 国家自然科学基金(61471181); 赛尔网络下一代互联网技术创新项目(NGII20180701)
Foundation item: National Natural Science Foundation of China (61471181); CERNET Innovation Project (NGII20180701)
收稿时间: 2018-04-27; 修改时间: 2018-09-20, 2018-12-06; 采用时间: 2019-03-29
1704
Journal of Software 软件学报 Vol.31, No.6, June 2020
设计模式通过标识对象、对象间的合作及责任分配来揭示设计机理,表明基于某种经验的、在特定的上下
文中解决一个普遍设计问题的可复用体系结构
[1,2]
.设计模式已经被广泛地应用在各种软件和工具库的设计与
实现中.设计模式检测旨在从现有的软件设计文档或源代码当中识别所使用的设计模式实例,它不仅对于帮助
维护人员理解软件系统的设计动机和原理、恢复软件设计和改善软件的可维护性具有重要意义,而且有助于软
件体系结构的恢复和发现,同时也是评估软件质量的一个重要依据.
由于设计模式的应用大多是基于意图的,并未严格限制模式的具体实现,加之不同开发者对于设计模式的
理解不一,这使得模式的实现千变万化.目前,设计模式检测主要存在以下问题:(1) 变体的检测效果不理想;
(2) 结构相同意图不同的模式难以区分;(3) 行为型设计模式的检测复杂;(4) 组合爆炸问题依然突出.正是因为
这些问题的存在,设计模式检测仍然是软件工程领域的一个重要的研究内容.
机器学习是人工智能领域的重要分支,它是使用经验来提高计算性能或做出准确预测的计算方法
[3]
.机器
学习技术适用于设计模式检测的原因如下:首先,设计模式检测活动本身就是对众多候选模式实例进行预测的
过程,这符合机器学习的应用背景;其次,设计模式变体的检测与机器学习无需硬编码的特点相适应;最后,机器
学习对语义信息的描述,有助于区分结构相同而意图不同的模式.
对于行为型设计模式的检测,目前主要的方法是借助于动态分析
[46]
,但是动态分析一般要求目标项目完
整可运行,这在实际中有时候是不可行的;另外,监控候选模式实例的运行需要生成相应的测试用例,如果手工
生成,必然费时费力,如果自动生成,又难以做到有效的路径覆盖.如果能够充分利用静态代码分析技术,将对模
式的检测研究深入到方法内部,并尝试用机器学习的方式去刻画模式的行为特征,就可以较大程度地降低行为
型设计模式检测的难度.
本文提出一种新的设计模式检测方法,结合面向对象度量和模式微结构(以下简称度量和微结构)并使用典
型的机器学习算法来实现设计模式的检测.针对每种设计模式,本文分别用度量和微结构(micro-structure,简称
MS)训练出一个分类器,然后采用模型堆叠的方式训练出最终的分类器,从而实现对该设计模式的检测.
本文的主要贡献如下:(1) 提出了用多视图(设计模式度量视图和设计模式微结构视图)堆叠泛化的方法来
解决设计模式检测问题;(2) 定义了模式必备微结构来缩减搜索空,从而避免组合爆炸问题;(3) 对于检测出
的模式实例,除给出角色映射外,还能给出具体的方法映射.最终实验表明,本文提出的方法在变体的识别、行为
型设计模式的检测以及组合爆炸问题的解决等方面均有明显提升.
本文第 1 节介绍本文相关工作. 2 节定义度量和微结构以及相关的基本概念与原理. 3 节详细介绍基
于堆叠泛化的设计模式检测方法. 4 节在 5 种设计模式上进行实验,通过实验数据的对比分析,验证所提方法
的有效性. 5 节对本文的工作进行总结并对未来工作展望.
1 相关工作
自从 GoF 等人提出软件设计模式概念以来
[1]
,许多学者对设计模式的自动化检测进行了研究,提出了很多
种设计模式检测方法.这些方法在所用技术、分析类型、所面向的源代码或模式的中间表示、是否精确匹配、
是否完全自动化、是否面向特定模式、实验的信息项和指标等方面各不相同.接下来,本文从所用技术方面
一些具有代表性的方法进行归纳和介绍.
有些设计模式检测方法是基于相似度计算的
[7,8]
.例如,Tsantalis 等人利用图的相似性算法实现了设计模式
的检测
[7]
,该方法不仅能够识别模式变体,而且还能够有效地解决模式检测过程中的组合爆炸问题(利用了设计
模式大都包含继承层次这一事实).简单来说,该方法将设计模式角色之间的各种关系用邻接矩阵来表示,然后
从源码中提取所有的继承层次,接着在模式查找阶段,用继承层次中的类去映射设计模式的各个角,然后提取
出这些角色类之间的各种关系矩阵,最后利用矩阵之间的相似性算法得到一个最终的相似度,如果相似度超过
了事先选择的阈值,那么就找到了一个设计模式实例.该方法的缺点是对某些行为型设计模式的检测效果不好,
同时空间复杂度也很高.
有些设计模式检测方法是基于图理论的
[911]
.例如,Yu 等人从设计模式的子模式出发,将设计模式检测问题
of 20
免费下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

关注
最新上传
暂无内容,敬请期待...
下载排行榜
Top250 周榜 月榜