[发明专利]一种基于测试代码片段相似性的测试程序抄袭检测方法有效
申请号: | 201810561223.3 | 申请日: | 2018-05-29 |
公开(公告)号: | CN110543331B | 公开(公告)日: | 2021-07-06 |
发明(设计)人: | 陈振宇;孙伟松;王兴亚;段定;巫浩然;赵源;孙泽嵩 | 申请(专利权)人: | 南京大学 |
主分类号: | G06F8/75 | 分类号: | G06F8/75;G06F11/36 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 210093 江苏省南京市*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | 本发明涉及一种基于测试代码片段相似性的测试程序抄袭检测方法。该方法针对待测试程序中各个待测方法,首先,基于类名、方法名、参数序列计算出唯一方法标识;其次,从测试程序中提取所有测试代码片段集合,每个测试片段与一个待测方法相对应;然后,分析测试片段间相似性得到相似性分析报告,由此计算出片段之间的相似度值;最后,利用测试片段相似度值计算测试程序整体相似程度值,利用测试程序整体相似程度值即可更加精确的判断测试程序之间抄袭情况。本发明目的在于填补针对测试代码相似性检测技术的空白,解决目前测试代码相似性分析的低精度和测试代码抄袭检测主要靠人工操作的低效率问题,从而提高测试代码相似性检测的效率和精度。 | ||
搜索关键词: | 一种 基于 测试 代码 片段 相似性 程序 抄袭 检测 方法 | ||
【主权项】:
1.一种基于测试代码片段相似性的测试程序抄袭检测方法,其特征在于,针对待测试程序,首先,使用静态扫描分析技术,从待测试的程序中提取出所有待测试方法集合MUTS;然后,通过静态分析和自然语言处理NLP技术提取参赛选手所提交的测试代码中的测试片段集合TFS;基于MUTS和TFS,使用使用Text-based、Token-based或是String matchingbased等相似性分析技术来分析不同测试片段之间的相似性并生成相似性分析报告;最后,通过分析相似性分析报告计算测试代码片段的相似度,从而判断抄袭行为,提高作弊抄袭检测的效率与精准率;该方法包含下列步骤:/n1)待测程序分析,给定待测试项目源程序;首先,通过静态分析技术依次分析待测程序中待测试文件、待测试类、待测试方法,从中提取出待测试类的名称CN、待测试方法的名称MN和参数序列ARGS;然后,将CN、MN、ARGS进行字符串拼接并计算出拼接字符串的Hash值作为每个待测试方法的唯一标识MID;最后,用二元组<MID,MUT>表示一个待测试的方法,构建出所有待测试方法的集合;/n2)测试程序分析,给定所有选手提交的测试程序集合TPS和步骤1)获得的所有待测试方法的集合;首先,通过静态分析技术依次分析每个测试方法中的测试文件、测试类、测试用例,从中提取出所有调用方法集合,每个调用方法三个部分构成:MN、ARGS、OBJ;其次,基于MN、ARGS、OBJ计算出Hash值作为该方法的唯一标识,从选手提交的代码中提取测试代码片段;最后,判断每个调用方法是否是待测方法,如果是则从测试文件中提取出所有与其相关的代码语句组成测试片段集合;用二元组<CID,TFS>表示选手的测试片段集合,其中CID表示选手的编号,从而构建所有选手的测试片段集合;/n3)测试代码片段分类,给定步骤1)获得的所有待测试方法的集合和步骤2)获得的测试片段集合;以所有待测方法为分类的类别选项,将测试片段集合中所有测试片段分类,从而得到每个待测方法被哪些选手的哪些测试片段测试,从而构建出所有待测方法的测试片段分类集合;/n4)测试代码片段相似性分析,给定步骤3)获得的所有测试片段集合;遍历分析集合中每一个类别mTFS=<MID,C_TFS>,每次取C_TFS中两个选手的TF进行对比,使用Text-based、Token-based或是String matching based等相似性分析技术得到两个TF的相似性分析报告;然后,分析所有片段相似性分析报告计算出不同相似片段间相似度值,从而构成所有测试片段之间相似度值的集合;最终构建出所有待测方法的测试片段相似度值集合;/n5)测试代码整体相似性分析,给定选手测试方法集合C_MIDS和步骤4)得到的所有待测方法的测试片段相似度值集合,遍历分析C_MIDS,每次取出两位选手测试方法集合,用Ci:{m1,m2,m3…}和Cj:{m1,m2,m3…}表示,其中m1,m2,m3…表示选手测试的方法;首先,计算Ci和Cj的测试代码整体相似值权重W=Weight(Ci,Cj),计算公式如下:/n /n其中,SimMCount表示Ci和Cj的测试代码中相似的测试片段数量,Ci.MCount和Cj.MCount分别表示Ci和Cj测试的方法数量,Max{Ci.MCount,Cj.MCount}表示取二者之间的最大值;然后,遍历分析MSimS中所有子集mSim的CSim_ALL,查找出所有满足如下条件的CSim元素SimValue的集合SVS:/nCi.CID==CSim.CID1&&Cj.CID==CSim.CID2/n或者:Ci.CID==CSim.CID2&&Cj.CID==CSim.CID1/n最后,基于集合SVS计算出选手Ci和Cj的测试代码整体相似度值S=Sim(Ci,Cj),计算公式如下:/n /n其中,W是公式1由公式(1)计算得到,|SVS|表示集合SVS的大小;/n通过上述过程可以计算出所有选手之间的测试程序TP的相似度值Sim_ALL;/n6)测试程序抄袭判断,给定步骤5)得到的所有选手之间的测试程序相似度值Sim_ALL和抄袭判断域值T;遍历集合Sim_ALL中每个元素<Ci,Cj,S>,如果相似度值S大于给定的域值T,则判断选手Ci和Cj的测试程序之间存在抄袭。/n
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201810561223.3/,转载请声明来源钻瓜专利网。