CN110688307B - JavaScript代码检测方法、装置、设备和存储介质 - Google Patents

JavaScript代码检测方法、装置、设备和存储介质 Download PDF

Info

Publication number
CN110688307B
CN110688307B CN201910846579.6A CN201910846579A CN110688307B CN 110688307 B CN110688307 B CN 110688307B CN 201910846579 A CN201910846579 A CN 201910846579A CN 110688307 B CN110688307 B CN 110688307B
Authority
CN
China
Prior art keywords
statement
javascript code
code
variable
javascript
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.)
Active
Application number
CN201910846579.6A
Other languages
English (en)
Other versions
CN110688307A (zh
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.)
Guoxin Jinhong Information Consulting Co ltd
Shenzhen Lian Intellectual Property Service Center
Original Assignee
Guoxin Jinhong Information Consulting Co ltd
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 Guoxin Jinhong Information Consulting Co ltd filed Critical Guoxin Jinhong Information Consulting Co ltd
Priority to CN201910846579.6A priority Critical patent/CN110688307B/zh
Publication of CN110688307A publication Critical patent/CN110688307A/zh
Application granted granted Critical
Publication of CN110688307B publication Critical patent/CN110688307B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本申请涉及代码质量工具领域,提供了一种JavaScript代码检测方法、装置、设备和存储介质,方法包括:获取JavaScript代码,并构建JavaScript代码对应的抽象语法树;通过自动化脚本查找JavaScript代码中的检查规则;遍历抽象语法树中的if语句,得到JavaScript代码的if语句;分别对JavaScript代码中每一个if语句中的变量设置标识信息;使用正则表达式以及检查规则对所述JavaScript代码中每一行if语句中的变量进行对比检测,以得到检测结果;若检测结果为失败,则返回空集并发出异常通知。以解决JavaScript代码中存在多个if情况下,异常变量无法解析的问题。

Description

