CN106201890B - 一种应用的性能优化方法及服务器 - Google Patents
一种应用的性能优化方法及服务器 Download PDFInfo
- Publication number
- CN106201890B CN106201890B CN201610567209.5A CN201610567209A CN106201890B CN 106201890 B CN106201890 B CN 106201890B CN 201610567209 A CN201610567209 A CN 201610567209A CN 106201890 B CN106201890 B CN 106201890B
- Authority
- CN
- China
- Prior art keywords
- performance
- code
- intended application
- module
- performance issue
- 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
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/3668—Software testing
- G06F11/3672—Test management
-
- 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/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
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)
Abstract
本发明实施例公开了一种应用的性能优化方法及服务器,用于解决现有应用在性能优化时存在耗时严重和效率低的问题,通过无需设计测试场景,有效应用的性能优化效率以及节约性能优化所需的时间。所述方法包括:确定待测试的目标应用;使用静态代码扫描规则对所述目标应用进行扫描分析,所述静态代码扫描规则包括:对已存在的性能问题对应的代码特征进行提取后生成的问题代码;若所述目标应用中存在所述静态代码扫描规则中包括的问题代码,则确定所述目标应用存在性能问题;获取所述目标应用的性能优化策略,根据所述性能优化策略对所述目标应用进行性能优化。
Description
技术领域
本发明涉及测试领域,具体涉及一种应用的性能优化方法及服务器。
背景技术
目前,对应用进行性能测试时,需要设计测试场景,然后通过进入测试场景,使用测试工具进行数据采集,根据采集的数据来分析应用的代码是否存在性能问题,若存在性能问题,则对性能问题进行分析从而在代码中定位性能问题,并对引起性能问题的代码进行优化,从而达到优化代码性能的目的。
但是,设计测试场景和采集数据以及定位性能问题对应的代码的过程,非常耗时,性能优化效率差。
发明内容
本发明实施例提供了一种应用的性能优化方法及服务器,用于解决现有应用在性能优化存在耗时严重和效率低的问题,通过无需设计测试场景,有效提高应用的性能优化效率以及节约性能优化所需的时间。
本发明第一方面提供一种应用的性能优化方法,包括:
确定待测试的目标应用;
使用静态代码扫描规则对所述目标应用进行扫描分析,所述静态代码扫描规则包括:对已存在的性能问题对应的代码特征进行提取后生成的问题代码;
若所述目标应用中存在所述静态代码扫描规则中包括的问题代码,则确定所述目标应用存在性能问题;
获取所述目标应用的性能优化策略,根据所述性能优化策略对所述目标应用进行性能优化。
本发明第二方面提供一种服务器,包括:
确定模块,用于确定待测试的目标应用;
分析模块,用于使用静态代码扫描规则对所述确定模块确定的所述目标应用进行扫描分析,所述静态代码扫描规则包括:对已存在的性能问题对应的代码特征进行提取后生成的问题代码;
判断模块,判断所述目标应用中是否存在所述静态代码扫描规则中包括的问题代码;
所述确定模块,还用于若所述目标应用中存在所述静态代码扫描规则中包括的问题代码,则确定所述目标应用存在性能问题;
获取模块,用于获取所述目标应用的性能优化策略;
性能优化模块,根据所述获取模块获取的所述性能优化策略对所述目标应用进行性能优化。
从以上技术方案可以看出,首先确定待测试的目标应用,然后使用静态代码扫描规则对所述目标应用进行扫描分析,而所述静态代码扫描规则包括对已存在的性能问题对应的代码特征进行提取后生成的问题代码。这样,无需涉及测试场景,直接判断目标应用是否存在所述静态代码扫描规则中包括的所述问题代码,若是,则确定所述目标应用存在性能问题,然后获取所述目标应用的性能优化策略,根据所述性能优化策略对所述目标应用进行性能优化,可见,直接通过静态代码扫描规则就可以确定出目标应用的性能问题,从而对目标应用进行性能优化,无需设计测试场景,有效提高应用的性能优化效率以及节约性能优化所需的时间。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例中应用的性能优化系统的一个框架示意图;
图2为本发明实施例中服务器的一个结构示意图;
图3为本发明实施例中应用的性能优化方法的一个实施例示意图;
图4为本发明实施例中应用的性能优化方法的另一个实施例示意图;
图5为本发明实施例中应用的性能优化方法的另一个实施例示意图;
图6a为本发明实施例中应用的性能优化方法的一个应景场景示意图;
图6b为本发明实施例中应用的性能优化方法的另一个应景场景示意图;
图6c为本发明实施例中应用的性能优化方法的另一个应景场景示意图;
图6d为本发明实施例中应用的性能优化方法的另一个应景场景示意图;
图6e为本发明实施例中应用的性能优化方法的另一个应景场景示意图;
图7为本发明实施例中服务器的另一个结构示意图;
图8为本发明实施例中服务器的另一个结构示意图;
图9本发明实施例中服务器的另一个结构示意图。
具体实施方式
本发明实施例提供了一种应用的性能优化方法及服务器,用于解决现有应用在性能优化存在耗时严重和效率低的问题,通过无需设计测试场景,有效提高应用的性能优化效率以及节约性能优化所需的时间。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
在介绍本发明实施例之前,先介绍一下本发明所涉及的应用,所述应用可以是即时通讯软件应用,例如:微信,微博,QQ等。也可以是一些游戏应用,例如:unity引擎开发出的一些游戏应用,包括网页游戏,单机游戏,手机游戏等,其中,该网页游戏包括QQ乐团,绝代双骄等,该单机游戏包括:侠客风云传,捣蛋猪等,该手机游戏包括:神庙逃亡,王者之剑等,此处不做具体限定。其中,目前很多游戏应用是unity3d引擎开发的,unity3d引擎是一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。
unity3d引擎是一个用纯C语言编写的游戏开发工具,简洁实用,用于各种规模的嵌入式项目,当然,只要是纯C语言的项目,unity3d引擎都可以适用。unity3d引擎的编辑器运行于在Windows和Mac OS X下,可发布游戏至Windows、Mac、Wii、iPhone、Windows phone8和Android平台,也可以利用unity web player插件发布网页游戏,支持Mac和Windows的网页浏览,它的网页播放器也被Mac widgets所支持。
下面,介绍一下本发明涉及的应用的性能优化系统。如图1所示,所述应用的性能优化系统包括服务器和终端,其中,所述服务器与所述终端之间实现通信连接。其中,所述终端可以是电脑,手机,笔记本,个人数字助理(英文全称:Personal Digital Assistant,缩写:PDA)、车载电脑等任意终端设备,此处不做具体限定。所述服务器可以是网页(Web)服务器,扫描服务器(例如:C#静态代码扫描TscSharp服务器)、数据存储服务器等,在一些可能的场景中,可以利用这些服务器的功能集成于一个服务器,当然,在另一些可能的场景中,也可以分别通过这些服务器执行相应的功能,此处不做具体限定。在实际应用中,在终端上安装应用,在终端上运行应用时,可能涉及应用的性能是否需要优化的问题,而服务器判断应用的性能是否需要优化体现在测试应用的代码,其中,可以是一个应用对应一套代码,也可以是多个应用对应一套代码,此处不做限定,通过测试应用的代码来判断应用是否需要性能优化。
如图2所示,对服务器的具体结构进行介绍,所述服务器100包括:射频(英文全称:Radio Frequency,缩写:RF)电路110、存储器120、处理器130、以及电源140等部件。本领域技术人员可以理解,图2中示出的服务器100的结构并不构成对服务器的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
RF电路110可用于收发信息,例如:信号的接收和发送,通常,RF电路110包括但不限于天线、至少一个放大器、收发信机、耦合器、低噪声放大器(英文全称:Low NoiseAmplifier,缩写:LNA)、双工器等。此外,RF电路110还可以通过无线通信与网络和终端等其他设备通信。上述无线通信可以使用任一通信标准或协议,包括但不限于全球移动通讯系统(英文全称:Global System of Mobile communication,缩写:GSM)、通用分组无线服务(英文全称:General Packet Radio Service,缩写:GPRS)、码分多址(英文全称:CodeDivision Multiple Access,缩写:CDMA)、宽带码分多址(英文全称:Wideband CodeDivision Multiple Access,缩写:WCDMA)、长期演进(英文全称:Long Term Evolution,缩写:LTE)、电子邮件、短消息服务(英文全称:Short Messaging Service,缩写:SMS)等。
存储器120可用于存储软件程序以及模块,处理器130通过运行存储在存储器120的软件程序以及模块,从而执行服务器100的各种功能应用以及数据处理。存储器120可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据服务器100的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器120可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
处理器130是服务器100的控制中心,利用各种接口和线路连接整个服务器100的各个部分,通过运行或执行存储在存储器120内的软件程序和/或模块,以及调用存储在存储器120内的数据,执行服务器100的各种功能和处理数据,从而对服务器100进行整体监控。可选的,处理器130可包括一个或多个处理单元;优选的,处理器130可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器130中。
服务器100还包括给各个部件供电的电源140(比如电池),优选的,电源可以通过电源管理系统与处理器130逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。
尽管未示出,所述服务器100还可以包括输入单元、显示单元等,在此不再赘述。
在本发明实施例中,所述处理器130用于执行以下步骤:
确定待测试的目标应用;
使用静态代码扫描规则对所述目标应用进行扫描分析,所述静态代码扫描规则包括:对已存在的性能问题对应的代码特征进行提取后生成的问题代码;
若所述目标应用中存在所述静态代码扫描规则中包括的问题代码,则确定所述目标应用存在性能问题;
获取所述目标应用的性能优化策略,根据所述性能优化策略对所述目标应用进行性能优化。
在一些可能的实现方式中,所述处理器130还用于确定待测试的目标应用之前,从问题来源库中获取已存在的性能问题;
解析所述已存在的性能问题对应的代码特征,生成所述性能问题对应的问题代码;
将所述性能问题对应的问题代码存入性能问题经验库。
在另一些可能的实现方式中,所述处理器130用于根据所述目标应用存在的性能问题从所述性能问题经验库中获取所述目标应用的所述性能优化策略。
在另一些可能的实现方式中,所述处理器130用于确定所述目标应用的代码对应的作用域函数;
判断所述作用域函数是否满足预置的函数类型;
若所述作用域函数满足所述预置的函数类型,获取所述作用域函数的函数名;
判断所述函数名是否为预置的函数名;
若是,对所述作用域函数包括的符号单元进行语法分析;
判断所述符号单元是否存在语法错误,若是,确定所述目标应用的代码是问题代码,若不是,确定所述目标应用的代码不是问题代码。
在另一些可能的实现方式中,所述处理器130还用于根据所述性能优化策略对所述目标应用进行性能优化之后,使用所述静态代码扫描规则对性能优化后的目标应用进行扫描分析;
若所述性能优化后的目标应用中不存在所述静态代码扫描规则中包括的问题代码,则确定所述性能优化后的目标应用不存在性能问题。
请参阅图3,本发明实施例中应用的性能优化方法的一个实施例示意图,具体流程如下:
步骤301、确定待测试的目标应用;
在本发明实施例中,所述待测试的目标应用可以是任何用于安装在终端上的应用,例如:即时通讯软件应用,包括:微信,QQ,微博等,又如:游戏应用,包括:王者之剑,神庙逃亡等,此处不做具体限定。
步骤302、使用静态代码扫描规则对所述目标应用进行扫描分析,所述静态代码扫描规则包括:对已存在的性能问题对应的代码特征进行提取后生成的问题代码;
本发明实施例中,所述静态代码扫描规则是服务器提前设置的,当确定待测试的目标应用后,进一步使用静态代码扫描规则对所述目标应用进行扫描分析。
在一些可能的实现方式中,所述使用静态代码扫描规则对所述目标应用进行扫描分析,包括:
确定所述目标应用的代码对应的作用域函数;
判断所述作用域函数是否满足预置的函数类型;
若所述作用域函数满足所述预置的函数类型,获取所述作用域函数的函数名;
判断所述函数名是否为预置的函数名;
若是,对所述作用域函数包括的符号单元进行语法分析;
判断所述符号单元是否存在语法错误,若是,确定所述目标应用的代码是问题代码,若不是,确定所述目标应用的代码不是问题代码。
其中,所述预置的函数类型可以是所述作用域函数的语法中设置的函数类型,所述预置的函数名可以是update或FixedUpdate或LateUpdate等,此处不做具体限定。
在实际应用中,服务器可以借助静态代码扫描工具(例如:TscSharp扫描工具,其中,TscSharp#是一款基于编译器前端实现原理的C#语言静态代码扫描工具)对所述目标应用进行扫描分析,进而输出静态扫描分析报告,其中,静态代码扫描工具由开发人员提前在对应的扫描服务器上设置,整个测试过程无需设计应用的性能优化场景、无需采集性能数据、无需调试分析定位等步骤,通过静态代码扫描工具自动扫描输出性能风险点,直接定位到目标应用的代码行,从而有效提高了应用性能测试的效率,也极大地降低了应用性能测试的成本。
步骤303、判断所述目标应用中是否存在所述静态代码扫描规则中包括的问题代码,若是,执行步骤304;
可见,对所述目标应用扫描分析的结果就是确定出所述目标应用中存在所述述静态代码扫描规则中包括的所述问题代码,或者,所述目标应用中不存在所述述静态代码扫描规则中包括的所述问题代码。
步骤304、确定所述目标应用存在性能问题;
与现有技术不同的是,当所述目标应用中存在所述述静态代码扫描规则中包括的所述问题代码,则直接定位出所述目标应用存在性能问题,而无需通过发现应用有性能问题,然后耗时、耗力的定位出所述性能问题对应的代码,整个过程简单,快速,从而有效提高了确定应用存在性能问题的效率。
步骤305、获取所述目标应用的性能优化策略;
在本发明实施例中,当确定所述目标应用存在性能问题后,则获取所述目标应用的性能高优化策略,其中,所述性能优化策略存储于服务器中。
在一些可能的实现方式中,服务器根据所述目标应用存在的性能问题从所述性能问题经验库中获取所述目标应用的所述性能优化策略。
步骤306、根据所述性能优化策略对所述目标应用进行性能优化。
在实际应用中,由于定位性能问题直接定位到应用的代码行,无需很繁杂的定位流程,则可直接根据性能优化策略对所述目标应用进行性能优化。
请参阅图4,本发明实施例中应用的性能优化方法的另一个实施例示意图,具体流程如下:
步骤401、从问题来源库中获取已存在的性能问题;
在实际应用中,以腾讯公司旗下的游戏应用神庙逃亡为例,可通过腾讯的官方文档,该神庙逃亡游戏应用的相关技术论坛以及该神庙逃亡游戏应用的项目案例等多种渠道对应的问题来源库中获取已存在的多种性能问题。例如:在腾讯游戏应用的官方文档中记载神庙逃亡游戏应用的代码存在一些性能问题,例如:所述性能问题为更新数据(update)中使用循环(foreach)语句会造成大量的垃圾收集器(英文全称:Garbage Collection,缩写:gc)开销。
步骤402、解析所述已存在的性能问题对应的代码特征,生成所述性能问题对应的问题代码;
在实际应用中,以静态扫描工具TscSharp为例,可通过预处理环节,将目标应用的代码处理成相对规范的字节流和C#语言中的预处理命令,然后再由语法解析,输出以token为单位的符号流,所述符号流中包括所述已存在的性能问题对应的代码特征。
例如:语法解析涉及的数据结构包括:符号单元(token)和符号单元序列(tokenList)和作用域(scope)。其中,token是进行语法分析以及静态代码扫描规则中最基本的单位,除了包含该token的字符串值以外,还包含与该token相关联的其他属性特征,例如:token类型(数字、变量、函数、关键字等),token行号、指向上一个(或下一个)token的指针;tokenList属于语法单元序列,本质上是一个双向链表,维护一个代码中所有的token;Scope表示代码作用域的数据结构,下面举例说明一下scope函数的数据结构:
其中,Static用于表示scope函数的定义,{用于表示scope函数的开始,}用于表示scope函数的结束,Console用于表示scope函数的内容。
在实际应用中,通过语法解析出所述已存在的性能问题对应的代码特征,然后根据所述代码特征直接生成性能问题对应的问题代码,或者根据所述代码特征类推,扩大代码特征的范围,从而根据扩大范围后的代码特征生成性能问题对应的问题代码。
步骤403、将所述性能问题对应的问题代码存入性能问题经验库;
在实际应用中,为了后续直接从性能问题经验库中获取所述问题代码,可将所述各种性能问题分别对应的问题代码存入性能问题经验库,从而方便后续检测目标应用中是否存在问题代码。
在实际应用中,所述性能问题经验库中除了保存问题代码,还包括以下内容,具体如下存储列表:
在一些可能的实现方式中,将所述性能问题对应的问题代码存入性能问题经验库之后,根据所述性能问题经验库中保存的问题代码创建所述静态代码扫描规则。
在实际应用中,获取所述性能问题经验库中保存的问题代码的代码特性,例如:
根据上述void update、void FixedUpdate、void LateUpdate这3个代码特性创建静态代码扫描规则,其中,所述扫描规则中包括新增的检查项CS_ForeachInUpdate(update中调用foreach语句)。
步骤404、确定待测试的目标应用;
步骤405、使用静态代码扫描规则对所述目标应用进行扫描分析,所述静态代码扫描规则包括:对已存在的性能问题对应的代码特征进行提取后生成的问题代码;
步骤406、判断所述目标应用中是否存在所述静态代码扫描规则中包括的问题代码,若是,执行步骤407;
步骤407、确定所述目标应用存在性能问题;
步骤408、获取所述目标应用的性能优化策略;
步骤409、根据所述性能优化策略对所述目标应用进行性能优化。
需要说明的是,步骤404至步骤409与图3所示的步骤301至步骤306相同或者相似,具体可参阅步骤301至步骤306的描述,此处不再赘述。
请参阅图5,本发明实施例中应用的性能优化方法的另一个实施例示意图,具体流程如下:
步骤501、从问题来源库中获取已存在的性能问题;
步骤502、解析所述已存在的性能问题对应的代码特征,生成所述性能问题对应的问题代码;
步骤503、将所述性能问题对应的问题代码存入性能问题经验库;
在一些可能的实现方式中,将所述性能问题对应的问题代码存入性能问题经验库之后,根据所述性能问题经验库中保存的问题代码创建所述静态代码扫描规则。
步骤504、确定待测试的目标应用;
步骤505、使用静态代码扫描规则对所述目标应用进行扫描分析,所述静态代码扫描规则包括:对已存在的性能问题对应的代码特征进行提取后生成的问题代码;
在一些可能的实现方式中,所述使用静态代码扫描规则对所述目标应用进行扫描分析,包括:
确定所述目标应用的代码对应的作用域函数;
判断所述作用域函数是否满足预置的函数类型;
若所述作用域函数满足所述预置的函数类型,获取所述作用域函数的函数名;
判断所述函数名是否为预置的函数名;
若是,对所述作用域函数包括的符号单元进行语法分析;
判断所述符号单元是否存在语法错误,若是,确定所述目标应用的代码是问题代码,若不是,确定所述目标应用的代码不是问题代码。
步骤506、判断所述目标应用中是否存在所述静态代码扫描规则中包括的问题代码,若是,执行步骤507;
步骤507、确定所述目标应用存在性能问题;
步骤508、获取所述目标应用的性能优化策略;
在一些可能的实现方式中,根据所述目标应用存在的性能问题从所述性能问题经验库中获取所述目标应用的所述性能优化策略。
步骤509、根据所述性能优化策略对所述目标应用进行性能优化;
需要说明的是,步骤501至步骤509与图4所示的步骤401至步骤409相同或者相似,具体可参阅步骤401至步骤409的描述,此处不再赘述。
步骤510、使用所述静态代码扫描规则对性能优化后的目标应用进行扫描分析;
步骤511、判断所述性能优化后的目标应用中是否存在所述静态代码扫描规则中包括的问题代码,若否,执行步骤512。
步骤512、确定所述性能优化后的目标应用不存在性能问题。
在实际应用中,根据所述性能优化策略对所述目标应用进行性能优化后,为了进一步判断出所述性能优化后的目标应用是否还存在性能问题,则使用所述静态代码扫描规则对所述性能优化后的目标应用进行扫描分析,具体扫描分析的过程如上述对未进行性能优化前的目标应用扫描分析的描述,此处不再赘述。
在实际应用中,可以从所述目标应用的代码块中先提取出第一代码,其中,代码块中包括至少一个代码,服务器可以通过依次提取所述代码块中的各个代码,进而执行对所述各个代码的测试,或者,服务器只提取某个代码或者某类代码,进而执行对某个代码或者某类代码的测试,以提取第一代码为例,所述第一代码可以看作是所述代码块中的一个代码,或者一类(同一类型的,例如:具有相同的数据结构或者语法)代码等,此处不做具体限定。然后,根据静态代码扫描规则对所述第一代码进行扫描分析,确定所述第一代码是否属于所述静态代码扫描规则中包括的问题代码,若是,则从性能问题经验库中获取所述问题代码的性能优化策略,然后对所述第一代码进行性能优化,后继续使用静态代码扫描规则对所述性能优化后的第一代码进行扫描分析,若性能优化后的第一代码不属于所述问题代码,则将性能优化后的第一代码替换到代码块中。
当然,在实际应用中,从代码块中提取出第二代码,进一步使用所述静态代码扫描规则对所述第二代码进行扫描分析,判断所述第二代码是否属于所述问题代码,以此类推,所述服务器提取所代码块中的各个代码,分别进行扫描分析,从而完成对整个代码块的扫描分析。可见,通过静态代码扫描分析直接定位目标应用的问题代码,简单,快速。
需要说明的是,上述方法实施例的步骤可以直接体现为服务器中的硬件处理器执行完成,或者用服务器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。
下面介绍一下应用的性能优化方法的应用场景,主要涉及以下三个内容:
输入:在终端的网页(Web)上进行用户操作界面(英文全称:user interface,缩写:UI)的操作,输入应用对应的代码,以应用为某游戏为例,例如:在手游《王者荣耀》、《穿越火线》、《全民突击》、《全民超神》等。
处理:自动获取所述游戏的代码,使用TscSharp静态代码扫描工具扫描所述代码,静态分析所述代码中是否存在的非渲染层面的性能风险。
输出:输出存在性能风险的代码文件、对应行号,以及问题代码片段等。例如:在手游《王者荣耀》、《穿越火线》、《全民突击》、《全民超神》等中发现update中使用foreach,update中使用new等严重影响性能的问题代码,进而输出所述问题代码。
本发明的具体操作流程如下:
步骤1、如图6a所示,以终端为电脑为例,在电脑上用浏览器打开TscSharp的Web页面:http://tscancode.oa.com/,点击项目配置(例如:目标应用),填写项目信息,例如:开放源代码的版本控制系统(英文全称:Subversion,缩写:svn)等信息。
步骤2、配置扫描任务,如图6b所示,所述当前项目为穿越火线(英文全称:CrossFire,缩写:CF)手游Client,则进一步配置所述CF手游的扫描日期和扫描时间,当配置完成后可选择“保存”进行保存所述扫描配置,若无需执行所述扫描配置,可进行相应的修改,例如:点击“清空任务”。
需要说明的是,除步骤3中配置定时扫描任务外,可以手动触发扫描,如图6c所示,点击左上角的“扫描”,通过扫描进一步判断所述CF手游是否有已存在的性能问题。
步骤3、如图6d所示,扫描完成后,通过社交工具通知用户,用户可在页面上查看扫描结果,其中,所述社交工具包括邮件、短信、或者一些即时通讯软件,例如:腾讯通(英文全称:Real Time eXchange,缩写:RTX)等。
步骤4、如图6e所示,若步骤3中的扫描结果中发现所述CF手游的代码存在性能问题,则用户针对所述出现性能问题的代码进行性能优化,当执行完性能优化后,再次点击“扫描”按钮手动触发扫描,验证性能优化后的代码是否还存在性能问题。
为便于更好的实施本发明实施例的上述相关方法,下面还提供用于配合上述方法的相关装置。
请参阅图7,本发明实施例中服务器700的一个结构示意图,包括:确定模块701,分析模块702,判断模块703,获取模块704以及性能优化模块705。
确定模块701,用于确定待测试的目标应用;
分析模块702,用于使用静态代码扫描规则对所述确定模块701确定的所述目标应用进行扫描分析,所述静态代码扫描规则包括:对已存在的性能问题对应的代码特征进行提取后生成的问题代码;
判断模块703,判断所述目标应用中是否存在所述静态代码扫描规则中包括的问题代码;
所述确定模块701,还用于若所述目标应用中存在所述静态代码扫描规则中包括的问题代码,则确定所述目标应用存在性能问题;
获取模块704,用于获取所述目标应用的性能优化策略;
性能优化模块705,根据所述获取模块704获取的所述性能优化策略对所述目标应用进行性能优化。
在图7所示的基础上,请参阅图8,所述服务器700还包括:
所述获取模块704,还用于所述确定模块701确定待测试的目标应用之前,从问题来源库中获取已存在的性能问题;
解析模块706,用于解析所述获取模块704获取的所述已存在的性能问题对应的代码特征;
生成模块707,用于根据所述解析模块706解析出的所述已存在的性能问题对应的代码特征生成性能问题对应的问题代码;
保存模块708,用于将所述生成模块707生成的所述性能问题对应的问题代码存入性能问题经验库。
在图8所示的基础上,请参阅图9,所述服务器700还包括:
创建模块709,用于所述保存模块708将所述性能问题对应的问题代码存入性能问题经验库之后,根据所述性能问题经验库中保存的问题代码创建所述静态代码扫描规则。
在一些可能的实现方式中,所述获取模块704具体用于根据所述目标应用存在的性能问题从所述性能问题经验库中获取所述目标应用的所述性能优化策略。
在另一些可能的实现方式中,所述分析模块702具体用于确定所述目标应用的代码对应的作用域函数;判断所述作用域函数是否满足预置的函数类型;若所述作用域函数满足所述预置的函数类型,获取所述作用域函数的函数名;判断所述函数名是否为预置的函数名;若是,对所述作用域函数包括的符号单元进行语法分析;判断所述符号单元是否存在语法错误,若是,确定所述目标应用的代码是问题代码,若不是,确定所述目标应用的代码不是问题代码。
在另一些可能的实现方式中,所述分析模块702,还用于在所述性能优化模块705根据所述性能优化策略对所述目标应用进行性能优化之后,使用所述静态代码扫描规则对性能优化后的目标应用进行扫描分析;
所述判断模块703,还用于判断所述性能优化后的目标应用中是否存在所述静态代码扫描规则中包括的问题代码;
所述确定模块701,还用于若所述性能优化后的目标应用中不存在所述静态代码扫描规则中包括的问题代码,则确定所述性能优化后的目标应用不存在性能问题。
综上,首先确定待测试的目标应用,然后使用静态代码扫描规则对所述目标应用进行扫描分析,而所述静态代码扫描规则包括对已存在的性能问题对应的代码特征进行提取后生成的问题代码。这样,无需涉及测试场景,直接判断目标应用是否存在所述静态代码扫描规则中包括的所述问题代码,若是,则确定所述目标应用存在性能问题,然后获取所述目标应用的性能优化策略,根据所述性能优化策略对所述目标应用进行性能优化,可见,直接通过静态代码扫描规则就可以确定出目标应用的性能问题,从而对目标应用进行性能优化,无需设计测试场景,有效提高应用的性能优化效率以及节约性能优化所需的时间。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种应用的性能优化方法,其特征在于,包括:
确定待测试的目标应用;
确定所述目标应用的代码对应的作用域函数;
判断所述作用域函数是否满足预置的函数类型;
若所述作用域函数满足所述预置的函数类型,获取所述作用域函数的函数名;
判断所述函数名是否为预置的函数名;
若是,对所述作用域函数包括的符号单元进行语法分析;
判断所述符号单元是否存在语法错误,若是,确定所述目标应用的代码是问题代码,若不是,确定所述目标应用的代码不是问题代码;
若所述目标应用中存在问题代码,则确定所述目标应用存在性能问题;
获取所述目标应用的性能优化策略,根据所述性能优化策略对所述目标应用进行性能优化。
2.根据权利要求1所述的方法,其特征在于,所述确定待测试的目标应用之前,所述方法还包括:
从问题来源库中获取已存在的性能问题;
解析所述已存在的性能问题对应的代码特征,生成所述性能问题对应的问题代码;
将所述性能问题对应的问题代码存入性能问题经验库。
3.根据权利要求2所述的方法,其特征在于,所述将所述性能问题对应的问题代码存入性能问题经验库之后,所述方法还包括:
根据所述性能问题经验库中保存的问题代码创建所述静态代码扫描规则。
4.根据权利要求2或3所述的方法,其特征在于,所述获取所述目标应用的性能优化策略包括:
根据所述目标应用存在的性能问题从所述性能问题经验库中获取所述目标应用的所述性能优化策略。
5.根据权利要求1至3任一项所述的方法,其特征在于,所述根据所述性能优化策略对所述目标应用进行性能优化之后,所述方法还包括:
使用所述静态代码扫描规则对性能优化后的目标应用进行扫描分析;
若所述性能优化后的目标应用中不存在所述静态代码扫描规则中包括的问题代码,则确定所述性能优化后的目标应用不存在性能问题。
6.一种服务器,其特征在于,包括:
确定模块,用于确定待测试的目标应用;
分析模块,具体用于确定所述目标应用的代码对应的作用域函数;判断所述作用域函数是否满足预置的函数类型;若所述作用域函数满足所述预置的函数类型,获取所述作用域函数的函数名;判断所述函数名是否为预置的函数名;若是,对所述作用域函数包括的符号单元进行语法分析;判断所述符号单元是否存在语法错误,若是,确定所述目标应用的代码是问题代码,若不是,确定所述目标应用的代码不是问题代码;
判断模块,判断所述目标应用中是否存在问题代码;
所述确定模块,还用于若所述目标应用中存在所述静态代码扫描规则中包括的问题代码,则确定所述目标应用存在性能问题;
获取模块,用于获取所述目标应用的性能优化策略;
性能优化模块,根据所述获取模块获取的所述性能优化策略对所述目标应用进行性能优化。
7.根据权利要求6所述的服务器,其特征在于,所述服务器还包括:
所述获取模块,还用于所述确定模块确定待测试的目标应用之前,从问题来源库中获取已存在的性能问题;
解析模块,用于解析所述获取模块获取的所述已存在的性能问题对应的代码特征;
生成模块,用于根据所述解析模块解析出的所述已存在的性能问题对应的代码特征生成性能问题对应的问题代码;
保存模块,用于将所述生成模块生成的所述性能问题对应的问题代码存入性能问题经验库。
8.根据权利要求7所述的服务器,其特征在于,所述服务器还包括:
创建模块,用于所述保存模块将所述性能问题对应的问题代码存入性能问题经验库之后,根据所述性能问题经验库中保存的问题代码创建所述静态代码扫描规则。
9.根据权利要求7或8所述的服务器,其特征在于,
所述获取模块具体用于根据所述目标应用存在的性能问题从所述性能问题经验库中获取所述目标应用的所述性能优化策略。
10.根据权利要求6至8任一项所述的服务器,其特征在于,
所述分析模块,还用于在所述性能优化模块根据所述性能优化策略对所述目标应用进行性能优化之后,使用所述静态代码扫描规则对性能优化后的目标应用进行扫描分析;
所述判断模块,还用于判断所述性能优化后的目标应用中是否存在所述静态代码扫描规则中包括的问题代码;
所述确定模块,还用于若所述性能优化后的目标应用中不存在所述静态代码扫描规则中包括的问题代码,则确定所述性能优化后的目标应用不存在性能问题。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610567209.5A CN106201890B (zh) | 2016-07-18 | 2016-07-18 | 一种应用的性能优化方法及服务器 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610567209.5A CN106201890B (zh) | 2016-07-18 | 2016-07-18 | 一种应用的性能优化方法及服务器 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106201890A CN106201890A (zh) | 2016-12-07 |
CN106201890B true CN106201890B (zh) | 2018-05-22 |
Family
ID=57493899
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610567209.5A Active CN106201890B (zh) | 2016-07-18 | 2016-07-18 | 一种应用的性能优化方法及服务器 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106201890B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019024800A1 (en) | 2017-07-31 | 2019-02-07 | Guangdong Oppo Mobile Telecommunications Corp., Ltd. | RESOURCE ALLOCATION METHOD AND TERMINAL DEVICE |
US11182210B2 (en) | 2017-07-31 | 2021-11-23 | Guangdong Oppo Mobile Telecommunications Corp., Ltd. | Method for resource allocation and terminal device |
CN108647283A (zh) * | 2018-05-04 | 2018-10-12 | 武汉灵动在线科技有限公司 | 一种游戏数据配置敏捷生成与解析方法 |
CN109324949A (zh) * | 2018-09-14 | 2019-02-12 | 珠海金山网络游戏科技有限公司 | 一种lua代码执行性能的静态分析方法 |
CN110990271A (zh) * | 2019-11-28 | 2020-04-10 | 深圳前海微众银行股份有限公司 | 代码性能检测方法、装置、设备及存储介质 |
CN111767123B (zh) * | 2020-05-07 | 2023-09-01 | 北京奇艺世纪科技有限公司 | 运行优化方法及装置 |
CN112069079B (zh) * | 2020-09-22 | 2024-03-22 | 腾讯科技(成都)有限公司 | 一种性能测试的方法、相关装置及存储介质 |
CN116991426A (zh) * | 2023-09-26 | 2023-11-03 | 杭州实在智能科技有限公司 | 用于打包oem版软件的通用预处理命令自动编辑方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103020529A (zh) * | 2012-10-31 | 2013-04-03 | 中国航天科工集团第二研究院七○六所 | 一种基于场景模型的软件漏洞分析方法 |
CN104573524A (zh) * | 2014-12-19 | 2015-04-29 | 中国航天科工集团第二研究院七〇六所 | 一种基于静态检测的模糊测试方法 |
CN105068925A (zh) * | 2015-07-29 | 2015-11-18 | 北京理工大学 | 软件安全缺陷发现系统 |
-
2016
- 2016-07-18 CN CN201610567209.5A patent/CN106201890B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103020529A (zh) * | 2012-10-31 | 2013-04-03 | 中国航天科工集团第二研究院七○六所 | 一种基于场景模型的软件漏洞分析方法 |
CN104573524A (zh) * | 2014-12-19 | 2015-04-29 | 中国航天科工集团第二研究院七〇六所 | 一种基于静态检测的模糊测试方法 |
CN105068925A (zh) * | 2015-07-29 | 2015-11-18 | 北京理工大学 | 软件安全缺陷发现系统 |
Also Published As
Publication number | Publication date |
---|---|
CN106201890A (zh) | 2016-12-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106201890B (zh) | 一种应用的性能优化方法及服务器 | |
CN102779151B (zh) | 应用程序的搜索方法、装置及系统 | |
EP3418906A1 (en) | Text information processing method and device | |
CN108391009A (zh) | 应用页面的显示方法、装置、存储介质及电子设备 | |
CN103037072A (zh) | 一种短信内容提取到场景应用的实现方法 | |
CN107733984A (zh) | 一种推送锁屏信息的方法、终端及计算机可读存储介质 | |
CN102385605B (zh) | 微博消息查找方法、系统及微博服务器 | |
CN107615270A (zh) | 一种人机交互方法及其装置 | |
CN106354647A (zh) | 一种应用检测方法及服务器 | |
CN110516233B (zh) | 数据处理的方法、装置、终端设备以及存储介质 | |
CN105550253B (zh) | 一种类型关系的获取方法及装置 | |
CN105988996A (zh) | 一种索引文件生成方法及装置 | |
CN107798001A (zh) | 网页处理方法、装置及设备 | |
CN110069769A (zh) | 应用标签生成方法、装置及存储设备 | |
CN109214683A (zh) | 一种风险决策方法和装置 | |
CN109634570A (zh) | 前后端集成开发方法、装置、设备及计算机可读存储介质 | |
CN108268438A (zh) | 一种页面内容提取方法、装置以及客户端 | |
CN104765746A (zh) | 用于移动通讯终端浏览器的数据处理方法和装置 | |
CN109858250A (zh) | 一种基于级联分类器的安卓恶意代码检测模型方法 | |
CN110362826A (zh) | 基于人工智能的期刊投稿方法、设备及可读存储介质 | |
CN109903122A (zh) | 房产交易信息处理方法、装置、设备及存储介质 | |
CN107395695A (zh) | 业务推送方法及装置 | |
CN107977307B (zh) | 一种应用的调试方法及装置 | |
CN108153745B (zh) | 一种应用数据调用方法及应用开发系统 | |
CN113157904A (zh) | 基于dfa算法的敏感词过滤方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |