CN104021075A - 用于程序代码的评估方法和装置 - Google Patents

用于程序代码的评估方法和装置 Download PDF

Info

Publication number
CN104021075A
CN104021075A CN201410218876.3A CN201410218876A CN104021075A CN 104021075 A CN104021075 A CN 104021075A CN 201410218876 A CN201410218876 A CN 201410218876A CN 104021075 A CN104021075 A CN 104021075A
Authority
CN
China
Prior art keywords
sample
module
syntax tree
scoring
node
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
Application number
CN201410218876.3A
Other languages
English (en)
Inventor
余鹏
马哲
谭国斌
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Xiaomi Technology Co Ltd
Xiaomi Inc
Original Assignee
Xiaomi Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Xiaomi Inc filed Critical Xiaomi Inc
Priority to CN201410218876.3A priority Critical patent/CN104021075A/zh
Publication of CN104021075A publication Critical patent/CN104021075A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

本发明提供了一种用于程序代码的评估方法,包括:将程序代码转换成语法树;将语法树与预先创建预设的评估样本模型进行对比;输出对比的结果。本发明还提供了一种用于程序代码的评估装置,包括:转换模块,用于将程序代码转换成语法树;对比模块,用于将语法树与预先创建预设的评估样本模型进行对比;输出模块,用于输出对比的结果。本发明采用预先创建的评估样本模型来评估程序代码,从而实现了对程序代码的自动审核。

Description