JavaScript代码检测方法、装置、设备和存储介质
技术领域
本申请涉及代码质量工具领域,尤其涉及一种JavaScript代码检测方法、装置、设备和存储介质。
背景技术
随着互联网技术的飞速发展,诸如手机、平板电脑、个人电脑等终端日益普及,各种依赖于终端运行的***也应运而生,人们不仅在工作和生活中越来越多地依赖于各种***,而且对***可以提供的功能提出越来越高的要求。伴随着***的功能的提高与加强,***的代码的复杂程度也随之增加,由此导致***的稳定性和可靠性下降,使得***在运行过程中可能出现各种异常状态。为了跟踪和查找***发生异常的确切位置,通常需要在***中获取异常信息,根据异常信息在***中定位发生异常的变量,以便基于代码实现对异常的变量。
目前JavaScript解析引擎机制,在if语句中存在多个or的情况下,若前面的判断语句已满足,那解析引擎就不会继续解析后面的条件语句。相关技术中,在根据异常信息定位发生异常的变量时,需要获取***在运行中的运行日志,并利用日志分析工具对运行日志进行分析,在运行日志中定位发生异常的变量。在获取***的运行日志时,需要获取可能发生异常的时间段内产生的全部运行日志,由于***在运行过程中产生的运行日志的数据量很大,导致在对运行日志进行分析时产生了大量的工作量,且不能实时定位发生异常的变量,智能性较低。
发明内容
本申请提供了一种通过封装的页面开发功能的方法,能够解决现有技术中页面开发效率的过低、无法对版本做快熟迭代的问题。
第一方面,本申请提供一种JavaScript代码检测方法,包括:
获取JavaScript代码,并构建所述JavaScript代码对应的抽象语法树。所述抽象语法树是通过语法分析器创建。所述语法分析器是指编译器或解释器的组件,所述语法分析器用于语法检查,并根据所述JavaScript代码中的变量来构建数据结构。
通过自动化脚本查找JavaScript代码中的检查规则。所述检查规则是指通过所述变量的适用场景、前提条件、规范种类以及判断标准进行生成用于检测if语句中异常变量的规则。
通过遍历所述抽象语法树中的if语句,得到所述JavaScript代码的if语句。
分别所述JavaScript代码中每一个if语句中的变量设置标识信息。
使用正则表达式以及所述检查规则对所述JavaScript代码中每一行if语句中的变量进行对比检测,以得到检测结果。
若所述检测结果为成功,则返回一个数组并更新所述正则表达式对象的属性和所述正则表达式对象。
或者,若所述检测结果为失败,则返回空集并发出异常通知。
在一些可能的设计中,所述通过遍历所述抽象语法树中的if语句,得到所述JavaScript代码的if语句,包括:
循环遍历所述抽象语法树的所有对象,若通过Object.name判断与if字符串相等,并且匹配数组中包含了if,则确定所述JavaScript代码中包含if语句。所述数组用于存放所述JavaScript代码的状态。所述状态包括代码的属性。
查找所述JavaScript代码中if语句中是否存在变量,若查找到所述JavaScript代码中if语句中存在变量,则判断所述if语句中包含变量,并标识所述if语句。
在一些可能的设计中,所述变量标识信息包括以下至少一项:JavaScript的探测标记变量赋值语句所属函数的函数名、所述JavaScript代码中的探测标记变量赋值语句的行号、所述JavaScript代码中代码段的探测标记变量赋值语句所属源文件的文件名。
在一些可能的设计中,所述异常通知是指按照固定格式将代码行号、异常变量、所述异常信息及异常标志组合生成的通知。
在一些可能的设计中,所述异常标志是指一个用于检测代码异常的32位二进制数,所述二进制数的每一位代表传每一种代码运行的异常状态。
对比检测执行完后,返回一个32位的2进制数。
若第i位是1,则确定第i+1个功能的所述代码运行正常。
若第i位是0,则确定第i+1个功能的所述代码运行存在异常。所述i是大于等于0且小于32的整数。
在一些可能的设计中,所述规范种类至少包括:命名规范、声明规范、注释规范、常量规范、bean定义规范、事务规范、脚本规范、日志规范、异常处理规范、Junit规范、错误类规范、警告类规范及提示类规范中的一项。
在一些可能的设计中,所述返回空集之后,所述方法还包括:
发出指示信息;所述指示信息用于指示所述JavaScript代码中的每个if语句的检测结果。。
第二方面,本申请提供一种用于检测JavaScript代码的装置,具有实现对应于上述第一方面提供的JavaScript代码检测的方法的功能。所述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。硬件或软件包括一个或多个与上述功能相对应的模块,所述模块可以是软件和/或硬件。
所述用于检测JavaScript代码的装置包括:
输入输出模块,用于获取JavaScript代码;
处理模块,用于构建所述JavaScript代码对应的抽象语法树。所述抽象语法树是通过语法分析器创建。所述语法分析器是指编译器或解释器的组件,所述语法分析器用于语法检查,并根据所述JavaScript代码中的变量来构建数据结构。通过自动化脚本查找JavaScript代码中的检查规则。所述检查规则是指通过所述变量的适用场景、前提条件、规范种类以及判断标准进行生成用于检测if语句中异常变量的规则。通过遍历所述抽象语法树中的if语句,得到所述JavaScript代码的if语句。分别所述JavaScript代码中每一个if语句中的变量设置标识信息。使用正则表达式以及所述检查规则对所述JavaScript代码中每一行if语句中的变量进行对比检测,以得到检测结果;
还用于若所述检测结果为成功,则通过所述输入输出模块返回一个数组并更新所述正则表达式对象的属性和所述正则表达式对象;
或者,若所述检测结果为失败,则通过所述输入输出模块则返回空集并发出异常通知。
在一些可能的设计中,所述处理模块还用于:
循环遍历所述抽象语法树的所有对象,若通过Object.name判断与if字符串相等,并且匹配数组中包含了if,则确定所述JavaScript代码中包含if语句。所述数组用于存放所述JavaScript代码的状态。所述状态包括代码的属性。
查找所述JavaScript代码中if语句中是否存在变量,若查找到所述JavaScript代码中if语句中存在变量,则判断所述if语句中包含变量,并标识所述if语句。
在一些可能的设计中,所述变量标识信息包括以下至少一项:JavaScript的探测标记变量赋值语句所属函数的函数名、所述JavaScript代码中的探测标记变量赋值语句的行号、所述JavaScript代码中代码段的探测标记变量赋值语句所属源文件的文件名。
在一些可能的设计中,所述异常通知是指按照固定格式将代码行号、异常变量、所述异常信息及异常标志组合生成的通知。
在一些可能的设计中,所述异常标志是指一个用于检测代码异常的32位二进制数,所述二进制数的每一位代表传每一种代码运行的异常状态。
所述处理模块还用于:
对比检测执行完后,返回一个32位的2进制数。
若第i位是1,则确定第i+1个功能的所述代码运行正常。
若第i位是0,则确定第i+1个功能的所述代码运行存在异常。所述i是大于等于0且小于32的整数。
在一些可能的设计中,所述规范种类至少包括:命名规范、声明规范、注释规范、常量规范、bean定义规范、事务规范、脚本规范、日志规范、异常处理规范、Junit规范中、错误类规范、警告类规范及提示类规范的一项。
在一些可能的设计中,所述处理模块还用于
发出指示信息;所述指示信息用于指示所述JavaScript代码中的每个if语句的检测结果。
本申请又一方面提供了计算机设备,其包括至少一个连接的处理器、存储器、输入输出单元,其中,所述存储器用于存储程序代码,所述处理器用于调用所述存储器中的程序代码来执行上述各方面所述的方法。
本申请又一方面提供了一种计算机存储介质,其包括指令,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。
在现有机制中,JavaScript解析引擎机制,在if语句中存在多个or的情况下,若前面的判断语句已满足,那解析引擎就不会继续解析后面的条件语句。本发明提供一种检测if代码异常时变量信息的方法。所述方法指的是通过遍历抽象语法树,找出if语句中的异常的变量,并标识if语句中的变量,若通过正则表达式以及检查规则判断标识的变量存在异常,则发出异常通知给相关的开发人员。以解决JavaScript代码中if语句变量未定义的问题,并对开发人员进行报错提示,保证代码的健壮性。
附图说明
图1为本申请实施例中JavaScript代码检测的方法的流程示意图;
图2为本申请实施例中用于检测JavaScript代码的装置的结构示意图;
图3为本申请实施例中计算机设备的结构示意图。
本申请目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或模块的过程、方法、***、产品或设备不必限于清楚地列出的那些步骤或模块,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或模块,本申请中所出现的模块的划分,仅仅是一种逻辑上的划分,实际应用中实现时可以有另外的划分方式,例如多个模块可以结合成或集成在另一个***中,或一些特征可以忽略,或不执行。
本申请提供一种JavaScript代码检测方法、装置、设备和存储介质,可用于JavaScript代码中检测if语句的异常变量。
为解决上述技术问题,本申请主要提供以下技术方案:
本申请提供一种检测if代码异常时变量信息的方法。所述方法指的是获取JavaScript代码,并构建JavaScript代码对应的抽象语法树;通过自动化脚本查找JavaScript代码中的检查规则;遍历抽象语法树中的if语句,得到JavaScript代码的if语句;分别对JavaScript代码中每一个if语句中的变量设置标识信息;使用正则表达式以及检查规则对所述JavaScript代码中每一行if语句中的变量进行对比检测,以得到检测结果;若检测结果为失败,则返回空集并发出异常通知。
请参照图1,以下对本申请提供一种JavaScript代码检测的方法进行举例说明,所述方法包括:
101、获取JavaScript代码,并构建所述JavaScript代码对应的抽象语法树。所述JavaScript是一种直译式脚本语言,是一种动态、基于原型的语言,并内置支持类型。它的解释器被称为JavaScript引擎,是浏览器的组成部分,所述JavaScript是用于客户端的脚本语言,并在超文本标记语言(Hyper Text Markup Language,HTML)网页上使用,用来给HTML网页增加动态功能。由ECMAScript、文档对象模型以及浏览器对象模型组成。所述ECMAScript描述了所述JavaScript语法和基本对象。所述文档对象模型描述处理网页内容的方法和接口。所述浏览器对象模型描述与浏览器进行交互的方法和接口。所述JavaScript用于包括嵌入动态文本于HTML页面、对浏览器事件做出响应、读写HTML元素、在数据被提交到服务器之前验证数据、检测访客的浏览器信息、控制Cookies以及基于Node.js技术进行服务器端编程。所述Cookies是在HTTP协议下,服务器或脚本可以维护客户工作站上信息的一种方式。Cookies是由Web服务器保存在用户浏览器上的小文本文件,它可以包含有关用户的信息。无论何时用户链接到服务器,Web站点都可以访问Cookie信息。
例如,Cookie是当访问某网站时,网站存储在你机器上的一个小文本文件,所述Cookie记录了你的用户ID,密码、浏览过的网页、停留的时间等信息,当再次访问网站时,网站通过读取Cookie,得知你的相关信息,就可以做出相应的动作,如在页面显示欢迎你的标语,或者让你不用输入ID、密码就直接登录等。可以在IE的“工具/Internet选项”的“常规”选项卡中,选择“设置/查看文件”,查看所有保存到计算机里的Cookie。这些文件通常是以user@domain格式命名的,user是你的本地用户名。
所述抽象语法树是通过语法分析器创建。所述语法分析器是指编译器或解释器的组件,所述语法分析器用于语法检查,并根据所述JavaScript代码中的变量来构建数据结构。所述数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。所述抽象语法树(Abstract Syntax Tree,AST),或简称语法树(Syntax tree),是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。
抽象语法树作为程序的一种中间表示形式,在程序分析等诸多领域有广泛的应用。利用抽象语法树可以方便地实现多种源程序处理工具,比如源程序浏览器、智能编辑器以及语言翻译器。通过所述抽象语法树可以分析代码。
102、通过自动化脚本查找JavaScript代码中的检查规则。
所述检查规则是指通过所述变量的适用场景、前提条件、规范种类以及判断标准进行生成用于检测if语句中异常变量的规则。
所述检查规则是指用于检测if语句中异常变量的规则。
通过遍历所述抽象语法树中的if语句,得到所述JavaScript代码的if语句。
通过深度优先方法遍历抽象语法树。以给定G的初态是所有顶点均未曾访问过。在G中任选一顶点v为初始出发点为例,则所述深度优先遍历可定义如下:首先访问出发点v,并将其标记为已访问过;然后依次从v出发搜索v的每个邻接点w。若w未曾访问过,则以w为新的出发点继续进行深度优先遍历,直至图中所有和源点v有路径相通的顶点均已被访问为止。若此时图中仍有未访问的顶点,则另选一个尚未访问的顶点作为新的源点重复上述过程,直至图中所有顶点均已被访问为止。
104、分别所述JavaScript代码中每一个if语句中的变量设置标识信息。
所述变量至少包括全局变量或者局部变量。所述局部变量(Local Variable)是指函数内部的变量,它的作用域仅限于函数内部,离开该函数后就是无效的,再使用就会报错。全局变量(Global Variable)是指在所有函数外部定义的变量,它的作用域默认是整个程序,也就是所有的源文件。所述源文件是指用存储汇编语言或高级语言所编写的代码文件。
105、使用正则表达式以及所述检查规则对所述JavaScript代码中每一行if语句中的变量进行对比检测,以得到检测结果。
所述正则表达式是指规则表达式(Regular Expression、regexp),用于检索和替换符合规则的文本。正则表达式是指字符串操作的一种逻辑公式,用事先定义好的一些特定字符以及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。通过正则表达式可以达到以下目的:
1.给定的字符串是否符合正则表达式的过滤逻辑。
2.可以通过正则表达式,从字符串中获取我们想要的特定部分。
106、若所述检测结果为成功,则返回一个数组并更新所述正则表达式对象的属性和所述正则表达式对象。
或者,若所述检测结果为失败,则返回空集(NULL)并发出异常通知。
正则表达式是对字符串和特殊字符操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。
以分析数组为例,定义结构是[下标变量名]格式,当所述下标变量名]标变量在使用之前未做值范围判断。根据检查规则,[下标变量名]满足以下格式:
[由字母或下划线开头第二位开始由字母、下划线、数字组成)]
例如扫描到vEveryKom[index]代码语句,根据[下标变量名]的格式以及通过正则表达式去所,index这个字符串满足“由字母或下划线开头第二位开始由字母、下划线、数字等组成”的词法规则,并也符合其后面是]符号的规则,因此分割出来的下标变量为index。
结束对比检测以后,会将变量的异常信息保存到数据库并汇总,用监控日志呈现汇总成的文件信息。所记录变量的异常信息至少包括:检查路径、待检代码名称、出错行数以及错误描述中的至少一种。通过可视化图表统计和展示监控日志的信息。所述可视化图表至少包括条形图、直方图、折线图和饼图。所述可视化图表通过选择可视化图表类型进行选择,可以保存展示任意一项或者多项可视化图表。新增了整体的统计报表功能,更加直观的反馈JavaScript代码中容易出现的变量异常问题。
上述实施方式中,通过遍历抽象语法树,找出if语句中的异常的变量,并标识if语句中的变量,若通过正则表达式以及检查规则判断标识的变量存在异常,则发出异常通知给相关的开发人员。以解决JavaScript代码中if语句变量未定义的问题,并对开发人员进行报错提示,保证代码的健壮性。所述健壮性是指软件对于规范要求以外的输入情况的处理能力。健壮的***具有对于规范要求以外的输入能够判断出这个输入不符合规范要求,并能有合理的处理方式。
一些实施方式中,所述通过遍历所述抽象语法树中的if语句,得到所述JavaScript代码的if语句包括:
循环遍历所述抽象语法树的所有对象,若通过Object.name判断与if字符串相等,并且匹配数组中包含了if,则确定所述JavaScript代码中包含if语句。所述数组用于存放所述JavaScript代码的状态。所述状态包括代码的属性。
查找所述JavaScript代码中if语句中是否存在变量,若查找到所述JavaScript代码中if语句中存在变量,则判断所述if语句中包含变量,并标识所述if语句。
上述实施方式中,通过所述方法可以查找JavaScript代码中的if语句,并对包含if语句的代码进行标识。
一些实施方式中,所述变量标识信息包括以下至少一项:JavaScript的探测标记变量赋值语句所属函数的函数名、所述JavaScript代码中的探测标记变量赋值语句的行号、所述JavaScript代码中代码段的探测标记变量赋值语句所属源文件的文件名。
上述实施方式中,通过标识信息可以更好的发现异常的变量,例如表示为源程序文件中的第101行的sinx函数x变量存在异常。又例如检测到代码行号110行有一个A变量存在未定义的问题,该变量标志信息为32768,若采用固定格式为错误X标志信息-第X行代码行号中存在变量X存在X异常信息,则所述异常信息提醒为错误32768-第110行中的A变量存在未定义的问题。
一些实施方式中,所述异常通知是指按照固定格式将代码行号、异常变量、所述异常信息及异常标志组合生成的通知。
上述实施方式中,当确定异常代码后,可以基于异常代码、异常信息及异常数据生成异常通知,以便基于异常通知对开发人员进行通知。
例如检测到代码行号555行有x、y以及z三个变量分别存在变量未定义,变量重复定义以及全局域中使用局部变量的问题,所述变量标志信息分别为32768,12668以及654,若采用固定格式为错误XX标志信息-第XX行代码行号中存在变量XX存在XX异常信息,则所述异常信息提醒为错误32768-第555行中的x变量存在未定义的问题。
当x变量异常处理完毕后,再次执行检测,则所述异常信息提醒为错误12668-第555行中的y变量存在变量重复定义的问题。
当x变量与y变量的异常处理完毕以后,则所述异常信息提醒为错误654-第555行中的z变量存在全局域中使用局部变量的问题。
一些实施方式中,所述异常标志是指一个用于检测代码异常的32位二进制数,所述二进制数的每一位代表传每一种代码运行的异常状态。
对比检测执行完后,返回一个32位的2进制数。
若第i位是1,则确定第i+1个功能的所述代码运行正常。
若第i位是0,则确定第i+1个功能的所述代码运行存在异常。所述i是大于等于0且小于32的整数。
上述实施方式中,以变量类型定义错误为例,所述2进制数的第0位代表变量类型定义错误。执行完整个流程后,返回一个32位的2进制数来检测各个功能的执行状态,若第0位是1,则变量类型定义正确,若第0位是0,则变量类型定义错误,通过此方法判断变量类型定义是否存在问题。
一些实施方式中,所述规范种类至少包括:命名规范、声明规范、注释规范、常量规范、bean定义规范、事务规范、脚本规范、日志规范、异常处理规范、Junit规范、错误类规范、警告类规范及提示类规范中的一项。
上述实施方式中,通过以上规范,建立了变量的检查规则。例如变量重复定义、变量没有初始化、字符变量类型无法使用以及变量没有定义等。所述命名规范是指对函数命名,变量命名,文件命名,命名管理最重要的是一致性规则;包括:项目名全部小写、包名全部小写、类名首字母大写、变量名、方法名首字母小写、常量名全部大写;所述命名规则还包括:名称只能由字母、数字、下划线、$符号组成、不能以数字开头、名称不能使用JAVA中的关键字以及坚决不允许出现中文及拼音命名。所述注释规范包括版权注释、类注释(Class)、构造函数注释(Constructor)、方法注释(Methods)、代码块注释(Block)、单句注释以及字段名注释。所述bean定义规范包括类必须使用public修饰、必须保证有公共无参数构造器、包含了属性的操作手段。所述Junit规范包括:测试类的命名定义规范、测试用例的命名定义规范、测试程序的包名定义规范以及变量的命名规范。
以测试程序的变量名均采用大小写混合的方式,第一个单词的首字母小写,其后单词的首字母大写为例。例如:MaxValue、SetMobileBind以及GetMobileBind等命名。当命名中出现不符合规则的,如maxValue中的maxValue的max首字母并未大写,根据检查规则将max寻找出来并更改成MaxValue。
一些实施方式中,所述返回空集之后,所述方法还包括:
发出指示信息;所述指示信息用于指示所述JavaScript代码中的每个if语句的检测结果。
上述实施方式中,可以指示异常的变量信息和异常的责任人,实现不同异常信息传递给不同的责任人。例如第一异常的变量信息的责任人为A,第二异常的变量信息责任人为B,通过配置将A的联系方式与第一异常的变量信息配置在一起,以及通过配置将B的联系方式与第二异常的变量信息配置在一起,从而完成了第一异常的变量信息,与A的联系方式的关联以及B的联系方式与第二异常的变量信息的关联,当任务出错时,通过指示知道了具体任务出错的责任人是谁,将更加高效的处理异常任务。
如图2所示的一种用于检测JavaScript代码的装置20的结构示意图,其可应用于JavaScript代码检测。本申请实施例中的用于检测JavaScript代码的装置能够实现对应于上述图1所对应的实施例中所执行的JavaScript代码检测的方法的步骤。所述用于检测JavaScript代码的装置20实现的功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。硬件或软件包括一个或多个与上述功能相对应的模块,所述模块可以是软件和/或硬件。所述用于检测JavaScript代码的装置可包括输入输出模块201和处理模块202,所述处理模块202和输入输出模块201的功能实现可参考图1所对应的实施例中所执行的操作,此处不作赘述。输入输出模块201可用于控制所述输入输出模块201的输入、输出以及获取操作。
一些实施方式中,所述输入输出模块201可用于获取JavaScript代码。
所述处理模块202可用于构建所述JavaScript代码对应的抽象语法树。所述抽象语法树是通过语法分析器创建。所述语法分析器是指编译器或解释器的组件,所述语法分析器用于语法检查,并根据所述JavaScript代码中的变量来构建数据结构。通过自动化脚本查找JavaScript代码中的检查规则。所述检查规则是指通过所述变量的适用场景、前提条件、规范种类以及判断标准进行生成用于检测if语句中异常变量的规则。通过遍历所述抽象语法树中的if语句,得到所述JavaScript代码的if语句。分别所述JavaScript代码中每一个if语句中的变量设置标识信息。使用正则表达式以及所述检查规则对所述JavaScript代码中每一行if语句中的变量进行对比检测,以得到检测结果。
若所述检测结果为成功,通过所述输入输出模块201则返回一个数组并更新所述正则表达式对象的属性和所述正则表达式对象。
或者,若所述检测结果为失败,通过所述输入输出模块201则返回空集并发出异常通知。
一些实施方式中,所述处理模块202还用于:
循环遍历所述抽象语法树的所有对象,若通过Object.name判断与if字符串相等,并且匹配数组中包含了if,则确定所述JavaScript代码中包含if语句。所述数组用于存放所述JavaScript代码的状态。所述状态包括代码的属性。
查找所述JavaScript代码中if语句中是否存在变量,若查找到所述JavaScript代码中if语句中存在变量,则判断所述if语句中包含变量,并标识所述if语句。
一些实施方式中,所述变量标识信息包括以下至少一项:JavaScript的探测标记变量赋值语句所属函数的函数名、所述JavaScript代码中的探测标记变量赋值语句的行号、所述JavaScript代码中代码段的探测标记变量赋值语句所属源文件的文件名。
一些实施方式中,所述异常通知是指按照固定格式将代码行号、异常变量、所述异常信息及异常标志组合生成的通知。
一些实施方式中,所述异常标志是指一个用于检测代码异常的32位二进制数,所述二进制数的每一位代表传每一种代码运行的异常状态。
所述处理模块202还用于:
对比检测执行完后,返回一个32位的2进制数。
若第i位是1,则确定第i+1个功能的所述代码运行正常。
若第i位是0,则确定第i+1个功能的所述代码运行存在异常。所述i是大于等于0且小于32的整数。
一些实施方式中,所述规范种类至少包括:命名规范、声明规范、注释规范、常量规范、bean定义规范、事务规范、脚本规范、日志规范、异常处理规范、Junit规范、错误类规范、警告类规范及提示类规范中的一项。
一些实施方式中,所述处理模块202还用于:
发出指示信息;所述指示信息用于指示所述JavaScript代码中的每个if语句的检测结果。
上面从模块化功能实体的角度分别介绍了本申请实施例中的创建装置,以下从硬件角度介绍一种计算机设备,如图3所示,其包括:处理器、存储器、输入输出单元(也可以是收发器,图3中未标识出)以及存储在所述存储器中并可在所述处理器上运行的计算机程序。例如,该计算机程序可以为图1所对应的实施例中JavaScript代码检测的方法对应的程序。例如,当计算机设备实现如图2所示的用于检测JavaScript代码的装置20的功能时,所述处理器执行所述计算机程序时实现上述图2所对应的实施例中由用于检测JavaScript代码的装置20执行的JavaScript代码检测的方法中的各步骤。或者,所述处理器执行所述计算机程序时实现上述图2所对应的实施例的用于检测JavaScript代码的装置20中各模块的功能。又例如,该计算机程序可以为图1所对应的实施例中JavaScript代码检测的方法对应的程序。
所称处理器可以是中央处理单元(Central Processing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述计算机装置的控制中心,利用各种接口和线路连接整个计算机装置的各个部分。
所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述计算机装置的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、视频数据等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
所述输入输出单元也可以用接收器和发送器代替,可以为相同或者不同的物理实体。为相同的物理实体时,可以统称为输入输出单元。该输入输出可以为收发器。
所述存储器可以集成在所述处理器中,也可以与所述处理器分开设置。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM)中,包括若干指令用以使得一台终端(可以是手机,计算机,服务器或者网络设备等)执行本申请各个实施例所述的方法。
上面结合附图对本申请的实施例进行了描述,但是本申请并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本申请的启示下,在不脱离本申请宗旨和权利要求所保护的范围情况下,还可做出很多形式,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,这些均属于本申请的保护之内。

