CN105159834B - 一种软件动态测试运行数据提取方法 - Google Patents
一种软件动态测试运行数据提取方法 Download PDFInfo
- Publication number
- CN105159834B CN105159834B CN201510698545.9A CN201510698545A CN105159834B CN 105159834 B CN105159834 B CN 105159834B CN 201510698545 A CN201510698545 A CN 201510698545A CN 105159834 B CN105159834 B CN 105159834B
- Authority
- CN
- China
- Prior art keywords
- tested program
- data
- garrisoning
- signal
- routine
- 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
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种软件动态测试运行数据提取方法,包括以下步骤:驻守进程通过系统调用启动被测程序;当所述被测程序运行至预置的数据监测点时,向所述驻守进程发送信号;所述驻守进程保存现场后,挂起所述被测程序,并根据接收到的信号类型在数据获取处理例程向量表中查找处理例程;查找到的处理例程由所述驻守进程调用,获取当前位置特定运行数据后,向所述驻守进程发送数据获取完毕信号;所述驻守进程接收到获取完毕信号后,恢复现场,并使所述被测程序继续运行。本方法无需代码插桩,不会增加被测程序代码规模,不会影响被测程序运行效率,也不依赖于硬件平台,可获取数据类别丰富、准确、实时,具有较高的普适性。
Description
技术领域
本发明属于计算机软件测试领域,尤其涉及嵌入式系统中软件动态测试所需运行数据的提取方法。
背景技术
软件动态测试中,程序运行数据的提取方法一般可分为三类,它们分别是纯硬件提取方式、纯软件提取方式和软硬件相结合提取方式。其中,纯硬件方式由于通常采用采样的方式获取程序运行数据,不可避免地会丢失一些重要信号,而且其分析范围也很有限,因此在实际应用时很难得到满意测试结果。纯软件方式一般采用的是软件插桩技术,通过在被测程序中插入探针,利用探针来完成运行数据的提取。由于大量存在的探针代码的存在,使得被测程序的代码规模大大增长,对系统运行效率影响颇大,从而置被测程序于非真实运行环境下,这种情况下获得的测试结果必然无法精确地描述被测程序的相关功能和性能。以CodeTest为代表的软硬件相结合的运行数据提取方式吸取了纯软件和纯硬件提取方式的优点,对插入探针和采样触发机制进行优化,实现了运行数据精确提取的目标。但由于这种数据提取方式严重依赖于硬件,对不同硬件平台,需要定制不同的信号捕获探头,使得这种提取方式的灵活性和移植性都较差。
因此,较为理想的运行数据提取方法应该是一种既不会增加被测程序代码规模,不会影响被测程序运行效率,也不依赖于硬件的数据提取方法。而本发明提出的软件动态测试运行数据提取方法正是具备上述这三个属性的方法。
发明内容
本发明的技术解决问题:克服现有技术的不足,提供一种既不会增加被测程序代码规模,不会影响程序运行效率,也不依赖于硬件的运行数据提取方式,以便为软件动态测试提供必要的测试过程数据。
本发明的核心思想是:由一个驻守系统的进程来对被测程序的运行状态进行监控,当被测程序运行到预置数据监测点时,保存现场后挂起被测程序,接着利用一种类似中断的数据获取处理例程查找和调用机制实现被测程序运行数据的提取操作。由于数据获取处理例程只包含简单的系统调用指令,其运行时间对整个被测程序的运行时间影响很小,可以确保被测程序在极其接近于真实的环境下运行,因此通过这种方法获取到的数据实时、准确。通过在数据监测点设置多种数据获取信号,从而触发驻守进程调用不同的数据获取处理例程获取不同类别的运行数据,使得本发明公开的数据提取方法可提取的数据类型多样化。
本发明提供的检测方法包括以下步骤,如图1所示:
步骤101,驻守进程通过系统调用启动被测程序。
驻守进程作为被测程序的父进程,运行于系统后台,通过系统调用接口,直接读写被测程序的进程空间来实现对被测程序运行状态的监控。被测程序指指的是软件动态测试的对象被测程序的运行状态包括启动、挂起、恢复运行和终止运行四种。
步骤102,当被测程序运行至预置的数据监测点时,向驻守进程发送信号。
根据测试业务需求,在被测程序运行前设置若干个数据监测点,这些监测点对应于被测程序源代码特定文件的文件名和行号。当被测程序运行至监测点时,可以利用后续处理例程获取被测程序当前的运行时数据,从而作为基础数据提供给测试业务模块使用。
被测程序运行至预置的数据监测点时,会向驻守进程发送一个特定的信号。该信号指明了当前数据监测点所需获取的数据类型,不同测试业务需求可以有不同类型的数据需求。
步骤103,所述驻守进程保护现场后,挂起被测程序,并根据接收到的信号类型在数据获取处理例程向量表中查找处理例程。
驻守进程接收到被测程序发送的获取数据信号后,会先保存当前被测程序的运行现场,然后将被测程序挂起,使之暂停运行。接着,驻守进程根据接收到的信号类型再数据获取处理例程向量表中查找对应的数据获取处理例程。
此处的数据获取处理例程指的是直接获取所述被测程序运行数据的子程序,该处理例程只包含简单的系统调用指令,运行时间短,对被测程序的运行时间的影响甚小,能够使被测程序在非常接近于真实环境下运行,以保证最终测试结果的准确性和实时性。
为了最大可能减少驻守进程查找与接收到的信号类型相匹配的数据获取处理例程的耗时,特别设置数据获取处理例程向量表,将所有数据获取处理例程的入口地址与其对应的信号类型一起存储。这一举措能够将被测程序因数据获取处理例程所中断的时间进一步压缩,进一步提高了最终测试结果的实时性。
步骤104,查找到的处理例程由驻守进程调用,在获取当前位置特定运行数据后,向驻守进程发送获取数据完毕信号。
根据操作系统访问权限控制原理,由于驻守进程具有被测程序进程空间的读写能力,它所调用的数据获取处理例程便直接继承了读写被测程序进程空间的能力。因此,根据测试业务需求,数据获取处理例程能够直接获取到被测程序进程空间中任意位置、任意大小的数据,这些数据即为测试核心模块所需的各类基础数据。
步骤105,驻守进程接收到获取完毕信号后,恢复现场,并恢复被测程序的运行。
数据获取处理例程执行完毕后,驻守进程需要立即将原先保存的被测程序运行现场还原,以便被测程序的运行环境能够恢复到被驻守进程中断以前的运行环境,从而保证被测程序能够按照原定运行逻辑正确地继续运行。
本发明与现有技术相比优点在于:
(1)本发明提供的软件动态测试运行数据提取方法是纯软件实现,不依赖于硬件,成本低,不会因为硬件开发周期长且适用性窄而影响测试技术的推行。
(2)本发明提供的软件动态测试运行数据提取方法的实现,无需在被测程序中插入探针代码,不会增加被测程序的代码规模,对被测程序运行效率的影响非常小,且能够保证获取到的运行数据准确、实时,且能够根据测试业务需求,提供类型丰富的运行数据。
附图说明
图1为本发明的软件动态测试运行数据提取方法的流程图;
图2为本发明实施例中软件动态测试运行数据提取系统的结构图;
图3为本发明实施例中软件动态测试运行数据提取系统的工作流程图。
具体实施方式
以下结合本发明实施例附图1、图2和图3来对本发明实施例中的技术方案进行清楚、完整地描述,显然所描述的实施例仅仅是本申请的一个实施例,而非全部的实施例。
如图1为本发明的软件动态测试运行数据提取方法的流程图,具体实现步骤如下:
步骤101,驻守进程通过系统调用启动被测程序,具体实施如下:
(1)被测程序
被测程序可以是部署于桌面操作系统之上的普通程序,也可以是运行于嵌入式系统中实时程序;根据测试业务分类,被测程序可以是一切软件动态测试的对象,比如程序覆盖度测试、时间性能测试和内存错误检测的对象。
被测程序在运行时,不能自主运行,需要由驻守进程来启动,即被测程序是以驻守进程的子进程身份在计算机系统上运行的。
(2)驻守进程
驻守进程时被测程序的父进程,运行于与被测程序同一侧的系统后台。通过操作系统提供的系统调用接口,驻守进程能够直接读写被测程序进程空间中的任意位置、任意字节大小的内存数据,这其中包括进程空间的寄存器组值、代码段值、数据段值和堆栈段值。
驻守进程利用系统调用接口可以控制被测程序的运行状态包括启动、挂起、恢复运行和终止运行四种。
步骤102,当被测程序运行至预置的数据监测点时,向驻守进程发送信号,具体实施如下:
(1)数据监测点
根据测试业务需求,在被测程序运行前设置若干个数据监测点,这些监测点对应于被测程序源代码特定文件的文件名和行号,这些数据监测点信息可以通过对被测程序进行静态分析得到。由于计算机系统在运行被测程序时,实际上是按照系统的程序计数器的值来运行的,而程序计数器始终指向的是下一条可执行指令在进程空间中的地址,因此在具体实施时,可以将被测程序源文件的每一行与进程空间的地址值进行映射,从而加快驻守进程对数据监测点的识别速率。
当被测程序运行至监测点时,可以利用后续处理例程获取被测程序当前的运行时数据,从而作为基础数据提供给测试业务模块使用。
(2)数据获取信号
被测程序运行至预置的数据监测点时,会向驻守进程发送一个特定的数据获取信号。该信号指明了当前数据监测点所需获取的数据类型,不同测试业务需求可以有不同类型的数据需求。
根据测试业务需求,可以设置信号类型为四类:读寄存器信号、写寄存器信号、读指定内存信号、写指定内存信号。
步骤103,所述驻守进程保护现场后,挂起被测程序,并根据接收到的信号类型在数据获取处理例程向量表中查找处理例程,具体实施如下:
(1)保护现场
保护现场的目的是保证被测程序在被挂起前一时刻的运行环境不被破坏,以便当所述获取数据处理例程执行完毕,系统能够继续运行所述被测程序。因此,需要根据被测程序所在的硬件平台和软件平台的特性,将所有与被测程序运行环境相关的数据保存到特定的内存空间或寄存器中。
(2)挂起被测程序
挂起被测程序操作,是指将被测程序在系统中的进程暂时调离内存,只有条件允许时,才会被系统再次调回内存中继续执行。挂起被测程序操作应该在驻守进程保护现场之后执行。
(3)数据获取处理例程
数据获取处理例程指的是直接获取所述被测程序运行数据的子程序,该处理例程只包含简单的系统调用指令,运行时间短,对被测程序的运行时间的影响甚小,能够使被测程序在非常接近于真实环境下运行,以保证最终测试结果的准确性和实时性。
(4)数据获取处理例程向量表
为了最大可能减少驻守进程查找与接收到的信号类型相匹配的数据获取处理例程的耗时,设置数据获取处理例程向量表,将所有数据获取处理例程的入口地址与其对应的信号类型一起存储。这一举措能够将被测程序因数据获取处理例程所中断的时间进一步压缩,进一步提高最终测试结果的实时性。下表1为数据获取处理例程向量表的一个示例。
表1数据获取处理例程向量表的一个示例
数据获取处理例程入口地址 | 数据获取信号类型 |
0x00401280 | signal_type_register |
0x00401A98 | signal_type_stack |
0x004020E0 | signal_type_data |
其中,signal_type_register、signal_type_stack、signal_type_data是所述的数据获取信号类型,在实际应用时,应根据测试业务具体需求来设置,此处仅举出三例。
步骤104,查找到的处理例程由驻守进程调用,在获取当前位置特定运行数据后,向驻守进程发送获取数据完毕信号,具体实施如下:
(1)运行数据获取
根据操作系统访问权限控制原理,由于驻守进程具有被测程序进程空间的读写能力,它所调用的数据获取处理例程便直接继承了读写被测程序进程空间的能力。因此,根据测试业务需求,数据获取处理例程能够直接获取到被测程序进程空间中任意位置、任意大小的数据,这些数据即为测试核心模块所需的各类基础数据。下表2为部分可获取的基础数据:
表2部分可获取的基础数据
(2)数据获取完毕信号
该信号由数据获取处理例程发送,接收方为驻守进程。因此,驻守进程在挂起被测程序、调用数据获取处理例程后,即进入等待数据获取完毕信号的状态。
步骤105,驻守进程接收到获取完毕信号后,恢复现场,并恢复被测程序的运行,具体实施如下:
数据获取处理例程执行完毕后,驻守进程需要立即将原先保存的被测程序运行现场数据还原,以便被测程序的运行环境能够恢复到被驻守进程中断以前的运行环境,从而保证被测程序能够按照原定运行逻辑正确地继续运行。
如图2为本发明实施例中软件动态测试运行数据提取系统的结构图,该系统的主要组成模块包括驻守进程、被测应用程序、处理例程向量表和处理例程,其中:
驻守进程是整个系统的总入口,所有需要被测试的应用程序均由其来启动。被测程序启动之后,便被驻守进程完全接管,包括其运行状态和进程空间。
驻守进程除了拥有对被测程序运行状态监控和进程空间读写的权限,还负有在处理例程向量表中查询匹配于接收到的信号类型的处理例程的责任。
在本系统中,存在着两种类型的信号:一种是由被测程序向驻守进程发送的获取信号类型;另一种是由处理例程在获取运行数据完毕后向驻守进程发送的反馈信号。
如图3为本发明实施例中软件动态测试运行数据提取系统的工作流程图,其中:
步骤301,驻守进程通过系统调用接口启动被测程序。
步骤302,被测程序运行至预置数据监测点,向驻守进程发送数据获取信号。
步骤303,驻守进程保护被测程序运行现场,挂起被测程序。
步骤304,驻守进程根据数据获取信号类型,查询处理例程向量表。
步骤305,处理例程向量表返回相应的处理例程编号。
步骤306,驻守进程启动指定的处理例程,处理例程根据需求获取指定运行数据。
步骤307,处理例程获取完指定运行数据后,向驻守进程发送数据获取完毕信号。
步骤308,驻守进程接收到数据获取完毕信号后,恢复被测程序的运行现场,并使被测程序从之前暂停处恢复运行。
本发明未详细阐述部分属于本领域公知技术。
应该指出的是,以上所述仅为本发明的较佳实施案例而已,并不能因此而认为是对本发明的保护范围的限制,在不脱离本发明的核心思想的所有等效改进和润饰,均属于本发明的保护范围。
Claims (3)
1.一种软件动态测试运行数据提取方法,其特征在于:所述方法包括以下步骤:
(1)驻守进程通过系统调用启动被测程序;所述驻守进程指的是运行于系统后台的进程,作为所述被测程序的父进程,负责监控所述被测程序的运行状态;所述被测程序指的是软件动态测试的对象;
(2)当所述被测程序运行至预置的数据监测点时,向所述驻守进程发送信号;
(3)所述驻守进程保护现场后,挂起所述被测程序,并根据接收到的信号类型在数据获取处理例程向量表中查找处理例程;
(4)查找到的处理例程由所述驻守进程调用,获取当前位置特定运行数据后,向所述驻守进程发送获取数据完毕信号;
(5)所述驻守进程接收到获取完毕信号后,恢复现场,并恢复所述被测程序的运行;
所述步骤(3)中,所述挂起所述被测程序操作,是指将所述被测程序在系统中的进程暂时调离内存,只有条件允许时,才会被系统再次调回内存中继续执行;
所述保护现场的目的是保证所述被测程序被挂起前一时刻的状态不被破坏,以便当所述数据获取处理例程执行完毕,系统能够继续运行所述被测程序;
所述数据获取处理例程指的是直接获取所述被测程序运行数据的子程序,该处理例程只包含简单的系统调用指令;
所述数据获取处理例程向量表可以根据所述驻守进程接收到的所述信号类型生成相应的数据获取处理例程的入口地址,从而使得所述驻守进程转而调用相应的数据获取处理例程成为可能;
所述步骤(5)中,所述恢复现场目的在于将所述被测程序被挂起前的运行现场恢复,以便所述被测程序能够继续运行。
2.根据权利要求1所述的软件动态测试运行数据提取方法,其特征在于:所述步骤(2)中,
所述数据监测点指的是根据测试业务需求,所述被测程序需要在运行时给出业务所关注数据的位置,该位置由所述被测程序源代码文件的文件名和行号共同组成;
所述信号指明了当前数据监测点所需获取数据类型,不同数据类型对应着不同的信号类型。
3.根据权利要求1所述的软件动态测试运行数据提取方法,其特征在于:所述步骤(4)中,所述当前位置特定运行数据指的是所述预置数据监测点所对应的运行数据,不同预置数据监测点所需要获取的运行数据不同。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510698545.9A CN105159834B (zh) | 2015-10-24 | 2015-10-24 | 一种软件动态测试运行数据提取方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510698545.9A CN105159834B (zh) | 2015-10-24 | 2015-10-24 | 一种软件动态测试运行数据提取方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105159834A CN105159834A (zh) | 2015-12-16 |
CN105159834B true CN105159834B (zh) | 2017-11-03 |
Family
ID=54800696
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510698545.9A Active CN105159834B (zh) | 2015-10-24 | 2015-10-24 | 一种软件动态测试运行数据提取方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105159834B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108121653A (zh) * | 2016-11-29 | 2018-06-05 | 华为技术有限公司 | 测试程序性能的方法及装置 |
CN109165042A (zh) * | 2018-07-23 | 2019-01-08 | 努比亚技术有限公司 | 一种应用中断恢复方法、终端及计算机可读存储介质 |
CN109902008A (zh) * | 2019-02-22 | 2019-06-18 | 广州视源电子科技股份有限公司 | 程序测试结果的获取方法和获取装置、兼容性测试方法 |
CN112667245A (zh) * | 2021-01-15 | 2021-04-16 | 腾讯音乐娱乐科技(深圳)有限公司 | 一种代码处理方法、装置、电子设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102662846A (zh) * | 2012-04-24 | 2012-09-12 | 广东欧珀移动通信有限公司 | 一种自动化工具与测试用例结合的测试方法 |
CN104111890A (zh) * | 2014-07-29 | 2014-10-22 | 北京航空航天大学 | 一种实时性能测试方法与系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8583965B2 (en) * | 2011-06-21 | 2013-11-12 | International Business Machines Corporation | System and method for dynamic code analysis in presence of the table processing idiom |
-
2015
- 2015-10-24 CN CN201510698545.9A patent/CN105159834B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102662846A (zh) * | 2012-04-24 | 2012-09-12 | 广东欧珀移动通信有限公司 | 一种自动化工具与测试用例结合的测试方法 |
CN104111890A (zh) * | 2014-07-29 | 2014-10-22 | 北京航空航天大学 | 一种实时性能测试方法与系统 |
Also Published As
Publication number | Publication date |
---|---|
CN105159834A (zh) | 2015-12-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105159834B (zh) | 一种软件动态测试运行数据提取方法 | |
CN108985057B (zh) | 一种webshell检测方法及相关设备 | |
CN104217203B (zh) | 复杂背景卡面信息识别方法及系统 | |
CN108921026A (zh) | 动物身份的识别方法、装置、计算机设备和存储介质 | |
CN108681746A (zh) | 一种图像识别方法、装置、电子设备和计算机可读介质 | |
CN106294222A (zh) | 一种确定pcie设备与插槽对应关系的方法及装置 | |
US11657316B2 (en) | Self-feeding deep learning method and system | |
CN111159167B (zh) | 标注质量检测装置和方法 | |
CN104809039A (zh) | 基于物理内存分配映射的内存检测方法 | |
CN113961473A (zh) | 数据测试方法、装置、电子设备及计算机可读存储介质 | |
CN103246594A (zh) | 一种基于Linux内核的用户态网卡自动探测方法 | |
Srihari et al. | Name and address block reader system for tax form processing | |
CN105892304A (zh) | 曲线数据自动判读方法 | |
CN107590017A (zh) | 一种电子设备的检测方法和装置 | |
CN114356846A (zh) | 一种图像数据发送方法、装置、电子设备及存储介质 | |
CN113031991B (zh) | 一种嵌入式系统的远程自适应升级方法及其装置 | |
CN109086186A (zh) | 日志检测方法及装置 | |
CN113138916A (zh) | 基于标注样本的图片结构化算法的自动测试方法及系统 | |
CN112241705A (zh) | 基于分类回归的目标检测模型训练方法和目标检测方法 | |
CN111783786A (zh) | 图片的识别方法、系统、电子设备及存储介质 | |
CN110457905A (zh) | 样本的病毒检测方法、装置、计算机设备及存储介质 | |
CN116094930A (zh) | 一种基于智能化分析的配置对账解决方法及装置 | |
CN109660392A (zh) | 一种Linux系统下硬件统一化自适应管理部署方法及系统 | |
CN108021951A (zh) | 一种文档检测的方法、服务器及计算机可读存储介质 | |
CN110083540B (zh) | 接口测试方法及装置 |
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 | ||
TR01 | Transfer of patent right |
Effective date of registration: 20210917 Address after: 1709-a145, No.9, North Fourth Ring Road West, Haidian District, Beijing, 100190 Patentee after: BEIJING INTELLIGENT FULLY ELECTRIC INFORMATION TECHNOLOGY Co.,Ltd. Address before: 100191 No. 37, Haidian District, Beijing, Xueyuan Road Patentee before: BEIHANG University |
|
TR01 | Transfer of patent right |