CN110597705A - 一种可重复获取测试数据的程序调试方法及装置 - Google Patents

一种可重复获取测试数据的程序调试方法及装置 Download PDF

Info

Publication number
CN110597705A
CN110597705A CN201910695987.6A CN201910695987A CN110597705A CN 110597705 A CN110597705 A CN 110597705A CN 201910695987 A CN201910695987 A CN 201910695987A CN 110597705 A CN110597705 A CN 110597705A
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.)
Granted
Application number
CN201910695987.6A
Other languages
English (en)
Other versions
CN110597705B (zh
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.)
Guangdong University of Technology
Original Assignee
Guangdong University of Technology
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 Guangdong University of Technology filed Critical Guangdong University of Technology
Priority to CN201910695987.6A priority Critical patent/CN110597705B/zh
Publication of CN110597705A publication Critical patent/CN110597705A/zh
Application granted granted Critical
Publication of CN110597705B publication Critical patent/CN110597705B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/3688Test 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 (7)

1.一种可重复获取测试数据的程序调试方法,其特征在于,包括以下步骤:
进行一趟程序自动测试,保存与测试数据相关的参数,用于在下一趟程序测试时重新获取测试数据;
如果受测试程序的返回值与预期不符,表明受测试程序的功能有异常,则进行程序的检查、修改和重新编译;否则程序测试过程结束;
使用保存的测试数据相关参数重新获取上一趟测试过程中使用的测试数据,再进行下一趟程序测试。
2.如权利要求1所述的可重复获取测试数据的程序调试方法,其特征在于,所述的进行一趟程序自动测试,保存与测试数据相关的参数,包括:
在一趟程序自动测试过程中,接受用户的开始运行指令;程序入口位于测试框架程序中,因此此时测试框架程序开始运行,进入生成测试数据阶段;
在调试器中设置一个“测试数据种类标志寄存器”c1,并将其值初始化为0;
如果发生随机数生成函数调用,则将c1赋值为1,并且将随机数函数的返回值保存至一个随机数数列X中,该随机数数列的每一个随机数都对应一个“使用标志寄存器”c2,此时c2赋值为0;
如果发生受测试函数的调用,则表示测试数据已经生成完毕,进入调用受测试程序阶段;此时在调试器中设置一个初始值为0的“受测试程序调用次数计数器”c3,c3加1;
判断当前的测试数据是否需要在下一趟自动测试过程中被重复获取;
当受测试程序执行完毕,返回至测试框架程序后,如果当前测试数据需要被下一趟程序测试所使用,此时终止测试框架程序的运行;否则表明受测试程序已经通过了以当前测试数据为输入的一次程序测试;
如果没有运行至当前测试框架程序的结束指令,则表明继续重新开始本趟程序自动测试中的下一次程序测试,否则结束当前程序自动测试过程。
3.如权利要求2所述的可重复获取测试数据的程序调试方法,其特征在于,所述的判断当前的测试数据是否需要在下一趟自动测试过程中被重复获取,具体方法包括:
当达到以下条件之一时,当前的测试数据是在下一趟自动测试过程中需要被重复获取的:
条件1:依据人机交互方式,收到程序测试员发出的明确的保存当前测试数据的命令;
条件2:达到预设的某项条件;程序测试员在调试器中设定,当测试框架程序检测到的受测试程序的返回值满足某种情况时,则视为受测试程序的功能正常,无需再使用当前测试数据进行重复测试;否则视为受测试程序功能不正常,则在执行下一趟自动测试过程时,需要再次使用当前的测试数据进行重复测试。
4.如权利要求3所述的可重复获取测试数据的程序调试方法,其特征在于,所述的判断当前的测试数据是否需要在下一趟自动测试过程中被重复获取,还包括:
在调试器中设置一个“重复获取测试数据标志寄存器”c4,如果测试数据需要被重复获取,则将c4赋值为1;否则赋值为0。
5.如权利要求1所述的可重复获取测试数据的程序调试方法,其特征在于,所述的使用保存的测试数据相关参数重新获取上一趟测试过程中使用的测试数据,包括:
接受用户的开始调试指令;
开始执行测试框架程序,直至调用受测试程序的次数等于已记录的受测试程序被调用的次数k-1时,程序暂停在调用受测试程序的语句处,等待用户开始进受测试程序的调试;
检查数据种类标志寄存器的c1值,如果:
c1=0,即测试数据是非随机测试数据,此时无需额外操作;
c1=1,即测试数据是随机测试数据,此时测试框架程序需要先获取与上一次执行相同的测试数据,然后再进行第k次受测试程序的调用;
在受测试程序调试过程中,如果出现了满足所述条件1或条件2的情况,则将X中的所有随机数对应的“使用标志寄存器”c2赋值为0,即,将X中所有随机数的使用状态重新设为“未使用”,以供再下一次程序自动测试使用;否则,表明受测试程序已经通过本趟测试,将“重复获取测试数据标志寄存器”c4赋值为0。
6.如权利要求5所述的可重复获取测试数据的程序调试方法,其特征在于,所述的测试框架程序需要先获取与上一次执行相同的测试数据,然后再进行第k次受测试程序的调用,包括:
首先将随机数列X中每个随机数对应的“使用标志寄存器”c2赋值为0,继续执行测试框架程序,当每一次发生随机数生成函数调用时,无论该函数的返回值是什么数值,都立即从上一趟已保存的随机数数列X中取出当前未使用的最早保存的随机数覆盖该返回值,然后将被取出的随机数对应的“使用标志寄存器”c2赋值为1,表示该随机数已被使用;继续执行测试框架程序至开始调用受测试程序的语句处,开始进行第k次受测程序的调试。
7.一种可重复获取测试数据的程序调试装置,其特征在于,包括:
测试与数据保存模块,用于进行一趟程序自动测试,保存与测试数据相关的参数,用于在下一趟程序测试时重新获取测试数据;
判断模块,用于判断如果受测试程序的返回值与预期不符,表明受测试程序的功能有异常,进行程序的检查、修改和重新编译;否则程序测试过程结束;
重复测试模块,用于使用保存的测试数据相关参数重新获取上一趟测试过程中使用的测试数据,再进行下一趟程序测试。
CN201910695987.6A 2019-07-30 2019-07-30 一种可重复获取测试数据的程序调试方法及装置 Active CN110597705B (zh)

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 true CN110597705A (zh) 2019-12-20
CN110597705B CN110597705B (zh) 2023-01-20