用于程序代码的评估方法和装置
技术领域
本发明计算机技术领域,具体而言,涉及用于程序代码的评估方法和装置。
背景技术
应用的程序代码是否简洁,将直接影响到该应用加载运行、响应的速度等,所以在应用上线前,一般程序员都会对编写出来的应用程序进行审核,以进行一些必要的修改。现有的办法就是审核人员人工逐行的去核对代码,以检查出可能有问题的地方,再进行相应的修改,这种人工的方式一方面耗时比较长,二则受限于审核人员,可能有些问题无法查出,等等。
发明内容
本发明的目的在于提供用于程序代码的评估方法和装置,以解决上述的问题。
根据本公开实施例的第一方面,提供了一种用于程序代码的评估方法,包括:将程序代码转换成语法树;将语法树与预先创建预设的评估样本模型进行对比;输出对比的结果。
将程序代码转换成语法树可以包括:采用预先根据程序语言定义的词法分析规则对程序代码进行分析,得到多个段落;将各个段落分别作为节点,将各个段落之间的关系作为节点之间的关系,构建成语法树。
本方法还可以包括预先创建评估样本模型的步骤,其可以包括:收集错误记录;从错误记录中提取样例;根据样例对程序的影响程度设置其评分;将样例及其评分加入到评估样本模型中。
样例可以包括以下至少之一:节点套嵌超过第一设定值;标签没有闭合;if嵌套超过第二设定值;数组结尾处有逗号;存在调试信息;存在错误;存在设定的关键字;模板变量没有转义;css代码冗余;css代码多处引用同一张图片。
将语法树与预先创建预设的评估样本模型进行对比可以包括:遍历语法树;将当前的节点在评估样本模型中检索;如果检索到与当前的节点相一致的样例,则获取检索到的样例的评分。
输出对比的结果可以包括:输出所有获取评分的统计,或者输出各个检索到的样例及其评分。
根据本公开实施例的第二方面,提供了一种用于程序代码的评估装置,包括:转换模块,用于将程序代码转换成语法树;对比模块,用于将语法树与预先创建预设的评估样本模型进行对比;输出模块,用于输出对比的结果。
转换模块可以包括:分析模块,用于采用预先根据程序语言定义的词法分析规则对程序代码进行分析,得到多个段落;构建模块,用于将各个段落分别作为节点,将各个段落之间的关系作为节点之间的关系,构建成语法树。
本装置还可以包括创建模块,其可以包括:收集模块,用于收集错误记录;提取模块,用于从错误记录中提取样例;评分模块,用于根据样例对程序的影响程度设置其评分;加入模块,用于将样例及其评分加入到评估样本模型中。
对比模块可以包括:遍历模块,用于遍历语法树;检索模块,用于将当前的节点在评估样本模型中检索;获取模块,用于在检索到与当前的节点相一致的样例时,则获取检索到的样例的评分。
本发明采用预先创建的评估样本模型来评估程序代码,从而实现了对程序代码的自动审核。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
图1是根据一示例性实施例示出的一种用于程序代码的评估方法的流程图;
图2是根据另一示例性实施例示出的一种用于程序代码的评估方法的流程图;
图3是根据一示例性实施例示出的一种用于程序代码的评估装置的示意图;
图4是根据另一示例性实施例示出的一种用于程序代码的评估装置的示意图。
具体实施方式
下面通过具体的实施例子并结合附图对本发明做进一步的详细描述。
图1是根据一示例性实施例示出的一种用于程序代码的评估方法的流程图,该方法包括:
在步骤S10中,将程序代码转换成语法树;
在步骤S20中,将语法树与预先创建预设的评估样本模型进行对比;
在步骤S30中,输出对比的结果。
本方法采用预先创建的评估样本模型来评估程序代码,从而实现了对程序代码的自动审核。
图2是根据另一示例性实施例示出的一种用于程序代码的评估方法的流程图。如图2所示,步骤S10包括:
在步骤S110中,采用预先根据程序语言定义的词法分析规则对程序代码进行分析,得到多个段落,例如,按照html,javscript,css不同语法定义不同的词法分析规则(如以文件为单位,按照先特殊标记,特殊关键字再到一般文本,字符串)对待评估代码进行分段;
在步骤S120中,将各个段落分别作为节点,将各个段落之间的关系作为节点之间的关系,构建成语法树。
本实施例中,利用词法分析规则和树数据结构将程序代码转换成语法树,从而可以对程序代码高效地进行计算机数据处理,实现了程序代码评估的自动化。
如图2所示,方法还包括预先创建评估样本模型的步骤S40,其包括:
在步骤S410中,收集错误记录;
在步骤S420中,从错误记录中提取样例;
在步骤S430中,根据样例对程序的影响程度设置其评分,具体地,可以依据经验以错误样例对整个程序的影响程序来确定分值,如节点套嵌过多为-1分,代码中有调试信息(依据信息的多少确定一直值段,如-1到-3),等等;
在步骤S440中,将样例及其评分加入到评估样本模型中。
本实施例采用历史的错误记录来提取样本,利用样本构建评估样本模型,因此能够实现计算机来取代人的经验。
优选地,样例包括以下至少之一:节点套嵌超过第一设定值;标签没有闭合;if嵌套超过第二设定值;数组结尾处有逗号;存在调试信息;存在错误;存在设定的关键字;模板变量没有转义;css代码冗余;css代码多处引用同一张图片。
例如,这些样例可以包括:①节点套嵌过多(比如在html中<divid=“id1”><divid=’id2’><divid=”id3”><divid=”id4”><divid=”id5”></div></div></div></div></div>的5级节点嵌套)、②标签没有闭合(如只有<div>,没有</div>)、③if嵌套太多(如:if{if{if{if()}}})、④数组结尾处有逗号[1,2,3,],⑤代码中有调试信息(如:console.log(‘here’);alert(‘here’)),⑥代码中有错误(比如img标签src为空,这将触发多次请求,使网站流量大增),⑦代码中有不推荐的关键字(如css中有express,可能导致xss漏洞引起安全问题),⑧模板变量没有转义(可能引起xss漏洞引起安全问题)、⑨css代码冗余,没有优化(如:marign-left:20px;margin-right:20px;margin-top:20px;margin-bottom:20px,可以缩减为一句:margin:20px;)、⑩css代码多处引用一张图片等等。
发明人对大量程序代码错误进行分析总结,总结出上述的样例典型,能高效地评估程序代码的错误。
如图2所示,步骤S20包括:
在步骤S210中,遍历语法树;
在步骤S220中,将当前的节点在评估样本模型中检索;
在步骤S230中,如果检索到与当前的节点相一致的样例,则获取检索到的样例的评分。
本实施例利用树数据结构进行检索对比,实现了高效率地检索比对。
输出对比的结果可以包括:输出所有获取评分的统计,或者输出各个检索到的样例及其评分。本实施例提供了多种输出方式,方便用户更直观地观察程序代码的编写质量,以及方便程序员迅速地定位错误。
图3是根据一示例性实施例示出的一种用于程序代码的评估装置的示意图,该装置包括:
转换模块10,用于将程序代码转换成语法树;
对比模块20,用于将语法树与预先创建预设的评估样本模型进行对比;
输出模块30,用于输出对比的结果。
本装置采用预先创建的评估样本模型来评估程序代码,从而实现了对程序代码的自动审核。
图4是根据另一示例性实施例示出的一种用于程序代码的评估装置的示意图。如图4所示,转换模块10包括:
分析模块110,用于采用预先根据程序语言定义的词法分析规则对程序代码进行分析,得到多个段落;
构建模块120,用于根据各个段落之间的关系将各个段落分别作为节点构建成语法树。
本实施例中,利用词法分析规则和树数据结构将程序代码转换成语法树,从而可以对程序代码高效地进行计算机数据处理,实现了程序代码评估的自动化。
如图4所示,本装置还包括创建模块40,其包括:
收集模块410,用于收集错误记录;
提取模块420,用于从错误记录中提取样例;
评分模块430,用于根据样例对程序的影响程度设置其评分;
加入模块440,用于将样例及其评分加入到评估样本模型中。
本实施例采用历史的错误记录来提取样本,利用样本构建评估样本模型,因此能够实现计算机来取代人的经验。
优选地,样例包括以下至少之一:节点套嵌超过第一设定值;标签没有闭合;if嵌套超过第二设定值;数组结尾处有逗号;存在调试信息;存在错误;存在设定的关键字;模板变量没有转义;css代码冗余;css代码多处引用同一张图片。
发明人对大量程序代码错误进行分析总结,总结出上述的样例典型,能高效地评估程序代码的错误。
如图4所示,对比模块包括:
遍历模块210,用于遍历语法树;
检索模块220,用于将当前的节点在评估样本模型中检索;
获取模块230,用于在检索到与当前的节点相一致的样例时,则获取检索到的样例的评分。
本实施例利用树数据结构进行检索对比,实现了高效率地检索比对。
输出模块可以输出所有获取评分的统计,或者输出各个检索到的样例及其评分。本实施例提供了多种输出方式,方便用户更直观地观察程序代码的编写质量,以及方便程序员迅速地定位错误。
从以上的描述可以看出,本发明实现了一种自动化审核应用的程序代码,节省了人工成本,且可以相对高效和准确地对应用程序进行检测,并可以输出综合的评价结果,以便程序员可以对该应用程序有一个综合直观的认识,另一方面,还可以将可能存在问题的代码段整合输出给用户,以便用户可以有针对的对应用进行修改。能够高效地对应用程序进行审查。
本领域普通技术人员可以理解上述实施例方法中的全部或部分处理是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中。
本领域普通技术人员可以理解上述方法实施例中的全部或部分处理是可以通过程序指令相关的硬件完成,前述的程序可以存储于一种计算机可读取存储介质中,该程序在执行时,执行包括前述方法实施例的步骤,而前述的存储介质包括:ROM、RAM、磁碟或光盘等各种可以存储程序代码的介质。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种用于程序代码的评估方法,其特征在于,包括:
将程序代码转换成语法树;
将所述语法树与预先创建预设的评估样本模型进行对比;
输出对比的结果。
2.根据权利要求1所述的方法,其特征在于,将程序代码转换成语法树包括:
采用预先根据程序语言定义的词法分析规则对所述程序代码进行分析,得到多个段落;
将所述各个段落分别作为节点,将各个所述段落之间的关系作为所述节点之间的关系,构建成所述语法树。
3.根据权利要求2所述的方法,其特征在于,还包括预先创建所述评估样本模型的步骤,其包括:
收集错误记录;
从所述错误记录中提取样例;
根据所述样例对程序的影响程度设置其评分;
将所述样例及其评分加入到所述评估样本模型中。
4.根据权利要求3所述的方法,其特征在于,所述样例包括以下至少之一:
节点套嵌超过第一设定值;
标签没有闭合;
if嵌套超过第二设定值;
数组结尾处有逗号;
存在调试信息;
存在错误;
存在设定的关键字;
模板变量没有转义;
css代码冗余;
css代码多处引用同一张图片。
5.根据权利要求3所述的方法,其特征在于,将所述语法树与预先创建预设的评估样本模型进行对比包括:
遍历所述语法树;
将当前的所述节点在所述评估样本模型中检索;
如果检索到与当前的所述节点相一致的所述样例,则获取检索到的所述样例的所述评分。
6.根据权利要求5所述的方法,其特征在于,输出对比的结果包括:
输出所有所述获取评分的统计,或者输出各个所述检索到的样例及其评分。
7.一种用于程序代码的评估装置,其特征在于,包括:
转换模块,用于将程序代码转换成语法树;
对比模块,用于将所述语法树与预先创建预设的评估样本模型进行对比;
输出模块,用于输出对比的结果。
8.根据权利要求7所述的装置,其特征在于,所述转换模块包括:
分析模块,用于采用预先根据程序语言定义的词法分析规则对所述程序代码进行分析,得到多个段落;
构建模块,用于将所述各个段落分别作为节点,将各个所述段落之间的关系作为所述节点之间的关系,构建成所述语法树。
9.根据权利要求8所述的装置,其特征在于,还包括创建模块,其包括:
收集模块,用于收集错误记录;
提取模块,用于从所述错误记录中提取样例;
评分模块,用于根据所述样例对程序的影响程度设置其评分;
加入模块,用于将所述样例及其评分加入到所述评估样本模型中。
10.根据权利要求9所述的装置,其特征在于,所述对比模块包括:
遍历模块,用于遍历所述语法树;
检索模块,用于将当前的所述节点在所述评估样本模型中检索;
获取模块,用于在检索到与当前的所述节点相一致的所述样例时,则获取检索到的所述样例的所述评分。
CN201410218876.3A 2014-05-22 2014-05-22 用于程序代码的评估方法和装置 Pending CN104021075A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410218876.3A CN104021075A (zh) 2014-05-22 2014-05-22 用于程序代码的评估方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410218876.3A CN104021075A (zh) 2014-05-22 2014-05-22 用于程序代码的评估方法和装置

