CN114139084A - Web应用跨版本错误归类方法、系统、终端及介质 - Google Patents

Web应用跨版本错误归类方法、系统、终端及介质 Download PDF

Info

Publication number
CN114139084A
CN114139084A CN202111282443.0A CN202111282443A CN114139084A CN 114139084 A CN114139084 A CN 114139084A CN 202111282443 A CN202111282443 A CN 202111282443A CN 114139084 A CN114139084 A CN 114139084A
Authority
CN
China
Prior art keywords
error
web application
errors
application program
version
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
CN202111282443.0A
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.)
Shanghai Tuotang Mdt Infotech Ltd
Original Assignee
Shanghai Tuotang Mdt Infotech 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 Shanghai Tuotang Mdt Infotech Ltd filed Critical Shanghai Tuotang Mdt Infotech Ltd
Priority to CN202111282443.0A priority Critical patent/CN114139084A/zh
Publication of CN114139084A publication Critical patent/CN114139084A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/958Organisation or management of web site content, e.g. publishing, maintaining pages or automatic linking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/95Retrieval from the web
    • G06F16/957Browsing optimisation, e.g. caching or content distillation
    • G06F16/9577Optimising the visualization of content, e.g. distillation of HTML documents

Landscapes

  • Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Data Mining & Analysis (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明提供了一种Web应用跨版本错误归类方法及系统,其中系统包括:嵌入Web应用中的Javascript SDK模块、代码分析模块以及错误检索模块:方法包括:发布新版本Web应用程序;获取Web应用程序的代码文件构建语法树;上报Web应用程序生产环境错误;根据语法树改写Web应用程序生产环境错误的错误堆栈,得到改写后的错误数据;将改写后的错误数据入库,并根据改写后的错误堆栈匹配库中历史版本的Web应用程序生产环境错误并归类。同时提供了一种相应的终端及介质。本发明捕获各版本发生的错误并匹配,精确识别在多个版本反复出现的严重错误,帮助开发人员聚焦严重错误,提高错误修复效率以及软件质量。

Description

Web应用跨版本错误归类方法、系统、终端及介质
技术领域
本发明涉及互联网技术领域,具体地,涉及一种Web应用跨版本错误归类方法、系统、终端及介质。
背景技术
基于HTML5和Javascript的Web应用程序因其灵活的编程方式以及广泛的跨平台特性成为了目前非常主流的客户端应用程序的选择。Web应用程序广泛包括运行于浏览器内的网页、嵌入移动App中的Web内容(Android WebView/iOS WKWebView/ReactNative)、基于Electron等框架可访问电脑文件系统的桌面Web应用程序。Web应用程序均运行Javascript代码(或者能被编译成Javascript的类似语言,例如Typescript)。Javascript对于软件故障采取非常宽松处理模式,即如果程序发生未处理的错误,程序仅会终止当前函数调用,而程序的其他部分可以继续正常运行。这种宽松的方式导致Web应用的错误数量,尤其是在生产环境下,比传统的严格编程语言要更加庞大。在实际生产中,开发人员会广泛收集生产环境下Web应用发生的错误并分析修复这些错误。例如:
公开号为CN111124721A的中国发明专利申请《网页处理方法、装置及电子设备》,通过收集发生错误网页截图和网页控件以及网页代码帮助开发人员定位生产错误;
授权公告号为CN107844486B的中国发明专利《一种用于客户端的分析网页问题的方法和系统》,让开发人员根据经营业务情况,为不同页面以及关键代码步骤增加错误捕捉代码来收集重要的生产错误;
公开号为CN102681929A的中国发明专利申请《网页脚本错误监控方法及系统》,收集网页错误,并按照网页路径Top 100安排开发人员修复;
公开号为CN107861852A的中国发明专利申请《网页错误处理方法、系统及可读存储介质》,通过统计错误影响的用户和网络IP地址等,可视化地优先让开发人员处理影响用户多的错误。
然而,目前的技术手段对于定位错误的粒度普遍较粗,导致开发人员得到的错误信息很宽泛,通常无法有效定位到错误实际发生的代码,大大影响了错误修复的效率和准确度。例如,目前Web应用不断复杂化,一个页面可能包含几千到几十万行Javascript开发人员编写的代码以及同等规模的第三方库代码。当发生错误时,当前的技术手段只能粗略定位到页面或者页面控件级别,无法准确定位到关联的代码,导致开发人员如大海捞针,或者需要不对人工增加额外的错误捕捉代码提高错误信息细节来修复错误,大大降低了错误修复的效率。同时,由于Web应用灵活的更新方式,Web应用代码更新非常快,在一些情况下可以达到每天发布数十个新版本。而生产环境的错误因为代码的改变,同一个错误在不同版本上的相关代码位置也在不受控地发生改变,这也间接导致开发人员得到大量重复却有细微变化的错误信息,影响开发人员有效识别问题原因。
发明内容
本发明针对现有技术中存在的上述不足,提供了一种Web应用跨版本错误归类方法、系统、终端及介质,通过收集Web应用程序在生产环境中发生的错误,进行跨版本匹配和归类。
根据本发明的一个方面,提供了一种Web应用跨版本错误归类方法,包括:
发布新版本Web应用程序;
获取所述Web应用程序的代码文件构建语法树;
上报所述Web应用程序生产环境错误;
根据所述语法树改写所述Web应用程序生产环境错误的错误堆栈,得到改写后的错误数据;
将所述改写后的错误数据入库,并根据改写后的错误堆栈匹配库中历史版本的Web应用程序生产环境错误并归类。
优选地,所述发布新版本Web应用程序,包括:
准备新版本的Web应用程序;
将所述Web应用程序的所有代码文件上传;
上传所述Web应用程序,完成新版本Web应用程序的发布。
优选地,所述获取所述Web应用程序的代码文件构建语法树,包括:
根据发布的所述Web应用程序,解析HTML文件,提取所述Web应用程序使用的所有Javascript代码文件;
基于所述Javascript代码文件,通过代码分析构建语法树,并对所述语法树进行存储;
其中:
所述语法树为一种用于分析源代码的树型数据结构,其中每一个结点为一个语法单元,表示源代码的一种结构;每一个结点包括若干子结点,表示一个复杂结点的细节信息;所述语法树的结点存储该语法单元在源代码中的位置,给定一个任意源代码位置能够在语法树中唯一找到该位置对应的结点。
优选地,所述上报所述Web应用程序生产环境错误,包括:
注册消息回调方法;
利用所述消息回调方法,获取所述Web应用程序在Javascript代码运行过程中产生的错误,即为所述Web应用程序生产环境错误;
对获取的所述错误进行上报。
优选地,所述根据所述语法树改写所述Web应用程序生产环境错误的错误堆栈,包括:改写错误堆栈中的抛出点和改写错误堆栈中的调用点序列;其中:
-所述改写错误堆栈中的抛出点,包括:
根据所述错误的错误堆栈,获取抛出点的位置信息;
根据所述错误的页面地址,获取该错误所对应Web应用程序版本的代码文件的语法树;
通过所述抛出点的位置信息以及错误类型,找到所述语法树中对应的源代码结点,并将所述抛出点的位置信息替换为所述源代码结点的字符串化信息用于后续匹配;
-所述改写错误堆栈中的调用点序列,包括:
根据所述错误的错误堆栈,获取若干个调用点的位置信息;
根据所述调用点的位置信息以及错误类型,找到所述语法树中对应的函数调用结点,并将所述调用点信息替换为所述语法树中对应的函数调用结点的代码信息用于后续匹配。
优选地,所述将所述改写后的错误数据入库,并根据改写后的错误堆栈匹配库中历史版本的Web应用程序生产环境错误并归类,包括:
所述库统一存储和管理所有历史版本Web应用程序发生的所有错误数据,当上报的多个错误数据的改写后的错误堆栈相同时,则在入库过程中被归类为同一个错误。
优选地,所述库采用内存键值存储数据库,其中,以改写后的错误堆栈为键,以错误数据的数组为值,不同版本的同一个错误的键均相同。
优选地,所述方法还包括:
所述对库中每一个错误的严重程度进行标记并排序;其中:
对于每一个错误,其严重程度为以下几个维度的加权平均:
该错误影响的版本数量;
该错误影响的独立用户数;
该错误的上报总数;
该错误发生的页面的设定重要程度;
对每一个错误的严重程度进行周期性更新,在每一个更新周期期间,统计新入库的错误分布,并优先更新新增量大于设定阈值的错误的严重程度。
优选地,所述方法还包括:
对多版本Web应用程序生产环境错误进行展示。
根据本发明的另一个方面,提供了一种Web应用跨版本错误归类系统,包括:Javascript SDK模块、代码分析模块以及错误检索模块;其中:
所述Javascript SDK模块嵌入Web应用程序中,用于在Web应用程序运行过程中捕获错误并上报至所述代码分析模块;
所述代码分析模块,用于获取所述Web应用程序的代码文件构建语法树,根据所述语法树改写所述Web应用程序生产环境错误的错误堆栈,得到改写后的错误数据,并将所述改写后的错误数据发送至所述错误检索模块;
所述错误检索模块,存储所述改写后的错误数据,并根据改写后的错误堆栈匹配其中历史版本的Web应用程序生产环境错误并归类。
本发明第三个方面提供了一种终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时可用于执行上述任一项所述的方法,或,运行上述的系统。
本发明第四个方面提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时可用于执行上述任一项所述的方法,或,运行上述的系统。
由于采用了上述技术方案,本发明与现有技术相比,具有如下有益效果:
本发明提供的Web应用跨版本错误归类方法、系统、终端及介质,在Web应用频繁更新情况下(代码不断变化),捕获生产环境中各个版本发生的错误,提供有效的方法匹配不同版本的错误,精确识别在多个版本反复出现的严重错误,帮助开发人员聚焦严重错误,提高错误修复效率以及软件质量。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为本发明一实施例中Web应用跨版本错误归类方法的工作流程图。
图2为本发明一实施例中Web应用跨版本错误归类系统的组成结构示意图。
图3为本发明一优选实施例中Web应用跨版本错误归类方法的工作流程图。
图4为本发明一优选实施例中语法树、抛出点、前序调用点示例图。
具体实施方式
下面对本发明的实施例作详细说明:本实施例在以本发明技术方案为前提下进行实施,给出了详细的实施方式和具体的操作过程。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。
图1为本发明一实施例提供的Web应用跨版本错误归类方法的工作流程图。
如图1所示,该实施例提供的Web应用跨版本错误归类方法,可以包括如下步骤:
S100,发布新版本Web应用程序;
S200,获取Web应用程序的代码文件构建语法树;
S300,上报Web应用程序生产环境错误;
S400,根据语法树改写Web应用程序生产环境错误的错误堆栈,得到改写后的错误数据;
S500,将改写后的错误数据入库,并根据改写后的错误堆栈匹配库中历史版本的Web应用程序生产环境错误并归类。
在该实施例中,作为一优选实施例,该方法还可以包括如下步骤:
S600,对库中每一个错误的严重程度进行标记并排序;其中:
对于每一个错误,其严重程度为以下几个维度的加权平均:
该错误影响的版本数量;
该错误影响的独立用户数;
该错误的上报总数;
该错误发生的页面的设定重要程度;
对每一个错误的严重程度进行周期性更新,在每一个更新周期期间,统计新入库的错误分布,并优先更新新增量大于设定阈值的错误的严重程度。
在该实施例中,作为一优选实施例,该方法还可以包括如下步骤:
S700,对多版本Web应用程序生产环境错误进行展示。
在该实施例的S100中,作为一优选实施例,发布新版本Web应用程序,可以包括如下步骤:
S101,准备新版本的Web应用程序;
S102,将Web应用程序的所有代码文件上传;
S103,上传Web应用程序,完成新版本Web应用程序的发布。
在该实施例的S200中,作为一优选实施例,获取Web应用程序的代码文件构建语法树,可以包括如下步骤:
S201,根据发布的Web应用程序,解析HTML文件,提取Web应用程序使用的所有Javascript代码文件;
S202,基于Javascript代码文件,通过代码分析构建语法树,并对语法树进行存储;
其中:
语法树为一种用于分析源代码的树型数据结构,其中每一个结点为一个语法单元,表示源代码的一种结构;每一个结点包括若干子结点,表示一个复杂结点的细节信息;语法树的结点存储该语法单元在源代码中的位置,给定一个任意源代码位置能够在语法树中唯一找到该位置对应的结点。
在该实施例的S300中,作为一优选实施例,上报Web应用程序生产环境错误,可以包括如下步骤:
S301,注册消息回调方法;
S302,利用消息回调方法,获取Web应用程序在Javascript代码运行过程中产生的错误,即为Web应用程序生产环境错误;
S303,对获取的错误进行上报。
在该实施例的S400中,作为一优选实施例,根据语法树改写Web应用程序生产环境错误的错误堆栈,可以包括如下步骤:
S401,改写错误堆栈中的抛出点;
S402,改写错误堆栈中的调用点序列;
其中:
S401,改写错误堆栈中的抛出点,可以包括如下步骤:
S4011,根据错误的错误堆栈,获取抛出点的位置信息;
S4012,根据错误的页面地址,获取该错误所对应Web应用程序版本的代码文件的语法树;
S4013,通过抛出点的位置信息以及错误类型,找到语法树中对应的源代码结点,并将抛出点的位置信息替换为源代码结点的字符串化信息用于后续匹配;
S402,改写错误堆栈中的调用点序列,可以包括如下步骤:
S4021,根据错误的错误堆栈,获取若干个调用点的位置信息;
S4022,根据调用点的位置信息以及错误类型,找到语法树中对应的函数调用结点,并将调用点信息替换为语法树中对应的函数调用结点的代码信息用于后续匹配。
在该实施例的S500中,作为一优选实施例,将改写后的错误数据入库,并根据改写后的错误堆栈匹配库中历史版本的Web应用程序生产环境错误并归类,可以包括如下内容:
库统一存储和管理所有历史版本Web应用程序发生的所有错误数据,当上报的多个错误数据的改写后的错误堆栈相同时,则在入库过程中被归类为同一个错误。
进一步地,作为一优选实施例,库采用内存键值存储数据库,其中,以改写后的错误堆栈为键,以错误数据的数组为值,不同版本的同一个错误的键均相同。
图2为本发明一实施例提供的Web应用跨版本错误归类系统的组成结构示意图。
如图2所示,该实施例提供的Web应用跨版本错误归类系统,可以包括:JavascriptSDK模块、代码分析模块以及错误检索模块;其中:
Javascript SDK模块嵌入Web应用中,用于在Web应用运行过程中捕获错误并上报至代码分析模块;
代码分析模块,用于获取Web应用程序的代码文件构建语法树,根据语法树改写Web应用程序生产环境错误的错误堆栈,得到改写后的错误数据,并将改写后的错误数据发送至错误检索模块;
错误检索模块,存储改写后的错误数据,并根据改写后的错误堆栈匹配其中历史版本的Web应用程序生产环境错误并归类。
需要说明的是,本发明提供的方法中的步骤,可以利用系统中对应的模块、装置、单元等予以实现,本领域技术人员可以参照方法的技术方案实现系统的组成,即,方法中的实施例可理解为构建系统的优选例,在此不予赘述。
下面结合附图,对本发明上述两个实施例的技术方案进一步详细说明如下。
图3为本发明一优选实施例提供的Web应用跨版本错误归类方法的工作流程图,该优选实施例提供的方法基于本发明上述实施例中提供的Web应用跨版本错误归类系统实现,其中,Web应用跨版本错误归类系统包括:嵌入Web应用中的Javascript SDK模块、代码分析模块以及错误检索模块。
如图3所示,该实施例提供的Web应用跨版本错误归类方法,可以包括如下步骤:
步骤1,发布新版本Web应用页面;
开发人员在Web应用中集成本发明的Javascript SDK模块,用于在Web应用运行过程中捕获错误并上报到分析服务器(具体捕获过程见步骤3)。同时开发人员在每次准备发布Web应用新本时,将应用的页面文件事先上传到代码分析模块用于分析在新版本中捕获的错误。
步骤2,获取Web应用页面的代码文件构建语法树;
代码分析模块在收到新版本的Web应用页面后,自动分析HTML文件,提取页面使用的所有Javascript代码文件(包括开发人员编写的以及第三方库代码文件)。对于提取的代码文件,分析服务器进一步通过代码分析构造“语法树”(Abstract Syntax Tree)。语法树是一种用于分析源代码的树型数据结构,每个结点是一个语法单元,表示源代码的一种结构(例如函数定义、函数调用等);结点会包含若干子结点,表示一个复杂结点的细节信息(例如函数定义结点会包含参数列表子结点以及函数体子结点)。图4展示了以下程序示例所对应的语法树,其中Expressions表示多条语句结点、FunctionDeclaration表示函数定义阶段、CallExpression表示函数调用结点、ThrowStatement表示抛出异常结点、NewExpression表示对象创建结点,图中其他类型名可参考BabelJS(https://babeljs.io/)编译器所定义的语法树结点的类型名。语法树结点会存储该语法单元在源代码中的位置,即源代码文件名,该单元的起始以及终止行号。给定一个任意源代码位置(行号列号)可以在语法树中唯一找到该位置对应的结点。代码分析模块存储节点的所有源代码文件的语法树。
步骤3,上报Web应用页面生产环境错误;
开发人员按照常规流程发布新版本的Web应用页面,其中包含本发明的SDK通过注册window.onunhandledrejection和window.onerror消息回调方法来收集整个页面的Javascript代码运行过程中产生的(未正确处理的)错误。Web应用运行在用户环境中,可以是浏览器、移动App的WebView环境,或者桌面的Electron环境。当错误发生时,SDK会捕获错误发生的页面地址(URL),并收集错误类型、错误信息、错误堆栈。其中错误堆栈是一个多行层次结构,每行为一个函数调用,每行包含所属函数名、所属源代码文件名、行号、列号。以下给出了一段程序示例,运行后会产生一个错误,并获得对应的错误数据。除了错误相关数据外,SDK会收集包含但不仅限于能够识别用户的ID、用户运行环境版本(例如浏览器版本)、用户网络IP地址、页面当前截图等辅助性调试信息,这些信息会用于在步骤7中评估错误严重程度,并在步骤8中向开发人员展示。
步骤4,根据语法树改写错误堆栈的抛出点信息;
代码分析模块在收到上报数据后,摘取错误堆栈的第一行(以下程序示例中的“atbar(app.js:1:24)”),此行为“抛出点”,即产生错误的源代码位置。抛出点非常重要,对于开发人员,抛出点不同的两个错误显然不是同一个错误。然而在不同版本的Web应用上,由于源代码的改动,同一个错误的抛出点的位置(行号列号)也会有所变化。例如以下程序示例中,在app.js开头增加一行注释会直接导致抛出点位置也因此向下移动一行。因此简单地比较抛出点位置是否相同的方法无法识别不同版本的Web应用上的同一个错误。本实施例提出更高级的匹配方案,即比较抛出点的实际源代码是否相同来判断抛出点是否相同。具体地,代码分析模块通过上报错误的页面地址(URL)以及错误类型找到步骤2存储的对应版本的源代码文件的语法树。然后,通过抛出点行号列号找到对应的源代码结点,将该节点的字符串化(代码)替换原始错误堆栈的行号列号信息。如以下程序示例所示,可见抛出点“at bar(app.js:1:24)”,对应的语法树中的ThrowStatement结点,字符串化后为对应的代码语句,即“throw new Error("错误");”。改写后的抛出点为实际发生错误的源代码片段,保证了在不同版本的Web应用行,由同一段代码引起的错误的抛出点都相同。
步骤5,根据语法树改写错误堆栈的调用点
代码分析模块收到的错误堆栈除第一行抛出点外,还包含若干个“调用点”(如以下程序示例中的“at”开头的行)。调用点即一个函数调用,在错误堆栈中,这些调用点表示了程序是经过那些代码片段最终到达错误抛出点。由于抛出点可能在开发人员使用的第三方库代码中,而程序中可能有多处使用了该库代码。例如程序可能有多处打开了不同的压缩文件,但共同使用了同一个解压缩库处理这些文件。而这多处可能分别存在代码缺陷(例如没有检查文件是否存在)而导致最终在解压缩库的同一个抛出点抛出了“非法文件”的错误。此时开发人员需要区分该抛出点的不同调用情况,即通过不同调用点到达的同一个抛出点应被认为是不同的错误。由于调用点同样存在源代码位置变化的问题,在比较调用点时本发明采用类似步骤4提出的匹配方法,将源代码行号列号位置转换成代码分析模块的语法树上的具体语法树结点(由于是函数调用,所以均为CallExpression结点)。进一步调用点的行号列号会被函数调用结点的代码片段替换,作为该调用点比较依据。
步骤6,将改写后的错误数据入库,并根据改写后的错误堆栈匹配库中历史版本的Web应用页面生产环境错误并归类;
通过步骤4和步骤5将错误的错误堆栈中的抛出点以及调用点替换成对应的语法树结点的代码片段,消除了由于不同版本的源代码变化造成的行号列号变化。两个上报的错误数据的改写后的错误堆栈如果相同,则表示这两个错误是同一个错误。代码分析模块通过步骤4和步骤5改写错误堆栈后,将错误数据发送到错误检索模块,统一存储和管理所有历史版本发生的所有错误数据。错误检索模块是一个键值(Key-Value)数据库,以改写后的错误堆栈(字符串)为键,值为错误数据的数组。因此,不同版本的同个错误的键均相同,在插入过程中会自动被归类为同一个错误。
作为一优选实施例,错误检索模块采用内存键值存储系统Redi s来提高插入以及检索的性能。
步骤7,对库中每一个错误的严重程度进行标记并排序;
错误检索模块定时更新数据库内错误数据的严重程度。具体地,对于每一个错误,其严重程度是以下几个维度的加权平均:1.该错误影响的版本数量;2.该错误影响的独立用户数;3.该错误的上报总数;4.该错误发生的页面的重要程度(由开发人员指定,例如支付类页面的错误严重程度较高)。所有错误信息以严重程度排序通过步骤8向开发人员展示。
计算严重度的方法是耗时操作,错误检索模块有大量的低频错误(即发生频率很低),同样需要反复计算严重度会影响错误检索模块的性能。
作为一优选实施例,错误检索模块周期性更新错误严重度。在每个更新周期(通常为30分钟)期间,统计插入的新错误的分布,优先更新新增量较大的错误的严重度值(无新增的错误的严重度不变,所以无需更新)。更新过程非抢占式任务,即更新过程中新错误依然可以插入错误检索模块。
步骤8.错误检索模块向开发者展示所有收集到的错误并提供细节以便开发者修复错误。本步骤通过几个展示优化方案提高开发者处理错误的效率。
步骤8a.所有错误按照严重程度进行排序,优先让开发者修复严重程度高的错误(基于步骤7即影响多个版本,影响用户数多,发生次数多,发生在重要页面的错误)。
步骤8b.对于每个错误,错误检索模块提供S3步骤收集到的额外调试信息帮助开发人员理解错误,包括但不仅限于能够识别用户的ID、用户运行环境版本(例如浏览器版本)、用户网络IP地址、页面当前截图等。这些信息帮助开发人员理解错误是否是由于特定用户环境(例如浏览器版本),以及用户在发生错误时页面的状态。
步骤8c.错误检索模块通过分析错误抛出点所在的源代码文件,区分错误发生在开发人员编写的代码或者是第三方库代码。对于开发人员编写的代码问题,在严重程度相同的情况下优先展示。对于第三方库代码,将错误信息自动发送百度、StackOverflow等问答网站并抓取搜索结果。
步骤8d.错误检索模块提供与商业Bug管理系统的集成功能,即一个错误可以与Bug管理系统的多个Bug报告关联。作为一优选实施例,错误检索模块通过Open API的方式与商业Bug管理系统进行通讯,支持Github APIv3,GitLab API,Atlassian Jira API,Atlassian Confluence API等通讯协议。
程序示例:
Figure BDA0003331675400000111
Figure BDA0003331675400000121
本发明一实施例提供了一种终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时可用于执行本发明上述实施例中任一项的方法,或,运行本发明上述实施例中任一项的系统。
本发明一实施例提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时可用于执行本发明上述实施例中任一项的方法,或,运行本发明上述实施例中任一项的系统。
在上述两个实施例中,可选地,存储器,用于存储程序;存储器,可以包括易失性存储器(英文:volatile memory),例如随机存取存储器(英文:random-access memory,缩写:RAM),如静态随机存取存储器(英文:static random-access memory,缩写:SRAM),双倍数据率同步动态随机存取存储器(英文:Double Data Rate Synchronous Dynamic RandomAccess Memory,缩写:DDR SDRAM)等;存储器也可以包括非易失性存储器(英文:non-volatile memory),例如快闪存储器(英文:flash memory)。存储器用于存储计算机程序(如实现上述方法的应用程序、功能模块等)、计算机指令等,上述的计算机程序、计算机指令等可以分区存储在一个或多个存储器中。并且上述的计算机程序、计算机指令、数据等可以被处理器调用。
上述的计算机程序、计算机指令等可以分区存储在一个或多个存储器中。并且上述的计算机程序、计算机指令、数据等可以被处理器调用。
处理器,用于执行存储器存储的计算机程序,以实现上述实施例涉及的方法中的各个步骤。具体可以参见前面方法实施例中的相关描述。
处理器和存储器可以是独立结构,也可以是集成在一起的集成结构。当处理器和存储器是独立结构时,存储器、处理器可以通过总线耦合连接。
本发明上述实施例提供的Web应用跨版本错误归类方法、系统、终端及介质,在Web应用频繁更新情况下(代码不断变化),捕获生产环境中各个版本发生的错误,提供有效的方法匹配不同版本的错误,精确识别在多个版本反复出现的严重错误,帮助开发人员聚焦严重错误,提高错误修复效率以及软件质量。
本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统及其各个装置以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统及其各个装置以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同功能。所以,本发明提供的系统及其各项装置可以被认为是一种硬件部件,而对其内包括的用于实现各种功能的装置也可以视为硬件部件内的结构;也可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
本发明上述实施例中未尽事宜均为本领域公知技术。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变形或修改,这并不影响本发明的实质内容。

Claims (12)

1.一种Web应用跨版本错误归类方法,其特征在于,包括:
发布新版本Web应用程序;
获取所述Web应用程序的代码文件构建语法树;
上报所述Web应用程序生产环境错误;
根据所述语法树改写所述Web应用程序生产环境错误的错误堆栈,得到改写后的错误数据;
将所述改写后的错误数据入库,并根据改写后的错误堆栈匹配库中历史版本的Web应用程序生产环境错误并归类。
2.根据权利要求1所述的Web应用跨版本错误归类方法,其特征在于,所述发布新版本Web应用程序,包括:
准备新版本的Web应用程序;
将所述Web应用程序的所有代码文件上传;
上传所述Web应用程序,完成新版本Web应用程序的发布。
3.根据权利要求1所述的Web应用跨版本错误归类方法,其特征在于,所述获取所述Web应用程序的代码文件构建语法树,包括:
根据发布的所述Web应用程序,解析HTML文件,提取所述Web应用程序使用的所有Javascript代码文件;
基于所述Javascript代码文件,通过代码分析构建语法树,并对所述语法树进行存储;
其中:
所述语法树为一种用于分析源代码的树型数据结构,其中每一个结点为一个语法单元,表示源代码的一种结构;每一个结点包括若干子结点,表示一个复杂结点的细节信息;所述语法树的结点存储该语法单元在源代码中的位置,给定一个任意源代码位置能够在语法树中唯一找到该位置对应的结点。
4.根据权利要求1所述的Web应用跨版本错误归类方法,其特征在于,所述上报所述Web应用程序生产环境错误,包括:
注册消息回调方法;
利用所述消息回调方法,获取所述Web应用程序在Javascript代码运行过程中产生的错误,即为所述Web应用程序生产环境错误;
对获取的所述错误进行上报。
5.根据权利要求1所述的Web应用跨版本错误归类方法,其特征在于,所述根据所述语法树改写所述Web应用程序生产环境错误的错误堆栈,包括:改写错误堆栈中的抛出点和改写错误堆栈中的调用点序列;其中:
-所述改写错误堆栈中的抛出点,包括:
根据所述错误的错误堆栈,获取抛出点的位置信息;
根据所述错误的页面地址,获取该错误所对应Web应用程序版本的代码文件的语法树;
通过所述抛出点的位置信息以及错误类型,找到所述语法树中对应的源代码结点,并将所述抛出点的位置信息替换为所述源代码结点的字符串化信息用于后续匹配;
-所述改写错误堆栈中的调用点序列,包括:
根据所述错误的错误堆栈,获取若干个调用点的位置信息;
根据所述调用点的位置信息以及错误类型,找到所述语法树中对应的函数调用结点,并将所述调用点信息替换为所述语法树中对应的函数调用结点的代码信息用于后续匹配。
6.根据权利要求1所述的Web应用跨版本错误归类方法,其特征在于,所述将所述改写后的错误数据入库,并根据改写后的错误堆栈匹配库中历史版本的Web应用程序生产环境错误并归类,包括:
所述库统一存储和管理所有历史版本Web应用程序发生的所有错误数据,当上报的多个错误数据的改写后的错误堆栈相同时,则在入库过程中被归类为同一个错误。
7.根据权利要求6所述的Web应用跨版本错误归类方法,其特征在于,所述库采用内存键值存储数据库,其中,以改写后的错误堆栈为键,以错误数据的数组为值,不同版本的同一个错误的键均相同。
8.根据权利要求1所述的Web应用跨版本错误归类方法,其特征在于,还包括:
所述对库中每一个错误的严重程度进行标记并排序;其中:
对于每一个错误,其严重程度为以下几个维度的加权平均:
该错误影响的版本数量;
该错误影响的独立用户数;
该错误的上报总数;
该错误发生的页面的设定重要程度;
对每一个错误的严重程度进行周期性更新,在每一个更新周期期间,统计新入库的错误分布,并优先更新新增量大于设定阈值的错误的严重程度。
9.根据权利要求1所述的Web应用跨版本错误归类方法,其特征在于,还包括:
对多版本Web应用程序生产环境错误进行展示。
10.一种Web应用跨版本错误归类系统,其特征在于,包括:Javascript SDK模块、代码分析模块以及错误检索模块;其中:
所述Javascript SDK模块嵌入Web应用程序中,用于在Web应用程序运行过程中捕获错误并上报至所述代码分析模块;
所述代码分析模块,用于获取所述Web应用程序的代码文件构建语法树,根据所述语法树改写所述Web应用程序生产环境错误的错误堆栈,得到改写后的错误数据,并将所述改写后的错误数据发送至所述错误检索模块;
所述错误检索模块,存储所述改写后的错误数据,并根据改写后的错误堆栈匹配其中历史版本的Web应用程序生产环境错误并归类。
11.一种终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时可用于执行权利要求1-9中任一项所述的方法,或,运行权利要求10所述的系统。
12.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时可用于执行权利要求1-9中任一项所述的方法,或,运行权利要求10所述的系统。
CN202111282443.0A 2021-11-01 2021-11-01 Web应用跨版本错误归类方法、系统、终端及介质 Pending CN114139084A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111282443.0A CN114139084A (zh) 2021-11-01 2021-11-01 Web应用跨版本错误归类方法、系统、终端及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111282443.0A CN114139084A (zh) 2021-11-01 2021-11-01 Web应用跨版本错误归类方法、系统、终端及介质

Publications (1)

Publication Number Publication Date
CN114139084A true CN114139084A (zh) 2022-03-04

Family

ID=80391903

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111282443.0A Pending CN114139084A (zh) 2021-11-01 2021-11-01 Web应用跨版本错误归类方法、系统、终端及介质

Country Status (1)

Country Link
CN (1) CN114139084A (zh)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103455417A (zh) * 2013-07-20 2013-12-18 中国科学院软件研究所 一种基于马尔可夫模型的软件错误定位系统及错误定位方法
CN105868037A (zh) * 2016-03-23 2016-08-17 乐视云计算有限公司 程序运行过程中错误信息的处理方法及系统
US9547579B1 (en) * 2014-12-30 2017-01-17 Ca, Inc. Method and apparatus for automatically detecting defects
CN106897211A (zh) * 2015-12-21 2017-06-27 阿里巴巴集团控股有限公司 针对混淆脚本语言的定位方法和系统
CN107861852A (zh) * 2017-06-26 2018-03-30 平安普惠企业管理有限公司 网页错误处理方法、系统及可读存储介质
CN112148329A (zh) * 2020-09-18 2020-12-29 湖南联盛网络科技股份有限公司 代码版本自动化更新方法、装置、计算机设备及存储介质
CN112527546A (zh) * 2020-12-14 2021-03-19 携程旅游网络技术(上海)有限公司 应用异常快速定位方法、系统、设备及存储介质

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103455417A (zh) * 2013-07-20 2013-12-18 中国科学院软件研究所 一种基于马尔可夫模型的软件错误定位系统及错误定位方法
US9547579B1 (en) * 2014-12-30 2017-01-17 Ca, Inc. Method and apparatus for automatically detecting defects
CN106897211A (zh) * 2015-12-21 2017-06-27 阿里巴巴集团控股有限公司 针对混淆脚本语言的定位方法和系统
CN105868037A (zh) * 2016-03-23 2016-08-17 乐视云计算有限公司 程序运行过程中错误信息的处理方法及系统
CN107861852A (zh) * 2017-06-26 2018-03-30 平安普惠企业管理有限公司 网页错误处理方法、系统及可读存储介质
CN112148329A (zh) * 2020-09-18 2020-12-29 湖南联盛网络科技股份有限公司 代码版本自动化更新方法、装置、计算机设备及存储介质
CN112527546A (zh) * 2020-12-14 2021-03-19 携程旅游网络技术(上海)有限公司 应用异常快速定位方法、系统、设备及存储介质

Similar Documents

Publication Publication Date Title
Chen et al. Characterizing logging practices in java-based open source software projects–a replication study in apache software foundation
Zhou et al. API deprecation: a retrospective analysis and detection method for code examples on the web
CN108304498B (zh) 网页数据采集方法、装置、计算机设备和存储介质
US9652366B2 (en) Code change analysis to optimize testing lifecycle
US10275601B2 (en) Flaw attribution and correlation
US20160328314A1 (en) System and method for providing code coverage
CN110825619A (zh) 接口测试用例自动生成方法、装置及存储介质
US10509719B2 (en) Automatic regression identification
CN110908895A (zh) 页面自动化测试方法、装置、计算机设备及存储介质
US10528457B2 (en) Automated unit testing in a mainframe environment
US11436133B2 (en) Comparable user interface object identifications
CN111930472B (zh) 一种代码调试方法、装置、电子设备及存储介质
CN111897713A (zh) 一种基于paas平台前端引擎异常的友好提示方法及系统
US20180232299A1 (en) Composing future tests
WO2023159920A1 (zh) 一种脚本错误的处理方法、装置、设备及存储介质
CN107038117B (zh) 一种基于事件处理函数间定义-引用的web自动化测试方法
US11163924B2 (en) Identification of changes in functional behavior and runtime behavior of a system during maintenance cycles
CN108089978A (zh) 一种分析asp.net应用软件性能及故障的诊断方法
Walker et al. Do crosscutting concerns cause modularity problems?
CN113157565B (zh) 一种基于种子用例突变的反馈式js引擎模糊测试方法及装置
CN111767213B (zh) 数据库检查点的测试方法、装置、电子设备及存储介质
Pessoa et al. An eclipse plugin to support code smells detection
US20180137036A1 (en) Determining potential test actions
CN112835779A (zh) 测试用例确定方法、装置、计算机设备
CN114139084A (zh) Web应用跨版本错误归类方法、系统、终端及介质

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