CN106325827B - 一种随机测试程序生成方法及装置 - Google Patents
一种随机测试程序生成方法及装置 Download PDFInfo
- Publication number
- CN106325827B CN106325827B CN201510334812.4A CN201510334812A CN106325827B CN 106325827 B CN106325827 B CN 106325827B CN 201510334812 A CN201510334812 A CN 201510334812A CN 106325827 B CN106325827 B CN 106325827B
- Authority
- CN
- China
- Prior art keywords
- instruction
- test program
- random test
- random
- branch
- 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
- Test And Diagnosis Of Digital Computers (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种随机测试程序生成方法,包括:在合法指令集中随机选择指令包并生成指令包,判断所述指令包是否包括分支跳转指令;当所述指令包包括所述分支跳转指令时,判断所述随机测试程序是否存在第一死循环风险;当所述随机测试程序存在所述第一死循环风险时,修改所述随机测试程序,判断所述随机测试程序是否存在第二循环风险;当所述随机测试程序不存在第二循环风险时,修改全自动随机测试程序生成器(ARTPG)状态、处理器状态和所述合法指令集。本发明还同时公开了一种随机测试程序生成装置。
Description
技术领域
本发明涉及处理器设计领域,尤其涉及一种随机测试程序生成方法及装置。
背景技术
现有技术中,在进行处理器设计时,对处理器的功能验证是一个重点和难点,如何能够完整的覆盖处理器的功能及保证处理器验证的质量成为处理器设计的关键。目前,纯粹靠验证人员手动编写处理器验证所需要的程序和数据容易漏掉对某些处理器功能点的验证。因此,如果采用高效生成随机汇编测试程序或者随机机器测试程序的方式可以改善或解决上述技术问题。
现有技术中,随机测试程序生成方法需要采用不受控的全随机,导致生成的随机测试程序合法性存在问题,同时随机测试程序的目的性差且难以保证处理器的功能覆盖率;此外,现有技术中的随机测试程序生成方法需要编写程序段或者编写复杂的随机程序约束模版,导致生成的随机测试程序随机性差,并难以做到对人工设计程序的有效补充。现有技术中其它的随机测试程序生成方法对随机测试程序中某点或某方面进行了改善,例如,改善浮点随机数的合法性,改善权重对随机指令的控制,改善对分支跳转指令的控制,及改善流水线干扰。
发明内容
有鉴于此,本发明实施例期望提供一种随机测试程序生成方法及装置,不仅能全自动的生成处理器验证所需的随机测试程序,而且能有效的控制随机测试程序的合法性和功能覆盖率,从而能提升处理器验证的效率。
为达到上述目的,本发明实施例的技术方案是这样实现的:
本发明实施例提供了一种随机测试程序生成方法,包括:
在合法指令集中随机选择指令包并生成所述指令包,判断所述指令包是否包括分支跳转指令;
当所述指令包包括所述分支跳转指令时,判断所述随机测试程序是否存在第一死循环风险;
当所述随机测试程序存在所述第一死循环风险时,修改所述随机测试程序,判断所述随机测试程序是否存在第二循环风险;
当所述随机测试程序不存在第二循环风险时,修改全自动随机测试程序生成器ARTPG状态、处理器状态和所述合法指令集。
上述方案中,所述修改所述随机测试程序包括:
当分支跳转地址超过程序空间界限时,修改所述分支跳转地址使其不超过所述程序空间界限;
当分支跳转判定条件在声明到使用之间没有修改操作时,增加修改指令;
当所述修改操作的收敛方向与所述分支跳转判定条件不一致时,修改所述修改操作的收敛方向使其与所述分支跳转判定条件一致;
当所述指令包包括函数调用指令或软件中断指令时,添加现场保存及恢复的指令。
上述方案中,所述修改所述ARTPG状态包括:
根据功能覆盖率反馈信息调整随机权重。
上述方案中,所述修改所述合法指令集包括:
将修改后的输出寄存器添加到对应的合法输入操作数;
将所述合法输入操作数对应的指令添加到所述合法指令集;
当所述指令包包括所述函数调用指令或所述软件中断指令时,将当前返回地址压至堆栈,在所述函数调用指令或所述软件中断指令前添加所述现场保存的指令。
上述方案中,在所述修改所述随机测试程序之后及在所述判断所述随机测试程序是否存在第二循环风险之前,还包括:执行指令局部仿真或者执行指令全局仿真。
上述方案中,所述修改ARTPG状态、处理器状态和所述合法指令集之后,还包括:
当所述随机测试程序生成的第一发射指令数等于随机选择的第二发射指令数且所述随机测试程序满足终止条件时,输出所述随机测试程序、随机测试程序执行结果和覆盖率分析报告。
本发明实施例还提供了一种随机测试程序生成装置,包括:
第一判断模块,用于在合法指令集中随机选择指令包并生成所述指令包,判断所述指令包是否包括分支跳转指令;
第二判断模块,用于当所述指令包包括所述分支跳转指令时,判断所述随机测试程序是否存在第一死循环风险;
第三判断模块,用于当所述随机测试程序存在所述第一死循环风险时,修改所述随机测试程序,判断所述随机测试程序是否存在第二循环风险。
修改模块,用于当所述随机测试程序不存在第二循环风险时,修改全自动随机测试程序生成器ARTPG状态、处理器状态和所述合法指令集。
上述方案中,所述第三判断模块,用于修改所述随机测试程序包括:
当分支跳转地址超过程序空间界限时,修改所述分支跳转地址使其不超过所述程序空间界限;
当分支跳转判定条件在声明到使用之间没有修改操作时,增加修改指令;
当所述修改操作的收敛方向与所述分支跳转判定条件不一致时,修改所述修改操作的收敛方向使其与所述分支跳转判定条件一致;
当所述指令包包括函数调用指令或软件中断指令时,添加现场保存及恢复的指令。
上述方案中,所述修改模块,用于修改所述ARTPG状态包括:
根据功能覆盖率反馈信息调整随机权重。
上述方案中,所述修改模块,用于修改所述合法指令集包括:
将修改后的输出寄存器添加到对应的合法输入操作数;
将所述合法输入操作数对应的指令添加到所述合法指令集;
当所述指令包包括所述函数调用指令或所述软件中断指令时,将当前返回地址压至堆栈,在所述函数调用指令或所述软件中断指令前添加所述现场保存的指令。
上述方案中,所述第三判断模块,还用于在所述修改所述随机测试程序之后及在所述判断所述随机测试程序是否存在第二循环风险之前,执行指令局部仿真或者执行指令全局仿真。
上述方案中,还包括:
输出模块,用于当所述随机测试程序生成的第一发射指令数等于随机选择的第二发射指令数且所述随机测试程序满足终止条件时,输出所述随机测试程序、随机测试程序执行结果和覆盖率分析报告。
本发明实施例所提供的随机测试程序生成方法及装置,由随机测试程序生成装置在合法指令集中随机选择指令包并生成所述指令包,判断所述指令包是否包括分支跳转指令;当所述指令包包括所述分支跳转指令时,所述随机测试程序生成装置判断所述随机测试程序是否存在第一死循环风险;当所述随机测试程序存在所述第一死循环风险时,所述随机测试程序生成装置修改所述随机测试程序,判断所述随机测试程序是否存在第二循环风险;当所述随机测试程序不存在第二循环风险时,所述随机测试程序生成装置修改全自动随机测试程序生成器(ARTPG,Automatic Random Test Program Generator)状态、处理器状态和所述合法指令集。由于本发明实施例可以动态更新合法指令集和处理器状态,也使得随机测试程序的生成与合法性检测所述随机测试程序能够同时进行;这样,不但能全自动的生成处理器验证所需的随机测试程序,而且能有效的控制随机测试程序的合法性和功能覆盖率,进而能提升处理器验证的效率。
附图说明
图1为本发明实施例1提供的随机测试程序生成方法的实现流程示意图;
图2为本发明实施例1提供的寄存器文件数据结构示意图;
图3为本发明实施例1提供的指令生成器数据结构示意图;
图4为本发明实施例1提供的功能单元列表数据结构示意图;
图5为本发明实施例1提供的指令列表数据结构示意图;
图6为本发明实施例1提供的操作数链表数据结构示意图;
图7为本发明实施例1提供的合法指令集树状链表数据结构示意图;
图8为本发明实施例2至6提供的随机测试程序生成方法的实现流程示意图;
图9为本发明实施例7提供的随机测试程序生成装置的组成结构示意图。
具体实施方式
本发明实施例中,由随机测试程序生成装置在合法指令集中随机选择指令包并生成指令包,判断所述指令包是否包括分支跳转指令;当所述指令包包括所述分支跳转指令时,所述随机测试程序生成装置判断所述随机测试程序是否存在第一死循环风险;当所述随机测试程序存在所述第一死循环风险时,所述随机测试程序生成装置修改所述随机测试程序,判断所述随机测试程序是否存在第二循环风险;当所述随机测试程序不存在第二循环风险时,所述随机测试程序生成装置修改ARTPG状态、处理器状态和所述合法指令集。
下面结合附图及具体实施例对本发明再做进一步详细的说明。
实施例1
图1为本发明实施例1提供的随机测试程序生成方法的实现流程示意图,如图1所示,所述方法包括:步骤110:在合法指令集中随机选择指令包并生成指令包,判断指令包是否包括分支跳转指令。
这里,所述在合法指令集中随机选择包并生成指令包的过程包括:随机测试程序生成装置生成不大于预设的处理器最大指令数的随机数;根据随机数从合法指令集树状链表中选择随机的指令,并随机选择指令所需的随机操作数。
步骤120:当指令包包括分支跳转指令时,判断随机测试程序是否存在第一死循环风险。
步骤120中,当指令包中包括分支跳转指令时,首先追朔到分支跳转指令条件变量的声明,这里,寄存器被加载(Load)。之后,随机测试程序生成装置结合分支跳转指令,判断随机测试程序是否存在第一死循环风险。判断准则包括:
前向跳转不存在风险,这里,所述前向跳转为跳转到程序未执行的部分;后向跳转存在风险,这里,所述后向跳转为跳转到程序已执行的部分;
后向跳转时,从条件变量声明到分支跳转指令间,条件变量被修改,修改操作的收敛方向与所述分支跳转的判定条件一致。
这里,所述死循环风险为程序无限次的后向跳转。
步骤130:当随机测试程序存在第一死循环风险时,修改随机测试程序,判断随机测试程序是否存在第二循环风险。
在步骤130中,所述修改所述随机测试程序包括:
当分支跳转地址超过程序空间界限时,修改所述分支跳转地址使其不超过所述程序空间界限;
当分支跳转判定条件在声明到使用之间没有修改操作时,增加修改指令;
当所述修改操作的收敛方向与所述分支跳转判定条件不一致时,修改所述修改操作的收敛方向,使其与所述分支跳转判定条件一致;
当所述指令包包括函数调用指令或软件中断指令时,添加现场保存及恢复的指令。
这里,所述当所述指令包包括函数调用指令或软件中断指令时,添加现场保存及恢复的指令包括:
当所述指令包包括函数调用指令或软件中断指令时,直接在该指令前面添加现场保存的指令或指令包。
在步骤130中,所述修改所述随机测试程序还包括:
当所述指令包包括函数返回指令或中断返回指令时,直接在该指令后面添加现场恢复的指令或指令包。
在步骤130中,在所述修改所述随机测试程序之后及在所述判断所述随机测试程序是否存在第二循环风险之前,所述方法还包括:执行指令局部仿真或者执行指令全局仿真。
这里,指令仿真分为指令局部仿真和指令全局仿真,指令局部仿真为从变量声明到分支跳转之间的指令进行仿真,对所遇未定操作数赋予随机值后,仿真到分支跳转指令,跟踪跳转方向,指定次数内可以前向跳转则风险解决。指令全局仿真为从头开始仿真,主要用于当生成随机测试程序时开放直接跳转指令时使用。
这里,所述第二死循环风险为程序地址跳转回同一地址的死循环风险。
步骤140:当随机测试程序不存在第二循环风险时,修改ARTPG状态、处理器状态和合法指令集。
在步骤140中,所述修改ARTPG状态包括:根据生成的指令或指令包的大小,修改已生成程序的代码大小;根据生成的指令或指令包需要执行的周期数,修改已生成程序需要执行的周期数,所述周期数为预估,循环时根据前面的检测和仿真结果修改;根据指令生成器和处理器状态的各个项被使用次数计算和修改覆盖率;根据功能覆盖率反馈信息调整随机权重。
在步骤140中,所述修改处理器状态包括:根据所选的随机指令所指向的函数计算指令执行结果;根据执行结果修改处理器状态。
在步骤140中,所述修改所述合法指令集包括:
将修改后的输出寄存器添加到对应的合法输入操作数;
将所述合法输入操作数对应的指令添加到所述合法指令集;
当所述指令包包括所述函数调用指令或所述软件中断指令时,将当前返回地址压至堆栈,在所述函数调用指令或所述软件中断指令前添加所述现场保存的指令。
在步骤140之后,即在所述修改ARTPG状态、处理器状态和所述合法指令集之后,所述方法还包括:
当所述随机测试程序生成的第一发射指令数等于随机选择的第二发射指令数且所述随机测试程序满足终止条件时,输出所述随机测试程序、随机测试程序执行结果和覆盖率分析报告。
在步骤110之前,所述方法还包括:
步骤101:初始化处理器初始状态。
在步骤101中,随机测试程序生成装置根据验证人员提供的处理器状态描述初始化ARTPG中指令仿真器对应的处理器初始状态。
这里,所述处理器初始状态是随机测试程序中的一种数据结构,与另一种数据结构,即处理器状态类似,但是二者主要有两个区别:第一,所述处理器初始状态并没有当前值和当前周期指令或指令包执行结束后的值这两种状态;第二,所述处理器初始状态不需要初始化所有的寄存器文件和状态寄存器,其中,未指定的内容可默认为处理器的复位值。
具体地,指令级精准的指令仿真器是一种处理器状态。处理器状态包括处理器对应的所有寄存器文件、状态寄存器的当前值、当前周期指令或指令包执行结束后的值,指令级精准的指令仿真器添加部分流水线寄存器的值。图2为寄存器文件数据结构,状态寄存器和寄存器文件基本相同,不同的是状态寄存器的进入列表(Entry List)为结构体数组,而寄存器文件中的Entry List为结构体。
步骤102:初始化合法指令集。
这里,随机测试程序生成装置根据ARTPG中指令仿真器对应的处理器状态,初始化合法指令集;初始化合法指令集与后面的修改合法指令集的标准一致。如图7所示,合法指令集为一个动态树状链表,在每一次选择和生成随机指令后可以动态修改合法指令集树状链表。需要说明的是,采用其它的数据结构类型同样适用。
步骤103:初始化ARTPG状态。
在步骤103中,随机测试程序生成装置使用随机程序约束初始化ARTPG状态。
这里,所述随机程序约束包括两个约束条件:
第一个约束条件为终止条件,终止条件包括描述随机测试程序生成的终止条件;随机测试程序生成的终止条件设置为:程序大小达到一定标准;程序执行周期数达到一定数值;及测试程序的功能覆盖率达到一定标准。其中,功能覆盖率可以分级描述,所有级别的功能覆盖率满足标准时终止,程序大小和程序执行周期数比覆盖率的设置具有更高优先级。当功能覆盖率作为终止条件时,程序大小和程序执行周期数被设置为0。
第二个约束条件为合法性检测条件,合法性检测条件为描述死循环的判定标准。
步骤104:判断生成的随机测试程序是否满足终止条件。
这里,所述判定标准包括:程序执行周期数是否满足终止条件;程序大小是否满足终止条件;及功能覆盖率是否满足终止条件。
步骤105:当所述随机测试程序不满足终止条件时,随机选择所述随机测试程序的第二发射指令数。随机测试程序生成装置随机选择当前周期需要并行发射的第二发射指令数。
步骤106:判断所述随机测试程序生成的第一发射指令数是否等于随机选择的第二发射指令数。
步骤107:当所述随机测试程序生成的第一发射指令数等于随机选择的第二发射指令数时,选择功能单元。
这里,如图4所示,功能单元属于覆盖率收集,即反馈控制随机权重的数据结构,覆盖率收集的数据结构属于指令生成器状态。如图3所示,指令生成器状态包含当前的代码大小(Code Size)、周期数(Cycle Count)、覆盖率状态(Coverage State)。指令生成器状态还包括与覆盖率状态相关的对于处理器硬件结构和指令集架构(ISA,Instruction SetArchitecture)覆盖率收集的数据结构。其中,如图5和6所示,覆盖率收集的数据结构包括功能单元列表、指令列表和操作数链表。指令列表中的函数指针指向指令功能对应的处理函数,用来支持指令仿真。
需要说明的是,步骤110至步骤140中需要步骤101-107中选择的第一发射指令数和功能单元,以便根据第一发射指令数和功能单元选择指令包。至此,随机测试程序生成的过程就完成了。
实施例2
图8为本发明实施例2提供的随机测试程序生成方法的实现流程示意图,如图8所示,所述方法包括:
步骤201:初始化处理器初始状态。
步骤202:初始化合法指令集。
步骤203:初始化ARTPG状态。
步骤204:判断随机测试程序是否满足终止条件。
步骤204判断为是后,执行步骤218。
步骤218:输出随机测试程序、随机测试程序执行结果和覆盖率分析报告。
步骤219:释放空间并退出。
实施例3
图8为本发明实施例3提供的随机测试程序生成方法的实现流程示意图,如图8所示,所述方法包括:
步骤201:初始化处理器初始状态。
步骤202:初始化合法指令集。
步骤203:初始化ARTPG状态。
步骤204:判断随机测试程序是否满足终止条件。
步骤205:随机选择所述随机测试程序的第二发射指令数。
步骤206:判断随机测试程序生成的第一发射指令数是否等于随机选择的第二发射指令数。
步骤206判断为是后,执行步骤204。
步骤204:判断随机测试程序是否满足终止条件。
步骤218:输出随机测试程序、随机测试程序执行结果和覆盖率分析报告。
步骤219:释放空间并退出。
本实施例是当随机测试程序生成的第一发射指令数等于随机选择的第二发射指令数且满足终止条件时提供的随机测试程序生成方法。
实施例4
图8为本发明实施例4提供的随机测试程序生成方法的实现流程示意图,如图8所示,所述方法包括:
步骤201:初始化处理器初始状态。
步骤202:初始化合法指令集。
步骤203:初始化ARTPG状态。
步骤204:判断随机测试程序是否满足终止条件。
步骤205:随机选择所述随机测试程序的第二发射指令数。
步骤206:判断随机测试程序生成的第一发射指令数是否等于随机选择的第二发射指令数。
步骤207:选择功能单元。
步骤208:在合法指令集中选择指令包。
步骤209:判断指令包是否包括分支跳转指令。
步骤209判断为否后,执行步骤214。
步骤214:选择普通指令操作数。
步骤215:修改ARTPG状态。
步骤216:修改处理器状态。
步骤217:修改合法指令集。
步骤206:判断随机测试程序生成的第一发射指令数是否等于随机选择的第二发射指令数。
步骤206判断为是后,执行步骤204。
步骤204:判断随机测试程序是否满足终止条件。
步骤204判断为是后,执行步骤218。
步骤218:输出随机测试程序、随机测试程序执行结果和覆盖率分析报告。
步骤219:释放空间并退出。
本实施例是当随机测试程序的指令包不包括分支跳转指令时提供的随机测试程序生成方法。
实施例5
图8为本发明实施例5提供的随机测试程序生成方法的实现流程示意图,如图8所示,所述方法包括:
步骤201:初始化处理器初始状态。
步骤202:初始化合法指令集。
步骤203:初始化ARTPG状态。
步骤204:判断随机测试程序是否满足终止条件。
步骤205:随机选择所述随机测试程序的第二发射指令数。
步骤206:判断随机测试程序生成的第一发射指令数是否等于随机选择的第二发射指令数。
步骤207:选择功能单元。
步骤208:在合法指令集中选择指令包。
步骤209:判断指令包是否包括分支跳转指令。
步骤210:选择分支跳转指令操作数。
步骤211:判断随机测试程序是否存在第一死循环风险。
步骤212:修改随机测试程序。
步骤213:判断随机测试程序是否存在第二循环风险。
步骤213判断为是后,执行步骤208。
步骤208:在合法指令集中选择指令包。
步骤209:判断指令包是否包括分支跳转指令。
步骤209判断为否后,执行步骤214。
步骤214:选择普通指令操作数。
步骤215:修改ARTPG状态。
步骤216:修改处理器状态。
步骤217:修改合法指令集。
步骤206:判断随机测试程序生成的第一发射指令数是否等于随机选择的第二发射指令数。
步骤206判断为是后,执行步骤204。
步骤204:判断随机测试程序是否满足终止条件。
步骤204判断为是后,执行步骤218。
步骤218:输出随机测试程序、随机测试程序执行结果和覆盖率分析报告。
步骤219:释放空间并退出。
本实施例是当随机测试程序存在第一死循环风险和第二循环风险时提供的随机测试程序生成方法。
实施例6
图8为本发明实施例6提供的随机测试程序生成方法的实现流程示意图,如图8所示,所述方法包括:
步骤201:初始化处理器初始状态。
步骤202:初始化合法指令集。
步骤203:初始化ARTPG状态。
步骤204:判断随机测试程序是否满足终止条件。
步骤205:随机选择所述随机测试程序的第二发射指令数。
步骤206:判断随机测试程序生成的第一发射指令数是否等于随机选择的第二发射指令数。
步骤207:选择功能单元。
步骤208:在合法指令集中选择指令包。
步骤209:判断指令包是否包括分支跳转指令。
步骤210:选择分支跳转指令操作数。
步骤211:判断随机测试程序是否存在第一死循环风险。
步骤211判断为否后,执行步骤215。
步骤215:修改ARTPG状态。
步骤216:修改处理器状态。
步骤217:修改合法指令集。
步骤206:判断随机测试程序生成的第一发射指令数是否等于随机选择的第二发射指令数。
步骤206判断为是后,执行步骤204。
步骤204:判断随机测试程序是否满足终止条件。
步骤204判断为是后,执行步骤218。
步骤218:输出随机测试程序、随机测试程序执行结果和覆盖率分析报告。
步骤219:释放空间并退出。
本实施例是当随机测试程序存在第一死循环风险时提供的随机测试程序生成方法。
实施例7
图9为本发明实施例7提供的随机测试程序生成装置的组成结构示意图,如图9所示,所述装置包括:
第一判断模块310,用于在合法指令集中随机选择指令包并生成所述指令包,判断所述指令包是否包括分支跳转指令;
第二判断模块320,用于当所述指令包包括所述分支跳转指令时,判断所述随机测试程序是否存在第一死循环风险;
第三判断模块330,用于当所述随机测试程序存在所述第一死循环风险时,修改所述随机测试程序,判断所述随机测试程序是否存在第二循环风险。
修改模块340,用于当所述随机测试程序不存在第二循环风险时,修改ARTPG状态、处理器状态和所述合法指令集。
具体地,所述第三判断模块330,用于修改所述随机测试程序包括:
当分支跳转地址超过程序空间界限时,修改所述分支跳转地址使其不超过所述程序空间界限;
当分支跳转判定条件在声明到使用之间没有修改操作时,增加修改指令;
当所述修改操作的收敛方向与所述分支跳转判定条件不一致时,修改所述修改操作的收敛方向使其与所述分支跳转判定条件一致;
当所述指令包包括函数调用指令或软件中断指令时,添加现场保存及恢复的指令。
具体地,所述修改模块340,用于修改所述ARTPG状态包括:
根据功能覆盖率反馈信息调整随机权重。具体地,所述修改模块340,用于修改所述合法指令集包括:
将修改后的输出寄存器添加到对应的合法输入操作数;
将所述合法输入操作数对应的指令添加到所述合法指令集;
当所述指令包包括所述函数调用指令或所述软件中断指令时,将当前返回地址压至堆栈,在所述函数调用指令或所述软件中断指令前添加所述现场保存的指令。
进一步地,所述第三判断模块330,还用于在所述修改所述随机测试程序之后及在所述判断所述随机测试程序是否存在第二循环风险之前,执行指令局部仿真或者执行指令全局仿真。
进一步地,所述装置还包括:
输出模块350,用于当所述随机测试程序生成的第一发射指令数等于随机选择的第二发射指令数且所述随机测试程序满足终止条件时,输出所述随机测试程序、随机测试程序执行结果和覆盖率分析报告。
在实际应用中,所述第一判断模块310、第二判断模块320、第三判断模块330、修改模块340和输出模块350均可由任何编程语言基于任何软件或硬件平台编程实现。同时,所述随机测试程序生成方法可以直接或者经简单修改后生成针对任何目标处理器的随机测试程序。
在实际应用中,所述第一判断模块310、第二判断模块320、第三判断模块330、修改模块340和输出模块350均可由位于任意计算机设备中的中央处理器(CPU,CentralProcessing Unit)、数字信号处理器(DSP,Digital Signal Processor)、微处理器(MPU)、或可编程逻辑阵列(FPGA,Field Programmable Gate Array)实现。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
Claims (12)
1.一种随机测试程序生成方法,其特征在于,所述方法包括:
在合法指令集中随机选择指令并生成指令包,判断所述指令包是否包括分支跳转指令;
当所述指令包包括所述分支跳转指令时,判断所述随机测试程序是否存在第一死循环风险;
当所述随机测试程序存在所述第一死循环风险时,修改所述随机测试程序,判断所述随机测试程序是否存在第二循环风险;
当所述随机测试程序不存在第二循环风险时,修改全自动随机测试程序生成器ARTPG状态、处理器状态和所述合法指令集。
2.根据权利要求1所述的方法,其特征在于,所述修改所述随机测试程序包括:
当分支跳转地址超过程序空间界限时,修改所述分支跳转地址使其不超过所述程序空间界限;
当分支跳转判定条件在声明到使用之间没有修改操作时,增加修改指令;
当所述修改操作的收敛方向与所述分支跳转判定条件不一致时,修改所述修改操作的收敛方向使其与所述分支跳转判定条件一致;
当所述指令包包括函数调用指令或软件中断指令时,添加现场保存及恢复的指令。
3.根据权利要求1所述的方法,其特征在于,所述修改所述ARTPG状态包括:
根据功能覆盖率反馈信息调整随机权重。
4.根据权利要求1所述的方法,其特征在于,所述修改所述合法指令集包括:
将修改后的输出寄存器添加到对应的合法输入操作数;
将所述合法输入操作数对应的指令添加到所述合法指令集;
当所述指令包包括函数调用指令或软件中断指令时,将当前返回地址压至堆栈,在所述函数调用指令或所述软件中断指令前添加现场保存的指令。
5.根据权利要求1至4任一项所述的方法,其特征在于,在所述修改所述随机测试程序之后及在所述判断所述随机测试程序是否存在第二循环风险之前,所述方法还包括:执行指令局部仿真或者执行指令全局仿真。
6.根据权利要求5所述的方法,其特征在于,所述修改ARTPG状态、处理器状态和所述合法指令集之后,所述方法还包括:
当所述随机测试程序生成的第一发射指令数等于随机选择的第二发射指令数且所述随机测试程序满足终止条件时,输出所述随机测试程序、随机测试程序执行结果和覆盖率分析报告。
7.一种随机测试程序生成装置,其特征在于,所述装置包括:
第一判断模块,用于在合法指令集中随机选择指令并生成指令包,判断所述指令包是否包括分支跳转指令;
第二判断模块,用于当所述指令包包括所述分支跳转指令时,判断所述随机测试程序是否存在第一死循环风险;
第三判断模块,用于当所述随机测试程序存在所述第一死循环风险时,修改所述随机测试程序,判断所述随机测试程序是否存在第二循环风险;
修改模块,用于当所述随机测试程序不存在第二循环风险时,修改全自动随机测试程序生成器ARTPG状态、处理器状态和所述合法指令集。
8.根据权利要求7所述的装置,其特征在于,所述第三判断模块,用于修改所述随机测试程序包括:
当分支跳转地址超过程序空间界限时,修改所述分支跳转地址使其不超过所述程序空间界限;
当分支跳转判定条件在声明到使用之间没有修改操作时,增加修改指令;
当所述修改操作的收敛方向与所述分支跳转判定条件不一致时,修改所述修改操作的收敛方向使其与所述分支跳转判定条件一致;
当所述指令包包括函数调用指令或软件中断指令时,添加现场保存及恢复的指令。
9.根据权利要求7所述的装置,其特征在于,所述修改模块,用于修改所述ARTPG状态包括:
根据功能覆盖率反馈信息调整随机权重。
10.根据权利要求7所述的装置,其特征在于,所述修改模块,用于修改所述合法指令集包括:
将修改后的输出寄存器添加到对应的合法输入操作数;
将所述合法输入操作数对应的指令添加到所述合法指令集;
当所述指令包包括函数调用指令或软件中断指令时,将当前返回地址压至堆栈,在所述函数调用指令或所述软件中断指令前添加现场保存的指令。
11.根据权利要求7至10任一项所述的装置,其特征在于,所述第三判断模块,还用于在所述修改所述随机测试程序之后及在所述判断所述随机测试程序是否存在第二循环风险之前,执行指令局部仿真或者执行指令全局仿真。
12.根据权利要求11所述的装置,其特征在于,所述装置还包括:
输出模块,用于当所述随机测试程序生成的第一发射指令数等于随机选择的第二发射指令数且所述随机测试程序满足终止条件时,输出所述随机测试程序、随机测试程序执行结果和覆盖率分析报告。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510334812.4A CN106325827B (zh) | 2015-06-16 | 2015-06-16 | 一种随机测试程序生成方法及装置 |
PCT/CN2016/083560 WO2016202157A2 (zh) | 2015-06-16 | 2016-05-26 | 一种随机测试程序生成方法及装置、设备、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510334812.4A CN106325827B (zh) | 2015-06-16 | 2015-06-16 | 一种随机测试程序生成方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106325827A CN106325827A (zh) | 2017-01-11 |
CN106325827B true CN106325827B (zh) | 2019-07-19 |
Family
ID=57544910
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510334812.4A Active CN106325827B (zh) | 2015-06-16 | 2015-06-16 | 一种随机测试程序生成方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN106325827B (zh) |
WO (1) | WO2016202157A2 (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108875369B (zh) * | 2017-05-15 | 2020-07-07 | 中国移动通信有限公司研究院 | 一种控制流完整性校验方法、装置和计算机存储介质 |
CN109240859B (zh) * | 2017-07-11 | 2021-11-19 | 展讯通信(上海)有限公司 | 处理器验证系统及方法 |
CN110275818B (zh) * | 2018-03-13 | 2024-04-30 | 龙芯中科技术股份有限公司 | 硅后验证方法、装置及存储介质 |
CN112416666B (zh) * | 2019-08-21 | 2022-07-12 | 无锡江南计算技术研究所 | 自检随机测试方法及随机循环测试装置 |
CN111523283B (zh) * | 2020-04-16 | 2023-05-26 | 北京百度网讯科技有限公司 | 一种验证处理器的方法、装置、电子设备及存储介质 |
CN113760700A (zh) * | 2020-08-06 | 2021-12-07 | 北京京东振世信息技术有限公司 | 程序死循环检测方法、装置、电子设备及存储介质 |
CN117112033B (zh) * | 2023-08-28 | 2024-04-12 | 海光信息技术(成都)有限公司 | 随机指令生成方法、装置、设备以及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101082877A (zh) * | 2006-05-30 | 2007-12-05 | 上海科泰世纪科技有限公司 | 图形用户界面程序的自动测试接口及其自动测试方法 |
CN102508780A (zh) * | 2011-11-21 | 2012-06-20 | 电子科技大学 | 一种用于软件测试的交叉式动态法和装置 |
CN102736973A (zh) * | 2011-04-07 | 2012-10-17 | 中国科学技术大学 | 不变量指导的随机测试用例自动化生成方法 |
CN103150228A (zh) * | 2013-02-22 | 2013-06-12 | 中国人民解放军国防科学技术大学 | 面向高速缓冲存储器的可综合伪随机验证方法及装置 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2001222442A (ja) * | 2000-02-08 | 2001-08-17 | Fujitsu Ltd | パイプライン試験方法、パイプライン試験命令生成方法及びその記憶媒体 |
US6948096B2 (en) * | 2001-07-31 | 2005-09-20 | Intel Corporation | Functional random instruction testing (FRIT) method for complex devices such as microprocessors |
CN100336032C (zh) * | 2004-12-24 | 2007-09-05 | 清华大学 | 基于边界条件和自检查随机测试的cpu约束生成验证法 |
CN102567169B (zh) * | 2010-12-29 | 2014-02-26 | 无锡江南计算技术研究所 | 微处理器的测试方法及测试装置 |
US10061672B2 (en) * | 2013-03-07 | 2018-08-28 | International Business Machines Corporation | Implementing random content of program loops in random test generation for processor verification |
-
2015
- 2015-06-16 CN CN201510334812.4A patent/CN106325827B/zh active Active
-
2016
- 2016-05-26 WO PCT/CN2016/083560 patent/WO2016202157A2/zh active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101082877A (zh) * | 2006-05-30 | 2007-12-05 | 上海科泰世纪科技有限公司 | 图形用户界面程序的自动测试接口及其自动测试方法 |
CN102736973A (zh) * | 2011-04-07 | 2012-10-17 | 中国科学技术大学 | 不变量指导的随机测试用例自动化生成方法 |
CN102508780A (zh) * | 2011-11-21 | 2012-06-20 | 电子科技大学 | 一种用于软件测试的交叉式动态法和装置 |
CN103150228A (zh) * | 2013-02-22 | 2013-06-12 | 中国人民解放军国防科学技术大学 | 面向高速缓冲存储器的可综合伪随机验证方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
WO2016202157A2 (zh) | 2016-12-22 |
CN106325827A (zh) | 2017-01-11 |
WO2016202157A3 (zh) | 2017-02-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106325827B (zh) | 一种随机测试程序生成方法及装置 | |
Hahm et al. | Operating systems for low-end devices in the internet of things: a survey | |
CN109426516A (zh) | 软件版本管理方法及装置 | |
JP2019516167A5 (zh) | ||
EP2202638A1 (en) | Translating device, translating method and translating program, and processor core control method and processor | |
Molnár et al. | The Gamma statechart composition framework: design, verification and code generation for component-based reactive systems | |
CN104573228B (zh) | 面向兼容设计的微处理器硅后验证装置与验证方法 | |
CN106021101B (zh) | 对移动终端进行测试的方法及装置 | |
CN106155755A (zh) | 程序编译方法和程序编译器 | |
US11709703B2 (en) | Automated semantic tagging | |
Camara et al. | DCE: Test the real code of your protocols and applications over simulated networks | |
CN113722020A (zh) | 接口调用方法、装置和计算机可读存储介质 | |
CN103294482B (zh) | 用于PWscf并行计算系统的Web服务封装方法以及系统 | |
CN103309676A (zh) | 用于海洋数值模拟ROMS的Web服务封装方法以及系统 | |
KR20150047007A (ko) | 복수의 프로세서들을 병렬적으로 이용하여 시뮬레이션을 수행하는 방법 및 장치 | |
Bandyopadhyay et al. | A path-based equivalence checking method for petri net based models of programs | |
CN103294874B (zh) | 用于电磁仿真计算系统FEKO的Web服务封装方法以及系统 | |
US20110225457A1 (en) | System for Testing a Multitasking Computation Architecture Based on Communication Data between Processors and Corresponding Test Method | |
GB2482141A (en) | Implementing UML activity diagrams Via task sequencing | |
Bates et al. | A statechart based HW/SW codesign system | |
CN112306853A (zh) | 一种模糊测试方法、装置、设备及介质 | |
CN105511996B (zh) | 一种图形处理器内嵌可编程染色器验证平台 | |
US10088834B2 (en) | Control system having function for optimizing control software of numerical controller in accordance with machining program | |
Murray et al. | RoboLog Koblenz 2001 | |
Erdeljanovic et al. | One method of optimizing an expert system using native client on a TV platform |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |