一种基于控制流图的代码错误自动检出方法

文档序号:31728654发布日期:2022-10-05 01:17阅读:来源:国知局

技术特征:
1.一种基于控制流图的代码错误自动检出方法,其特征在于:具体包括如下步骤:步骤1、生成控制流图:设数据库中的待检测代码有n份,编号为1,2,3,

,n;在编译代码时,编号为i的代码生成对应的控制流图g[i],g[i]中会生成m+1个节点的第j(0≤j≤m)个节点为n[i][j],其对应的源代码为c[i][j];步骤2、子图匹配:将待检测代码的控制流图g[i]与正确代码c[k]生成的控制流图g[k]进行子图同构和节点的匹配,若两个程序的控制流图最多相差一个节点并且通过简单的加边加点的操作后两图同构,则认为这两份控制流图是能匹配的;子图同构指的是给定两个图g=(v,e,u,v)和g'=(v',e',u',v'),s是g'的子图,如果存在一个函数f:v

v',且f是从g到s的同构,那么,称f是从g到g'的子图同构;经过子图同构算法之后,得到一个结构相似度的集合s,取s中的最大值s[k],表示代码i与k最为相似,即k=argmax(s[k]);步骤3、分支修正:在获得图同构的相关映射之后,直接进行后续的操作,由于在匹配过程中没有将节点的具体的代码内容加入考虑,一个节点的分支对应关系有可能发生颠倒,容易发生误判;因此进行分支修正,对于源控制流图的每一个分支的节点,将其与目标控制流图的分支节点使用基于字符的文本相似度计算进行相应的相似度检测,将相似度最高的两个节点定义为匹配关系,从而尽可能使得分支的顺序正确,降低错误检出的误报率;设正确的代码c[k]生成的控制流图中的分支节点有m+1个,编号为0,1,2,3,

,q;对于c[k]中的每一个分支节点n[k][j](0≤j≤q),将其与c[i]生成的控制流图中的分支节点集合n[i]中的所有分支节点进行lcs距离计算;若n[k][j]与n[i]中p节点的相似度大于与n[i]中其他节点的相似度,认为k中的分支节点n[k][j]与i中的分支节点n[i][p]是匹配的;步骤4、以节点为单位进行相似度计算:采用编辑距离进行文本相似度比较,采用lcs距离来定义编辑距离;lcs距离源字符串s的长度为l1,目标字符串t的长度为l2,s与t之间的lcs距离为el,那么可以将s与t之间的文本相似度similarity定义为:similarity=1-el/(l1+l2);得到两份代码的匹配关系后,要判断两者节点内代码的相似度;将提交代码c[i]与正确代码c[k],即两份代码的源代码的所有节点按照节点匹配关系进行一次基于文本相似度的比较,得到的文本相似度集合t,若其中t[j]的数值小于阈值,则认为代码c[i][j]处有错误。2.如权利要求1所述的基于控制流图的代码错误自动检出方法,其特征在于:所述步骤1通过编译器去除对代码逻辑不产生影响的节点并对单入单出的多个节点进行合并。

技术总结
本发明涉及一种基于控制流图的代码错误自动检出方法。本发明根据提交代码生成控制流图;根据提交代码的控制流图与数据库中已有的代码进行比对,找到结构上最相似的代码;通过计算每个节点的代码相似度来判断该节点是否可能出错;通过找到数据库内与源代码逻辑相似的正确代码,从而进一步定位代码的错误位置。本发明通过发挥控制流图的特点,弥补了现有在线测评系统的短板。目前在线测评系统中大多只有代码检测抄袭系统,而没有代码错误自动检出系统,通过本系统能帮助用快速定位自己程序的错误位置,从而加快编程效率。在教学活动中,减少教师为学生检查代码的时间,从而大大减轻教师的负担,将时间更多的用在教学任务上。将时间更多的用在教学任务上。将时间更多的用在教学任务上。


技术研发人员:单振宇 周婉婧 陈雨欣
受保护的技术使用者:杭州师范大学
技术研发日:2022.07.25
技术公布日:2022/10/4
当前第2页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1