CN106528411A - 覆盖率检测方法、装置和设备 - Google Patents

覆盖率检测方法、装置和设备 Download PDF

Info

Publication number
CN106528411A
CN106528411A CN201610935493.7A CN201610935493A CN106528411A CN 106528411 A CN106528411 A CN 106528411A CN 201610935493 A CN201610935493 A CN 201610935493A CN 106528411 A CN106528411 A CN 106528411A
Authority
CN
China
Prior art keywords
file
data
coverage rate
heat
code
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
CN201610935493.7A
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.)
Netease Hangzhou Network Co Ltd
Original Assignee
Netease Hangzhou Network 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 Netease Hangzhou Network Co Ltd filed Critical Netease Hangzhou Network Co Ltd
Priority to CN201610935493.7A priority Critical patent/CN106528411A/zh
Publication of CN106528411A publication Critical patent/CN106528411A/zh
Pending legal-status Critical Current

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
    • G06F11/3676Test management for coverage analysis

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

覆盖率检测方法、装置和设备
技术领域
本发明涉及计算机技术领域,尤其涉及一种覆盖率检测方法、装置和设备。
背景技术
代码覆盖率测试,是软件测试过程中最重要的测试方法和测试效果衡量标准之一,覆盖率指的是源代码执行过程中被测试所覆盖到代码的比例和程度,通常用百分比表示。
对不同的编程语言来说,都有相应的检测代码覆盖率的方法。目前较主流的游戏服务器架构之一,是基于C++底层和Python上层构建实现。目前针对Python代码覆盖率的检测,最常用的是基于python类库coverage的技术方案。具体的是利用Python的sys模块中提供settrace函数,跟踪代码的执行情况,将覆盖率数据存储到Collector中的Stack中。每当开始采集时,Collector不断执行入栈操作,停止采集时,通过出栈操作即可获取已采集的覆盖率信息。
然而,在游戏服务器的代码覆盖率检测过程中,经常会对代码进行更新修改等,因此如果已经调用settrace函数采集过该文件代码的覆盖率数据,代码的更新会造成最终得到的覆盖率信息不准确。
发明内容
本发明实施例提供一种覆盖率检测方法、装置和设备,用于解决在游戏服务器的代码覆盖率检测过程中,经常会对代码进行更新修改等,因此如果已经调用settrace函数采集过该文件代码的覆盖率数据,代码的更新会造成最终得到的覆盖率信息不准确的问题。
本发明第一方面提供一种覆盖率检测方法,包括:
接收服务器发送的文件的程序热更新数据;所述程序热更新数据为所述服务器在检测到对所述文件执行热更新操作之后调用数据收集函数重新获取的执行数据和所述文件执行热更新操作之后的源代码文件;
解析获取所述源代码文件的总代码行数;
根据所述执行数据和所述总代码行数,计算获取所述文件当前的覆盖率。
可选的,所述方法还包括:
显示所述文件当前的所述覆盖率。
可选的,所述执行数据包括所述服务器执行的所述文件被执行的代码行号,所述根据所述执行数据和所述总代码行数,计算获取所述文件当前的覆盖率,包括:
根据所述被执行的代码行号,获取所述文件中已执行代码的行数;
根据所述已执行代码的行数Le和所述总代码行数Lt,采用R=Le/Lt计算得到所述文件当前的覆盖率R。
可选的,所述解析获取所述源代码文件的总代码行数,包括:
对所述源代码文件进行解析处理,剔除所述源代码文件中的空白行和注释行,得到所述源代码文件的所述总代码行数。
本发明第二方面提供一种覆盖率检测方法,包括:
在将文件的执行数据发送至覆盖率服务端之前,检测所述文件的程序代码是否被执行热更新操作;
若是,则获取所述文件的程序热更新数据;其中,所述程序热更新数据为调用数据收集函数重新获取所述文件的执行数据和获取的所述文件执行热更新操作之后的源代码文件;
将所述程序热更新数据发送给覆盖率服务端,以使所述覆盖率服务端根据所述程序热更新数据获取所述文件当前的覆盖率。
可选的,所述将所述程序热更新数据发送给覆盖率服务端之前,所述方法还包括:
将存储的所述文件对应的执行数据和源代码文件更新为重新获取的所述执行数据和源代码文件进行存储;所述执行数据包括所述文件的文件名称和所述文件被执行的代码行号。
可选的,所述检测所述文件的程序代码是否被执行热更新操作之前,所述方法还包括:
启动采集线程,调用数据收集函数获取所述文件的执行数据,并启动热更新操作监控线程。
可选的,所述热更新操作包括以下至少一种操作:
对所述文件的程序代码进行修改;
对所述文件的程序代码进行移动;
对所述文件的程序代码进行删除。
本发明第三方面提供一种覆盖率检测装置,包括:
接收模块,用于接收服务器发送的文件的程序热更新数据;所述程序热更新数据为所述服务器在检测到对所述文件执行热更新操作之后调用数据收集函数重新获取的执行数据和所述文件执行热更新操作之后的源代码文件;
处理模块,用于解析获取所述源代码文件的总代码行数;
所述处理模块还用于根据所述执行数据和所述总代码行数,计算获取所述文件当前的覆盖率。
可选的,所述装置还包括:
显示模块,用于显示所述文件当前的所述覆盖率。
可选的,所述执行数据包括所述服务器执行的所述文件被执行的代码行号,所述处理模块具体用于:
根据所述被执行的代码行号,获取所述文件中已执行代码的行数;
根据所述已执行代码的行数Le和所述总代码行数Lt,采用R=Le/Lt计算得到所述文件当前的覆盖率R。
可选的,所述处理模块具体用于:
对所述源代码文件进行解析处理,剔除所述源代码文件中的空白行和注释行,得到所述源代码文件的所述总代码行数。
本发明第四方面提供一种覆盖率检测装置,包括:
处理模块,用于在将文件的执行数据发送至覆盖率服务端之前,检测所述文件的程序代码是否被执行热更新操作;
若是,则所述处理模块还用于获取所述文件的程序热更新数据;其中,所述程序热更新数据为调用数据收集函数重新获取所述文件的执行数据和获取的所述文件执行热更新操作之后的源代码文件;
发送模块,用于将所述程序热更新数据发送给覆盖率服务端,以使所述覆盖率服务端根据所述程序热更新数据获取所述文件当前的覆盖率。
可选的,所述处理模块还用于:
将存储的所述文件对应的执行数据和源代码文件更新为重新获取的所述执行数据和源代码文件进行存储;所述执行数据包括所述文件的文件名称和所述文件被执行的代码行号。
可选的,所述处理模块还用于:
启动采集线程,调用数据收集函数获取所述文件的执行数据,并启动热更新操作监控线程。
可选的,所述处理模块执行的热更新操作包括以下至少一种操作:
对所述文件的程序代码进行修改;
对所述文件的程序代码进行移动;
对所述文件的程序代码进行删除。
本发明第五方面提供一种服务器,包括:用于存储程序指令的存储器、用于控制程序指令执行的处理器以及接收器;
所述接收器用于接收服务器发送的文件的程序热更新数据;所述程序热更新数据为所述服务器在检测到对所述文件执行热更新操作之后调用数据收集函数重新获取的执行数据和所述文件执行热更新操作之后的源代码文件;
所述处理器用于:
解析获取所述源代码文件的总代码行数;
根据所述执行数据和所述总代码行数,计算获取所述文件当前的覆盖率。
本发明第六方面提供一种服务器,包括:用于存储程序指令的存储器、用于控制程序指令执行的处理器以及发送器;
所述处理器用于:
在将文件的执行数据发送至覆盖率服务端之前,检测所述文件的程序代码是否被执行热更新操作;
若是,则获取所述文件的程序热更新数据;其中,所述程序热更新数据为调用数据收集函数重新获取所述文件的执行数据和获取的所述文件执行热更新操作之后的源代码文件;
所述发送器用于将所述程序热更新数据发送给覆盖率服务端,以使所述覆盖率服务端根据所述程序热更新数据获取所述文件当前的覆盖率。
本发明实施例提供的一种覆盖率检测方法、装置和设备,通过文件运行端的服务器实时检测,确定文件被执行热更新操作后,重新获取更新后的文件的执行数据以及更新后的源代码文件,并将重新获取到的执行数据和源代码文件发送给覆盖率服务器,覆盖率服务器根据源代码文件解析获取总代码行数,结合更新后的执行数据得到该执行热更新后的文件的覆盖率,解决了现有方案得到的覆盖率信息不准确的问题,能够实时得到热更新后文件的准确的覆盖率信息。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
图1为本发明实施例提供的覆盖率检测方法实例一的流程图;
图2为本发明实施例提供的覆盖率检测方法实例二的流程图;
图3为本发明实施例提供的覆盖率检测方法实例三的流程图;
图4为本发明实施例提供的覆盖率检测方法在游戏服务器和覆盖率服务器侧执行功能示意图;
图5为本发明实施例提供的覆盖率检测装置实施例一的结构示意图;
图6为本发明实施例提供的覆盖率检测装置实施例二的结构示意图;
图7为本发明实施例提供的覆盖率检测装置实施例三的结构示意图;
图8为本发明实施例提供的服务器实施例一的结构示意图;
图9为本发明实施例提供的服务器实施例二的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
图1为本发明实施例提供的覆盖率检测方法实例一的流程图,如图1所示,该方案的执行主体为用于检测覆盖率的服务器,或者检测覆盖率的其他设备,该覆盖率检测方法的具体实现步骤为:
步骤S101,接收服务器发送的文件的程序热更新数据;所述程序热更新数据为所述服务器在检测到对所述文件执行热更新操作之后调用数据收集函数重新获取的执行数据和所述文件执行热更新操作之后的源代码文件。
在本实施例中,这里发送程序执行数据的服务器为执行该文件的程序的服务器,例如:运行游戏程序的服务器。测试人员可以在文件执行的过程中对文件进行热更新操作,因此文件执行端的服务器需要在获取了执行数据之后检测是否对文件进行热更新,如果是则需要重新获取执行数据,并且要获取热更新后的源代码文件,向覆盖率服务器发送程序热更新数据,其中包括重新获取的包括热更新后的文件被执行的行号和文件名称的执行数据,以及新的源代码文件。
步骤S102,解析获取所述源代码文件的总代码行数。
本方案中,检测覆盖率的服务器或者其他的设备对接收到的源代码文件进行解析处理,得到文件对应的源代码的行数,这里的行数不包括空格和注释行,即得到程序的总代码行数。
步骤S103,根据所述执行数据和所述总代码行数,计算获取所述文件当前的覆盖率。
在本步骤中,该执行数据至少包括能够确定程序已经执行行数的参数,例如:被执行的代码行号,或者已经执行的行数等。
检测覆盖率的服务器根据该源代码文件对应的执行数据进行处理得到当前已经执行代码的行数,然后根据已执行代码的行数和总代码行数,计算得到覆盖率。
该过程是实时进行的,检测覆盖率的装置(或服务器)实时接收程序执行端的服务器发送来的文件的执行数据,按照上述方式进行处理,可以得到被执行了热更新的文件的准确的覆盖率。
本实施例提供的覆盖率检测方法,服务器向覆盖率检测端的服务器发送包括热更新后文件的执行数据以及热更新后的源代码文件的程序热更新数据,然后覆盖率检测端的服务器对接收到的源代码文件进行解析获取总代码行数,然后结合执行数据和总代码行数计算获取该文件当前的覆盖率,解决了现有方案得到的覆盖率信息不准确的问题,能够实时得到热更新后文件的准确的覆盖率信息。
图2为本发明实施例提供的覆盖率检测方法实例二的流程图,如图2所示,在上述实施例的基础上,提供该覆盖率检测的的具体实现方式:
步骤S201,接收服务器发送的文件的程序热更新数据;所述程序热更新数据为所述服务器在检测到对所述文件执行热更新操作之后调用数据收集函数重新获取的执行数据和所述文件执行热更新操作之后的源代码文件。
具体实现方式与实施例类似,在此不再赘述。
步骤S202,对所述源代码文件进行解析处理,剔除所述源代码文件中的空白行和注释行,得到所述源代码文件的所述总代码行数。
在本步骤中,覆盖率检测端的设备(例如:覆盖率服务器)接收到的程序执行数据中只有对某个文件的执行的相关数据以及源代码文件,并没有该源代码文件的总代码行数,因此该覆盖率检测端的设备需要对接收到的该源代码文件进行解析,将其中注释行和空白行等无关程序实质的非代码行进行剔除,并统计得到该源代码文件的总代码行数。
步骤S203,根据执行数据中包括的被执行的代码行号,获取所述文件中已执行代码的行数。
步骤S204,根据所述已执行代码的行数Le和所述总代码行数Lt,采用R=Le/Lt计算得到所述文件当前的覆盖率R。
上述步骤的具体实现中,可以根据被执行的代码行号,获取文件中已执行代码的行数,根据已执行代码的行数Le和总代码行数Lt,采用R=Le/Lt计算得到文件当前的覆盖率R。
具体的,根据前述步骤,覆盖率检测端的设备已经接收到了文件被执行的代码行号,则将执行过的代码行数作为已经执行代码的行数之和,例如:获取到的被执行的代码行号为50,则认为该文件的代码已经执行了50行,或者,数据显示某文件,第1,3-10,55行已经发生了执行事件,那么此时已执行代码行数的值应当为1+8+1=10行。根据该种方式得到文件中已经执行的代码行数。通过前述步骤覆盖率检测端的设备完成覆盖率数据采集,得到了已执行的代码行数,以及该源代码文件中的可执行的代码行总数。利用上述两个步骤获得的数据,在此处通过公式采用R=Le/Lt即可计算出当前文件热更新后的覆盖率R。其中,Le表示已执行代码的行数,Lt表示总代码行数。
步骤S205,显示所述文件当前的所述覆盖率。
该步骤S205为可选的步骤,并不是必须要执行的,覆盖率检测端的设备如果接收用户通过客户端或者前端发送的数据请求,或者预先配置了需要将得到的覆盖率进行显示,则可以通过显示器或者前短客户端将得到的覆盖率进行显示。
本实施例提供的覆盖率检测方法,通过实时接收服务器发送的热更新后的执行数据和源代码文件,并对该执行数据进行分析处理得到已执行代码行数,并对该源代码文件进行处理得到总代码行数,计算得到热更新后的覆盖率数据,解决了现有方案得到的覆盖率信息不准确的问题,能够实时得到热更新后文件的准确的覆盖率信息。
图3为本发明实施例提供的覆盖率检测方法实例三的流程图;如图3所示,该方案的执行主体为文件运行端的服务器或者其他装置,该覆盖率检测方法的具体实现步骤为:
步骤S301,在将文件的执行数据发送至覆盖率服务端之前,检测所述文件的程序代码是否被执行热更新操作。
在本步骤中,文件运行端的服务器中嵌入实时收集执行数据的客户端,或者将该实时收集执行数据的客户端嵌入在文件的程序中,启动采集线程,调用数据收集函数获取所述文件的执行数据,并启动热更新操作监控线程。
其含义是:在运行该文件的过程中,启动数据采集线程,调用数据收集函数,实时获取该文件的执行数据。同时需要启动热更新操作监控线程,在采集到文件的执行数据之后,或者发送给覆盖率服务端之前,检测该文件是否被执行热更新操作。
可选的,在该过程中,文件运行端的服务器或者其他装置可以将收集的执行数据按照文件名称进行存储,当发生了新的代码执行事件之后,可以根据文件名称对该执行数据进行更新。具体的,对执行数据进行存储的实现方式为:根据所述文件名称,检测本地是否存在与所述文件对应的执行数据;若存在,则在本地不存在所述文件被执行的代码行号时,将所述文件被执行的代码行号存储在所述程序执行数据中;若不存在,则在本地增加以所述文件名称为索引的所述文件对应的所述执行数据。
步骤S302,若是,则获取所述文件的程序热更新数据;其中,所述程序热更新数据为调用数据收集函数重新获取所述文件的执行数据和获取的所述文件执行热更新操作之后的源代码文件。
在本步骤中,如果文件没有被执行热更新操作,那么则直接将获取到的执行数据发送给覆盖率服务器端,进行覆盖率计算。如果文件被执行热更新操作,文件运行服务器需要重新获取下执行数据,并且需要获取该文件被执行热更新后的源代码文件。
用户通过操作可以对文件进行的热更新操作至少包括以下一种操作:对所述文件的程序代码进行修改;对所述文件的程序代码进行移动;对所述文件的程序代码进行删除等。
由于对文件进行修改、移动或者删除会导致源代码本身的变化,因此对于覆盖率服务器端来说,原来存储的文件的源代码已不是现在运行的文件的源代码,因此需要在获取执行数据的同时获取新的源代码文件,并发送给覆盖率服务端的服务器或者其他设备。
步骤S303,将所述程序热更新数据发送给覆盖率服务端,以使所述覆盖率服务端根据所述程序热更新数据获取所述文件当前的覆盖率。
文件运行端的服务器或者其他装置将获取到的包括执行数据以及新的源代码文件的程序热更新数据发送给覆盖率服务端,以使覆盖率检测端的服务端(例如服务器)实时接收执行端服务器发送的程序热更新数据,并对该源代码文件进行解析获取总代码行数,然后结合执行数据和总代码行数计算获取该文件当前的覆盖率,不需要额外增加命令,在测试过程中也不需要不断的停止和开始,通过实时接收文件运行服务器发送的文件的执行数据和源代码文件,得到该文件的实时覆盖率。
在上述实施例一至实施例三的基础上,下面以覆盖率检测端为覆盖率服务器、文件执行端为游戏服务器为例,对本发明覆盖率检测方法进行说明。
图4为本发明实施例提供的覆盖率检测方法在游戏服务器和覆盖率服务器侧执行功能示意图。如图4所示,在游戏服务器启动之后,分别启动采集线程和监控线程,其中采集线程用于采集文件的执行数据,而监控线程则对进行覆盖率测试的所有文件的变化(例如修改,删除等)进行监控。
发生文件的代码热更新时,通过记录发生热更的代码文件名,将其现有的覆盖率数据重置为重新获取热更新后的文件的执行数据,并获取热更新后的源代码文件,一并发送至覆盖率服务器进行覆盖率计算。具体的,
1.1、初始化
初始化过程分为启动覆盖率数据处理服务端和嵌入覆盖率采集客户端到游戏服务器脚本中两个部分。
覆盖率服务端基于Tornado构建,主要功能是通过websocket接收来自覆盖率客户端(也称为文件执行端,例如:游戏服务器)发送的数据的数据,并定时将同一游戏服务器的数据合并和处理。在游戏服务器启动测试之前,首先启动覆盖率服务端,等待客户端连接和收集数据。
对于客户端,在游戏服务器中启动不同进程的脚本中,添加使用线程启动websocket连接的代码,具体如下:
ws=websocket.WebSocket("ws://websocket_address/")
thread_ws=threading.Thread(target=ws.run)
thread_ws.start()
该线程用于在每个游戏服务器进程启动websocket并连接到覆盖率服务器后,进行定时的数据发送。
1.2、数据采集
嵌入游戏服务器的客户端,主要通过添加如下代码实现数据采集:
即利用python自带的sys.settrace方法,在游戏服务器脚本运行过程中,每当发生了代码执行事件(event),就会调用trace方法进行跟踪,其中frame表示python运行过程中的栈帧,event表示发生的事件(例如执行了某一行代码,或者调用了某个函数等)。使用frame.f_code.co_filename获取被执行的文件名称fliename,使用frame.f_lineno获取当前执行的代码行号,然后调用collect方法进行数据收集,该方法主要是使用了字典(python的一种内置数据结构,以键-值对格式存储数据)的形式,将数据以文件名为键,以被执行的代码行号集合为值的形式存储。
1.3、文件变化监控
在游戏服务器启动同时启动监控线程,对进行覆盖率测试的代码文件目录进行监控。该监控线程,主要基于python的扩展库watchdog实现,该依赖库,能够对指定文件目录的状态进行监控。
当文件目录发生变化时,会触发相应的事件和操作:
上文为python代码,当文件目录中发生了修改(modified),移动(moved)和删除(deleted)时,对文件进行处理(process函数),而当文件创建(created)时,不做任何操作。
处理的方法(process函数如下):
即当发生了修改(modified)时,通过event.src_path属性获取发生修改(modified)的文件名称,然后在当前的执行数据(即覆盖率数据)中搜索,如果已采集过执行数据,则将其数据重置为空集(set([]))。
同样的,当发生了删除(deleted)或者移动(moved)时,若已有覆盖率数据,则将其从字典中删除,然后重新进行执行数据采集。
另外,当发生代码热更新时,覆盖率服务端从游戏服务器获取更新后的源代码文件,具体实现过程为:
当发生热更时,可以通过observer导出发生变化的文件,此时游戏服务器上的覆盖率客户端,会进行重新解析,然后发送到覆盖率服务端;发送的数据是:
{filename:{'executed':[1,2,3,....],'code':[1,2,3,.....]},其中,executed:[1,2,3,....]为执行行,code:[1,2,3,....]为原码行。
覆盖率服务端在收到由observer控制的coverage_reload指令后,就将该指令对应的数据中所有文件名对应的源码行/执行行重新替换一遍。
即游戏服务器同时获取热更新后的文件的执行数据以及源代码文件,并发送给覆盖率服务器。
1.4、计算每个文件的覆盖率
当热更完毕后,覆盖率服务器也得到了热更后的覆盖率数据,从而避免了文件内容或行号发生改变导致的覆盖率数据的错误。
由上述步骤,获得了每个文件当前所执行过的代码行号的集合,已知覆盖率计算公式为:
其中,Rate表示覆盖率,lineexecute表示当前文件中已经执行过的代码行数,linetotal表示当前文件的可执行代码行总数。
对接收到的源代码文件进行解析,解析的过程是去除空白行和注释行,从而计算出真正的可执行代码行的总数。
通过游戏服务器的覆盖率数据采集,使用代码行号集合的大小即可获得lineexecute,也就是已执行的代码行数。通过本地源码的解析,获得了linetotal,也就是当前文件可执行的代码行总数。利用上述两个步骤获得的数据,在此处通过公式即可计算出游戏服务器对应热更新后的文件的覆盖率。
本方案主要由覆盖率数据处理服务端和覆盖率采集客户端组成。其中覆盖率数据处理服务端,主要功能是通过websocket接收和处理来自客户端的数据。客户端嵌入到待测试的游戏服务器脚本中,使用python的sys.settrace收集数据。本方案完整的采集流程,分为数据采集,文件监控,数据重置三个部分。首先依次启动文件监控线程和数据采集线程,将数据发送和存储到数据处理服务器中。之后在采集过程中,若发生代码热更操作,则文件监控线程将对应文件的覆盖率数据重置为初始状态。最后数据处理服务器计算出游戏服务器所有文件最终真实的覆盖率数值。解决了利用python的sys.settrace方法进行覆盖率数据采集时,在采集过程中发生了代码热更后,文件内容和行号发生变化,导致最终采集的覆盖率数据不准确的问题。
图5为本发明实施例提供的覆盖率检测装置实施例一的结构示意图,如图5所示,本实施例提供的覆盖率检测装置10包括:
接收模块11,用于接收服务器发送的文件的程序热更新数据;所述程序热更新数据为所述服务器在检测到对所述文件执行热更新操作之后调用数据收集函数重新获取的执行数据和所述文件执行热更新操作之后的源代码文件;
处理模块12,用于解析获取所述源代码文件的总代码行数;
所述处理模块12还用于根据所述执行数据和所述总代码行数,计算获取所述文件当前的覆盖率。
本实施例提供的覆盖率检测装置,用于执行前述任一实施例提供的方法中覆盖率服务器端的技术方案,其实现原理和技术效果类似,在此不再赘述。
在本发明覆盖率检测装置的实施例二中,图6为本发明实施例提供的覆盖率检测装置实施例二的结构示意图,如图6所示,在上述实施例一的基础上,该覆盖率检测装置10还包括:
显示模块13,用于显示所述文件当前的所述覆盖率。
在上述任一实施例的基础上,可选的,所述执行数据包括所述服务器执行的所述文件被执行的代码行号,所述处理模块12具体用于:
根据所述被执行的代码行号,获取所述文件中已执行代码的行数;
根据所述已执行代码的行数Le和所述总代码行数Lt,采用R=Le/Lt计算得到所述文件当前的覆盖率R。
可选的,所述处理模块12具体用于:
对所述源代码文件进行解析处理,剔除所述源代码文件中的空白行和注释行,得到所述源代码文件的所述总代码行数。
本实施例提供的覆盖率检测装置,用来执行前述任一实施例提供的方法中覆盖率检测端(上述的覆盖率服务器)的技术方案,其实现原理和技术效果类似,在此不再赘述。
图7为本发明实施例提供的覆盖率检测装置实施例三的结构示意图,如图7所示,该覆盖率检测装置20包括:
处理模块21,用于在将文件的执行数据发送至覆盖率服务端之前,检测所述文件的程序代码是否被执行热更新操作;
若是,则所述处理模块21还用于获取所述文件的程序热更新数据;其中,所述程序热更新数据为调用数据收集函数重新获取所述文件的执行数据和获取的所述文件执行热更新操作之后的源代码文件;
发送模块22,用于将所述程序热更新数据发送给覆盖率服务端,以使所述覆盖率服务端根据所述程序热更新数据获取所述文件当前的覆盖率。
可选的,所述处理模块21还用于:
将存储的所述文件对应的执行数据和源代码文件更新为重新获取的所述执行数据和源代码文件进行存储;所述执行数据包括所述文件的文件名称和所述文件被执行的代码行号。
可选的,所述处理模块21还用于:
启动采集线程,调用数据收集函数获取所述文件的执行数据,并启动热更新操作监控线程。
可选的,所述处理模块21执行的热更新操作包括以下至少一种操作:
对所述文件的程序代码进行修改;
对所述文件的程序代码进行移动;
对所述文件的程序代码进行删除。
本实施例提供的覆盖率检测装置,用来执行前述任一实施例提供的方法中程序运行侧的技术方案,其实现原理和技术效果类似,在此不再赘述。
图8为本发明实施例提供的服务器实施例一的结构示意图,如图8所示,该服务器可以被具体实现为:存储有程序指令的存储器31、接收器32以及用于控制程序指令执行的处理器33;
所述接收器32用于接收服务器发送的文件的程序热更新数据;所述程序热更新数据为所述服务器在检测到对所述文件执行热更新操作之后调用数据收集函数重新获取的执行数据和所述文件执行热更新操作之后的源代码文件;
所述处理器33用于:
解析获取所述源代码文件的总代码行数;
根据所述执行数据和所述总代码行数,计算获取所述文件当前的覆盖率。
可选的,还可以包括显示器,用于显示所述文件当前的所述覆盖率。
可选的,所述程序执行数据包括所述服务器执行的所述文件被执行的代码行号,所述处理器33具体用于:
根据所述被执行的代码行号,获取所述文件中已执行代码的行数;
根据所述已执行代码的行数Le和所述总代码行数Lt,采用R=Le/Lt计算得到所述文件当前的覆盖率R。
可选的,所述程序执行数据包括所述游戏服务器执行的所述文件的文件名称,则所述处理器33还用于:
对所述源代码文件进行解析处理,剔除所述源代码文件中的空白行和注释行,得到所述源代码文件的所述总代码行数。
本实施例提供的服务器为覆盖检测端的服务器,用来执行前述任一实施例提供的方法中覆盖率检测端的技术方案,其实现原理和技术效果类似,在此不再赘述。
图9为本发明实施例提供的服务器实施例二的结构示意图,如图9所示,该服务器可以被具体实现为:用于存储程序指令的存储器41、用于控制程序指令执行的处理器42以及发送器43;
所述处理器42用于:
在将文件的执行数据发送至覆盖率服务端之前,检测所述文件的程序代码是否被执行热更新操作;
若是,则获取所述文件的程序热更新数据;其中,所述程序热更新数据为调用数据收集函数重新获取所述文件的执行数据和获取的所述文件执行热更新操作之后的源代码文件;
所述发送器43用于将所述程序热更新数据发送给覆盖率服务端,以使所述覆盖率服务端根据所述程序热更新数据获取所述文件当前的覆盖率。
可选的,所述处理器42还用于:将存储的所述文件对应的执行数据和源代码文件更新为重新获取的所述执行数据和源代码文件进行存储;所述执行数据包括所述文件的文件名称和所述文件被执行的代码行号。
可选的,所述处理器42还用于:
启动采集线程,调用数据收集函数获取所述文件的执行数据,并启动热更新操作监控线程。
可选的,所述处理器42执行的热更新操作包括以下至少一种操作:
对所述文件的程序代码进行修改;
对所述文件的程序代码进行移动;
对所述文件的程序代码进行删除。
本实施例提供的服务器为文件运行服务器,或者称为程序运行服务器,用来执行前述任一实施例提供的方法中文件代码运行侧(例如游戏服务器)的技术方案,其实现原理和技术效果类似,在此不再赘述。
在上述任一服务器的实施例中,应理解,处理器可以是中央处理单元(英文:Central Processing Unit,简称:CPU),还可以是其他通用处理器、数字信号处理器(英文:Digital Signal Processor,简称:DSP)、专用集成电路(英文:Application SpecificIntegrated Circuit,简称:ASIC)等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:只读存储器(英文:read-only memory,缩写:ROM)、RAM、快闪存储器、硬盘、固态硬盘、磁带(英文:magnetictape)、软盘(英文:floppy disk)、光盘(英文:optical disc)及其任意组合。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

Claims (18)

1.一种覆盖率检测方法,其特征在于,包括:
接收服务器发送的文件的程序热更新数据;所述程序热更新数据为所述服务器在检测到对所述文件执行热更新操作之后调用数据收集函数重新获取的执行数据和所述文件执行热更新操作之后的源代码文件;
解析获取所述源代码文件的总代码行数;
根据所述执行数据和所述总代码行数,计算获取所述文件当前的覆盖率。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
显示所述文件当前的所述覆盖率。
3.根据权利要求1或2所述的方法,其特征在于,所述执行数据包括所述服务器执行的所述文件被执行的代码行号,所述根据所述执行数据和所述总代码行数,计算获取所述文件当前的覆盖率,包括:
根据所述被执行的代码行号,获取所述文件中已执行代码的行数;
根据所述已执行代码的行数Le和所述总代码行数Lt,采用R=Le/Lt计算得到所述文件当前的覆盖率R。
4.根据权利要求1或2所述的方法,其特征在于,所述解析获取所述源代码文件的总代码行数,包括:
对所述源代码文件进行解析处理,剔除所述源代码文件中的空白行和注释行,得到所述源代码文件的所述总代码行数。
5.一种覆盖率检测方法,其特征在于,包括:
在将文件的执行数据发送至覆盖率服务端之前,检测所述文件的程序代码是否被执行热更新操作;
若是,则获取所述文件的程序热更新数据;其中,所述程序热更新数据为调用数据收集函数重新获取所述文件的执行数据和获取的所述文件执行热更新操作之后的源代码文件;
将所述程序热更新数据发送给覆盖率服务端,以使所述覆盖率服务端根据所述程序热更新数据获取所述文件当前的覆盖率。
6.根据权利要求5所述的方法,其特征在于,所述将所述程序热更新数据发送给覆盖率服务端之前,所述方法还包括:
将存储的所述文件对应的执行数据和源代码文件更新为重新获取的所述执行数据和源代码文件进行存储;所述执行数据包括所述文件的文件名称和所述文件被执行的代码行号。
7.根据权利要求5或6所述的方法,其特征在于,所述检测所述文件的程序代码是否被执行热更新操作之前,所述方法还包括:
启动采集线程,调用数据收集函数获取所述文件的执行数据,并启动热更新操作监控线程。
8.根据权利要求5或6所述的方法,其特征在于,所述热更新操作包括以下至少一种操作:
对所述文件的程序代码进行修改;
对所述文件的程序代码进行移动;
对所述文件的程序代码进行删除。
9.一种覆盖率检测装置,其特征在于,包括:
接收模块,用于接收服务器发送的文件的程序热更新数据;所述程序热更新数据为所述服务器在检测到对所述文件执行热更新操作之后调用数据收集函数重新获取的执行数据和所述文件执行热更新操作之后的源代码文件;
处理模块,用于解析获取所述源代码文件的总代码行数;
所述处理模块还用于根据所述执行数据和所述总代码行数,计算获取所述文件当前的覆盖率。
10.根据权利要求9所述的装置,其特征在于,所述装置还包括:
显示模块,用于显示所述文件当前的所述覆盖率。
11.根据权利要求9或10所述的装置,其特征在于,所述执行数据包括所述服务器执行的所述文件被执行的代码行号,所述处理模块具体用于:
根据所述被执行的代码行号,获取所述文件中已执行代码的行数;
根据所述已执行代码的行数Le和所述总代码行数Lt,采用R=Le/Lt计算得到所述文件当前的覆盖率R。
12.根据权利要求9或10所述的装置,其特征在于,所述处理模块具体用于:
对所述源代码文件进行解析处理,剔除所述源代码文件中的空白行和注释行,得到所述源代码文件的所述总代码行数。
13.一种覆盖率检测装置,其特征在于,包括:
处理模块,用于在将文件的执行数据发送至覆盖率服务端之前,检测所述文件的程序代码是否被执行热更新操作;
若是,则所述处理模块还用于获取所述文件的程序热更新数据;其中,所述程序热更新数据为调用数据收集函数重新获取所述文件的执行数据和获取的所述文件执行热更新操作之后的源代码文件;
发送模块,用于将所述程序热更新数据发送给覆盖率服务端,以使所述覆盖率服务端根据所述程序热更新数据获取所述文件当前的覆盖率。
14.根据权利要求13所述的装置,其特征在于,所述处理模块还用于:
将存储的所述文件对应的执行数据和源代码文件更新为重新获取的所述执行数据和源代码文件进行存储;所述执行数据包括所述文件的文件名称和所述文件被执行的代码行号。
15.根据权利要求13或14所述的装置,其特征在于,所述处理模块还用于:
启动采集线程,调用数据收集函数获取所述文件的执行数据,并启动热更新操作监控线程。
16.根据权利要求13或14所述的装置,其特征在于,所述处理模块执行的热更新操作包括以下至少一种操作:
对所述文件的程序代码进行修改;
对所述文件的程序代码进行移动;
对所述文件的程序代码进行删除。
17.一种服务器,其特征在于,包括:用于存储程序指令的存储器、用于控制程序指令执行的处理器以及接收器;
所述接收器用于接收服务器发送的文件的程序热更新数据;所述程序热更新数据为所述服务器在检测到对所述文件执行热更新操作之后调用数据收集函数重新获取的执行数据和所述文件执行热更新操作之后的源代码文件;
所述处理器用于:
解析获取所述源代码文件的总代码行数;
根据所述执行数据和所述总代码行数,计算获取所述文件当前的覆盖率。
18.一种服务器,其特征在于,包括:用于存储程序指令的存储器、用于控制程序指令执行的处理器以及发送器;
所述处理器用于:
在将文件的执行数据发送至覆盖率服务端之前,检测所述文件的程序代码是否被执行热更新操作;
若是,则获取所述文件的程序热更新数据;其中,所述程序热更新数据为调用数据收集函数重新获取所述文件的执行数据和获取的所述文件执行热更新操作之后的源代码文件;
所述发送器用于将所述程序热更新数据发送给覆盖率服务端,以使所述覆盖率服务端根据所述程序热更新数据获取所述文件当前的覆盖率。
CN201610935493.7A 2016-10-24 2016-10-24 覆盖率检测方法、装置和设备 Pending CN106528411A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610935493.7A CN106528411A (zh) 2016-10-24 2016-10-24 覆盖率检测方法、装置和设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610935493.7A CN106528411A (zh) 2016-10-24 2016-10-24 覆盖率检测方法、装置和设备

Publications (1)

Publication Number Publication Date
CN106528411A true CN106528411A (zh) 2017-03-22

Family

ID=58292503

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610935493.7A Pending CN106528411A (zh) 2016-10-24 2016-10-24 覆盖率检测方法、装置和设备

Country Status (1)

Country Link
CN (1) CN106528411A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109359054A (zh) * 2018-12-18 2019-02-19 浙江诺诺网络科技有限公司 生成覆盖率统计报告的方法、装置、设备及存储介质
CN109828772A (zh) * 2019-02-19 2019-05-31 百度在线网络技术(北京)有限公司 热更新方法、操作系统、终端设备和存储介质
CN111104319A (zh) * 2019-12-13 2020-05-05 北京同邦卓益科技有限公司 一种代码覆盖率测试方法、装置、电子设备及存储介质

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5778169A (en) * 1995-08-07 1998-07-07 Synopsys, Inc. Computer system having improved regression testing
CN101464829A (zh) * 2007-12-18 2009-06-24 珠海金山软件股份有限公司 确定代码覆盖率的方法、测试装置
US20100146340A1 (en) * 2008-12-09 2010-06-10 International Business Machines Corporation Analyzing Coverage of Code Changes
CN104714882A (zh) * 2013-12-17 2015-06-17 腾讯科技(深圳)有限公司 代码信息处理的方法及装置
CN104765692A (zh) * 2015-04-29 2015-07-08 北京嘀嘀无限科技发展有限公司 用于自动化测试软件的方法及设备
CN105204982A (zh) * 2014-06-13 2015-12-30 腾讯科技(深圳)有限公司 代码测试方法及代码测试系统
CN105512021A (zh) * 2014-09-25 2016-04-20 阿里巴巴集团控股有限公司 用于软件测试的Diff分析方法及装置
CN105608011A (zh) * 2016-03-01 2016-05-25 网易(杭州)网络有限公司 代码测试覆盖率统计结果的确定方法及装置

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5778169A (en) * 1995-08-07 1998-07-07 Synopsys, Inc. Computer system having improved regression testing
CN101464829A (zh) * 2007-12-18 2009-06-24 珠海金山软件股份有限公司 确定代码覆盖率的方法、测试装置
US20100146340A1 (en) * 2008-12-09 2010-06-10 International Business Machines Corporation Analyzing Coverage of Code Changes
CN104714882A (zh) * 2013-12-17 2015-06-17 腾讯科技(深圳)有限公司 代码信息处理的方法及装置
CN105204982A (zh) * 2014-06-13 2015-12-30 腾讯科技(深圳)有限公司 代码测试方法及代码测试系统
CN105512021A (zh) * 2014-09-25 2016-04-20 阿里巴巴集团控股有限公司 用于软件测试的Diff分析方法及装置
CN104765692A (zh) * 2015-04-29 2015-07-08 北京嘀嘀无限科技发展有限公司 用于自动化测试软件的方法及设备
CN105608011A (zh) * 2016-03-01 2016-05-25 网易(杭州)网络有限公司 代码测试覆盖率统计结果的确定方法及装置

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109359054A (zh) * 2018-12-18 2019-02-19 浙江诺诺网络科技有限公司 生成覆盖率统计报告的方法、装置、设备及存储介质
CN109828772A (zh) * 2019-02-19 2019-05-31 百度在线网络技术(北京)有限公司 热更新方法、操作系统、终端设备和存储介质
US11221838B2 (en) 2019-02-19 2022-01-11 Baidu Online Network Technology (Beijing) Co., Ltd. Hot update method, operating system, terminal device, system, and computer-readable storage medium for a system process
CN111104319A (zh) * 2019-12-13 2020-05-05 北京同邦卓益科技有限公司 一种代码覆盖率测试方法、装置、电子设备及存储介质

Similar Documents

Publication Publication Date Title
CN111737127B (zh) 用于测试地图服务的方法和装置
CN104598380A (zh) 一种基于控件的自动化测试方法及系统
CN106294134B (zh) 代码的崩溃定位方法及装置
US11860717B1 (en) Graphical user interface for presenting crash data
CN109947635B (zh) 一种数据上报方法、装置、存储介质及终端设备
CN104346148A (zh) 获取程序性能消耗信息的方法、装置及系统
CN104246759A (zh) 应用程序接口测试服务
CN106547698A (zh) 覆盖率数据的处理方法、装置和服务器
CN106980572B (zh) 分布式系统的在线调试方法和系统
CN109814960A (zh) 一种页面返回方法、装置、电子设备及存储介质
CN106502901A (zh) 覆盖率检测方法、装置和设备
CN103279380A (zh) 信息处理系统和方法
CN107800757A (zh) 用户行为记录方法及装置
CN106528411A (zh) 覆盖率检测方法、装置和设备
CN102893261B (zh) 空闲转换采样方法及其系统
JP6266008B2 (ja) 仮想マシン・イメージをコンピュータ・システムに適用する方法、情報処理システム、コンピュータ・プログラム
CN114422564A (zh) 访问数据审计溯源方法、装置、计算机设备及存储介质
CN111970151A (zh) 虚拟及容器网络的流量故障定位方法及系统
CN110515758A (zh) 一种故障定位方法、装置、计算机设备及存储介质
CN106407126B (zh) 覆盖率数据的处理方法、装置和服务器
CN113094236A (zh) 一种系统数据采集方法、装置、计算机设备及存储介质
CA2788100C (en) Crawling of generated server-side content
CN110430083A (zh) 一种代理转发请求的定位处理方法及服务器
WO2023010823A1 (zh) 网络故障根因的确定方法、装置、设备及存储介质
CN115481025A (zh) 自动化测试的脚本录制方法、装置、计算机设备及介质

Legal Events

Date Code Title Description
C06 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: 20170322