Family

ID=68853073

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910695987.6A Active CN110597705B (zh) 2019-07-30 2019-07-30 一种可重复获取测试数据的程序调试方法及装置

Country Status (1)

Country Link
CN (1) CN110597705B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115235737A (zh) * 2022-09-08 2022-10-25 成都思科瑞微电子股份有限公司 一种光电子器件测试方法

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1779652A (zh) * 2004-11-24 2006-05-31 中兴通讯股份有限公司 一种调试操作系统内核态程序的方法及装置
US20070006046A1 (en) * 2005-06-30 2007-01-04 Broadcom Corporation Self-generated test automation
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 北京航空航天大学 一种基于运行快照序列的并行程序重现调试方法
CN106250314A (zh) * 2016-08-04 2016-12-21 合网络技术(北京)有限公司 一种测试数据获取方法与系统
CN108664380A (zh) * 2017-03-30 2018-10-16 中国航空工业集团公司西安航空计算技术研究所 一种带性能显示的执行后软件调试系统及调试方法

Patent Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1779652A (zh) * 2004-11-24 2006-05-31 中兴通讯股份有限公司 一种调试操作系统内核态程序的方法及装置
US20070006046A1 (en) * 2005-06-30 2007-01-04 Broadcom Corporation Self-generated test automation
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 北京航空航天大学 一种基于运行快照序列的并行程序重现调试方法
CN106250314A (zh) * 2016-08-04 2016-12-21 合网络技术(北京)有限公司 一种测试数据获取方法与系统
CN108664380A (zh) * 2017-03-30 2018-10-16 中国航空工业集团公司西安航空计算技术研究所 一种带性能显示的执行后软件调试系统及调试方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
苏庆 等: "基于非线性模糊矩阵的代码混淆有效性评估模型", 《计算机科学》 *

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115235737A (zh) * 2022-09-08 2022-10-25 成都思科瑞微电子股份有限公司 一种光电子器件测试方法

Also Published As

Publication number Publication date
CN110597705B (zh) 2023-01-20

Similar Documents

Publication Publication Date Title
JP3654910B2 (ja) コンピュータ・システムにおけるエラー訂正方法および装置
US5651111A (en) Method and apparatus for producing a software test system using complementary code to resolve external dependencies
US7644394B2 (en) Object-oriented creation breakpoints
US20040268315A1 (en) System and method for processing breakpoint events in a child process generated by a parent process
US10089126B2 (en) Function exit instrumentation for tail-call optimized code
US9183114B2 (en) Error detection on the stack
US20050268195A1 (en) Apparatus and method for improving emulation speed of high-level languages in on-chip emulation systems
KR20080050118A (ko) 임베디드용 소프트웨어의 오류 검출 방법
US20150143179A1 (en) System and Method for Progressive Fault Injection Testing
CN109101416B (zh) 一种内核故障注入方法及电子设备
US20140007054A1 (en) Methods and systems to identify and reproduce concurrency violations in multi-threaded programs using expressions
US10579513B2 (en) Test run control method and apparatus
US5361352A (en) Method for debugging in a parallel computer system and system for the same
CN107329889B (zh) 一种c编译器自动化测试的方法
US20030088810A1 (en) Methods and apparatus for determining software component sizes associated with errors
US20080127118A1 (en) Method and system for dynamic patching of software
JPH0748182B2 (ja) プログラム・エラー検出方法
CN110597705B (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
CN115080978A (zh) 一种基于模糊测试的运行时漏洞检测方法及系统
US11182182B2 (en) Calling arbitrary functions in the kernel via a probe script
CN114492266A (zh) 一种芯片验证方法及装置、电子设备、存储介质

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