Claims (9)

1.一种JavaScript代码检测的方法,其特征在于,所述方法包括:
获取JavaScript代码,并构建所述JavaScript代码对应的抽象语法树;所述抽象语法树是通过语法分析器创建;所述语法分析器是指编译器或解释器的组件,所述语法分析器用于语法检查,并根据所述JavaScript代码中的变量来构建数据结构;
通过自动化脚本查找JavaScript代码中的检查规则;所述检查规则是指通过所述变量的适用场景、前提条件、规范种类以及判断标准进行生成用于检测if语句中异常变量的规则;
通过遍历所述抽象语法树中的if语句,得到所述JavaScript代码的if语句;
分别对所述JavaScript代码中每一个if语句中的变量设置标识信息;
使用正则表达式以及所述检查规则对所述JavaScript代码中每一行if语句中的变量进行对比检测,以得到检测结果;
若所述检测结果为成功,则返回一个数组并更新所述正则表达式对象的属性和所述正则表达式对象;
或者,若所述检测结果为失败,则返回空集并发出异常通知;
所述通过遍历所述抽象语法树中的if语句,得到所述JavaScript代码的if语句,包括:
循环遍历所述抽象语法树的所有对象,若通过Object.name判断与if字符串相等,并且匹配数组中包含了if,则确定所述JavaScript代码中包含if语句;所述数组用于存放所述JavaScript代码的状态;所述状态包括代码的属性;
查找所述JavaScript代码中if语句中是否存在变量,若查找到所述JavaScript代码中if语句中存在变量,则判断所述if语句中包含变量,并标识所述if语句。
2.根据权利要求1所述的方法,其特征在于,所述变量标识信息包括以下至少一项:JavaScript的探测标记变量赋值语句所属函数的函数名、所述JavaScript代码中的探测标记变量赋值语句的行号、所述JavaScript代码中代码段的探测标记变量赋值语句所属源文件的文件名。
3.根据权利要求1所述的方法,其特征在于,所述异常通知是指按照固定格式将代码行号、异常变量、异常信息及异常标志组合生成的通知。
4.根据权利要求3所述的方法,其特征在于,所述异常标志是指一个用于检测代码异常的32位二进制数,所述二进制数的每一位代表传每一种代码运行的异常状态;
对比检测执行完后,返回一个32位的2进制数;
若第i位是1,则确定第i+1个功能的所述代码运行正常;
若第i位是0,则确定第i+1个功能的所述代码运行存在异常;所述i是大于等于0且小于32的整数。
5.根据权利要求1所述的方法,其特征在于,所述规范种类至少包括:命名规范、声明规范、注释规范、常量规范、bean定义规范、事务规范、脚本规范、日志规范、异常处理规范、Junit规范、错误类规范、警告类规范及提示类规范中的一项。
6.根据权利要求1所述的方法,其特征在于,所述返回空集之后,所述方法还包括:
发出指示信息;所述指示信息用于指示所述JavaScript代码中的每个if语句的检测结果。
7.一种用于检测JavaScript代码的装置,其特征在于,所述装置包括:
输入输出模块,用于获取JavaScript代码;
处理模块,用于构建所述JavaScript代码对应的抽象语法树;所述抽象语法树是通过语法分析器创建;所述语法分析器是指编译器或解释器的组件,所述语法分析器用于语法检查,并根据所述JavaScript代码中的变量来构建数据结构;通过自动化脚本查找JavaScript代码中的检查规则;所述检查规则是指通过所述变量的适用场景、前提条件、规范种类以及判断标准进行生成用于检测if语句中异常变量的规则;通过遍历所述抽象语法树中的if语句,得到所述JavaScript代码的if语句;分别对所述JavaScript代码中每一个if语句中的变量设置标识信息;使用正则表达式以及所述检查规则对所述JavaScript代码中每一行if语句中的变量进行对比检测,以得到检测结果;
若所述检测结果为成功,则通过所述输入输出模块返回一个数组并更新所述正则表达式对象的属性和所述正则表达式对象;
或者,若所述检测结果为失败,则通过所述输入输出模块返回空集并发出异常通知;
所述通过遍历所述抽象语法树中的if语句,得到所述JavaScript代码的if语句,包括:
循环遍历所述抽象语法树的所有对象,若通过Object.name判断与if字符串相等,并且匹配数组中包含了if,则确定所述JavaScript代码中包含if语句;所述数组用于存放所述JavaScript代码的状态;所述状态包括代码的属性;
查找所述JavaScript代码中if语句中是否存在变量,若查找到所述JavaScript代码中if语句中存在变量,则判断所述if语句中包含变量,并标识所述if语句。
8.一种计算机设备,其特征在于,所述计算机设备包括:
至少一个处理器、存储器和输入输出单元;
其中,所述存储器用于存储程序代码,所述处理器用于调用所述存储器中存储的程序代码来执行如权利要求1-6中任一项所述的方法。
9.一种计算机存储介质,其特征在于,其包括指令,当其在计算机上运行时,使得计算机执行如权利要求1-6中任一项所述的方法。
CN201910846579.6A 2019-09-09 2019-09-09 JavaScript代码检测方法、装置、设备和存储介质 Active CN110688307B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910846579.6A CN110688307B (zh) 2019-09-09 2019-09-09 JavaScript代码检测方法、装置、设备和存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910846579.6A CN110688307B (zh) 2019-09-09 2019-09-09 JavaScript代码检测方法、装置、设备和存储介质

