CN109144852A - 静态代码的扫描方法、装置、计算机设备及存储介质 - Google Patents
静态代码的扫描方法、装置、计算机设备及存储介质 Download PDFInfo
- Publication number
- CN109144852A CN109144852A CN201810827077.4A CN201810827077A CN109144852A CN 109144852 A CN109144852 A CN 109144852A CN 201810827077 A CN201810827077 A CN 201810827077A CN 109144852 A CN109144852 A CN 109144852A
- Authority
- CN
- China
- Prior art keywords
- code
- collapse
- type
- hidden danger
- scanning
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3628—Software debugging of optimised code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/0766—Error or fault reporting or storing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/079—Root cause analysis, i.e. error or fault diagnosis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/366—Software debugging using diagnostics
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Storage Device Security (AREA)
Abstract
本发明实施例公开了一种静态代码的扫描方法、装置、计算机设备及存储介质。所述方法包括:采用与至少一个崩溃类型对应的崩溃扫描规则,对目标静态代码进行扫描;其中,所述崩溃扫描规则根据与崩溃类型对应的典型场景崩溃代码确定;如果在所述目标静态代码中扫描到与崩溃扫描规则匹配的隐患代码,则将所述隐患代码的关联信息写入扫描报告中;在扫描结束后,输出所述扫描报告。本发明实施例可以准确检查崩溃问题,提高崩溃扫描工具的可靠性。
Description
技术领域
本发明实施例涉及计算机领域,尤其涉及一种静态代码的扫描方法、装置、计算机设备及存储介质。
背景技术
随着计算机技术的不断发展,智能设备层出不穷,尤其是智能手机。用户通过使用技术人员针对不同类型操作系统开发的应用程序,实现智能手机的各种功能。
目前,较常用的智能手机大多使用安卓(Android)系统,为了能够更好的满足用户的需要,技术人员需要不断对安卓系统进行开发维护,并在安卓系统在线运行过程中,针对其出现的各种运行错误,进行及时有效的修正。
其中,崩溃(crash)问题是安卓系统中一个非常重要的运行错误,崩溃是指出现宕机或主机、程序停止工作等情况,当遇到崩溃(crash)问题时,程序无法正常工作,甚至影响后续执行,而且可能会导致手机无法正常使用。因此,如何能在程序运行前(静态代码阶段)尽早检查出代码中存在的crash隐患并及时修复,是目前有待解决的重要问题。
发明人在实现本发明的过程中,发现现有技术存在如下缺陷:现有的基于静态代码的扫描工具中没有明确针对崩溃(crash)隐患进行扫描的工具,或者即使能够扫描出几类崩溃(crash)隐患,但是扫描结果误报率较高,准确度差。
发明内容
本发明实施例提供一种静态代码的扫描方法、装置、计算机设备及存储介质,可以在静态代码中准确检查出crash隐患代码,提高崩溃扫描工具的有效性以及可靠性。
第一方面,本发明实施例提供了一种静态代码的扫描方法,包括:
采用与至少一个崩溃类型对应的崩溃扫描规则,对目标静态代码进行扫描;
其中,所述崩溃扫描规则根据与崩溃类型对应的典型场景崩溃代码确定;
如果在所述目标静态代码中扫描到与崩溃扫描规则匹配的隐患代码,则将所述隐患代码的关联信息写入扫描报告中;
在扫描结束后,输出所述扫描报告。
第二方面,本发明实施例还提供了一种静态代码的扫描装置,包括:
目标静态代码扫描模块,用于采用与至少一个崩溃类型对应的崩溃扫描规则,对目标静态代码进行扫描;其中,所述崩溃扫描规则根据与崩溃类型对应的典型场景崩溃代码确定;
隐患代码写入模块,用于如果在所述目标静态代码中扫描到与崩溃扫描规则匹配的隐患代码,则将所述隐患代码的关联信息写入扫描报告中;
扫描报告输出模块,用于在扫描结束后,输出所述扫描报告。
第三方面,本发明实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现本发明实施例中任一所述的静态代码的扫描方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本发明实施例中任一所述的静态代码的扫描方法。
本发明实施例通过在开发阶段根据针对性的崩溃扫描规则对静态代码进行扫描,并根据扫描到的隐患代码生成扫描报告,解决了现有技术中没有针对崩溃问题的扫描工具的问题,可以覆盖现有扫描工具的扫描盲区,在系统上线前及早准确检查出存在崩溃问题的隐患代码,同时崩溃扫描规则是根据与崩溃类型对应的典型场景崩溃代码确定,可以减少误报情况,提高崩溃扫描工具的可靠性,而且可以节省复查代码的人力成本,从而可以指示用户对隐患代码进行修改,提高了代码的质量以及降低了产品的崩溃率。
附图说明
图1为本发明实施例一提供的一种静态代码的扫描方法的流程图;
图2a为本发明实施例二提供的一种静态代码的扫描方法的流程图;
图2b为本发明实施例二提供的另一种静态代码的扫描方法的流程图;
图3为本发明实施例三提供的一种静态代码的扫描装置的结构示意图;
图4为本发明实施例四提供的一种计算机设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图1为本发明实施例一提供的一种静态代码的扫描方法的流程图,本实施例可适用于在开发过程中对设定应用程序(例如安卓程序或者java程序)的静态代码进行崩溃隐患扫描的情形,该方法可以由静态代码的扫描装置来执行,该装置可采用软件和/或硬件的方式实现,并一般可集成于具有安卓系统开发功能的设备中,例如PC机。本实施例的方法具体包括如下步骤:
S110,采用与至少一个崩溃类型对应的崩溃扫描规则,对目标静态代码进行扫描,其中,所述崩溃扫描规则根据与崩溃类型对应的典型场景崩溃代码确定。
在本实施例中,崩溃类型可以是指存在崩溃隐患的代码类型,可以从造成的问题的角度进行区分,例如可以包括程序无响应(Application Not Responding,ANR)问题、强制关闭(Forse Close)问题、立碑(tombstone)问题、系统服务关闭(System Server Crash)问题等;或者还可以是从存在崩溃隐患的代码指向的对象的角度进行区分,对此本发明实施例不作具体限制。
示例性的,本实施例中的扫描方法具体可以支持扫描检查下述崩溃类型:系统API兼容性隐患、ArrayList对象使用未判空隐患、主动抛出异常未捕获处理隐患、数据库操作异常未捕获处理隐患、销毁Dialog前是否isShowing未判断隐患、通过HashMap获取对象使用未判空隐患、格式化数字异常未捕获的隐患、dismiss()方法调用前isShowing未判断的隐患、方法中存在return null返回对象直接进行方法调用隐患、使用动态载入界面的元素未判断是否属于此界面的隐患、ArrayList使用get方法获取元素未判断下标有效性的隐患、使用String.split结果未判断长度隐患、大图片解析导致OOM的隐患、查询数据库没有关闭游标导致OOM的隐患、使用String.substring前未判断String长度隐患、使用IO流后没有关闭导致OOM隐患、复写生命周期函数没有调用super函数隐患、使用除法或求余没有判断分母长度隐患、添加Fragment前未判断是否IsAdded隐患、数组下标越界隐患、使用在intent中获取的数据前未判空隐患、Activity未在AndroidManifest.xml中注册隐患、使用Bundle与使用从Bundle获取到的数据未判空隐患、在FragmentActivity中startActivityForResult的requestCode过大隐患、ListView在调用setAdapter()方法后再调用addHeader()方法隐患、Context强制转换为其它类型未判断其实例类型隐患、使用StatFs未捕捉异常隐患以及使用SD卡未检查mount隐患等。
崩溃扫描规则是与崩溃类型对应的,用于检查出存在崩溃隐患的代码的模板、方法等。崩溃扫描规则可以是根据存在崩溃隐患的代码提炼出来的规律,并进行抽象所形成的扫描规则。可以理解的是,不同的崩溃类型对应不同的崩溃扫描规则。
具体的,根据崩溃扫描规则进行扫描可以是指将崩溃扫描规则中的代表崩溃问题的代码与目标静态代码中的代码一一进行比对,当存在代码与代表崩溃问题的代码之间的相似度大于设定阈值时,确定目标静态代码中存在崩溃隐患;
或者,可以基于与所述崩溃扫描规则对应的至少一项判定条件,对所述目标静态代码中的各行代码或者所述目标静态代码中包括的各个函数体进行扫描,当确定当前扫描的代码行或者函数体满足该至少一项判定条件时,确定目标静态代码中存在崩溃隐患并可以直接在目标静态代码中定位崩溃隐患存在的位置。
其中,典型场景崩溃代码可以是指,针对一种崩溃类型来说,经常会出现崩溃问题的代码,该代码具有典型性和代表性。崩溃类型对应的典型场景崩溃代码可以是指该崩溃类型对应的最大概率(可能性最高)存在崩溃隐患的代码。相应的,在根据典型场景崩溃代码确定崩溃扫描规则后,确定出的崩溃扫描规则能够检查出目标静态代码中最大概率存在崩溃隐患的代码,进而可以提高崩溃扫描规则的可靠性和准确性,从而提高崩溃扫描方法的可靠性和准确性。
需要说明的是,操作系统在运行中报出的同一崩溃错误(例如,程序无响应)可能是由多种类型的代码错误造成的,如果仅仅追求崩溃扫描的检查广度,需要针对同一崩溃错误的各种可能错误类型均进行规则的设置,并在扫描过程中对每一种可能的错误类型进行扫描,而实际上有很多错误类型是编程人员根本不会出现的错误类型,如果对上述所有情况均扫描,这就无可避免的带来误报率提高的问题。发明人在发现上述问题后,提出了仅扫描由典型场景崩溃代码(也即:最有可能存在崩溃隐患的代码)确定的崩溃类型的扫描方式,从而进一步提高代码扫描方法的准确性。
相应的,典型场景崩溃代码可以通过人工方式去从网络上收集或者以接收用户上报的方式获取,对此,本发明实施例不做具体限制。
S120,当在所述目标静态代码中扫描到与崩溃扫描规则匹配的隐患代码时,将所述隐患代码的关联信息写入扫描报告中。
在本实施例中,隐患代码可以是指在目标静态代码中扫描出的存在有崩溃隐患的代码,隐患代码的关联信息可以是指隐患代码的位置、内容以及对应的修改方法等信息。扫描报告可以是指对目标静态代码的扫描完成后输出的扫描结果的报告,用于提示用户目标静态扫描代码的扫描结果。
可选的,将隐患代码的关联信息写入扫描报告中,包括:将隐患代码在目标静态代码中的定位信息,以及与隐患代码匹配的崩溃扫描规则对应的标准代码模板,写入扫描报告中;标准代码模板用于指导用户对隐患代码的修改。
具体的,标准代码模板可以是指该崩溃扫描规则对应的不存在崩溃隐患代码的代码段的标准写法。通过预先针对崩溃扫描规则对应设置标准代码模板,结合隐患代码的定位信息一起提供给用户,可以帮助用户快速找到隐患代码的位置并按照标准写法进行有效修复,提高代码质量,同时降低产品崩溃率,从而提高产品的用户体验。
S130,在扫描结束后,输出所述扫描报告。
本发明实施例通过在开发阶段根据针对性的崩溃扫描规则对静态代码进行扫描,并根据扫描到的隐患代码生成扫描报告,解决了现有技术中没有针对崩溃问题的扫描工具的问题,可以覆盖现有扫描工具的扫描盲区,及早准确检查出存在崩溃问题的隐患代码,同时崩溃扫描规则是根据与崩溃类型对应的典型场景崩溃代码确定,可以减少误报情况,提高崩溃扫描工具的可靠性,而且可以节省复查代码的人力成本,从而可以指示用户对隐患代码进行修改,提高了代码的质量以及降低了产品的崩溃率。
实施例二
图2a是本发明实施例二提供的一种静态代码的扫描方法的流程图,本实施例在上述实施例的基础上进行具体化,在采用与至少一个崩溃类型对应的崩溃扫描规则,对目标静态代码进行扫描之前,还包括:收集崩溃案例,所述崩溃案例包括:崩溃类型,以及与所述崩溃类型对应的异常代码;根据所述崩溃案例,统计与各所述崩溃类型分别对应的异常代码集合;筛选出各所述异常代码集合中满足相似度条件的多个异常代码作为与崩溃类型对应的典型场景崩溃代码;根据与崩溃类型对应的典型场景崩溃代码,确定与崩溃类型对应的崩溃扫描规则。如图2a所示,该方法具体包括如下步骤:
S210,收集崩溃案例,所述崩溃案例包括:崩溃类型,以及与所述崩溃类型对应的异常代码。
在本实施例中,异常代码可以是指存在该崩溃类型错误的代码,一个崩溃案例可以是指一个崩溃类型,以及该崩溃类型对应的异常代码,其中,各崩溃案例中的崩溃类型可以相同或者不同。
崩溃案例可以从多种渠道收集,可选的,收集崩溃案例可以包括:获取设定业务平台中上报的运行日志;如果在运行日志中识别出崩溃错误,则在与运行日志匹配的源代码中定位与崩溃错误对应的代码;根据崩溃错误以及定位的代码构成崩溃案例;和/或
在互联网中搜索包括设定崩溃关键词的页面,如果在搜索到的页面中与崩溃关键词的定位位置关联的搜索位置处识别出代码,则根据崩溃关键词以及识别出的代码构成崩溃案例。
具体的,设定业务平台可以是软件开发平台、系统开发平台等内部业务平台,运行日志可以是指在实际开发工程中的文档数据,用于记录在开发过程中遇到的问题以及解决方案等。可以从软件开发公司的业务平台中上报的运行日志,从中扫描是否出现崩溃问题,以及对应的异常代码,将其作为崩溃案例的来源之一。
由于用户可能会在网络中交流崩溃问题或者寻求崩溃问题的解决方案,从而可以直接从网络上进行搜索,例如在软件开发的交流论坛等网站中,更具体的,如StackOverflow网站,依据崩溃问题相关的崩溃关键词进行检索,并在崩溃关键词的最近位置处确定对应的异常代码,例如,在崩溃关键词所在的同一条信息中。崩溃关键词可以是指预先设定的与崩溃类型相关的关键词,例如,数组下标越界。
由此,通过在运行日志以及互联网中自动搜索崩溃错误以及对应的异常代码,形成崩溃案例,实现自动化收集崩溃案例,减少收集崩溃案例的人力成本,提高收集崩溃案例的效率的效果。
S220,根据所述崩溃案例,统计与各所述崩溃类型分别对应的异常代码集合。
在本实施例中,从网络中或者运行日志中收集的崩溃案例大量且杂乱无章,可以根据崩溃案例中记录的崩溃错误和崩溃关键词,统计其中的崩溃类型相同的各个异常代码,并进行归类处理后存储于对应的异常代码集合中,形成各崩溃类型以及与各崩溃类型分别对应的异常代码集合。
S230,筛选出各所述异常代码集合中满足相似度条件的多个异常代码作为与崩溃类型对应的典型场景崩溃代码。
可以理解的是,收集的崩溃案例中有许多误判为崩溃错误的案例,也有许多崩溃案例发生的概率较小,例如,与同一崩溃类型对应的异常代码集合中包括有50个异常代码,这些异常代码中,有与典型场景对应的多个相类似的异常代码,也有以小概率场景或者误判场景对应的一个或者几个异常代码。如果针对小概率场景的异常代码也对应生成崩溃扫描规则的话,既会影响扫描速度,也会带来一定的误报率。因此,需要对异常代码集合进行筛选,从中筛选出最能代表该崩溃类型的代码集合,筛选后的代码集合作为该崩溃类型对应的典型场景崩溃代码。
其中,典型场景崩溃代码的筛选方法有多种,可选的,筛选出各异常代码集合中满足相似度条件的多个异常代码作为与崩溃类型对应的典型场景崩溃代码,具体可以包括:在异常代码集合中,分别获取与各异常代码对应的代码参数信息;计算两两代码参数信息之间的相似度,并将满足相似度阈值条件的多个异常代码作为典型场景崩溃代码。
具体的,代码参数信息包括下述至少一项:代码中定义的数据类型或对象类型、代码中调用的方法、以及代码中使用的运算符等。相似度阈值条件可以是指相似度超过设定相似度阈值,同时相似的异常代码的数量超过设定数值的条件,例如,相似度阈值为70%,设定数值为8个,当一个异常代码集合中的10个异常代码之间两两的相似度均大于等于70%时,将这10个异常代码作为典型场景崩溃代码。
S240,根据与崩溃类型对应的典型场景崩溃代码,确定与崩溃类型对应的崩溃扫描规则。
在本实施例中,可以针对每个崩溃类型,从其对应的典型场景崩溃代码中分析出这些典型场景崩溃代码的共性,总结出规律并抽象为崩溃扫描规则,并针对每个崩溃扫描规则给出解决建议,如标准代码模板,最后可以将崩溃扫描规则以及对应的标准代码模板通过编码方式编入扫描工具中,以使扫描工具实现对静态代码进行崩溃隐患扫描。
可选的,根据与崩溃类型对应的典型场景崩溃代码,确定与崩溃类型对应的崩溃扫描规则,包括:将与崩溃类型对应的典型场景崩溃代码,发送至人工处理平台,并接收人工处理平台反馈的与崩溃类型对应的崩溃扫描规则。
具体的,可以通过人工平台对典型场景崩溃代码进行抽象处理形成崩溃扫描规则,由此实现准确建立崩溃扫描规则,从而提高崩溃代码的扫描的准确性。
S250,采用与至少一个崩溃类型对应的崩溃扫描规则,对目标静态代码进行扫描,其中,所述崩溃扫描规则根据与崩溃类型对应的典型场景崩溃代码确定。
S260,当在所述目标静态代码中扫描到与崩溃扫描规则匹配的隐患代码时,将所述隐患代码的关联信息写入扫描报告中。
S270,在扫描结束后,输出所述扫描报告。
在一个具体的例子中,当出现如下代码时证明出现了崩溃问题:
Exception in thread"main"java.lang.ArrayIndexOutOfBoundsException:4
at com.garfield.test.Crash.checkRange(Crash.java:11)
at com.garfield.test.Crash.main(Crash.java:5)
通过获取与其对应的一个典型场景崩溃代码为:
根据上述典型场景崩溃代码可知,该代码存在数组下标越界隐患,其具体是:由于未对getIndex()的返回值范围作出检查,在引用strArr数组元素时其下标超出了数组大小范围导致崩溃。
根据上述情况,可提炼出如下规律:当引用数组的下标超出数组的大小范围(准确地说,其范围是[0~len-1]中的正整数,len是数组的大小)时,就会触发数组下标越界异常(Array Index Out Of Bounds Exception),从而导致崩溃。
对应抽象的崩溃隐患扫描规则为:
需要对引用数组的地方进行扫描,判断是否已经对该数组的下标范围进行过有效检查。若有则判定为无崩溃隐患;若无则判定为有崩溃隐患,并写入扫描报告。
扫描报告给出扫描过程中的所有崩溃隐患,并且对每一类型的崩溃隐患,都给出修改建议(也即:标准代码模板)。如下所示:
示例性的,如图2b所示,一个崩溃隐患扫描的完成流程可以是:收集崩溃案例并进行分析,从中抽象出扫描规则,并给出对应的修改建议。将扫描规则和修改建议编入崩溃隐患扫描工具中。采用崩溃隐患扫描工具对静态源码进行代码扫描,在扫描结束后生成扫描报告,用户可以根据扫描报告中的修改建议对静态源码进行修改,并将修改后的静态源码继续采用崩溃隐患扫描工具进行扫描,判断是否还存在崩溃隐患。
由此,采用崩溃扫描工具对目标静态代码进行扫描,检测崩溃隐患,可以实现命令行的方式以及插件方式对崩溃隐患进行扫描,从而可以及时更新扫描工具,使崩溃扫描更加灵活、准确。
本发明实施例通过采用从实际崩溃案例抽象出的扫描规则对目标静态目标进行扫描,提高扫描规则的准确性,从而提高崩溃扫描的准确性,而且可以不断更新崩溃案例,从而不断更新扫描规则,使崩溃扫描更加灵活。
实施例三
图3是本发明实施例三提供的一种静态代码的扫描装置的结构示意图,如图3所示,所述装置具体包括:
目标静态代码扫描模块310,用于采用与至少一个崩溃类型对应的崩溃扫描规则,对目标静态代码进行扫描;其中,所述崩溃扫描规则根据与崩溃类型对应的典型场景崩溃代码确定;
隐患代码写入模块320,用于如果在所述目标静态代码中扫描到与崩溃扫描规则匹配的隐患代码,则将所述隐患代码的关联信息写入扫描报告中;
扫描报告输出模块330,用于在扫描结束后,输出所述扫描报告。
本发明实施例通过在开发阶段根据针对性的崩溃扫描规则对静态代码进行扫描,并根据扫描到的隐患代码生成扫描报告,解决了现有技术中没有针对崩溃问题的扫描工具的问题,可以覆盖现有扫描工具的扫描盲区,及早准确检查出存在崩溃问题的隐患代码,同时崩溃扫描规则是根据与崩溃类型对应的典型场景崩溃代码确定,可以减少误报情况,提高崩溃扫描工具的可靠性,而且可以节省复查代码的人力成本,从而可以指示用户对隐患代码进行修改,提高了代码的质量以及降低了产品的崩溃率。
进一步的,所示隐患代码写入模块320,用于:将所述隐患代码在所述目标静态代码中的定位信息,以及与所述隐患代码匹配的崩溃扫描规则对应的标准代码模板,写入所述扫描报告中;所述标准代码模板用于指导用户对所述隐患代码的修改。
进一步的,所述装置还包括:崩溃案例收集模块,用于收集崩溃案例,所述崩溃案例包括:崩溃类型,以及与所述崩溃类型对应的异常代码;异常代码统计模块,用于根据所述崩溃案例,统计与各所述崩溃类型分别对应的异常代码集合;典型场景崩溃代码筛选模块,用于筛选出各所述异常代码集合中满足相似度条件的多个异常代码作为与崩溃类型对应的典型场景崩溃代码;崩溃扫描规则确定模块,用于根据与崩溃类型对应的典型场景崩溃代码,确定与崩溃类型对应的崩溃扫描规则。
进一步的,所述崩溃案例收集模块,还用于:获取设定业务平台中上报的运行日志;如果在所述运行日志中识别出崩溃错误,则在与所述运行日志匹配的源代码中定位与所述崩溃错误对应的代码;根据所述崩溃错误以及定位的所述代码构成所述崩溃案例;和/或在互联网中搜索包括设定崩溃关键词的页面,如果在搜索到的页面中与所述崩溃关键词的定位位置关联的搜索位置处识别出代码,则根据所述崩溃关键词以及识别出的所述代码构成所述崩溃案例。
进一步的,所述典型场景崩溃代码筛选模块,还用于:在异常代码集合中,分别获取与各异常代码对应的代码参数信息;计算两两所述代码参数信息之间的相似度,并将满足相似度阈值条件的多个异常代码作为所述典型场景崩溃代码。
进一步的,所述代码参数信息包括下述至少一项:代码中定义的数据类型或对象类型、代码中调用的方法、以及代码中使用的运算符。
进一步的,所述崩溃扫描规则确定模块,用于:将与崩溃类型对应的典型场景崩溃代码,发送至人工处理平台,并接收所述人工处理平台反馈的与崩溃类型对应的崩溃扫描规则。
本发明实施例所提供的静态代码的扫描装置可执行本发明任意实施例所提供的静态代码的扫描方法,具备执行方法相应的功能模块和有益效果。
实施例四
图4为本发明实施例四提供的一种计算机设备的结构示意图。图4示出了适于用来实现本发明实施方式的示例性计算机设备401的框图。图4显示的计算机设备401仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图4所示,计算机设备401以通用计算设备的形式表现。计算机设备401的组件可以包括但不限于:一个或者多个处理器或者处理单元402,系统存储器403,连接不同系统组件(包括系统存储器403和处理单元402)的总线404。
总线404表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(Industry StandardArchitecture,ISA)总线,微通道体系结构(Micro Channel Architecture,MCA)总线,增强型ISA总线、视频电子标准协会(Video Electronics Standards Association,VESA)局域总线以及外围组件互连(Peripheral Component Interconnect,PCI)总线。
计算机设备401典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机设备401访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
系统存储器403可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(Random Access Memory,RAM)405和/或高速缓存存储器406。计算机设备401可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统407可以用于读写不可移动的、非易失性磁介质(图4未显示,通常称为“硬盘驱动器”)。尽管图4中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如紧凑磁盘只读存储器(Compact Disc Read-OnlyMemory,CD-ROM),数字视盘(Digital Video Disc-Read Only Memory,DVD-ROM)或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线404相连。存储器403可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
具有一组(至少一个)程序模块408的程序/实用工具409,可以存储在例如存储器403中,这样的程序模块408包括——但不限于——操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块408通常执行本发明所描述的实施例中的功能和/或方法。
计算机设备401也可以与一个或多个外部设备410(例如键盘、指向设备、显示器411等)通信,还可与一个或者多个使得用户能与该计算机设备401交互的设备通信,和/或与使得该计算机设备401能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(Input/Output,I/O)接口412进行。并且,计算机设备401还可以通过网络适配器413与一个或者多个网络(例如局域网(LocalArea Network,LAN),广域网(Wide Area Network,WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器413通过总线404与计算机设备401的其它模块通信。应当明白,尽管图4中未示出,可以结合计算机设备401使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、磁盘阵列(Redundant Arrays ofInexpensive Disks,RAID)系统、磁带驱动器以及数据备份存储系统等。
处理单元402通过运行存储在系统存储器403中的程序,从而执行各种功能应用以及数据处理,例如实现本发明实施例所提供的一种静态代码的扫描方法。
也即,所述处理单元执行所述程序时实现:采用与至少一个崩溃类型对应的崩溃扫描规则,对目标静态代码进行扫描;其中,所述崩溃扫描规则根据与崩溃类型对应的典型场景崩溃代码确定;如果在所述目标静态代码中扫描到与崩溃扫描规则匹配的隐患代码,则将所述隐患代码的关联信息写入扫描报告中;在扫描结束后,输出所述扫描报告。
实施例五
本发明实施例五还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本申请所有发明实施例提供的静态代码的扫描方法:所述方法包括:采用与至少一个崩溃类型对应的崩溃扫描规则,对目标静态代码进行扫描;其中,所述崩溃扫描规则根据与崩溃类型对应的典型场景崩溃代码确定;如果在所述目标静态代码中扫描到与崩溃扫描规则匹配的隐患代码,则将所述隐患代码的关联信息写入扫描报告中;在扫描结束后,输出所述扫描报告。
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、RAM、只读存储器(Read OnlyMemory,ROM)、可擦式可编程只读存储器(Erasable Programmable Read Only Memory,EPROM)、闪存、光纤、便携式CD-ROM、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、无线电频率(RadioFrequency,RF)等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括LAN或WAN——连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (10)
1.一种静态代码的扫描方法,其特征在于,包括:
采用与至少一个崩溃类型对应的崩溃扫描规则,对目标静态代码进行扫描;
其中,所述崩溃扫描规则根据与崩溃类型对应的典型场景崩溃代码确定;
如果在所述目标静态代码中扫描到与崩溃扫描规则匹配的隐患代码,则将所述隐患代码的关联信息写入扫描报告中;
在扫描结束后,输出所述扫描报告。
2.根据权利要求1所述的方法,其特征在于,所述将所述隐患代码的关联信息写入扫描报告中,包括:
将所述隐患代码在所述目标静态代码中的定位信息,以及与所述隐患代码匹配的崩溃扫描规则对应的标准代码模板,写入所述扫描报告中;
所述标准代码模板用于指导用户对所述隐患代码的修改。
3.根据权利要求1所述的方法,其特征在于,在采用与至少一个崩溃类型对应的崩溃扫描规则,对目标静态代码进行扫描之前,还包括:
收集崩溃案例,所述崩溃案例包括:崩溃类型,以及与所述崩溃类型对应的异常代码;
根据所述崩溃案例,统计与各所述崩溃类型分别对应的异常代码集合;
筛选出各所述异常代码集合中满足相似度条件的多个异常代码作为与崩溃类型对应的典型场景崩溃代码;
根据与崩溃类型对应的典型场景崩溃代码,确定与崩溃类型对应的崩溃扫描规则。
4.根据权利要求3所述的方法,其特征在于,所述收集崩溃案例,包括:
获取设定业务平台中上报的运行日志;如果在所述运行日志中识别出崩溃错误,则在与所述运行日志匹配的源代码中定位与所述崩溃错误对应的代码;根据所述崩溃错误以及定位的所述代码构成所述崩溃案例;和/或
在互联网中搜索包括设定崩溃关键词的页面,如果在搜索到的页面中与所述崩溃关键词的定位位置关联的搜索位置处识别出代码,则根据所述崩溃关键词以及识别出的所述代码构成所述崩溃案例。
5.根据权利要求3所述的方法,其特征在于,所述筛选出各所述异常代码集合中满足相似度条件的多个异常代码作为与崩溃类型对应的典型场景崩溃代码,包括:
在异常代码集合中,分别获取与各异常代码对应的代码参数信息;
计算两两所述代码参数信息之间的相似度,并将满足相似度阈值条件的多个异常代码作为所述典型场景崩溃代码。
6.根据权利要求5所述的方法,其特征在于,所述代码参数信息包括下述至少一项:代码中定义的数据类型或对象类型、代码中调用的方法、以及代码中使用的运算符。
7.根据权利要求3所述的方法,其特征在于,所述根据与崩溃类型对应的典型场景崩溃代码,确定与崩溃类型对应的崩溃扫描规则,包括:
将与崩溃类型对应的典型场景崩溃代码,发送至人工处理平台,并接收所述人工处理平台反馈的与崩溃类型对应的崩溃扫描规则。
8.一种静态代码的扫描装置,其特征在于,包括:
目标静态代码扫描模块,用于采用与至少一个崩溃类型对应的崩溃扫描规则,对目标静态代码进行扫描;其中,所述崩溃扫描规则根据与崩溃类型对应的典型场景崩溃代码确定;
隐患代码写入模块,用于如果在所述目标静态代码中扫描到与崩溃扫描规则匹配的隐患代码,则将所述隐患代码的关联信息写入扫描报告中;
扫描报告输出模块,用于在扫描结束后,输出所述扫描报告。
9.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1-7中任一所述的静态代码的扫描方法。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-7中任一所述的静态代码的扫描方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810827077.4A CN109144852A (zh) | 2018-07-25 | 2018-07-25 | 静态代码的扫描方法、装置、计算机设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810827077.4A CN109144852A (zh) | 2018-07-25 | 2018-07-25 | 静态代码的扫描方法、装置、计算机设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109144852A true CN109144852A (zh) | 2019-01-04 |
Family
ID=64798317
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810827077.4A Pending CN109144852A (zh) | 2018-07-25 | 2018-07-25 | 静态代码的扫描方法、装置、计算机设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109144852A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110175128A (zh) * | 2019-05-29 | 2019-08-27 | 北京百度网讯科技有限公司 | 一种相似代码案例获取方法、装置、设备和存储介质 |
CN111382077A (zh) * | 2020-03-13 | 2020-07-07 | 北京奇艺世纪科技有限公司 | 应用程序崩溃原因定位方法、装置、电子设备及存储介质 |
CN112000577A (zh) * | 2020-08-25 | 2020-11-27 | 得到(天津)文化传播有限公司 | 一种代码检查方法、装置、电子设备和存储介质 |
CN112817847A (zh) * | 2021-01-28 | 2021-05-18 | 杭州网易再顾科技有限公司 | 数据处理任务的测试方法、装置、电子设备及存储介质 |
WO2024012003A1 (zh) * | 2022-07-13 | 2024-01-18 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、设备、存储介质和程序产品 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105320591A (zh) * | 2014-07-25 | 2016-02-10 | 腾讯科技(深圳)有限公司 | 代码检测方法及装置 |
CN107239403A (zh) * | 2017-07-27 | 2017-10-10 | 广州云测信息技术有限公司 | 一种问题定位方法和设备 |
CN107506256A (zh) * | 2017-09-07 | 2017-12-22 | 北京京东尚科信息技术有限公司 | 一种崩溃数据监控的方法和装置 |
-
2018
- 2018-07-25 CN CN201810827077.4A patent/CN109144852A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105320591A (zh) * | 2014-07-25 | 2016-02-10 | 腾讯科技(深圳)有限公司 | 代码检测方法及装置 |
CN107239403A (zh) * | 2017-07-27 | 2017-10-10 | 广州云测信息技术有限公司 | 一种问题定位方法和设备 |
CN107506256A (zh) * | 2017-09-07 | 2017-12-22 | 北京京东尚科信息技术有限公司 | 一种崩溃数据监控的方法和装置 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110175128A (zh) * | 2019-05-29 | 2019-08-27 | 北京百度网讯科技有限公司 | 一种相似代码案例获取方法、装置、设备和存储介质 |
CN110175128B (zh) * | 2019-05-29 | 2023-04-07 | 北京百度网讯科技有限公司 | 一种相似代码案例获取方法、装置、设备和存储介质 |
CN111382077A (zh) * | 2020-03-13 | 2020-07-07 | 北京奇艺世纪科技有限公司 | 应用程序崩溃原因定位方法、装置、电子设备及存储介质 |
CN111382077B (zh) * | 2020-03-13 | 2023-09-01 | 北京奇艺世纪科技有限公司 | 应用程序崩溃原因定位方法、装置、电子设备及存储介质 |
CN112000577A (zh) * | 2020-08-25 | 2020-11-27 | 得到(天津)文化传播有限公司 | 一种代码检查方法、装置、电子设备和存储介质 |
CN112000577B (zh) * | 2020-08-25 | 2023-12-26 | 得到(天津)文化传播有限公司 | 一种代码检查方法、装置、电子设备和存储介质 |
CN112817847A (zh) * | 2021-01-28 | 2021-05-18 | 杭州网易再顾科技有限公司 | 数据处理任务的测试方法、装置、电子设备及存储介质 |
WO2024012003A1 (zh) * | 2022-07-13 | 2024-01-18 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置、设备、存储介质和程序产品 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109144852A (zh) | 静态代码的扫描方法、装置、计算机设备及存储介质 | |
CN106294134B (zh) | 代码的崩溃定位方法及装置 | |
CN111090641B (zh) | 数据处理方法及装置、电子设备、存储介质 | |
CN106294222A (zh) | 一种确定pcie设备与插槽对应关系的方法及装置 | |
CN110348471B (zh) | 异常对象识别方法、装置、介质及电子设备 | |
CN110515758A (zh) | 一种故障定位方法、装置、计算机设备及存储介质 | |
CN109815147A (zh) | 测试案例生成方法、装置、服务器和介质 | |
CN111258832B (zh) | 一种接口参数校验方法、装置、设备及介质 | |
CN112445775A (zh) | 一种光刻机的故障分析方法、装置、设备和存储介质 | |
CN115686908A (zh) | 一种数据处理方法及相关设备 | |
CN112306854B (zh) | 用例测试方法、装置、电子设备及存储介质 | |
CN105892932A (zh) | 用于磁盘数据管理的方法和装置 | |
CN111104400A (zh) | 数据归一方法及装置、电子设备、存储介质 | |
CN110175128A (zh) | 一种相似代码案例获取方法、装置、设备和存储介质 | |
CN111738290B (zh) | 图像检测方法、模型构建和训练方法、装置、设备和介质 | |
CN116805012A (zh) | 多模态知识图谱的质量评估方法及装置、存储介质、设备 | |
CN115022201B (zh) | 一种数据处理功能测试方法、装置、设备及存储介质 | |
CN116340172A (zh) | 基于测试场景的数据收集方法、装置及测试用例检测方法 | |
CN114706856A (zh) | 故障处理方法及装置、电子设备和计算机可读存储介质 | |
CN110083807B (zh) | 合同的修改影响自动预测方法、装置、介质及电子设备 | |
CN113254248A (zh) | 一种故障诊断方法、系统及计算设备 | |
CN113238940A (zh) | 一种接口测试结果的比对方法、装置、设备和存储介质 | |
CN111274143A (zh) | 埋点测试方法、装置、设备及存储介质 | |
CN110134435A (zh) | 一种代码修复案例获取方法、装置、设备及存储介质 | |
CN115242612B (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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190104 |