CN109634851A - 一种系统级实时获取被测程序内部运行数据的方法 - Google Patents
一种系统级实时获取被测程序内部运行数据的方法 Download PDFInfo
- Publication number
- CN109634851A CN109634851A CN201811448331.6A CN201811448331A CN109634851A CN 109634851 A CN109634851 A CN 109634851A CN 201811448331 A CN201811448331 A CN 201811448331A CN 109634851 A CN109634851 A CN 109634851A
- Authority
- CN
- China
- Prior art keywords
- software
- function
- information
- data
- running process
- 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/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- 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/3624—Software debugging by performing operations on the source code, e.g. via a compiler
-
- 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/3636—Software debugging by tracing the execution of the program
Abstract
本发明公开了一种系统级实时获取被测程序内部运行数据的方法,包括:软件运行过程中,获取软件运行内部执行路径,将运行数据转化为波形的方式,获取用例的运行数据以及监控软件的运行状况;软件运行过程中,获取函数的输入输出情况;软件运行过程中,捕获用例内存使用情况;软件运行过程中,捕获程序最后运行50块时序数据信息;软件运行过程中,实时捕获用例函数的调用信息。本发明将软件运行逻辑状态以波形的形式呈现,能反映软件运行的实时状态;能够在系统级测试阶段实时获取函数的参数输入、输出信息,给与测试人员更清晰准确的数据支持;能够在软件运行过程中,对软件的内存情况进行监控,发现软件中可能存在泄漏的情况。
Description
技术领域
本发明涉及一种在系统级实时获取监控程序内部运行数据的方法,主要用于在软件系统正常运行过程中分析内部执行逻辑的方法,具体涉及一种获取程序运行逻辑路径状况、函数参数的输入输出情况以及程序内存运行状况的方法。
背景技术
目前的测试领域中对软件做功能测试时,测试人员无法直观的观测软件内部运行的情况,只能依靠测试人员根据被测试系统的业务通过输入输出来进行判断。无法对程序内部运行的逻辑数据进行观测,使得测试无法深入进行,测试人员在做测试时具有盲目性和不确定性的缺陷,没有额外的工具来支持测试人员对于整个工程的运行状态参照,从而使得测试的主观性较强。当程序出现异常问题时,例如程序出现异常崩溃的时候,一般无法立即发现。
例如测试中使用的基本技术是等价类划分,因为软件的输入空间巨大,无法进行全面的遍历和测试,因此需要根据业务和软件设计说明划分等价类和确定边界值来进行测试,而从功能层面,划分是否正确,测试用例是否等价是非常难从软件的输入和输出上直接判断的。
传统的白盒测试工具,覆盖率的采集一般是单元级,即在开发环境单机形式采集,同时无法将数据映射到测试用例维度,通常是采集一个阶段的数据进行分析,没有办法明确的区分哪些覆盖率数据和哪些测试用例是直接关联的。
程序运行过程中,针对每个函数参数的具体输入输出情况,传统的方式是开发人员通过在开发工具中,采用单步调试的方式获取,当被测程序在运行过程中,程序内部的函数输入输出情况,是无法实时被观测到的,而程序运行过程中函数的输入输出是辅助测试分析的关键因素。
软件运行过程中,针对测试用例的内存使用情况,虽然目前存在很多检测内存的技术,但大多以静态分析为主,无法精确给出内存泄漏点和内存使用的清晰的动态追踪结果,在软件整体运行状态下,无法实时观测用例的内存使用状况,从而发现软件存在的一些异常情况。
发明内容
本发明主要是解决现有黑盒测试技术中存在的“无法直观的观测软件的内部运行逻辑路径状况”以及“无法在程序整体运行过程中实时获取参数的输入输出情况、软件的内存使用情况以及软件崩溃时的时序数据信息”等技术问题,提供了一种获取程序运行状况、函数参数的输入输出情况以及程序内存运行状况的方法,并且将实时数据转化为波形的方式,便于测试人更清晰直观准确的数据支持。
本发明的上述技术问题主要通过下述技术方案得以解决:
获取软件运行内部执行路径,将运行数据转化为波形的方式,获取用例的运行数据以及监控软件的运行状况,包括:
(1)软件运行逻辑数据接收装置,调用测试用例执行被植入探针的待测试程序代码并记录所述探针的运行信息;将软件运行接收装置记录的探针运行信息传递给软件运行状态分析装置;
(2)软件运行状态分析装置,分析接收到的探针运行信息并生成波形信号;
(3)软件运行状况显示装置,显示运行状态分析装置生成的波形信号;
所述软件运行逻辑接收装置包括:在待测试程序代码的程序结构中植入探针的插桩模块;测试用例运行控制模块;分析并记录所述探针的运行信息的信息记录模块;
插装模块,在待测试程序中,插入探针;
测试用例运行控制模块包括点击开始按钮,测试用例开始运行采集数据,点击暂停按钮,采集数据暂时停止,点击停止按钮,表示用例执行完毕,数据采集结束;
所述信息记录模块记录的探针运行信息包括:代码块运行消息、条件运行消息中的一种或多种;其中:所述代码块运行消息记录被测试程序代码中程序块的运行状态;所述条件运行消息记录待测试程序代码中条件表达式包含的单个条件运行状态以及所述单个条件的各种组合的运行状态;
信息统计模块,接收所述信息记录模块记录的探针运行信息,根据所述探针运行信息统计单位时间内所述待测试程序代码中代码单元运行次数;
优化的,所述信息统计模块统计的代码单元包括:代码块级代码单元、条件级单元、函数级单元中的一种或多种;
所述信息统计模块包括:代码块级统计单元,统计单位时间内接收到的块运行消息次数,并将所述块运行消息次数作为块级代码单元运行次数;条件级统计单元,统计单位时间内接收到的条件级运行消息次数,并将所述条件级运行消息次数作为条件级代码单元运行次数;函数级统计单元,统计单位时间内接收到的所述块运行消息对应的程序块是函数入口的次数,并将该次数作为函数代码单元运行次数;
波形生成模块,以横坐标为时间,纵坐标为所述代码单元运行次数,生成波形。
所述波形生成模块根据不同类型的代码单元运行次数分别生成:代码块级波形、条件级波形、函数级波形中的一种或多种。
优化的,上述的一种用于软件测试数据分析的波形图,所述信息统计模块以每0.5秒为一个时间单位,统计所述时间单位内的代码单元运行次数;所述波形生成模块以横坐标为时间,纵坐标为所述代码单元运行次数,并且每0.5秒向右移动一个时间单位,从而形成波形图。
优化的,软件内部运行逻辑数据波形图,以测试用例为单元进行统计,当测试用例开始时候除了对单位时间内数据继续统计外,累计统计治标的累计结果,当测试用例运行结束后,统计结束,并记录测试用例运行整个过程中程序内部各逻辑单元执行的累计最终数值。此数值可以用于对测试用例进行的等价类划分和边界值确定,也可以用来辅助确定在不同被测试程序版本同样的输入数据下内部程序执行路径和单元是否发生了变化。
软件运行过程中,获取函数的输入输出情况,包括:
(1)通过编译底层技术,通过遍历抽象语法树,获取被测程序的函数信息模块,对被测源程序进行插装,获取函数参数的信息,包括函数名,参数类型。
(2)程序整体运行时,获取被测程序函数的具体参数值,对于复杂类型(例如结构体),进行逐级解析,直至分析到基本的数据类型。
软件运行过程中,捕获内存运行情况,包括:
(1)对程序中的内存申请和释放进行监控,方法是针对内存分配函数malloc与释放函数free以及new与delete操作符进行绑定,在系统内存函数后面,进行针对性的插装,插装函数取得原始分配函数的信息,例如申请的内存的大小以及将原有申请函数返回的指针作为监控函数的参数,同时插装函数和原有内存申请函数处于同一行代码,因此通过代码位置宏函数,可以精确获得内存分配的位置信息。插装函数将已经申请的指针作为一个链表存储,在释放的代码处,同样插装有对应的释放监控函数,如果内存释放后,则已经申请的内存从监控链表中删除。
(2)软件动态运行过程中,捕获内存函数与操作符的信息,通过计算相关信息,来检测和定位内存泄漏。同时可以动态观察某一时刻申请还未释放的内存的总量和具体的组成情况。
软件运行过程中,捕获程序最后运行50块时序数据信息,包括:
(1)能够自动记录软件崩溃发生时刻之前程序执行的详细路径信息,捕获难以重现的缺陷并快速解决,一般包括捕获最后50个代码块、最后50个条件以及最后50个判定执行。以便用户除了在研发环境内,也可以在用户现场精确定位缺陷,而无需在用户现场部署任何代码。
软件运行过程中,实时捕获函数的调用关系,包括:
(1)能够自动实时记录当前用例执行的函数调用详细信息,当测试人员发现用例输出与预期不符合时,将此信息提供给开发人员,便于开发人员快速定位发现问题。
本发明的优点如下:1.将软件运行逻辑状态以波形的形式呈现,能反映软件运行的实时状态;2.能够在系统级测试阶段实时获取函数的参数输入、输出信息,给与测试人员更清晰准确的数据支持;3能够在软件运行过程中,对软件的内存情况进行监控,发现软件中可能存在泄漏的情况。
附图说明
下面结合附图对本发明做进一步的说明:
图1为本发明的整体结构图;
图2为为测试用例运行接收数据监控图;
图3为内存运行状况整体结构体;
图4为内存插装后的代码;
图5为获取函数参数插装后的代码。
具体实施方式
下面通过实施例,并结合附图,对本发明的技术方案作进一步具体的说明。
实施例:
如图1所示:一种系统级实时获取被测程序内部运行数据的方法,包括:
获取软件运行内部执行路径,将运行数据转化为波形的方式,获取用例的运行数据以及监控软件的运行状况;软件运行过程中,获取函数的输入输出情况;软件运行过程中,捕获内存运行情况;软件运行过程中,捕获程序最后运行50块时序数据信息。
获取软件运行内部执行路径,将运行数据转化为波形的方式,获取用例的运行数据以及监控软件的运行状况,包括:软件运行逻辑数据接收装置模块、软件运行状态分析装置模块以及软件运行状况显示装置模块。
软件运行逻辑数据接收装置模块包括在待测试程序代码的程序结构中植入探针的插桩模块;测试用例运行控制模块;分析并记录所述探针的运行信息的信息记录模块;
插装模块,在待测试程序中,插入探针;
如图2所示:测试用例运行控制模块包括点击开始按钮,测试用例开始运行采集数据,点击暂停按钮,采集数据暂时停止,并抛弃接收到的数据,点击停止按钮,表示用例执行完毕,数据采集结束;
信息统计模块,接收所述信息记录模块记录的探针运行信息,根据所述探针运行信息统计单位时间内所述待测试程序代码中代码单元运行次数;
软件运行状态分析装置模块包括波形生成模块,以横坐标为时间,纵坐标为所述代码单元运行次数,生成波形。根据不同类型的代码单元运行次数分别生成:代码块级波形、条件级波形、函数级波形中的一种或多种。
软件运行状况显示装置模块包括显示运行状态分析装置生成的波形信号。软件内部运行逻辑数据波形图,以测试用例为单元进行统计,当测试用例开始时候除了对单位时间内数据继续统计外,累计统计治标的累计结果,当测试用例运行结束后,统计结束,并记录测试用例运行整个过程中程序内部各逻辑单元执行的累计最终数值。
软件运行过程中,获取函数的输入输出情况,包括分析被测函数信息模块与获取运行过程中函数参数具体值模块。
分析被测函数信息模块包括通过编译底层技术,遍历抽象语法树,获取函数参数的信息,包括函数名,参数类型等信息,绑定对应的插装函数(如图5所示),对于复杂类型(例如结构体),进行逐级分析,直至分析到基本数据类型。
获取运行过程中函数参数具体值模块包括程序整体运行时,获取被测程序函数的具体参数值。
如图3所示:软件运行过程中,捕获内存运行情况包括通过编译底层技术,获取内存申请与释放函数与操作符,并记录函数与操作符信息模块与分析内存使用情况模块。
获取内存申请与释放函数与操作符,并记录函数与操作符信息模块包括对内存分配函数malloc与释放函数free以及new与delete操作符进行绑定,在系统内存函数后面,进行针对性的插装,插装函数取得原始分配函数的信息(如图4所示)。
分析内存使用情况模块包括软件动态运行过程中,捕获内存函数与操作符的信息,计算相关信息,检测和定位内存泄漏。
软件运行过程中,捕获程序最后运行50块时序数据信息包括对系统发生异常情况(例如系统崩溃),记录最后50个代码块、最后50个条件以及最后50个判定执行。
软件运行过程中,实时捕获函数的调用关系包括自动实时记录当前用例执行的函数调用详细信息。
采用上述结构,该实施例可以实现以下功能:
1.当波形出现一根横线时,说明程序停止运行或者出现异常崩溃;当波形心电图出现很高的波峰时,说明程序在高频率运行如出现很低的波谷时,说明程序在低速运行,或者有可能潜在的并发性问题以及瓶颈,这有利于测试人员通过波形的跳动来观察程序的整体运行状况,而不是以前黑盒测试那样,只能凭借测试人员的经验来分析。
2.能够在程序运行过程中,获取每个函数参数的具体输入输出情况,传统的方式是开发人员通过在开发工具中,采用单步调试的方式获取,当被测程序在运行过程中,无法实时直观的观测到。而程序运行过程中函数的输入输出是辅助测试分析的关键因素。
3.能够获取软件的内存使用情况,软件动态运行过程中,捕获内存函数与操作符的信息,通过计算相关信息,来检测和定位内存泄漏。同时可以动态观察某一时刻申请还未释放的内存的总量和具体的组成情况。
4.能够自动记录软件崩溃发生时刻之前程序执行的详细路径信息,捕获难以重现的缺陷并快速解决,一般包括捕获最后50个代码块、最后50个条件以及最后50个判定执行。以便用户除了在研发环境内,也可以在用户现场精确定位缺陷,而无需在用户现场部署任何代码。
5.能够自动实时记录当前用例执行的函数调用详细信息,当测试人员发现用例输出与预期不符合时,将此信息提供给开发人员,便于开发人员快速定位发现问题。
Claims (6)
1.一种系统级实时获取被测程序内部运行数据的方法,其特征在于,包括:
软件运行过程中,获取软件运行内部执行路径,将运行数据转化为波形的方式,获取用例的运行数据以及监控软件的运行状况;
软件运行过程中,获取函数的输入输出情况;
软件运行过程中,捕获用例内存使用情况;
软件运行过程中,捕获程序最后运行50块时序数据信息;
软件运行过程中,实时捕获用例函数的调用信息。
2.根据权利要求1所述的系统级实时获取被测程序内部运行数据的方法,其特征在于:软件运行过程中,获取软件运行内部执行路径,将运行数据转化为波形的方式,获取用例的运行数据以及监控软件的运行状况包括软件运行逻辑数据接收装置模块、软件运行状态分析装置模块以及软件运行状况显示装置模块;
所述软件运行逻辑数据接收装置模块包括在待测试程序代码的程序结构中植入探针的插桩模块;测试用例运行控制模块;分析并记录所述探针的运行信息的信息记录模块;
所述测试用例运行控制模块包括点击开始按钮,测试用例开始运行采集数据,点击暂停按钮,采集数据暂时停止,点击停止按钮,表示用例执行完毕,数据采集结束;
信息统计模块,接收所述信息记录模块记录的探针运行信息,根据所述探针运行信息统计单位时间内所述待测试程序代码中代码单元运行次数;
所述软件运行状态分析装置模块包括波形生成模块,根据不同类型的代码单元运行次数分别生成:代码块级波形、条件级波形、函数级波形中的一种或多种。
3.根据权利要求1所述的系统级实时获取被测程序内部运行数据的方法,其特征在于:软件运行过程中,获取函数的输入输出情况,分析被测函数信息模块与获取运行过程中函数参数具体值模块;
分析被测函数信息模块包括通过编译底层技术,获取函数参数的信息,包括函数名,参数类型等信息,对于复杂类型(例如结构体),进行逐级分析,直至分析到基本数据类型;
获取运行过程中函数参数具体值模块包括程序整体运行时,获取被测程序函数的具体参数值。
4.根据权利要求1所述的系统级实时获取被测程序内部运行数据的方法,其特征在于:软件运行过程中,捕获用例内存使用情况,通过编译底层技术,获取内存申请与释放函数与操作符,并记录函数与操作符信息模块与分析内存使用情况模块;
获取内存申请与释放函数与操作符,并记录函数与操作符信息模块包括对内存分配函数malloc与释放函数free以及new与delete操作符进行绑定,在系统内存函数后面,进行针对性的插装,插装函数取得原始分配函数的信息;
分析内存使用情况模块包括软件动态运行过程中,捕获内存函数与操作符的信息,计算相关信息,检测和定位内存泄漏。
5.根据权利要求1所述的系统级实时获取被测程序内部运行数据的方法,其特征在于:捕获程序最后运行50块时序数据信息包括对系统发生异常情况(例如系统崩溃),记录最后50个代码块、最后50个条件以及最后50个判定执行。
6.根据权利要求1所述的系统级实时获取被测程序内部运行数据的方法,其特征在于:实时捕获最后50个函数的调用信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811448331.6A CN109634851A (zh) | 2018-11-30 | 2018-11-30 | 一种系统级实时获取被测程序内部运行数据的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811448331.6A CN109634851A (zh) | 2018-11-30 | 2018-11-30 | 一种系统级实时获取被测程序内部运行数据的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN109634851A true CN109634851A (zh) | 2019-04-16 |
Family
ID=66070005
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811448331.6A Pending CN109634851A (zh) | 2018-11-30 | 2018-11-30 | 一种系统级实时获取被测程序内部运行数据的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109634851A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110187884A (zh) * | 2019-06-04 | 2019-08-30 | 中国科学技术大学 | 一种多线程应用场景下的访存指令插桩优化方法 |
CN110427323A (zh) * | 2019-07-29 | 2019-11-08 | 天津车之家数据信息技术有限公司 | 一种应用测试方法、装置、代理服务器和系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104063326A (zh) * | 2014-07-14 | 2014-09-24 | 上海零一拼装信息技术有限公司 | 一种用于软件测试数据分析的示波器及方法 |
US20150347271A1 (en) * | 2014-05-30 | 2015-12-03 | Apple Inc. | Queue debugging using stored backtrace information |
CN105912458A (zh) * | 2016-03-28 | 2016-08-31 | 中国电力科学研究院 | 一种用于动态检测c/c++内存泄露的方法及系统 |
CN107085548A (zh) * | 2016-02-16 | 2017-08-22 | 阿里巴巴集团控股有限公司 | 一种监控应用程序内存的方法、装置及电子设备 |
-
2018
- 2018-11-30 CN CN201811448331.6A patent/CN109634851A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20150347271A1 (en) * | 2014-05-30 | 2015-12-03 | Apple Inc. | Queue debugging using stored backtrace information |
CN104063326A (zh) * | 2014-07-14 | 2014-09-24 | 上海零一拼装信息技术有限公司 | 一种用于软件测试数据分析的示波器及方法 |
CN107085548A (zh) * | 2016-02-16 | 2017-08-22 | 阿里巴巴集团控股有限公司 | 一种监控应用程序内存的方法、装置及电子设备 |
CN105912458A (zh) * | 2016-03-28 | 2016-08-31 | 中国电力科学研究院 | 一种用于动态检测c/c++内存泄露的方法及系统 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110187884A (zh) * | 2019-06-04 | 2019-08-30 | 中国科学技术大学 | 一种多线程应用场景下的访存指令插桩优化方法 |
CN110187884B (zh) * | 2019-06-04 | 2020-10-27 | 中国科学技术大学 | 一种多线程应用场景下的访存指令插桩优化方法 |
CN110427323A (zh) * | 2019-07-29 | 2019-11-08 | 天津车之家数据信息技术有限公司 | 一种应用测试方法、装置、代理服务器和系统 |
CN110427323B (zh) * | 2019-07-29 | 2022-12-02 | 天津车之家数据信息技术有限公司 | 一种应用测试方法、装置、代理服务器和系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104182320B (zh) | 一种监控内存泄漏的方法及装置 | |
US9323651B2 (en) | Bottleneck detector for executing applications | |
Bates et al. | High-level debugging of distributed systems: The behavioral abstraction approach | |
US8276126B2 (en) | Determining causes of software regressions based on regression and delta information | |
US5655074A (en) | Method and system for conducting statistical quality analysis of a complex system | |
CN102053906A (zh) | 用于收集程序运行时信息的系统和方法 | |
CN101706749B (zh) | 基于软件安全缺陷检测的综合处理方法 | |
CN105912458A (zh) | 一种用于动态检测c/c++内存泄露的方法及系统 | |
CN107066390A (zh) | 一种动态内存泄漏检测方法及系统 | |
CN104133771A (zh) | 一种测试方法及装置 | |
CN109634851A (zh) | 一种系统级实时获取被测程序内部运行数据的方法 | |
CN104063326A (zh) | 一种用于软件测试数据分析的示波器及方法 | |
CN110309055A (zh) | 基于Java虚拟机的黑盒测试方法、装置、终端及存储介质 | |
Bach et al. | The impact of coverage on bug density in a large industrial software project | |
CN106294136B (zh) | 并行程序运行期间性能变化的在线检测方法和系统 | |
CN109542444A (zh) | Java应用的监控方法、装置、服务器和存储介质 | |
CN106529304A (zh) | 一种安卓应用并发漏洞检测系统 | |
CN102521135A (zh) | 线性系统的测试方法和装置 | |
CN112612697A (zh) | 一种基于字节码技术的软件缺陷测试定位方法及系统 | |
CN116954624A (zh) | 基于软件开发包的编译方法、软件开发系统及服务器 | |
CN106970862B (zh) | 一种内存抖动自动化测试方法及装置 | |
CN113392032B (zh) | 一种api发现的方法、确定测试覆盖率的方法及装置 | |
Malik et al. | Comparing hybrid tool for static and dynamic object-oriented metrics | |
Midolo et al. | Automatic Generation of Accurate Test Templates based on JUnit Asserts | |
Darvish et al. | Guidiva: Automated discovery and validation of state-based gui invariants |
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 |
Application publication date: 20190416 |
|
RJ01 | Rejection of invention patent application after publication |