[发明专利]一种对于在线编程考试中所提交的代码的度量方法在审

专利信息
申请号: 202011038003.6 申请日: 2020-09-28
公开(公告)号: CN112148609A 公开(公告)日: 2020-12-29
发明(设计)人: 刘钦;范佳杰;王立巍;吴林漾 申请(专利权)人: 南京大学
主分类号: G06F11/36 分类号: G06F11/36;G06F40/194;G06F40/253
代理公司: 南京瑞弘专利商标事务所(普通合伙) 32249 代理人: 陈建和
地址: 210093 江*** 国省代码: 江苏;32
权利要求书: 查看更多 说明书: 查看更多
摘要:
搜索关键词: 一种 对于 在线 编程 考试 提交 代码 度量 方法
【权利要求书】:

1.一种对于在线编程考试中所提交的代码的度量方法,其特征是,利用SonarQube来进行代码质量度量并获取数据结果、通过封装的SonarQube API获取项目的质量度量数据并展示到前端页面;

对代码进行质量度量以及获取数据结果,指通过代码相似度检测算法对代码与其他代码进行对比并将重复情况展示到前端页面;

对代码与其他代码进行对比的过程是:对获取的代码进行预处理、对处理代码生成抽象语法树、对语法树进行处理并转换成线性结构、对线性结构进行相似度计算、对结果进行数据展示等个步骤。

2.根据权利要求1所述的度量方法,其特征是,步骤如下:

1)获取对应代码的SonarQube项目名称,并进行代码构建;

2)在代码构建过程中执行SonarQube项目对代码进行质量度量;

3)从对应的SonarQube项目地址获取代码质量数据,包括代码的坏味道数量、认知复杂度、圈复杂度和可维护性评级四个部分;

4)将对应代码质量数据展示在前端上。

3.根据权利要求2所述的度量方法,其特征是,对代码进行质量度量即重复率度量的步骤如下:

1)对代码文件进行预处理,预处理阶段主要去除一些对于代码相似度检测来说是干扰或者是冗余的信息,如空白字符、制表符、换行符、注释、打印语句,根据所检测代码语言的不同,可以进一步在预处理阶段将一些带有代码语言特性的干扰信息忽略掉,如Java代码中的import语句和package语句等。

2)对词法分析来说有意义的字符流部分进行分析。将这些字符流根据定义好的token匹配规则进行词法分析,得到token符号流。

3)将得到的token符号流根据定义好的语法匹配规则进行语法分析和处理,就可以得到抽象语法树的每个节点。

4)过滤类型相同,但并不属于相同的代码结构体的叶子节点,优化语法树节点。

5)对生成后的抽象语法树进行哈希计算,然后用计算好的哈希值进行后续比对。每个节点都会有一种节点类型,相同类型的节点自身哈希值相同,不同类型的节点自身哈希值不同。节点的总哈希值为自身哈希值与其所有子节点自身哈希值的和。由于子节点数不同的节点代表的子树结构必定不同,因此每个节点除了需要计算哈希值以外,也要计算自身的总子节点个数,以便于后续比对相同节点时,只需要比对哈希值和子节点数都相同的节点即可,可以有效降低比对时候的计算量。

6)最后可以将抽象语法树的所有节点转换成以哈希值为key,哈希值相同的节点列表为value的HashMap,列表中的节点按照子节点数升序排列。

7)计算出源代码和比对代码中的相同节点个数。所谓相同节点就是指哈希值相同且子节点数也相同的节点。相似度计算公式如公式(1)所示,A和B分别表示源代码和比对代码的所有参与哈希计算的抽象语法树节点。分子表示两份代码之间相同的节点数,分母表示源代码总节点数和比对代码总节点数二者之间的最小值:

8)对代码进行相似度度量以及数据结果展示。

下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。

该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京大学,未经南京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服

本文链接:http://www.vipzhuanli.com/pat/books/202011038003.6/1.html,转载请声明来源钻瓜专利网。

×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top