Publications (2)

Publication Number Publication Date
CN110688307A CN110688307A (zh) 2020-01-14
CN110688307B true CN110688307B (zh) 2023-11-17

Family

ID=69108064

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910846579.6A Active CN110688307B (zh) 2019-09-09 2019-09-09 JavaScript代码检测方法、装置、设备和存储介质

Country Status (1)

Country Link
CN (1) CN110688307B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111427786A (zh) * 2020-03-25 2020-07-17 中国建设银行股份有限公司 异常Full GC问题检测方法及装置
CN111562910B (zh) * 2020-05-08 2023-06-02 上海泛微网络科技股份有限公司 一种封装方法及相关设备
CN111881059B (zh) * 2020-08-10 2023-10-27 网易(杭州)网络有限公司 代码文件的检测方法、装置和电子设备
CN112015430A (zh) * 2020-09-07 2020-12-01 平安国际智慧城市科技股份有限公司 JavaScript代码翻译方法、装置、计算机设备及存储介质
CN112363832B (zh) * 2020-11-10 2023-07-28 中国平安人寿保险股份有限公司 基于Ignite的分布式数据处理方法、装置及计算机设备
CN112540811B (zh) * 2020-12-15 2022-03-18 平安科技(深圳)有限公司 缓存数据的检测方法、装置、计算机设备和存储介质
CN114579203B (zh) * 2022-03-07 2024-03-15 网易(杭州)网络有限公司 脚本文件检查方法、装置、电子设备及存储介质
CN117439997B (zh) * 2023-12-20 2024-03-08 天津华来科技股份有限公司 一种基于模块化设计的通用p2p通信架构构建方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101051600B1 (ko) * 2010-03-29 2011-07-22 주식회사 소프트 포 소프트 아밥 소스코드의 코드 검사를 수행하는 코드검사 수행시스템
CN103955426A (zh) * 2014-04-21 2014-07-30 中国科学院计算技术研究所 一种检测c代码空指针引用的方法及***
CN105975392A (zh) * 2016-04-29 2016-09-28 国家计算机网络与信息安全管理中心 一种基于抽象语法树的重复代码检测方法及装置
CN107678957A (zh) * 2017-09-25 2018-02-09 中国银行股份有限公司 一种网银代码自动化检查方法及装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101051600B1 (ko) * 2010-03-29 2011-07-22 주식회사 소프트 포 소프트 아밥 소스코드의 코드 검사를 수행하는 코드검사 수행시스템
CN103955426A (zh) * 2014-04-21 2014-07-30 中国科学院计算技术研究所 一种检测c代码空指针引用的方法及***
CN105975392A (zh) * 2016-04-29 2016-09-28 国家计算机网络与信息安全管理中心 一种基于抽象语法树的重复代码检测方法及装置
CN107678957A (zh) * 2017-09-25 2018-02-09 中国银行股份有限公司 一种网银代码自动化检查方法及装置

