- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一种基于对象行为程序相似度比对方法
一种基于对象行为的程序相似度比对方法
摘 要:程序相似度及其比对方法一直是近年来防止程序抄袭和剽窃的热门话题,该研究对检查学生的原创性非常有利。基于抽象语法树,研究面向对象的程序设计语言中的对象行为,提出一种基于对象行为的相似度比对方法。该方法以抽象语法树高度展现程序结构的优点作为基础,比对程序中的对象及其行为特征,能够较为详实地展现对象及其行为的相似度度量。
关键词:抽象语法树;标识符;面向对象;Java;对象行为;相似度比对
中图分类号:TP301 文献标识码:A 文章编号:1672-7800(2016)003-0011-04
作者简介:苏亮(1993-),男,山西隰州人,北京信息科技大学计算机学院学生,研究方向为软件开发;左阔(1993-),女,北京人,北京信息科技大学计算机学院学生,研究方向为软件开发;??晨(1994-),男,北京人,北京信息科技大学计算机学院学生,研究方向为软件开发;孙毅(1994-),男,北京人,北京信息科技大学计算机学院学生,研究方向为软件开发。
0 引言
信息技术在现代生活中的应用已较为普及,利用各种编程语言制作成的软件种类也越来越多。Java语言由于具有简单、面向对象、稳定、与平台无关等特点,很快受到了人们青睐。同时,程序的抄袭和剽窃现象也越来越普遍。本次研究基于Java面向对象的特点,在程序比对中提取对象行为,通过对象行为的相似性来进行程序相似度的度量。
1 程序相似度比对方法
程序相似度比对方法的研究始于上世纪70年代。Halstead提出的软件科学度量方法是程序相似度比对初期使用频率较高的一种典型的属性计数法[1-4]。为了使程序相似度检测更为精确,使用该方法的系统设计中往往需要增加系统需要统计的属性,但从结果上看,属性计数法的准确性还有待提高。为了解决这一问题,以程序结构度量作为基础的程序相似度比对法逐渐流行开来。程序结构度量方法[1-4]重视对程序进行语法分析,在比对过程中融入了程序的结构化信息。由于程序的执行结构一般不容易进行改动,故在进行程序的相似度评判时往往具有较高的准确性。程序结构度量法通常会先对程序作一个转化处理,该转化可以是将程序转变为Token序列,或是程序依赖图(Program Dependence Graph,简称PDG)与抽象语法树(Abstract Syntax Tree,简称AST)等[10]。依据转换后的源程序进行相关程序相似度计算,最终完成程序的相似度比对。
之后出现的程序相似度比对法大都以这两个方法中的一种或将两者相结合来进行程序相似度比对系统设计[2-4]。相关方法有的只针对单一语言,有的实现了同时支持多种语言的相似度检测方法,如张丽萍、刘东升等[2]提出的基于AST的代码抄袭检测方法,同时支持C、C++、Java。但这些方法大都以面向过程的语言为中心,在进行相似度比对时往往对整个程序进行全局分析。即便是支持Java的程序相似度比对方法,也很少考虑面向对象程序设计语言的最大特点――事物皆对象。
在面向对象的世界中,程序本身就是对象及对象操作组成的一个集合[11]。因为对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中,所以对对象行为的相似度进行比对即可视为面向对象程序设计语言中的程序相似度比对。在该世界里,既然是对象,那么它肯定有自己在程序中的唯一标识。相应地,对象的操作在程序中也应有自己的唯一标识,这些标识统称标识符。如同现实世界里人的命名一样,这些标识符也可以进行替换。因而在程序相似度比对过程中,标识符的作用往往显得微乎其微,有些比对方法将其替换为abc等字母,甚至会选择直接剔除掉标识符来进行程序相似度比对。同样,在本方法中,标识符不是十分重要,但它是找到各个对象并对对象行为进行分析的关键。
Eclipse JDT (Java Development Tools)提供了在Java中生成抽象语法树的途径,并为其配套提供了访问方法。本方法便以此作为基础来分析比对对象的行为。
2 基于对象行为的程序相似度比对方法
2.1 AST简介
抽象语法树,是对编程语言里程序源码的抽象语法结构的树形表达。由于其出色的代码结构展示能力,被广泛应用于编译器中。一个抽象语法树通常是对编译器语法语句分析的结果。在编译过程中,抽象语法树具有一些显著优点,这里只列出对本方法有意义的部分[5-7]:①和源程序相比,抽象语法树不包含特定元素,如标点、分隔符等;②抽象语法树可以提供元素的位置、类型等,并且可以用来遍历、查找、列举元素信息。
下面是以Java中简单的main方法为例(见图1),在AST View中观察其body的结果(见图2)[5]。
可以明显看出,该方法在AS
文档评论(0)