Publications (1)

Publication Number Publication Date
CN104021075A true CN104021075A (zh) 2014-09-03

Family

ID=51437840

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410218876.3A Pending CN104021075A (zh) 2014-05-22 2014-05-22 用于程序代码的评估方法和装置

Country Status (1)

Country Link
CN (1) CN104021075A (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107193805A (zh) * 2017-06-06 2017-09-22 北京百度网讯科技有限公司 基于人工智能的文章价值评估方法、装置及存储介质
CN107357733A (zh) * 2017-07-17 2017-11-17 万帮充电设备有限公司 提高代码质量的方法及装置
CN108170661A (zh) * 2016-12-07 2018-06-15 北京京东尚科信息技术有限公司 一种规则文本的管理方法及***
CN109240903A (zh) * 2017-06-15 2019-01-18 北京京东尚科信息技术有限公司 一种自动评估的方法和装置
CN111666216A (zh) * 2020-06-05 2020-09-15 中国银行股份有限公司 一种智能合约分析方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5933822A (en) * 1997-07-22 1999-08-03 Microsoft Corporation Apparatus and methods for an information retrieval system that employs natural language processing of search results to improve overall precision
CN101261604A (zh) * 2008-04-09 2008-09-10 中兴通讯股份有限公司 一种软件质量评价装置及软件质量评价的定量分析方法
CN101894236A (zh) * 2010-07-28 2010-11-24 北京华夏信安科技有限公司 基于摘要语法树和语义匹配的软件同源性检测方法及装置
CN102023921A (zh) * 2010-12-17 2011-04-20 江苏大学 Sql程序自动评分方法及装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5933822A (en) * 1997-07-22 1999-08-03 Microsoft Corporation Apparatus and methods for an information retrieval system that employs natural language processing of search results to improve overall precision
CN101261604A (zh) * 2008-04-09 2008-09-10 中兴通讯股份有限公司 一种软件质量评价装置及软件质量评价的定量分析方法
CN101894236A (zh) * 2010-07-28 2010-11-24 北京华夏信安科技有限公司 基于摘要语法树和语义匹配的软件同源性检测方法及装置
CN102023921A (zh) * 2010-12-17 2011-04-20 江苏大学 Sql程序自动评分方法及装置

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108170661A (zh) * 2016-12-07 2018-06-15 北京京东尚科信息技术有限公司 一种规则文本的管理方法及***
CN107193805A (zh) * 2017-06-06 2017-09-22 北京百度网讯科技有限公司 基于人工智能的文章价值评估方法、装置及存储介质
US11481572B2 (en) 2017-06-06 2022-10-25 Beijing Baidu Netcom Science And Technology Co., Ltd. Method and apparatus for evaluating article value based on artificial intelligence, and storage medium
CN109240903A (zh) * 2017-06-15 2019-01-18 北京京东尚科信息技术有限公司 一种自动评估的方法和装置
CN107357733A (zh) * 2017-07-17 2017-11-17 万帮充电设备有限公司 提高代码质量的方法及装置
CN111666216A (zh) * 2020-06-05 2020-09-15 中国银行股份有限公司 一种智能合约分析方法及装置
CN111666216B (zh) * 2020-06-05 2024-01-23 中国银行股份有限公司 一种智能合约分析方法及装置

Similar Documents

Publication Publication Date Title
US11568134B2 (en) Systems and methods for diagnosing problems from error logs using natural language processing
KR102443654B1 (ko) 소스 코드에서 작동하는 소프트웨어 도구를 위한 기계 학습 모델 자동 생성
CN106776515B (zh) 数据处理的方法及装置
CN102804147B (zh) 执行abap源代码的代码检查的代码检查执行***
CN102467450A (zh) 程序试验装置以及程序试验方法
CN104021075A (zh) 用于程序代码的评估方法和装置
CN105718370A (zh) 一种Android设备测试方法及测试装置
US9417991B2 (en) Translation verification testing
CN111176650B (zh) 解析器生成方法、检索方法、服务器及存储介质
CN113157565B (zh) 一种基于种子用例突变的反馈式js引擎模糊测试方法及装置
CN113760891B (zh) 一种数据表的生成方法、装置、设备和存储介质
CN103914379A (zh) 故障自动注入与故障检测的方法及其***
US10782942B1 (en) Rapid onboarding of data from diverse data sources into standardized objects with parser and unit test generation
CN103617122B (zh) 一种源代码的比对方法
CN116126443A (zh) 一种电子实验记录及报告可动态配置方法及***
CN104750484A (zh) 一种基于最大熵模型的代码摘要生成方法
CN113609008A (zh) 测试结果分析方法、装置和电子设备
CN113360603A (zh) 一种合同相似性及合规性检测方法及装置
EP3422200A1 (en) Method and system for handling one or more issues in a computing environment
EP3447655A1 (en) A revision system and method for revising translated texts with reduction of false positives
CN115454702A (zh) 日志故障分析方法、装置、存储介质及电子设备
JP6281239B2 (ja) プログラム開発サポート装置および方法
JP2018005554A (ja) 故障木作成装置
KR101684136B1 (ko) 시맨틱 처리 및 클러스터링을 사용한 운영 및 유지 가이드 라인
Corley et al. Modeling changeset topics

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication

Application publication date: 20140903

RJ01 Rejection of invention patent application after publication