Also Published As

Publication number Publication date
CN110688307A (zh) 2020-01-14

Similar Documents

Publication Publication Date Title
CN110688307B (zh) JavaScript代码检测方法、装置、设备和存储介质
US11797298B2 (en) Automating identification of code snippets for library suggestion models
US11354225B2 (en) Automating identification of test cases for library suggestion models
US11494181B2 (en) Automating generation of library suggestion engine models
US10261984B2 (en) Browser and operating system compatibility
CA2684822C (en) Data transformation based on a technical design document
US20120143893A1 (en) Pattern Matching Framework for Log Analysis
CN112015430A (zh) JavaScript代码翻译方法、装置、计算机设备及存储介质
CN109145235B (zh) 用于解析网页的方法、装置及电子设备
US11042467B2 (en) Automated searching and identification of software patches
CN111797336A (zh) 一种网页解析方法、装置、电子设备及介质
CN108427580B (zh) 配置对命名重复的检测方法、存储介质和智能设备
CN111159045A (zh) 一种兼容性问题检测方法、装置及存储介质
CN114398138A (zh) 界面生成方法、装置、计算机设备和存储介质
CN112540925A (zh) 新特性兼容性检测***及方法、电子设备及可读存储介质
CN116610558A (zh) 代码检测方法、装置、电子设备及计算机可读存储介质
CN114895914A (zh) 日志输出代码的生成方法、装置、电子设备及存储介质
CN113138767A (zh) 代码语言转换方法、装置、电子设备及存储介质
CN108733353B (zh) 一种界面构造方法和装置
CN113408250B (zh) 一种项目文件的处理方法和装置
US12032475B2 (en) Automating identification of test cases for library suggestion models
CN113961192A (zh) 代码数据的处理方法、装置及电子设备
CN113419738A (zh) 接口文档的生成方法、装置及接口管理设备
Borjigin Advanced Python Programming for Data Science
CN117608719A (zh) 页面元素查找方法、装置、电子设备及介质

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
TA01 Transfer of patent application right

Effective date of registration: 20231024

Address after: Room 2, Floor 11, Unit 2, Building 2, Baiyi South Bank, south of Binhe Avenue, Liuwu Avenue, Liuwu New District, Lhasa, Xizang Autonomous Region, 850000

Applicant after: Guoxin Jinhong Information Consulting Co.,Ltd.

Address before: 518000 Room 202, block B, aerospace micromotor building, No.7, Langshan No.2 Road, Xili street, Nanshan District, Shenzhen City, Guangdong Province

Applicant before: Shenzhen LIAN intellectual property service center

Effective date of registration: 20231024

Address after: 518000 Room 202, block B, aerospace micromotor building, No.7, Langshan No.2 Road, Xili street, Nanshan District, Shenzhen City, Guangdong Province

Applicant after: Shenzhen LIAN intellectual property service center

Address before: Room 201, building a, No.1 Qianwan 1st Road, Shenzhen Hong Kong cooperation zone, Shenzhen, Guangdong Province (settled in Shenzhen Qianhai business secretary Co., Ltd.)

Applicant before: PING AN PUHUI ENTERPRISE MANAGEMENT Co.,Ltd.

TA01 Transfer of patent application right
GR01 Patent grant
GR01 Patent grant