System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及智慧教育,尤其涉及一种基于代码语法树分析的评测方法。
技术介绍
1、在软件开发与技能测评领域,传统的代码审查和测试方法存在一些问题。代码审查通常是通过人工方式对代码进行逐行检查,这种方法耗时且容易出现遗漏;而测试方法通常需要编写测试用例并模拟各种情况进行测试,同样需要大量的时间和人力资源。
2、公开号为cn111176993a公开了一种基于抽象语法树的代码静态检测方法,对不同语言环境构建规则扩展模板;基于规则扩展模板的基类规则构建规则库;采用注册列表机制进行规则注册;将规则库嵌套到开源平台中;基于抽象语法树进行代码扫描与分析。
3、现有的代码测试方法通过借助语法树和静态工具相集成,对代码进行静态分析检测,即代码的语法对错及代码规范检测,但是该方法无法对代码进行动态分析检测,即代码的综合运行性能检测,导致不能评估代码的性能及稳定性,进而降低了代码的测试效果,并且,该方法也无法根据代码测试出现的缺陷进行综合评估和反馈,不能很好的有助于开发者编程业务能力的提升。
技术实现思路
1、有鉴于此,本专利技术提出了一种基于代码语法树分析的评测方法,通过用例、静态分析和动态分析测试代码,实现对代码功能性和整体性的评估,有助于发现潜在的逻辑错误或功能缺陷,提供更准确的评估结果,并且,根据缺陷制定相应的学习方法,有助于开发者编程能力的提升。
2、本专利技术的技术方案是这样实现的:本专利技术提供了一种基于代码语法树分析的评测方法,应用于服务器中,包括以下
3、s1、接收客户端提交的测试代码;
4、s2、对提交的测试代码预处理,并将待测代码推送至消息队列中暂存;
5、s3、搭建代码测试服务集群,创建若干代码测试节点,并依次拉取消息队列中暂存的待测代码;
6、s4、预设测试用例,代码测试节点使用预设测试用例对待测代码进行用例测试,获取用例测试结果,并生成代码语法树;
7、s5、基于代码语法树对待测代码分别进行静态分析和动态分析测试,获取代码静态和动态测试结果;
8、s6、基于机器学习迭代训练评估推荐模型,将所有测试代码及测试结果输入评估推荐模型,获取相应代码综合评测得分及推荐学习方案。
9、在以上技术方案的基础上,优选的,所述步骤s1中的接收客户端提交的测试代码,其中,用户在客户端提交测试代码,客户端将用户提交的代码信息通过http请求方式发送给服务器。
10、在以上技术方案的基础上,优选的,所述步骤s4中的预设测试用例,代码测试节点使用预设测试用例对待测代码进行用例测试,获取用例测试结果,并生成代码语法树,包括以下子步骤:
11、s41,根据待测代码预设相应的多个测试用例;
12、s42,代码测试节点使用多个测试用例分别对待测代码进行用例测试;
13、s43,获取通过用例测试的测试用例数量。
14、在以上技术方案的基础上,优选的,所述步骤s5中的基于代码语法树对待测代码分别进行静态分析和动态分析测试,获取代码静态和动态测试结果,包括以下子步骤:
15、s51,基于代码语法树集成mypy、bandit和pylint分析工具,对待测代码进行静态分析测试,用于测试代码的语法错误和代码的可读性指标,获取静态分析测试中的结果,其中,代码的可读性指标包括代码长度、代码复杂度、代码变量和函数、代码注释和代码行数;
16、s52,基于代码语法树集成cprofile和memory_profiler分析工具,对待测代码进行动态分析测试,用于测试代码的运行时间和资源消耗,获取动态分析测试中的结果。
17、在以上技术方案的基础上,优选的,所述步骤s6中基于机器学习迭代训练评估推荐模型,将所有测试代码及测试结果输入评估推荐模型,获取相应代码综合评测得分,包括以下子步骤:
18、s61,根据用例测试结果,计算得到用例测试得分,表达式为:
19、t1_score=x/n*100;
20、式中,t1_score为用例测试得分,x为通过用例测试的测试用例数量,n为总的测试用例数量;
21、s62,根据静态分析测试结果,分别计算得到语法得分和可读性得分;
22、s63,根据动态分析测试结果,计算得到性能得分;
23、s64,对用例测试得分、语法得分、性能得分和可读性得分赋予相对应的权重,并计算获取综合评测得分,表达式为:
24、a_score=t1_score*w1+t2_score*w2+t3_score*w3+t4_score*w4;
25、式中,a_score为综合评测得分,w1为用例测试得分的权重,t2_score为语法得分,w2为语法得分的权重,t3_score为性能得分,w3为性能得分的权重,t4_score为可读性得分,w4为可读性得分的权重,w1、w2、w3和w4的和为1。
26、在以上技术方案的基础上,优选的,所述步骤s62中的语法得分表达式为:
27、
28、式中,g为代码出现的语法错误数量,且g为整数。
29、在以上技术方案的基础上,优选的,所述步骤s62中的可读性得分是根据静态分析测试中各项可读性指标综合计算所得,包括以下子步骤:
30、步骤s621,根据代码的长度,计算得到代码长度得分,表达式为:
31、l_score=100-(lx-lmin)/(lmax-lmin)×100;
32、式中,l_score为代码长度得分,lx为代码长度,lmin为最小代码长度,lmax为最大代码长度;
33、步骤s622,根据代码的复杂度,计算得到代码复杂度得分,表达式为:
34、f_score=100-(fx-fmin)/(fmax-fmin)×100;
35、式中,f_score为代码复杂度得分,fx为代码复杂度,fmin为最小复杂度,fmax为最大复杂度;
36、步骤s623,根据有意义的变量和函数名的数量,计算得到代码有意义的变量和函数名得分,表达式为:
37、n_score=100-(nx-nmin)/(nmax-nmin)×100;
38、式中,n_score为代码有意义的变量和函数名的得分,nx为有意义的变量和函数名的数量,nmin为最小有意义的变量和函数名的数量,nmax为最大有意义的变量和函数名的数量;
39、步骤s624,根据注释数量和代码行数,计算得到代码注释数量得分,表达式为:
40、z_score=zx/cn×100;
41、式中,z_score为代码注释数量得分,zx为注释数量,cn为代码总行数;
42、步骤s625,将代码长度得分、代码复杂度得分、代码有意义的变量和函数名得分和代码注释数量得分赋予相对应的权重,并计算得本文档来自技高网...
【技术保护点】
1.一种基于代码语法树分析的评测方法,应用于服务器中,其特征在于,包括以下步骤:
2.如权利要求1所述的基于代码语法树分析的评测方法,其特征在于:所述步骤S1中的接收客户端提交的测试代码,其中,用户在客户端提交测试代码,客户端将用户提交的代码信息通过HTTP请求方式发送给服务器。
3.如权利要求1所述的基于代码语法树分析的评测方法,其特征在于:所述步骤S4中的预设测试用例,代码测试节点使用预设测试用例对待测代码进行用例测试,获取用例测试结果,并生成代码语法树,包括以下子步骤:
4.如权利要求3所述的基于代码语法树分析的评测方法,其特征在于:所述步骤S5中的基于代码语法树对待测代码分别进行静态分析和动态分析测试,获取代码静态和动态测试结果,包括以下子步骤:
5.如权利要求4所述的基于代码语法树分析的评测方法,其特征在于:所述步骤S6中基于机器学习迭代训练评估推荐模型,将所有测试代码及测试结果输入评估推荐模型,获取相应代码综合评测得分,包括以下子步骤:
6.如权利要求5所述的基于代码语法树分析的评测方法,其特征在于:所述步骤
7.如权利要求5所述的基于代码语法树分析的评测方法,其特征在于:所述步骤S62中的可读性得分是根据静态分析测试中各项可读性指标综合计算所得,包括以下子步骤:
8.如权利要求5所述的基于代码语法树分析的评测方法,其特征在于:所述步骤S63中的性能得分是根据动态分析测试中测试代码的运行时间和资源消耗计算所得,表达式为:
9.如权利要求1所述的基于代码语法树分析的评测方法,其特征在于:所述步骤S6中的基于机器学习迭代训练评估推荐模型,将所有测试代码及测试结果输入评估推荐模型,获取相应的推荐学习方案,其中,基于机器学习的推荐模型使用深度神经网络进行分析,将测试代码数据作为输入,通过多层神经网络对数据进行特征提取建模,并根据测试出的代码缺陷输出相应的推荐学习方案。
10.如权利要求9所述的基于代码语法树分析的评测方法,其特征在于:还包括步骤S7,将用例测试结果、代码静态、动态测试结果和综合评测得分以及推荐学习方案数据存储到数据库中,并同步发送回客户端窗口供用户查看。
...【技术特征摘要】
1.一种基于代码语法树分析的评测方法,应用于服务器中,其特征在于,包括以下步骤:
2.如权利要求1所述的基于代码语法树分析的评测方法,其特征在于:所述步骤s1中的接收客户端提交的测试代码,其中,用户在客户端提交测试代码,客户端将用户提交的代码信息通过http请求方式发送给服务器。
3.如权利要求1所述的基于代码语法树分析的评测方法,其特征在于:所述步骤s4中的预设测试用例,代码测试节点使用预设测试用例对待测代码进行用例测试,获取用例测试结果,并生成代码语法树,包括以下子步骤:
4.如权利要求3所述的基于代码语法树分析的评测方法,其特征在于:所述步骤s5中的基于代码语法树对待测代码分别进行静态分析和动态分析测试,获取代码静态和动态测试结果,包括以下子步骤:
5.如权利要求4所述的基于代码语法树分析的评测方法,其特征在于:所述步骤s6中基于机器学习迭代训练评估推荐模型,将所有测试代码及测试结果输入评估推荐模型,获取相应代码综合评测得分,包括以下子步骤:
6.如权利要求5所述的基于代码语法树分析的评测方...
【专利技术属性】
技术研发人员:杨德江,李孝臣,杨顺,
申请(专利权)人:中教畅享北京科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。