CN113761444A - 基于代码评分的教程推荐方法、教程推荐装置及终端设备 - Google Patents
基于代码评分的教程推荐方法、教程推荐装置及终端设备 Download PDFInfo
- Publication number
- CN113761444A CN113761444A CN202111049023.8A CN202111049023A CN113761444A CN 113761444 A CN113761444 A CN 113761444A CN 202111049023 A CN202111049023 A CN 202111049023A CN 113761444 A CN113761444 A CN 113761444A
- Authority
- CN
- China
- Prior art keywords
- code
- score
- detected
- course
- tested
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/958—Organisation or management of web site content, e.g. publishing, maintaining pages or automatic linking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/70—Information retrieval; Database structures therefor; File system structures therefor of video data
- G06F16/73—Querying
- G06F16/732—Query formulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/903—Querying
- G06F16/90335—Query processing
- G06F16/90344—Query processing by using string matching techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F18/00—Pattern recognition
- G06F18/20—Analysing
- G06F18/22—Matching criteria, e.g. proximity measures
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09B—EDUCATIONAL OR DEMONSTRATION APPLIANCES; APPLIANCES FOR TEACHING, OR COMMUNICATING WITH, THE BLIND, DEAF OR MUTE; MODELS; PLANETARIA; GLOBES; MAPS; DIAGRAMS
- G09B5/00—Electrically-operated educational appliances
-
- G—PHYSICS
- G09—EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
- G09B—EDUCATIONAL OR DEMONSTRATION APPLIANCES; APPLIANCES FOR TEACHING, OR COMMUNICATING WITH, THE BLIND, DEAF OR MUTE; MODELS; PLANETARIA; GLOBES; MAPS; DIAGRAMS
- G09B5/00—Electrically-operated educational appliances
- G09B5/02—Electrically-operated educational appliances with visual presentation of the material to be studied, e.g. using film strip
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- Educational Technology (AREA)
- Computational Linguistics (AREA)
- Educational Administration (AREA)
- Business, Economics & Management (AREA)
- Bioinformatics & Computational Biology (AREA)
- Bioinformatics & Cheminformatics (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Evolutionary Biology (AREA)
- Artificial Intelligence (AREA)
- Life Sciences & Earth Sciences (AREA)
- Evolutionary Computation (AREA)
- Mathematical Physics (AREA)
- Multimedia (AREA)
- Electrically Operated Instructional Devices (AREA)
Abstract
本申请适用于人工智能技术领域,提供了一种基于代码评分的教程推荐方法、教程推荐装置、终端设备及存储介质。该教程推荐方法包括:获取待测代码;对待测代码进行评分,得到待测代码的质量分值,其中质量分值包括编码规范分值、可读性分值、可维护性分值、重复度分值以及可测试性分值;检测质量分值是否小于预设质量阈值;若质量分值小于预设质量阈值,则基于质量分值向用户推荐目标教程,目标教程用于为用户的代码编写提供指引。本申请的方法从代码的五个维度对待测代码进行全面评分,得待测代码到质量分值,之后基于质量分值能够为用户推荐更贴近用户需求的教程,有助于用户提升自己所编写的代码的质量。此外,本申请还涉及区块链技术。
Description
技术领域
本申请涉及人工智能技术领域,尤其涉及一种基于代码评分的教程推荐方法、基于代码评分的教程推荐装置、终端设备及计算机可读存储介质。
背景技术
工作不仅仅是运用已掌握的知识解决业务问题的过程,还应该是一个持续学习成长的过程,尤其对于日新月异的互联网行业,只有不断学习新技能才能更好的提高工作效率。
但是大部分程序员在繁忙的工作之余,并不愿意主动学习。不愿意主动学习除了个人主动学习的意识薄弱以外,程序员自己不知道自己薄弱的点在哪也是一个重要因素。由于不知道自己哪方面的知识有缺失,在面对网上海量的教程时,也就无从下手,导致学习计划不了了之。
目前,针对代码评分的维度较为单一,因此评分结果准确率较低,利用现有代码评分方法为用户推荐教程,则可能因为推荐准确率较低,出现无法满足用户的需求的问题。
发明内容
有鉴于此,本申请实施例提供了一种基于代码评分的教程推荐方法、基于代码评分的教程推荐装置、终端设备及计算机可读存储介质,能够为用户量身推荐学习教程,以辅助用户提升自己所编写的代码的质量。
本申请实施例的第一方面提供了一种基于代码评分的教程推荐方法,包括:
获取待测代码;
对上述待测代码进行评分,得到上述待测代码的质量分值,上述质量分值包括编码规范分值、可读性分值、可维护性分值、重复度分值以及可测试性分值;
检测上述质量分值是否小于预设质量阈值;
若上述质量分值小于上述预设质量阈值,则根据上述质量分值确定上述待测代码的第一特征向量;
基于上述第一特征向量从预设的视频库中查找目标教程,上述目标教程为上述视频库中与上述第一特征向量匹配的视频;
向用户推荐上述目标教程。
本申请实施例的第二方面提供了一种基于代码评分的教程推荐装置,包括:
获取模块,用于获取用户的待测代码;
评分模块,用于对上述待测代码进行评分,得到上述待测代码的质量分值,上述质量分值包括编码规范分值、可读性分值、可维护性分值、重复度分值以及可测试性分值;
检测模块,用于检测上述质量分值是否小于预设质量阈值;
向量确定模块,用于若上述质量分值小于上述预设质量阈值,则根据上述质量分值确定上述待测代码的第一特征向量;
视频查找模块,用于基于上述第一特征向量从预设的视频库中查找目标教程,上述目标教程为上述视频库中与上述第一特征向量匹配的视频;
教程推荐模块,用于向用户推荐上述目标教程。
本申请实施例的第三方面提供了一种终端设备,包括存储器、处理器以及存储在上述存储器中并可在终端设备上运行的计算机程序,上述处理器执行上述计算机程序时实现第一方面提供的基于代码评分的教程推荐方法的各步骤。
本申请实施例的第四方面提供了一种计算机可读存储介质,上述计算机可读存储介质存储有计算机程序,上述计算机程序被处理器执行时实现第一方面提供的基于代码评分的教程推荐方法的各步骤。
实施本申请实施例提供的一种基于代码评分的教程推荐方法、基于代码评分的教程推荐装置、终端设备及计算机可读存储介质具有以下有益效果:
先通过获取用户的待测代码,然后从五个维度对待测代码进行全面的评分,得到待测代码的质量分值,之后根据质量分值确定用户是否存在缺失的知识,即判断质量分值是否大于预设质量阈值。如果质量分值小于预设质量阈值,则说明用户在五个维度上,存在知识缺失,需要为用户推荐适宜其学习的教程,即目标教程。通过用户对目标教程的学习,能够辅助用户提升自己所编写的代码的质量及效率,从而进一步提高用户的工作质量和工作效率。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种基于代码评分的教程推荐方法的实现流程图;
图2是本申请实施例提供的一种目标教程评分界面图;
图3是本申请实施例提供的一种基于代码评分的教程推荐装置的结构框图;
图4是本申请实施例提供的一种终端设备的结构框图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请实施例所涉及的基于代码评分的教程推荐方法,可以由终端设备,例如笔记本电脑、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本或个人数字助理(personal digital assistant,PDA)执行。
本申请实施例可以基于人工智能技术对相关的数据进行获取和处理。其中,人工智能(Artificial Intelligence,AI)是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用***。
人工智能基础技术一般包括如传感器、专用人工智能芯片、云计算、分布式存储、大数据处理技术、操作/交互***、机电一体化等技术。人工智能软件技术主要包括计算机视觉技术、机器人技术、生物识别技术、语音处理技术、自然语言处理技术以及机器学习/深度学习等几大方向。本申请实施例主要涉及机器学习这一方向,通过机器学习,能够基于用户的待测代码,自动匹配目标教程并向用户进行推荐。
请参阅图1,图1示出了本申请实施例提供的一种基于代码评分的教程推荐方法的实现流程图。该教程推荐方法包括:
步骤110、获取待测代码。
此处,可以获取用户的待测代码,其中用户一般指的是程序员,当然也可以是非程序员,例如学习编程的学生或者利用业余时间学习编程的人员。在获取到用户的测试代码后,可以通过后续的代码评分、阈值比对以及教程查找,为用户推荐量身定制的目标教程,从而辅助用户对自己在代码编写方面的知识进行查缺补漏,以提高用户所编写的代码的质量。
步骤120、对待测代码进行评分,得到待测代码的质量分值。
为了提高代码评分的全面性,且结合用户可能出现缺漏的方面,可以从5个维度对待测代码进行全面评分。5个维度具体包括编码规范、可读性、可维护性、重复度以及可测试性。经过每一个维度的评分,即可得到对应的5个分值,即得到编码规范分值、可读性分值、可维护性分值、重复度分值以及可测试性分值,将这5个分值综合作为待测代码的质量分值,能够提高对代码评分的可靠性和全面性。
步骤130、检测质量分值是否小于预设质量阈值。
在确定出待测代码的质量分值后,可以将该质量分值与预设质量阈值进行比较,即判断质量分值是否小于预设质量阈值,从而确定用户是否存在缺漏的知识。由上述步骤102可知,质量分值具体包括了5个维度的分值;那么,相对应地,预设质量阈值可以包括5个维度的合格分值。在判断质量分值是否小于预设质量阈值时,可以通过单一维度进行比对,例如将质量分值中的编码规范分值和预设质量阈值中的编码规范的合格分值进行比较,若编码规范分值小于编码规范的合格分值,则说明用户在编码规范方面有待加强学习,对于其它四个维度,依次类推。可以理解的是,如果出现某一维度的分值小于预设质量阈值中对应维度的合格分值,则可以视为质量分值小于预设质量阈值。
步骤140、若质量分值小于预设质量阈值,则基于质量分值向用户推荐目标教程。
经过质量分值与预设质量阈值的比较,可以判断出质量分值是否小于预设质量阈值。若判断出质量分值小于预设阈值,那么说明用户在代码编写方面存在缺漏的知识。为了进一步让用户针对自身不足的知识进行查缺补漏,可以基于质量分值向用户推荐目标教程,该目标教程能够为用户的代码编写提供指引。在用户完成对目标教程的学习后,将学习到的知识应用在日常工作中,能够提升用户所编写的代码的质量,从而进一步提升用户的工作质量和工作效率。
在本申请实施例中,先通过获取待测代码,然后从五个维度对待测代码进行全面的评分,得到待测代码的质量分值,之后根据质量分值确定用户是否存在缺失的知识,即判断质量分值是否小于预设质量阈值,如果质量分值小于预设质量阈值,则说明用户在部分或者全部维度上存在知识缺失,需要为用户推荐适宜其学习的教程,即目标教程。通过用户对目标教程的学习,能够辅助用户提升自己所编写的代码的质量及效率,从而进一步提高用户的工作质量和工作效率。
在一些实施例中,为了提高待测代码的质量分值计算的准确性,上述步骤120具体包括:
121、计算待测代码与预设模板代码的第一相似度,基于第一相似度确定待测代码的编码规范分值。
对于编码规范这个维度的测试,主要检测的是代码在编写的过程中,是否遵循了最佳实践和团队规定的编码规范,编写完成的代码中是否包含可能存在问题的代码以及是否包含存在安全漏洞的代码。具体地,可以将待测代码与预设模板代码进行比较,计算两者之间的第一相似度,其中第一相似度是基于预设模板代码衡量待测代码的语法和结构这两个方面是否规范的指标。具体地可以基于预设模板代码检查待测代码的标识符、代码格式以及注释规范等方面的是否规范。
为了便于理解,举例说明:对于标识符是否规范,可以检查待测代码的类的首字母是否大写,后缀是否为常用类型,例如Service、Impl、Dao以及Job等;或者检查待测代码的变量名是否为驼峰状;再或者检查待测代码的方法名是否首字母小写,动词在前,例如模板中推荐addOrder(),而不建议orderAdd()。对于代码格式,可以检查待测代码是否统一使用四个空格代表缩进;或者检查待测代码的每行代码是否超过80个字符。
在一些实施例中,可以利用第三方插件Sonar对待测代码进行检测,完成待测代码的编码规范这个维度的评分。Sonar是一个用于代码质量管理的开源平台,用于管理源代码的质量,可以集成在java编辑器IDEA中。Sonar属于静态代码分析工具,集成了一套代码规范,无需运行待测代码,仅通过分析检查待测代码的语法和结构,便可以检查程序的正确性。也就是说将待测代码与规范的模板代码进行相似度匹配,从而找出代码隐藏的错误或缺陷,例如检测出待测代码是否存在参数不匹配、有歧义的嵌套语句、错误的递归及空指针引用等问题。在利用模板代码与待测代码进行匹配后,即可获得待测代码的编码规范分值。
122、扫描待测代码,确定待测代码的嵌套次数、名称规范度以及注释完整度,以得到待测代码的可读性分值。
所谓代码的可读性,指的是待测代码是否容易被除用户以外的其他人理解,即待测代码逻辑是否清晰。对于可读性这一维度的评分,可以着重检测待测代码的循环嵌套次数是否合理、名称是否规范以及代码是否有完整的注释。
在一些实施例中,要得到准确的可读性分值,上述步骤122具体包括:
1221、检测所述待测代码中目标字符的字符数量,以确定所述待测代码的嵌套次数;
1222、检测所述待测代码中的变量名是否为预设词组,得到名称检测结果;
1223、基于所述名称检测结果确定所述待测代码的名称规范度;
1224、检测所述待测代码中预设位置是否存在注释,得到注释检测结果;
1225、基于所述注释检测结果确定所述待测代码的注释完整度。
要判断待测代码的循环嵌套次数是否合理,可以设置一个循环嵌套次数的阈值作为评判的标准。例如可以将大于3的循环嵌套次数认为是不合理的。鉴于Java代码的一个代码段是通过大括号进行标识,因此可以通过检测待测代码中目标字符出现的次数来确定待测代码的嵌套次数。为了便于理解,举例说明,假设待测代码为“{..{..{..{..}…”,目标字符,也即左大括号“{”连续出现了4次,也就是说待测代码的嵌套次数为4;以上述循环嵌套次数的阈值进行评判,当前的待测代码的循环嵌套次数不合理,也就是说从循环嵌套次数是否合理这一方面进行考量,这段代码的可读性较差。
除了检测待测代码的循环嵌套次数是否合理,还可以检查名称是否规范来对待测代码的可读性进行评分。其中,名称命名是否规范侧重于变量的命名是否规范,即重点识别检查变量名,检测这一名称中是否为预设词组,若检测出某一变量名不属于预设词组,则需要针对该检测结果扣分并进行提示。具体地,检查某一变量名是否为预设词组,可以对该变量名进行分割,得到至少两个片段,从预设的词库中查找与每个片段匹配的单词,如果匹配成功,则说明该变量名为预设词组,应当理解的是,只有变量名对应的每个片段都能匹配到对应的单词时,该变量名才是预设词组。为了便于理解,举例说明,假设获取到两个变量名,一个是“getUserlist”,另一个是“getAaBb”,对这两个变量名进行分割,分别得到“getUser list”和“get Aa Bb”,对于第一个变量名对应的3个片段,都能从词库中查找到匹配的单词,因此该变量名为预设词组,也即该变量名的名称命名是规范的;相反,第二个变量名对应的3个片段,仅有第一个片段能够匹配到单词,那么该变量名不是预设词组,也即该变量名的名称命名不规范,应当扣分。
除上述两个方面,对于代码来说,要让除用户以外的其他人员能够理解待测代码,注释完整度也是很关键的一个方面。其中,注释完整度可以是关键地方是否标注有完整注释,如果关键地方没有完整注释的话,那么对待测代码的可读性也会带来较大的影响。添加注释,其主要目的是为了程序更容易理解与维护,也就是说代码的关键地方是否具备完整注释,除了影响代码的可读性,对代码的可维护性影响也很大。可选地,待测代码的关键地方可以是函数的开头或者嵌套次数较多的地方。
当待测代码完成上述三个方面的检测后,即可得到三个分数,可以将三个分数相加求和,并根据求和结果取平均值作为可读性分值,即可得到一个较为全面客观的可读性分值。将该可读性分值应用到后续的教程推荐的过程中,能够提高教程推荐的准确性。
123、基于预设的可维护度量指标对待测代码进行评分,得到待测代码的可维护性分值。
可维护性指的是后期改进代码的难易程度,具体可以包括编写过程中的可维护性和运行过程中的可维护性。对于可维护性较高的代码而言,需要具备应对未来可能发生的变化的能力,换句话说,就是所编写的代码的复用性较高。
在一些实施例中,为了准确得出待测代码的可维护性分值,可以使用插件typhonjs-escomplex对待测代码的每个文件进行扫描,扫描的过程中,基于预设的可维护度量指标可以确定出待测代码的每个文件可维护性分值。在得到所有文件的可维护性分值或者得出单个文件的可维护性分值后,可以将维护性分值与预设分值进行比对,如果某个文件的可维护性分值低于预设分值,可以将该文件每个可维护都指标的具体分析生成对应的报告,以供用户参考,更好的重构复杂代码。
作为示例而非限定,可维护度量指标可以包括:圈复杂度(CyclomaticComplexity)、代码行数、继承的层次数(Depth of Inheritance)、类之间的耦合度(ClassCoupling)以及单元测试覆盖率(Unit test coverage)。其中,圈复杂度指的是代码的结构复杂度;继承的层次数指的是继承的层次数;类之间的耦合度指的是通过参数、局部变量、返回类型、方法调用、泛型或模板实例化、基类、接口实现、在外部类型上定义字段和属性修饰来测量耦合到唯一类。单元测试覆盖率指的是知识代码库的哪些部分被自动化单元测试覆盖。
为了便于理解,基于下述代码以继承层次数这一方面进行举例说明:
Public class A extends B{……}
class B extends C{……}
class C implement D{……}
对于继承层次数,主要扫描待测代码中定义所用到的关键词“extends以及implement”。由上述代码可以看出,A的继承层次数为3。基于继承层次数,可以确定出具体的继承层次数阈值,进而得到这段代码的可维护性中继承层次数的得分。其余4个方面按照各自的标准也可以获得对应的分值,在得到五个方面的分值后,可以基于这5个方面的确定待测代码的可维护性分值,例如对五个分值求和并取平均值作为待测代码的可维护性分值。
124、计算待测代码中代码块的重复数量,基于重复数量确定待测代码的重复度分值。
在代码的编写过程中,应遵守的一个重要原则是“不要重复编写代码”,而是通过复用已有代码来降低代码的重复度,以提高代码质量。这是因为代码中如果存在较多的重复代码,当该代码出现问题,则意味着加倍的工作量和持续的不可控。
一般来说,对重复代码的定义如下:
(1)完全一致的代码或者只修改了空格和评论;
(2)结构上和句法上一致的代码,例如只是修改了变量名;
(3)***和删除了部分代码;
(4)功能和逻辑上一致的代码,语义上的拷贝。
对于重复代码的检测,可以使用第三方插件jscpd计算重复出现的代码区块占比,即可计算出待测代码的重复度分值。可选地,还可以逐一列举重复的代码,方便用户快速定位重复代码,从而将其封装成公共的方法或者组件。
125、逐行扫描待测代码,得到每行待测代码的可测试性分值,基于每行待测代码的可测试性分值确定待测代码的可测试性分值。
代码在编写完成后,都会进行测试。这里所说的可测试性,指的是代码能够被测试的难易程度,具体可以包括测试用例编写的难易程度以及是否容易发现缺陷两个方面。
在一些实施例中,为了检测待测代码的可测试性,可通过第三方插件testabilityexplorer来计算待测代码中的类的可测性分值,并将类划分为优秀、可容忍及需要调整3个等级,每个等级可设定对应的默认分值阈值:需要调整的分值阈值为<=50;可容忍的分值阈值为<=100;优秀的分值阈值为>100。
具体地,在测试过程中,可以利用testability explorer的逐行递归分析判断,确定每行代码是否不可注入全局变量,如果是,则对应行的分值则加1,直到深度达到depth。基于testability explorer的检测,能够让用户在编写代码的过程中,养成符合依赖注入风格的编码习惯。
在一些实施例中,为了准确计算出待测代码中代码块的重复数量,上述步骤124具体包括:
1241、将待测代码按照预设粒度进行划分,得到至少两个代码块。
1242、针对每个代码块,计算代码块分别与各个其它代码块之间的第二相似度。
1243、基于目标相似度对待测代码中的重复代码块进行计数,得到重复数量,目标相似度指的是大于相似度阈值的第二相似度。
1244、基于重复数量确定待测代码的重复度分值。
Jscpd的核心原理是使用Rabin-Karp算法。Rabin-Karp算法是字符串快速查找的一种算法,解决思路是先将待测代码按照预设粒度进行划分,得到至少两个代码块。其中,预设粒度可以根据项目进行划分,例如预设粒度设置为一行代码,或者将预设粒度设置为一个代码文件。按照预设粒度划分后,针对每个代码块,依次计算每个代码块与其余代码块之间的第二相似度,其中,其它代码块为至少两个代码块中除代码块之外的代码块。为了便于理解,举例说明,假设以一行代码为代码块划分的最小单位,对待测代码进行划分,得到了8个代码块,从8个代码块中先抽取出一个代码块,分别计算该代码块与其余的7个代码块之间的第二相似度值,即可以得到7个第二相似度值,然后再从剩余的7个中抽取出一个代码块,分别计算该代码块与其余的6个代码块质检的第二相似度值,既可以得到6个第二相似度值,以此类推,当计算完成后,可以得到28个第二相似度值。在计算出代码块之后,即可根据设定的相似度阈值进一步确定代码块的重复数量,以便于后续根据重复代码块的数量确定出待测代码的重复性分值。
在一些实施例中,在得到待测代码的质量分值后,可以将质量分值定义为I,并将质量分值中的编码规范分值、可读性分值、可维护性分值、重复度分值以及可测试性分值分别定义为a、b、c、d、e,五个分值的评分范围都是0-100分。
进一步地,为了确保用户撰写代码的基本功,可以对待测代码的质量分值中的五个维度加权。编码规范、可读性、可维护性、重复度以及可测试性可以对应预设权重w1,w2,w3,w4,w5,例如预设权重可以是4,2,2,2,1。在确定出对应的权重后,可以基于该犬种对质量分值加权,具体可以表示为下式:
W·I=4a+2b+2c+2d+e
对质量分值进行加权后,其评分范围为0~1100。分值范围过大,显然不便于进行阈值比对,直观性较差。
在一些实施例中,为了提高质量分值的直观性,可以将加权后的质量分值进行标准化,分值范围限定到0~100分之间。可选地,采用线性归一化对加权后的质量分值进行处理:
在一些实施例中,将质量分值范围限定为0~100后,上述步骤130具体包括:将质量分值阈值限定60分,如果存在待测代码的质量分值为59分,那么该待测代码的质量是不合格的,对应该待测代码的用户需要学习***推荐的目标教程,从而提高自身编码能力,保证工作质量。
在一些实施例中,为了提高教程匹配的准确度,上述步骤140具体包括:
141、根据质量分值确定待测代码的第一特征向量。
为了进一步让用户针对自身不足的知识进行查缺补漏,可以根据质量分值确定输出待测代码的第一特征向量,该特征向量能够表现待测代码所存在缺漏的维度,即能够表征用户在编码规范、可读性、可维护性、重复度以及可测试性这五个方面中,哪个方面或者哪几个方面的知识较为薄弱。
在得到质量分值I=(a,b,c,d,e)后,基于质量分值预设的权重W=(w1,w2,w3,w4,w5),将质量分值与预设的权重进行相乘:
M=W*(100-a,100-b,100-c,100-d,100-e)
=(100w1-w1a,100w2-w2b,100w3-w3c,100w4-w4d,100w5-w5e)
其中M即为待测代码的第一特征向量,记作M=(m1,m2,m3,m4,m5)。
为了更清楚地理解第一特征向量,以一个具体示例作为说明:
假设用户A的待测代码的质量分值为I1=(80,20,30,80,90),五个指标的权重为:W=(4,2,2,2,1),将质量分值和权重相乘,得出需要提高的必要性为:
M=W*(100-a,100-b,100-c,100-d,100-e)
=(400-4a,200-2b,200-2c,200-2d,100-e)
=(80,160,140,40,10)
即(80,160,140,40,10)为用户A的第一特征向量。从第一特征向量可以看出,该用户需要加强可读性(B)及可维护性(C)两个维度的学习,从而提高这两个维度作业的规范性。
142、基于第一特征向量从预设的视频库中查找目标教程。
通过预先构建视频库,在得到第一特征向量之后,即可基于第一特征向量从预设的视频库中查找到目标教程。其中,目标教程为视频库中与第一特征向量匹配的视频。
143、将目标教程推荐给用户。
在得到目标教程后即可将目标教程推荐给用户进行学习。可选地,为了督促用户进行学习,在目标教程推荐后,如果在预设时间段内未检测到用户对目标教程的学习时长,或者用户对目标教程的学习时长不满足相应的阈值,那么可以再次提醒用户进行学习。可选地,还可以将目标教程作为任务分配给用户,以确保用户对目标教程进行学习。用户通过目标教程的学习,可以提升自己所编写的代码的质量。
在一些实施例中,为了向用户推荐量身定制的教程,需要先构建视频库,具体包括:
D1、获取初始教程链接。
在本申请实施例中,可以通过爬虫从各大权威的网站上获取教程链接,该网站可以是bilibili、平安知鸟网或者其他博客网站。
D2、对初始教程链接打教学标签,得到教程链接。
在爬取到视频链接之后,可以由人工观看后进行打教学标签的操作,并通过第二特征向量来表示,即
B=(w1,w2,w3,w4,w5)
其中,教学标签中的五个维度分别与质量分值中的5个维度相对应。
可以设置教学标签中每个维度满分为5颗星,即每个维度的最高分为5分。假设某个教程的标签为B1=(4,2,1,0,0),映射到编码规范分值、可读性分值、可维护性分值、重复度分值以及可测试性分五个维度之后,可知:编程规范分值4分,可读性分值2分,可维护性分值1分,重复度分值0分,可测试性分值0分,需要说明的是0分表示不相关。那么也就是说这个教程着重在讲编码规范的知识,其次是编码可读性的知识,最后是编码的可维护性的知识。
D3、将教程链接存入预先构建的视频库内,并记录教程链接与教程链接的教学标签之间的对应关系,完成视频库的初始化。
最后将打完标签的教程链接存储到视频库内,以待匹配。
在一些实施例中,为了更近一步地提高目标教程推荐的准确性,上述步骤142具体包括:
1421、确定视频库中每个视频的教学标签。
1422、基于每个视频的教学标签计算每个视频的第二特征向量。
1423、计算第一特征向量与各个第二特征向量之间的第三相似度。
1424、基于第三相似度从视频库中查找目标教程。
由上述步骤D1~D3可知,视频库中的每个视频都有对应的教学标签,用来表示对应视频的教学内容。为了匹配到目标教程,可以先确定视频库中每个视频的教学标签。之后基于得到的教学标签,计算对应视频的第二特征向量,即,用向量来表征视频的教学内容。得到各个视频的第二特征向量之后,可以计算第一特征向量和各个第二特征向量之间的第三相似度,最终基于第三相似度来确定出目标教程。
可选地,可以采用余弦定理来确定第一特征向量与每个第二特征向量之间的第三相似度:
0≤cosθ≤1,第三相似度越接近于1,表示推荐的越匹配。
在一些实施例中,为了提高每个视频的教学标签的准确性,上述教程推荐方法还包括:
在将目标教程推荐给用户之后,若接收到用户对目标教程的评价信息,则根据评价信息调整目标教程的标签。
在目标教程推荐给用户后,用户完成对目标教程的学习,可以对该目标教程五个维度的内容进行评价。也就是说,评价该目标教程具体涉及了哪几个维度的内容,以及每个维度内容的占比如何等,其中每个维度内容的占比可以通过评价页面中星星的数量来表示。
参见图2,图2示出了用户完成目标教程学习后对目标教程的评价信息。从图中可以看出,XX教程的教学内容主要涉及编码规范,其次是可读性和重复度,还涉及了一部分可测试性方面的内容,而对于可维护性方面的知识未涉及到。当接收到用户对目标教程的评价信息后,可以基于该评价信息来对目标教程的教学标签进行调整。为了便于理解,举例说明:假设某个目标教程对应的第二特征向量为B1,接收到用户评价信息为向量B2,那么最终第二特征向量可以更新为B3=(B1+B2)/2。该方法通过用户评价反向调整第二特征向量B,从而更好的为用户匹配并推荐教程。
在一些实施例中,上述教程推荐方法还包括:
将上述待测代码、质量分值和/或目标教程上传至区块链(Blockchain)中。
其中,为了保证数据的安全性和对用户的公正透明性,可以将各个待测代码、质量分值和/或目标教程上传至区块链进行存证。用户随后即可通过各自的设备从区块链中下载获得待测代码、质量分值和/或目标教程,以便查证这些数据是否被篡改。本实施例所指区块链是采用分布式数据存储、点对点传输、共识机制及加密算法等计算机技术的新型应用模式。区块链,本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。
此外,本申请实施例还提供了一种基于代码评分的教程推荐装置。
请参阅图3,图3是本申请实施例提供的一种基于代码评分的教程推荐装置的结构框图。本实施例中该终端设备包括的各单元用于执行图1对应的实施例中的各步骤。具体请参阅图1以及图1所对应的实施例中的相关描述。为了便于说明,仅示出了与本实施例相关的部分。参见图3,基于代码评分的教程推荐装置30包括:
获取模块31,用于获取用户的待测代码;
评分模块32,用于对待测代码进行评分,得到待测代码的质量分值,质量分值包括编码规范分值、可读性分值、可维护性分值、重复度分值以及可测试性分值;
检测模块33,用于检测质量分值是否小于预设质量阈值;
向量确定模块34,用于若质量分值小于预设质量阈值,则根据质量分值确定待测代码的第一特征向量;
视频查找模块35,用于基于第一特征向量从预设的视频库中查找目标教程,目标教程为视频库中与第一特征向量匹配的视频;
教程推荐模块36,用于向用户推荐目标教程。
作为本申请一实施例,上述评分模块32可以包括:
第一评分单元,用于计算待测代码与预设模板代码的第一相似度,基于第一相似度确定待测代码的编码规范分值;
第二评分单元,基于待测代码的嵌套次数、名称规范以及注释完整度确定待测代码的可读性分值;
第三评分单元,用于基于预设的可维护度量指标对待测代码进行评分,得到待测代码的可维护性分值;
第四评分单元,用于计算待测代码中代码块的重复数量,基于重复数量确定待测代码的重复度分值;
第五评分单元,用于逐行扫描待测代码,得到每行待测代码的可测试性分值,基于每行待测代码的可测试性分值确定待测代码的可测试性分值。
作为本申请一实施例,上述教程推荐装置30还可以包括:
第一确定模块,用于检测待测代码中目标字符的字符数量,以确定待测代码的嵌套次数;
名称检测模块,用于检测待测代码中的变量名是否为预设词组,得到名称检测结果;
第二确定模块,用于基于名称检测结果确定待测代码的名称规范度;
注释检测模块,用于检测待测代码中预设位置是否存在注释,得到注释检测结果;
第三确定模块,用于基于注释检测结果确定待测代码的注释完整度。
作为本申请一实施例,上述第四评分单元可以包括:
划分子单元,用于将待测代码按照预设粒度进行划分,得到至少两个代码块;
计算子单元,用于针对每个代码块,计算代码块分别与各个其它代码块之间的第二相似度,其中,其它代码块为至少两个代码块中除代码块之外的代码块;
计数子单元,用于基于目标相似度对待测代码中的重复代码块进行计数,得到重复数量,目标相似度指的是大于相似度阈值的第二相似度;
分值确定子单元,用于基于重复数量确定待测代码的重复度分值。
作为本申请一实施例,上述视频查找模块35可以包括:
标签确定单元,用于确定视频库中每个视频的教学标签,教学标签用于表示对应视频的教学内容;
第二计算单元,用于基于每个视频的教学标签计算每个视频的第二特征向量;
第三计算单元,用于计算第一特征向量与各个第二特征向量之间的第三相似度;
视频查找单元,用于基于第三相似度从视频库中查找目标教程。
作为本申请一实施例,上述教程推荐装置30还包括:
调整模块,用于若接收到用户对目标教程的评价信息,则根据评价信息调整目标教程的标签。
作为本申请一实施例,上述教程推荐装置30还包括:
上传模块,用于将待测代码、质量分值和/或目标教程上传至区块链中。
应当理解的是,图3示出的教程推荐装置的结构框图中,各单元用于执行图1对应的实施例中的各步骤,而对于图1对应的实施例中的各步骤已在上述实施例中进行详细解释,具体请参阅图1以及图1所对应的实施例中的相关描述,此处不再赘述。
图4是本申请另一实施例提供的一种终端设备的结构框图。如图4所示,该实施例的终端设备40包括:处理器41、存储器42以及存储在上述存储器42中并可在上述处理器41上运行的计算机程序43,例如教程推荐方法的程序。处理器41执行上述计算机程序43时实现上述各个基于代码评分的教程推荐方法各实施例中的步骤,例如图1所示的110至140。或者,上述处理器41执行上述计算机程序43时实现上述图3对应的实施例中各模块的功能,例如,图3所示的模块31至34的功能,具体请参阅图3对应的实施例中的相关描述,此处不赘述。
示例性的,上述计算机程序43可以被分割成一个或多个单元,上述一个或者多个单元被存储在上述存储器42中,并由上述处理器41执行,以完成本申请。上述一个或多个单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述上述计算机程序43在上述终端40中的执行过程。例如,上述计算机程序43可以被分割成获取模块、评分模块、检测模块以及推荐模块,各模块具体功能如上上述。
上述转台设备可包括,但不仅限于,处理器41、存储器42。本领域技术人员可以理解,图4仅仅是终端设备40的示例,并不构成对终端设备40的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件,例如上述转台设备还可以包括输入输出设备、网络接入设备、总线等。
所称处理器41可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
上述存储器42可以是上述终端设备40的内部存储单元,例如终端设备40的硬盘或内存。上述存储器42也可以是上述终端设备40的外部存储设备,例如上述终端设备40上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,上述存储器42还可以既包括上述终端设备40的内部存储单元也包括外部存储设备。上述存储器42用于存储上述计算机程序以及上述转台设备所需的其他程序和数据。上述存储器42还可以用于暂时地存储已经输出或者将要输出的数据。
上述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。
Claims (10)
1.一种基于代码评分的教程推荐方法,其特征在于,所述教程推荐方法包括:
获取待测代码;
对所述待测代码进行评分,得到所述待测代码的质量分值,所述质量分值包括编码规范分值、可读性分值、可维护性分值、重复度分值以及可测试性分值;
检测所述质量分值是否小于预设质量阈值;
若所述质量分值小于所述预设质量阈值,则根据所述质量分值确定所述待测代码的第一特征向量;
基于所述第一特征向量从预设的视频库中查找目标教程,所述目标教程为所述视频库中与所述第一特征向量匹配的视频;
向用户推荐所述目标教程。
2.根据权利要求1所述的教程推荐方法,其特征在于,所述对所述待测代码进行评分,得到所述待测代码的质量分值,包括:
计算所述待测代码与预设模板代码的第一相似度,基于所述第一相似度确定所述待测代码的编码规范分值;
基于所述待测代码的嵌套次数、名称规范以及注释完整度确定所述待测代码的可读性分值;
基于预设的可维护度量指标对所述待测代码进行评分,得到所述待测代码的可维护性分值;
计算所述待测代码中代码块的重复数量,基于所述重复数量确定所述待测代码的重复度分值;
逐行扫描所述待测代码,得到每行所述待测代码的可测试性分值,基于每行所述待测代码的可测试性分值确定所述待测代码的可测试性分值。
3.根据权利要求2所述的教程推荐方法,其特征在于,在所述基于所述待测代码的嵌套次数、名称规范度以及注释完整度确定所述待测代码的可读性分值之前,还包括:
检测所述待测代码中目标字符的字符数量,以确定所述待测代码的嵌套次数;
检测所述待测代码中的变量名是否为预设词组,得到名称检测结果;
基于所述名称检测结果确定所述待测代码的名称规范度;
检测所述待测代码中预设位置是否存在注释,得到注释检测结果;
基于所述注释检测结果确定所述待测代码的注释完整度。
4.根据权利要求2所述的教程推荐方法,其特征在于,所述计算所述待测代码中代码块的重复数量,基于所述重复数量确定所述待测代码的重复度分值,包括:
将所述待测代码按照预设粒度进行划分,得到至少两个代码块;
针对每个代码块,计算所述代码块分别与各个其它代码块之间的第二相似度,其中,所述其它代码块为所述至少两个代码块中除所述代码块之外的代码块;
基于所述目标相似度对所述待测代码中的重复代码块进行计数,得到所述重复数量,所述目标相似度指的是大于相似度阈值的第二相似度;
基于所述重复数量确定所述待测代码的重复度分值。
5.根据权利要求1-4任意一项所述的教程推荐方法,其特征在于,所述基于所述第一特征向量从预设的视频库中查找目标教程,包括:
确定所述视频库中每个视频的教学标签,所述教学标签用于表示对应视频的教学内容;
基于所述每个视频的教学标签计算所述每个视频的第二特征向量;
计算所述第一特征向量与各个所述第二特征向量之间的第三相似度;
基于所述第三相似度从所述视频库中查找所述目标教程。
6.根据权利要求5所述的教程推荐方法,其特征在于,在所述将所述目标教程推荐给用户之后,所述教程推荐方法还包括:
若接收到用户对所述目标教程的评价信息,则根据所述评价信息调整所述目标教程的标签。
7.根据权利要求1所述的教程推荐方法,其特征在于,在所述基于所述第一特征向量从预设的视频库中查找目标教程之后,所述教程推荐方法还包括:
将所述待测代码、所述质量分值和/或所述目标教程上传至区块链中。
8.一种基于代码评分的教程推荐装置,其特征在于,所述教程推荐装置包括:
获取模块,用于获取用户的待测代码;
评分模块,用于对所述待测代码进行评分,得到所述待测代码的质量分值,所述质量分值包括编码规范分值、可读性分值、可维护性分值、重复度分值以及可测试性分值;
检测模块,用于检测所述质量分值是否小于预设质量阈值;
向量确定模块,用于若所述质量分值小于所述预设质量阈值,则根据所述质量分值确定所述待测代码的第一特征向量;
视频查找模块,用于基于所述第一特征向量从预设的视频库中查找目标教程,所述目标教程为所述视频库中与所述第一特征向量匹配的视频;
教程推荐模块,用于向用户推荐所述目标教程。
9.一种终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至7任一项所述方法的步骤。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111049023.8A CN113761444A (zh) | 2021-09-08 | 2021-09-08 | 基于代码评分的教程推荐方法、教程推荐装置及终端设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111049023.8A CN113761444A (zh) | 2021-09-08 | 2021-09-08 | 基于代码评分的教程推荐方法、教程推荐装置及终端设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113761444A true CN113761444A (zh) | 2021-12-07 |
Family
ID=78793798
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111049023.8A Pending CN113761444A (zh) | 2021-09-08 | 2021-09-08 | 基于代码评分的教程推荐方法、教程推荐装置及终端设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113761444A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114090526A (zh) * | 2022-01-19 | 2022-02-25 | 广东省出版集团数字出版有限公司 | 一种云教育资源管理*** |
CN115100007A (zh) * | 2022-08-24 | 2022-09-23 | 可可乐博(深圳)科技有限公司 | 基于人工智能的在线教学管理方法及*** |
CN115268860A (zh) * | 2022-06-21 | 2022-11-01 | 北京浩泰思特科技有限公司 | 一种智能教学诊断方法及*** |
CN117331836A (zh) * | 2023-10-16 | 2024-01-02 | 中教畅享(北京)科技有限公司 | 一种基于代码语法树分析的评测方法 |
-
2021
- 2021-09-08 CN CN202111049023.8A patent/CN113761444A/zh active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114090526A (zh) * | 2022-01-19 | 2022-02-25 | 广东省出版集团数字出版有限公司 | 一种云教育资源管理*** |
CN115268860A (zh) * | 2022-06-21 | 2022-11-01 | 北京浩泰思特科技有限公司 | 一种智能教学诊断方法及*** |
CN115268860B (zh) * | 2022-06-21 | 2023-04-28 | 北京浩泰思特科技有限公司 | 一种智能教学诊断方法及*** |
CN115100007A (zh) * | 2022-08-24 | 2022-09-23 | 可可乐博(深圳)科技有限公司 | 基于人工智能的在线教学管理方法及*** |
CN117331836A (zh) * | 2023-10-16 | 2024-01-02 | 中教畅享(北京)科技有限公司 | 一种基于代码语法树分析的评测方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Gurbuz et al. | Model-based testing for software safety: a systematic mapping study | |
CN113761444A (zh) | 基于代码评分的教程推荐方法、教程推荐装置及终端设备 | |
Dragisic et al. | Results of the ontology alignment evaluation initiative 2014 | |
US9280908B2 (en) | Results of question and answer systems | |
US7685082B1 (en) | System and method for identifying, prioritizing and encapsulating errors in accounting data | |
Dey et al. | Representation of developer expertise in open source software | |
Yang et al. | Aspect-based api review classification: How far can pre-trained transformer model go? | |
US11385988B2 (en) | System and method to improve results of a static code analysis based on the probability of a true error | |
US20220012021A1 (en) | Artificial intelligence-based intelligent programming assistance | |
Saini et al. | Towards queryable and traceable domain models | |
Li et al. | Evaluating dependencies in fact editing for language models: Specificity and implication awareness | |
Yu et al. | Security code review by llms: A deep dive into responses | |
Yin et al. | Multi‐graph learning‐based software defect location | |
Gruner et al. | Cross-domain evaluation of a deep learning-based type inference system | |
US12008341B2 (en) | Systems and methods for generating natural language using language models trained on computer code | |
Seiler et al. | Comparing traceability through information retrieval, commits, interaction logs, and tags | |
Hoq et al. | Detecting ChatGPT-Generated Code in a CS1 Course. | |
Wang et al. | Difftech: Differencing similar technologies from crowd-scale comparison discussions | |
Wang et al. | Multi-type source code defect detection based on textcnn | |
CN112698977A (zh) | 服务器故障定位方法方法、装置、设备及介质 | |
CN112230990A (zh) | 一种基于层级注意力神经网络的程序代码查重方法 | |
Nguyen et al. | GPTSniffer: A CodeBERT-based classifier to detect source code written by ChatGPT | |
Bansal et al. | Literature review of finding duplicate bugs in open source systems | |
Keerthana et al. | A Literature Review on Plagiarism Detection in Computer Programming Assignments | |
Zhang et al. | Research on Defect Location Method of C Language Code Based on Deep Learning |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |