CN110597705B - 一种可重复获取测试数据的程序调试方法及装置 - Google Patents
一种可重复获取测试数据的程序调试方法及装置 Download PDFInfo
- Publication number
- CN110597705B CN110597705B CN201910695987.6A CN201910695987A CN110597705B CN 110597705 B CN110597705 B CN 110597705B CN 201910695987 A CN201910695987 A CN 201910695987A CN 110597705 B CN110597705 B CN 110597705B
- Authority
- CN
- China
- Prior art keywords
- program
- test
- test data
- tested
- testing
- 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.)
- Expired - Fee Related
Links
- 238000012360 testing method Methods 0.000 title claims abstract description 387
- 238000000034 method Methods 0.000 title claims abstract description 118
- 230000008569 process Effects 0.000 claims abstract description 92
- 230000002159 abnormal effect Effects 0.000 claims abstract description 12
- 238000013500 data storage Methods 0.000 claims description 3
- 230000003993 interaction Effects 0.000 claims description 3
- 230000006870 function Effects 0.000 description 41
- 238000010998 test method Methods 0.000 description 6
- 238000011161 development Methods 0.000 description 5
- 238000004590 computer program Methods 0.000 description 3
- 238000013461 design Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000003825 pressing Methods 0.000 description 1
- 238000013102 re-test Methods 0.000 description 1
- 238000013522 software testing Methods 0.000 description 1
- 239000000725 suspension Substances 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
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
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.在受测试程序执行过程中,当满足以下条件之一时,受测试程序中止执行,并返回测试框架程序:
4.1收到用户(***测试员)发出的中止运行指令(例如按下集成开发环境中的暂停运行按钮)
4.2测试框架程序或受测试程序运行异常(例如崩溃);
4.3用户(***测试员)设置了“当受测试程序的运行结果与预设结果不一致时中止运行”的条件。
当受测试程序在执行完毕返回至测试框架程序过程中未触及测试中止条件时,将本次受测试程序执行过程的状态设置为“通过”;否则记录该次测试过程的相关信息(包括但不限于当前时间、受测试程序的返回值等),并将本次受测试程序执行过程的状态设置为“中止”。
5.当直至运行完测试框架程序的最后一条指令,仍未发生程序中止,则正常终止。图2是一般情况下通用的程序自动测试过程流程图。
在自动测试过程中,需要按照指定规则获取测试数据作为受测试程序的输入,同时还应记录受测试程序的执行结果。该结果既可作为受测试程序的代码质量的评估指标之一,还会作为程序调试的重要依据。程序的目的包括重复观察特定的程序执行过程、修正程序功能与预期设计上的偏差等。
然而,当进行程序调试时,一方面,程序员需要重复获取该次受测试程序作为输入的测试数据,方能还原上次程序运行时的环境;另一方面,在重复获取相同测试数据进行调试前,程序员往往需要对程序进行修改和重新编译。
申请号为201610833864.0的中国发明专利申请公开了一种用于程序调试的方法和装置,该方法可以重现用户在终端的行为,实现对错误的重现。然而,该方法只适用于受测试程序只被调用一次的情况,在重现程序错误时,无法获取当时保存操作指令时的具体测试数据。
南京大学硕士学位论文《程序测试输入的自动生成技术框架及其优化实现》,曹阳,2019;该论文提出了一种基于程序输入空间搜索策略的测试数据自动生成方法,主要用于生成尽可能覆盖程序输入空间的测试数据集合,但并未解决如何在程序出现错误而需要调试时,如何重复生成出错时的测试数据的问题。
发明内容
本发明的目的是提供一种在程序调试过程中重复获取测试数据的方法及装置,解决在多趟程序调试过程中,受测试程序可能经过修改和编译后,仍然需要重复使用测试数据进行程序调试的问题。
为了实现上述任务,本发明采用以下技术方案:
一种可重复获取测试数据的程序调试方法,包括以下步骤:
进行一趟程序自动测试,保存与测试数据相关的参数,用于在下一趟程序测试时重新获取测试数据;
如果受测试程序的返回值与预期不符,表明受测试程序的功能有异常,则进行程序的检查、修改和重新编译;否则程序测试过程结束;
使用保存的测试数据相关参数重新获取上一趟测试过程中使用的测试数据,再进行下一趟程序测试。
进一步地,所述的进行一趟程序自动测试,保存与测试数据相关的参数,包括:
在一趟程序自动测试过程中,接受用户的开始运行指令;程序入口位于测试框架程序中,因此此时测试框架程序开始运行,进入生成测试数据阶段;
在调试器中设置一个“测试数据种类标志寄存器”c1,并将其值初始化为0;
如果发生随机数生成函数调用,则将c1赋值为1,并且将随机数函数的返回值保存至一个随机数数列X中,该随机数数列的每一个随机数都对应一个“使用标志寄存器”c2,此时c2赋值为0;
如果发生受测试函数的调用,则表示测试数据已经生成完毕,进入调用受测试程序阶段;此时在调试器中设置一个初始值为0的“受测试程序调用次数计数器”c3,c3加1;
判断当前的测试数据是否需要在下一趟自动测试过程中被重复获取;
当受测试程序执行完毕,返回至测试框架程序后,如果当前测试数据需要被下一趟程序测试所使用,此时终止测试框架程序的运行;否则表明受测试程序已经通过了以当前测试数据为输入的一次程序测试;
如果没有运行至当前测试框架程序的结束指令,则表明继续重新开始本趟程序自动测试中的下一次程序测试,否则结束当前程序自动测试过程。
进一步地,所述的判断当前的测试数据是否需要在下一趟自动测试过程中被重复获取,具体方法包括:
当达到以下条件之一时,当前的测试数据是在下一趟自动测试过程中需要被重复获取的:
条件1:依据人机交互方式,收到程序测试员发出的明确的保存当前测试数据的命令;
条件2:达到预设的某项条件;程序测试员在调试器中设定,当测试框架程序检测到的受测试程序的返回值满足某种情况时,则视为受测试程序的功能正常,无需再使用当前测试数据进行重复测试;否则视为受测试程序功能不正常,则在执行下一趟自动测试过程时,需要再次使用当前的测试数据进行重复测试。
进一步地,所述的判断当前的测试数据是否需要在下一趟自动测试过程中被重复获取,还包括:
在调试器中设置一个“重复获取测试数据标志寄存器”c4,如果测试数据需要被重复获取,则将c4赋值为1;否则赋值为0。
进一步地,所述的使用保存的测试数据相关参数重新获取上一趟测试过程中使用的测试数据,包括:
接受用户的开始调试指令;
开始执行测试框架程序,直至调用受测试程序的次数等于已记录的受测试程序被调用的次数k-1时,程序暂停在调用受测试程序的语句处,等待用户开始进受测试程序的调试;
检查数据种类标志寄存器的c1值,如果:
c1=0,即测试数据是非随机测试数据,此时无需额外操作;
c1=1,即测试数据是随机测试数据,此时测试框架程序需要先获取与上一次执行相同的测试数据,然后再进行第k次受测试程序的调用;
在受测试程序调试过程中,如果出现了满足所述条件的情况,则将X中的所有随机数对应的“使用标志寄存器”c2赋值为0,即,将X中所有随机数的使用状态重新设为“未使用”,以供再下一次程序自动测试使用;否则,表明受测试程序已经通过本趟测试,将“重复获取测试数据标志寄存器”c4赋值为0。
进一步地,所述的测试框架程序需要先获取与上一次执行相同的测试数据,然后再进行第k次受测试程序的调用,包括:
首先将随机数列X中每个随机数对应的“使用标志寄存器”c2赋值为0,继续执行测试框架程序,当每一次发生随机数生成函数调用时,无论该函数的返回值是什么数值,都立即从上一趟已保存的随机数数列X中取出当前未使用的最早保存的随机数覆盖该返回值,然后将被取出的随机数对应的“使用标志寄存器”c2赋值为1,表示该随机数已被使用;继续执行测试框架程序至开始调用受测试程序的语句处,开始进行第k次受测程序的调试。
在上述技术方案的基础上,本发明进一步公开了一种可重复获取测试数据的程序调试装置,包括:
测试与数据保存模块,用于进行一趟程序自动测试,保存与测试数据相关的参数,用于在下一趟程序测试时重新获取测试数据;
判断模块,用于判断如果受测试程序的返回值与预期不符,表明受测试程序的功能有异常,进行程序的检查、修改和重新编译;否则程序测试过程结束;
重复测试模块,用于使用保存的测试数据相关参数重新获取上一趟测试过程中使用的测试数据,再进行下一趟程序测试。
本发明具有以下技术特点:
1.本发明可以解决在多趟程序自动测试过程中,需要重复获取所需的测试数据进行程序调试的问题。
在多趟程序测试过程中,受测试程序可能会经历修改和重新编译,然后被测试框架程序调用的过程,也就是说受测试程序代码可能已经被更新过,导致在两趟程序自动测试过程中的受测试程序代码可能是不同的。在此过程中,其它已知的程序集成开发环境或者程序调试器并不能实现“保存当前测试数据,修改和编译受测试程序,将已保存的当前测试数据供下一趟程序测试过程时使用”这一过程。本方法可实现上述过程,由于可能便捷地重复获取测试数据,无需太多人工干预,将能极大地提高程序调试效率。
2.对于测试数据,本发明可重复获取的测试数据包括了随机数据以及非随机数据两种,尤其是解决了随机数据的可重复获取问题。
3.本发明通过将与测试数据相关的参数记录于调试器中,然后在下一趟程序测试过程中,依据已保存参数获取到相同的测试数据。
该方法具有程序开销小,无需保存整批测试数据的优点,而且是由调试器全自动地进行测试数据种类的判断、重复获取以及作为受测试程序的输入,无需人工干预,同样能极大地减轻程序测试员的工作量,提高程序调试效率。
附图说明
图1为本发明方法的整体流程示意图;
图2为现有技术中通用的程序自动测试过程的流程图;
图3为两趟或以上的程序测试过程;
图4为测试数据相关参数的保存过程;
图5为测试数据相关参数的保存过程。
具体实施方式
一、定义
(1)受测试程序:接受测试框架程序传输的数据作为输入,并且可以被测试框架程序调用的程序。
(2)测试框架程序:用于获取测试数据并作为受测试程序的输入。测试框架程序执行过程中至少会调用受测程序一次。
注:测试框架程序和受测试程序必须都是语法正确,可以通过编译器编译成功的程序。测试框架程序必定包含主函数,每次开始程序调试时,必定从主函数的第一条指令开始执行。受测试程序不一定包含主函数,可以是以一个或一组其他函数的形式存在。受测试程序必须符合某种接口规范,令其可以被测试框架程序调用。受测试程序在编译成功后必定存在程序入口指令,该指令是受测试程序被调用后执行的第一条指令。
(3)一次程序测试过程:测试框架程序获取测试数据作为受测试程序的输入,然后调用受测试程序并保存该次测试过程的相关信息,直至受测试程序中止执行或者返回至测试框架程序。
注:每获取一次测试数据,就会将其作为受测试程序的输入,并调用一次受测试程序。由此可知,一趟测试过程可以分为两个阶段:
生成测试数据阶段:测试框架程序开始运行直至受测试程序被调用前的阶段。
调用受测试程序阶段:调用并执行受测试程序,同时将生成好的测试数据作为受测试程序的输入的阶段。
(4)程序自动测试过程:在无需人工干预的情况下,按指定策略多次执行“一次程序测试过程”的过程。
注:一趟程序自动测试过程包含一次或一次以上的程序测试过程。所以测试数据有可能被多次分批生成,每次生成的测试数据都会被用于一次调用受测试程序时的输入。
(5)非随机测试数据:非随机测试数据是指在外部存储设备中静态存储,或者在测试框架程序中编译时即已确定的数据。
(6)随机数生成函数:一种以随机数作为返回值的函数。
注:随机数生成函数通常有两种:
编程***或编程语言本身提供的库函数。这种随机数生成函数往往以***时间为种子,并且其函数名是已知的。
基于物理设备的随机数生成函数。这种随机数依赖于某物理设备产生一个随机数。对于使这种情况,必定会存在获取随机数发生器产生的随机数的接口(在软件编程中,接口都是以函数形式存在),这种接口函数实质上也是随机数生成函数的一种。
(7)随机测试数据:随机测试数据是指在测试框架程序执行过程中受某些随机因素(在程序设计中,这些随机因素都是以随机数的形式出现和被使用)影响,导致其与上一次程序执行时使用的测试数据在极大概率上不相同的数据。
注:一种常见的随机测试数据生成方式是,首先调用某个随机函数获得一个随机值,然后根据该随机值生成不同的测试数据。
随机测试数据最大的特点在于包含或者使用了随机数。在随机数生成过程中,即使调用的是同一个随机数生成函数两次或以上,得到的随机数也是各不相同的。因此在两趟程序自动测试过程中,随机测试数据是不相同的。
二、技术方案
本技术方案解决以下问题:
在某趟程序自动测试过程中触发了某项中止条件(中止条件的类型见“背景技术”中的第4点),使得在下一趟程序自动测试过程中需要重复使用上一趟的测试数据。
注:在两趟程序自动测试过程之间,可能发生了受测试程序被修改以及重新编译的过程,使得两趟程序自动测试过程可能是不连续的。因此对于每一次程序测试过程中使用到的数据:
(1)如果是测试过程中生成的,那么在程序测试过程中止或执行完毕后不会被保留;
(2)如果是从外部读入的,也需要使用读入这些数据时程序运行相关参数,方能准确获知读取的数据来源和批次等。
在这两种情况下,都需要在测试框架程序的外部,也就是程序执行环境中保存测试数据或者可以令这些测试数据被重复获取的相关参数;而由于保存这些信息主要是用于程序调试,因此,将这些信息保存程序调试器中是较为合理的做法。
本发明的一种可重复获取测试数据的程序调试方法,包括以下步骤:
程序的开发与测试是交替进行的。当一个程序开发完成后,就进行程序测试过程,而进行程序的自动测试过程可以大大提高测试效率。如果在测试过程中发现程序功能存在与先期设计不相符,即功能异常时,则需要进行程序检查、修改和重新编译,然后再使用与上一次测试过程发现程序功能有异常的测试数据进行测试环境的还原,以作再次测试。由此,以程序测试为起点,本发明步骤如下:
步骤1,进行一趟程序自动测试,保存与测试数据相关的参数,用于在下一趟程序测试时重新获取测试数据;
步骤2,如果受测试程序的返回值与预期不符,表明受测试程序的功能有异常,则进行程序的检查、修改和重新编译;否则程序测试过程结束;
步骤3,使用步骤1保存的测试数据相关参数重新获取上一趟测试过程中使用的测试数据,再进行下一趟程序测试。
在本方案中,不是保存整批测试数据用于下一趟程序测试过程,而是保存测试数据相关参数,这些参数可以被用于在下一趟程序测试过程中重新获取相同的测试数据。
其中,步骤1所述的进行一趟程序自动测试,保存与测试数据相关的参数,具体包括以下过程:
步骤1.1,在一趟程序自动测试过程中,接受用户的开始运行指令;程序入口位于测试框架程序中,因此此时测试框架程序开始运行,进入生成测试数据阶段;
步骤1.2,在调试器中设置一个“测试数据种类标志寄存器”c1,并将其值初始化为0;
步骤1.3,如果发生随机数生成函数调用,则将c1赋值为1,并且将随机数函数的返回值保存至一个随机数数列X中,该随机数数列的每一个随机数都对应一个“使用标志寄存器”c2,此时c2赋值为0;
注:在调试器中可以通过监视随机数生成函数是否被调用,以判定在测试数据的生成过程中是否调用了随机数函数。
步骤1.4,如果发生受测试函数的调用,则表示测试数据已经生成完毕,进入调用受测试程序阶段;此时在调试器中设置一个初始值为0的“受测试程序调用次数计数器”c3,c3加1。
注:调试器记录这些信息得到方式分为两种情况:
第一种情况:如果调试器是一个更大的程序集成开发环境(IntegratedDevelopment Environment)的一部分,在这种情况下,如果测试框架程序执行完毕后,调试器仍然不会退出,此时则可以将这些信息保存于内存中。
第二种情况:调试器会随着测试框架程序执行完毕后而退出,则应当在退出前将这些信息保存于外部非易失性存储设备(例如硬盘)中。
步骤1.5,判断当前的测试数据是否需要在下一趟自动测试过程中被重复获取,判断方法为:
根据第一部分“定义”的(3)和(5)可知,测试数据可能会被多次分批生成。受测试程序可能会被测试框架程序多次调用,每次调用时所输入给受测试程序的测试数据是不同的(从软件测试的角度,在一趟测试中输入重复的测试数据是不必要的)。因此,当达到以下条件之一时,当前的测试数据是在下一趟自动测试过程中需要被重复获取的:
条件1:依据适当的人机交互方式,收到程序测试员发出的明确的保存当前测试数据的命令。
条件2:达到预设的某项条件。程序测试员可以在调试器中设定,当测试框架程序检测到的受测试程序的返回值满足某种情况时,则视为受测试程序的功能正常,无需再使用当前测试数据进行重复测试;否则视为受测试程序功能不正常,则在执行下一趟自动测试过程时,需要再次使用当前的测试数据进行重复测试。
在调试器中设置一个“重复获取测试数据标志寄存器”c4。如果测试数据需要被重复获取,则将c4赋值为1;否则赋值为0。
本方案中,之所以不首先判断当前的测试数据是否需要被重复获取后,再进行信息保存的过程,是因为:
①对于测试数据是否为随机数据的判定,要到整批测试数据都获取完毕,即将开始调用受测试程序时,方能最终判断在生成测试数据的过程中是否使用过随机数,所以在测试框架程序一开始运行时,不能立即断定当前正要获取的测试数据是不是随机测试数据。
②对于当前数据为随机测试数据时,有可能会出现以下情况:测试数据的获取过程中使用了多个不同的随机数,这些随机数都是通过调用随机数生成函数来生成的,他们都先后赋值给同一个变量。这样就导致了后一次生成的随机数会覆盖前一次生成的随机数。此时如果未能保存到所有曾经被使用过的随机数,是不可能在以后重复获取整批测试数据的。所以如果等整批测试数据产生完毕并输入至受测试程序,得出结果后再通过第5步来判定当前测试数据是需要被重复获取的话,则可能已经出现有些随机数被覆盖掉而不能再被保存的情况。
举例:
在上述举例中,第i行生成的随机数会在第j行中被覆盖,因此必须在每一次发生随机数生成函数被调用时,都立即保存该次调用生成的随机数。
步骤1.6,当受测试程序执行完毕,返回至测试框架程序后,如果c4=1表明当前测试数据需要被下一趟程序测试所使用,此时应结束当前程序自动测试过程,即终止测试框架程序的运行;否则表明受测试程序已经通过了以当前测试数据为输入的一次程序测试;
如果没有运行至当前测试框架程序的结束指令,则表明继续重新开始本趟程序自动测试中的下一次程序测试,否则结束当前程序自动测试过程。
在本方案的步骤3中,提到了使用步骤1保存的测试数据相关参数重新获取上一趟测试过程中使用的测试数据,该过程具体包括以下步骤:
当一趟程序自动测试结束,如果“重复获取测试数据标志寄存器”c4为1,表明需要使用当前测试数据进行下一趟测试。在此情况下,程序测试员需要检查受测试程序,如果发现存在错误,还会通知程序开发人员进行程序的修改和重新编译;之后需要重复获取上一趟程序自动测试结束时的测试数据作为输入,进行下一趟程序自动测试。此时调试器会介入程序自动测试的过程,步骤如下:
步骤3.1,接受用户的开始调试指令;
步骤3.2,开始执行测试框架程序,直至调用受测试程序的次数等于已记录的受测试程序被调用的次数k-1时,程序暂停在调用受测试程序的语句(该语句肯定位于测试框架程序中)处,等待用户开始进受测试程序的调试;
注:测试框架程序从开始执行直至第k-1次调用受测试程序的过程,实质上是对受测试程序进行了一共k-1次的测试。这些测试是对于用户(***测试员)而言是无需关心的,因而在本发明所设计的方法中也是全自动执行,无需人工干预,因而对于用户来说是透明的。
步骤3.3,检查数据种类标志寄存器的c1值,如果:
c1=0,即测试数据是非随机测试数据,此时无需额外操作;因为当前趟测试框架程序的执行过程与上一趟的执行过程完全相同,此时测试框架程序获取的当前测试数据,必然与上一次测试框架程序执行至调用相同次数的受测试程序时生成的测试数据相同。
c1=1,即测试数据是随机测试数据。由此刻开始,测试框架程序需要先获取与上一次执行相同的测试数据,然后再进行第k次受测试程序的调用。此时首先将随机数列X中每个随机数对应的“使用标志寄存器”c2赋值为0。原因是在本趟测试开始之前,有可能已经进行了多次重复调试,导致这些寄存器的值可能被改变过。继续执行测试框架程序,当每一次发生随机数生成函数调用时,无论该函数的返回值是什么数值,都立即从上一趟已保存的随机数数列X中取出当前未使用的最早保存的随机数覆盖该返回值,然后将被取出的随机数对应的使“使用标志寄存器”c2赋值为1,表示该随机数已被使用。继续执行测试框架程序至开始调用受测试程序的语句处,开始进受测程序的调试。
步骤3.4,在受测试程序调试过程中,如果出现了步骤1.5中所述的条件的情况,则表明在下一趟程序自动测试过程中仍然需要使用当前的测试数据,此时将X中的所有随机数对应的“使用标志寄存器”c2赋值为0,即,将X中所有随机数的使用状态重新设为“未使用”,以供下一次程序自动测试使用;否则,表明受测试程序已经通过本趟测试,将“重复获取测试数据标志寄存器”c4赋值为0。
在上述技术方案的基础上,本发明进一步公开了一种可重复获取测试数据的程序调试装置,包括:
测试与数据保存模块,用于进行一趟程序自动测试,保存与测试数据相关的参数,用于在下一趟程序测试时重新获取测试数据;
判断模块,用于判断如果受测试程序的返回值与预期不符,表明受测试程序的功能有异常,进行程序的检查、修改和重新编译;否则程序测试过程结束;
重复测试模块,用于使用保存的测试数据相关参数重新获取上一趟测试过程中使用的测试数据,再进行下一趟程序测试。
上述各模块的具体实现过程在前文已有详细说明,在此不进行赘述。
Claims (6)
1.一种可重复获取测试数据的程序调试方法,其特征在于,包括以下步骤:
进行一趟程序自动测试,保存与测试数据相关的参数,用于在下一趟程序测试时重新获取测试数据;
如果受测试程序的返回值与预期不符,表明受测试程序的功能有异常,则进行程序的检查、修改和重新编译;否则程序测试过程结束;
使用保存的测试数据相关参数重新获取上一趟测试过程中使用的测试数据,再进行下一趟程序测试;
所述的进行一趟程序自动测试,保存与测试数据相关的参数,包括:
在一趟程序自动测试过程中,接受用户的开始运行指令;程序入口位于测试框架程序中,因此此时测试框架程序开始运行,进入生成测试数据阶段;
在调试器中设置一个“测试数据种类标志寄存器”c1,并将其值初始化为0;
如果发生随机数生成函数调用,则将c1赋值为1,并且将随机数函数的返回值保存至一个随机数数列X中,该随机数数列的每一个随机数都对应一个“使用标志寄存器”c2,此时c2赋值为0;
如果发生受测试函数的调用,则表示测试数据已经生成完毕,进入调用受测试程序阶段;此时在调试器中设置一个初始值为0的“受测试程序调用次数计数器”c3,c3加1;
判断当前的测试数据是否需要在下一趟自动测试过程中被重复获取;
当受测试程序执行完毕,返回至测试框架程序后,如果当前测试数据需要被下一趟程序测试所使用,此时终止测试框架程序的运行;否则表明受测试程序已经通过了以当前测试数据为输入的一次程序测试;
如果没有运行至当前测试框架程序的结束指令,则表明继续重新开始本趟程序自动测试中的下一次程序测试,否则结束当前程序自动测试过程。
2.如权利要求1所述的可重复获取测试数据的程序调试方法,其特征在于,所述的判断当前的测试数据是否需要在下一趟自动测试过程中被重复获取,具体方法包括:
当达到以下条件之一时,当前的测试数据是在下一趟自动测试过程中需要被重复获取的:
条件1:依据人机交互方式,收到程序测试员发出的明确的保存当前测试数据的命令;
条件2:达到预设的某项条件;程序测试员在调试器中设定,当测试框架程序检测到的受测试程序的返回值满足某种情况时,则视为受测试程序的功能正常,无需再使用当前测试数据进行重复测试;否则视为受测试程序功能不正常,则在执行下一趟自动测试过程时,需要再次使用当前的测试数据进行重复测试。
3.如权利要求2所述的可重复获取测试数据的程序调试方法,其特征在于,所述的判断当前的测试数据是否需要在下一趟自动测试过程中被重复获取,还包括:
在调试器中设置一个“重复获取测试数据标志寄存器”c4,如果测试数据需要被重复获取,则将c4赋值为1;否则赋值为0。
4.如权利要求2所述的可重复获取测试数据的程序调试方法,其特征在于,所述的使用保存的测试数据相关参数重新获取上一趟测试过程中使用的测试数据,包括:
接受用户的开始调试指令;
开始执行测试框架程序,直至调用受测试程序的次数等于已记录的受测试程序被调用的次数k-1时,程序暂停在调用受测试程序的语句处,等待用户开始进受测试程序的调试;
检查数据种类标志寄存器的c1值,如果:
c1=0,即测试数据是非随机测试数据,此时无需额外操作;
c1=1,即测试数据是随机测试数据,此时测试框架程序需要先获取与上一次执行相同的测试数据,然后再进行第k次受测试程序的调用;
在受测试程序调试过程中,如果出现了满足所述条件1或条件2的情况,则将X中的所有随机数对应的“使用标志寄存器”c2赋值为0,即,将X中所有随机数的使用状态重新设为“未使用”,以供再下一次程序自动测试使用;否则,表明受测试程序已经通过本趟测试,将“重复获取测试数据标志寄存器”c4赋值为0。
5.如权利要求4所述的可重复获取测试数据的程序调试方法,其特征在于,所述的测试框架程序需要先获取与上一次执行相同的测试数据,然后再进行第k次受测试程序的调用,包括:
首先将随机数列X中每个随机数对应的“使用标志寄存器”c2赋值为0,继续执行测试框架程序,当每一次发生随机数生成函数调用时,无论该函数的返回值是什么数值,都立即从上一趟已保存的随机数数列X中取出当前未使用的最早保存的随机数覆盖该返回值,然后将被取出的随机数对应的“使用标志寄存器”c2赋值为1,表示该随机数已被使用;继续执行测试框架程序至开始调用受测试程序的语句处,开始进行第k次受测程序的调试。
6.一种可重复获取测试数据的程序调试装置,其特征在于,包括:
测试与数据保存模块,用于进行一趟程序自动测试,保存与测试数据相关的参数,用于在下一趟程序测试时重新获取测试数据;
判断模块,用于判断如果受测试程序的返回值与预期不符,表明受测试程序的功能有异常,进行程序的检查、修改和重新编译;否则程序测试过程结束;
重复测试模块,用于使用保存的测试数据相关参数重新获取上一趟测试过程中使用的测试数据,再进行下一趟程序测试;
所述的进行一趟程序自动测试,保存与测试数据相关的参数,包括:
在一趟程序自动测试过程中,接受用户的开始运行指令;程序入口位于测试框架程序中,因此此时测试框架程序开始运行,进入生成测试数据阶段;
在调试器中设置一个“测试数据种类标志寄存器”c1,并将其值初始化为0;
如果发生随机数生成函数调用,则将c1赋值为1,并且将随机数函数的返回值保存至一个随机数数列X中,该随机数数列的每一个随机数都对应一个“使用标志寄存器”c2,此时c2赋值为0;
如果发生受测试函数的调用,则表示测试数据已经生成完毕,进入调用受测试程序阶段;此时在调试器中设置一个初始值为0的“受测试程序调用次数计数器”c3,c3加1;
判断当前的测试数据是否需要在下一趟自动测试过程中被重复获取;
当受测试程序执行完毕,返回至测试框架程序后,如果当前测试数据需要被下一趟程序测试所使用,此时终止测试框架程序的运行;否则表明受测试程序已经通过了以当前测试数据为输入的一次程序测试;
如果没有运行至当前测试框架程序的结束指令,则表明继续重新开始本趟程序自动测试中的下一次程序测试,否则结束当前程序自动测试过程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910695987.6A CN110597705B (zh) | 2019-07-30 | 2019-07-30 | 一种可重复获取测试数据的程序调试方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910695987.6A CN110597705B (zh) | 2019-07-30 | 2019-07-30 | 一种可重复获取测试数据的程序调试方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110597705A CN110597705A (zh) | 2019-12-20 |
CN110597705B true CN110597705B (zh) | 2023-01-20 |
Family
ID=68853073
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910695987.6A Expired - Fee Related CN110597705B (zh) | 2019-07-30 | 2019-07-30 | 一种可重复获取测试数据的程序调试方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110597705B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115235737A (zh) * | 2022-09-08 | 2022-10-25 | 成都思科瑞微电子股份有限公司 | 一种光电子器件测试方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1779652A (zh) * | 2004-11-24 | 2006-05-31 | 中兴通讯股份有限公司 | 一种调试操作***内核态程序的方法及装置 |
CN101470662A (zh) * | 2007-12-29 | 2009-07-01 | 北京天融信网络安全技术有限公司 | 一种多核mips平台下并行***调试方法 |
CN102075789A (zh) * | 2010-12-31 | 2011-05-25 | 上海全景数字技术有限公司 | 快速测试机顶盒的方法和*** |
CN102541045A (zh) * | 2010-12-31 | 2012-07-04 | 镇江灵芯软件实验室有限公司 | 一种自动测试可编程逻辑控制器程序的方法 |
CN103246596A (zh) * | 2012-02-06 | 2013-08-14 | 镇江灵芯软件实验室有限公司 | 一种对基于时间控制的plc程序自动测试的方法 |
CN104461876A (zh) * | 2014-11-26 | 2015-03-25 | 北京航空航天大学 | 一种基于运行快照序列的并行程序重现调试方法 |
CN108664380A (zh) * | 2017-03-30 | 2018-10-16 | 中国航空工业集团公司西安航空计算技术研究所 | 一种带性能显示的执行后软件调试***及调试方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7844413B2 (en) * | 2005-06-30 | 2010-11-30 | Broadcom Corporation | Self-generated test automation |
CN106250314B (zh) * | 2016-08-04 | 2019-05-28 | 合一网络技术(北京)有限公司 | 一种测试数据获取方法与*** |
-
2019
- 2019-07-30 CN CN201910695987.6A patent/CN110597705B/zh not_active Expired - Fee Related
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1779652A (zh) * | 2004-11-24 | 2006-05-31 | 中兴通讯股份有限公司 | 一种调试操作***内核态程序的方法及装置 |
CN101470662A (zh) * | 2007-12-29 | 2009-07-01 | 北京天融信网络安全技术有限公司 | 一种多核mips平台下并行***调试方法 |
CN102075789A (zh) * | 2010-12-31 | 2011-05-25 | 上海全景数字技术有限公司 | 快速测试机顶盒的方法和*** |
CN102541045A (zh) * | 2010-12-31 | 2012-07-04 | 镇江灵芯软件实验室有限公司 | 一种自动测试可编程逻辑控制器程序的方法 |
CN103246596A (zh) * | 2012-02-06 | 2013-08-14 | 镇江灵芯软件实验室有限公司 | 一种对基于时间控制的plc程序自动测试的方法 |
CN104461876A (zh) * | 2014-11-26 | 2015-03-25 | 北京航空航天大学 | 一种基于运行快照序列的并行程序重现调试方法 |
CN108664380A (zh) * | 2017-03-30 | 2018-10-16 | 中国航空工业集团公司西安航空计算技术研究所 | 一种带性能显示的执行后软件调试***及调试方法 |
Non-Patent Citations (1)
Title |
---|
基于非线性模糊矩阵的代码混淆有效性评估模型;苏庆 等;《计算机科学》;20190430;第46卷(第4期);第196-202页 * |
Also Published As
Publication number | Publication date |
---|---|
CN110597705A (zh) | 2019-12-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3654910B2 (ja) | コンピュータ・システムにおけるエラー訂正方法および装置 | |
KR100868762B1 (ko) | 임베디드용 소프트웨어의 오류 검출 방법 | |
US20040268315A1 (en) | System and method for processing breakpoint events in a child process generated by a parent process | |
US7644394B2 (en) | Object-oriented creation breakpoints | |
US10387296B2 (en) | Methods and systems to identify and reproduce concurrency violations in multi-threaded programs using expressions | |
US20050268195A1 (en) | Apparatus and method for improving emulation speed of high-level languages in on-chip emulation systems | |
US20060271345A1 (en) | Debugging a circuit using a circuit simulation verifier | |
US10579513B2 (en) | Test run control method and apparatus | |
US20150143179A1 (en) | System and Method for Progressive Fault Injection Testing | |
US20140289726A1 (en) | Function exit instrumentation for tail-call optimized code | |
US5361352A (en) | Method for debugging in a parallel computer system and system for the same | |
EP3619611A1 (en) | Conditional debugging of server-side production code | |
US20030088810A1 (en) | Methods and apparatus for determining software component sizes associated with errors | |
CN107329889B (zh) | 一种c编译器自动化测试的方法 | |
US20080127118A1 (en) | Method and system for dynamic patching of software | |
CN110597705B (zh) | 一种可重复获取测试数据的程序调试方法及装置 | |
CN107045474B (zh) | 一种Fuzz测试中的程序流跟踪方法及装置 | |
CN110737985A (zh) | 运行数据验证方法、装置、计算机设备和可读存储介质 | |
US20090235234A1 (en) | Determining minimal sets of bugs solutions for a computer program | |
CN115470141A (zh) | 一种故障模拟方法、装置及相关设备 | |
US9489284B2 (en) | Debugging method and computer program product | |
Kasikci et al. | Failure sketches: A better way to debug | |
CN114492266A (zh) | 一种芯片验证方法及装置、电子设备、存储介质 | |
CN110096888B (zh) | 一种加快验证及分析smm安全隐患的方法及*** | |
US20210026669A1 (en) | Calling arbitrary functions in the kernel via a probe script |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20230120 |
|
CF01 | Termination of patent right due to non-payment of annual fee |