CN102567169A - 微处理器的测试方法及测试装置 - Google Patents

微处理器的测试方法及测试装置 Download PDF

Info

Publication number
CN102567169A
CN102567169A CN2010106124809A CN201010612480A CN102567169A CN 102567169 A CN102567169 A CN 102567169A CN 2010106124809 A CN2010106124809 A CN 2010106124809A CN 201010612480 A CN201010612480 A CN 201010612480A CN 102567169 A CN102567169 A CN 102567169A
Authority
CN
China
Prior art keywords
branch
redirect
traversal
registration form
test procedure
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
CN2010106124809A
Other languages
English (en)
Other versions
CN102567169B (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.)
Wuxi Jiangnan Computing Technology Institute
Original Assignee
Wuxi Jiangnan Computing Technology Institute
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 Wuxi Jiangnan Computing Technology Institute filed Critical Wuxi Jiangnan Computing Technology Institute
Priority to CN201010612480.9A priority Critical patent/CN102567169B/zh
Publication of CN102567169A publication Critical patent/CN102567169A/zh
Application granted granted Critical
Publication of CN102567169B publication Critical patent/CN102567169B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

一种微处理器的测试方法,包括:执行初始化操作,建立分支状态登记表,所述分支状态登记表包括分支索引号和分支当前状态;扫描出测试程序的所有条件跳转分支,对所述分支状态登记表赋值;依据选定的遍历策略动态修改所述分支状态登记表中的所述分支当前状态,根据所述分支当前状态对所有条件跳转分支进行遍历;若未完成对所有条件跳转分支的遍历,则返回所述测试程序入口,继续依据所述遍历策略动态修改所述分支状态登记表中的分支当前状态,根据所述分支当前状态对所有条件跳转分支进行遍历;若完成对所有条件跳转分支的遍历,则退出所述测试程序。基于上述方法,还提供一种微处理器的测试装置。本发明能够加强测试程序对微处理器的测试力度。

Description

微处理器的测试方法及测试装置
技术领域
本发明涉及微处理器测试领域,特别涉及一种微处理器的测试方法及测试装置。
背景技术
在微处理器的开发过程中,对其指令系统进行准确而严密的测试是十分关键的。经常因测试的工作量大而延长微处理器的开发周期,也因指令系统测试不够全面而严重影响微处理器的可靠性。目前,通过测试人员一条一条地编写测试指令并形成大量的测试课题来对微处理器进行仿真测试是微处理器测试的基本方法。
通常一个典型的测试课题内部可能包含若干条件跳转分支路径,但对具体的输入数据,程序往往沿着一条确定的路线执行,而该路径所涉及的代码可能只是整个课题很少的一部分,很难达到期望的测试力度,这就需要编写大量的测试课题以加大测试强度,但是编写新的测试课题或搜集整理新的测试课题费时费力。
相关技术还可参考申请号为03129511.8的中国专利申请,该专利申请公开了一种微处理器的随机测试方法。
发明内容
本发明要解决的技术问题是现有技术中因为仅执行少量的测试课题的代码,使对微处理器的测试力度不够,而编写或搜集整理新的测试课题费时费力。
为解决上述问题,本发明提供了一种微处理器的测试方法,包括:
执行初始化操作,包括建立分支状态登记表,所述分支状态登记表包括分支索引号和分支当前状态,所述分支索引号用于使测试程序中的条件跳转分支对应于所述分支状态登记表以获取所述分支当前状态;所述分支当前状态,其状态位的改变决定该条件跳转分支成功跳转与否;
扫描出测试程序的所有条件跳转分支,对所述分支状态登记表赋值;
依据选定的遍历策略动态修改所述分支状态登记表中的所述分支当前状态,并根据所述分支当前状态对所有条件跳转分支进行遍历;
若未完成对所有条件跳转分支的遍历,则返回所述测试程序入口,继续依据所述遍历策略动态修改所述分支状态登记表中的分支当前状态,并根据所述分支当前状态对所有条件跳转分支进行遍历;
若完成对所有条件跳转分支的遍历,则退出所述测试程序。
可选的,所述初始化操作还包括建立分支状态数据结构,所述分支状态数据结构包括分支总个数和分支状态登记表地址,
所述分支总个数,记录所述测试程序中所有条件跳转分支的数量;
所述分支状态登记表地址,记录所述分支状态登记表所分配的地址,用于所述测试程序运行时访问所述分支状态登记表。
可选的,还包括:在扫描出所述测试程序的所有条件跳转分支之后,获取所有条件跳转分支的数量的值,并将该值赋予所述分支总个数。
可选的,所述依据选定的遍历策略动态修改所述分支状态登记表中的所述分支当前状态,并根据所述分支当前状态对所有条件跳转分支进行遍历包括:依据选定的遍历策略对所述分支状态登记表中的所述分支当前状态的状态位赋值,各条件跳转分支根据所述分支状态登记表中所述分支当前状态的状态位的值进行跳转以遍历所有条件跳转分支。
可选的,所述分支状态登记表还包括条件跳转分支的隶属关系、隶属层次、隶属值,
所述隶属关系,记录所述条件跳转分支之间的隶属关系;
所述隶属层次,记录所述条件跳转分支所属的层次;
所述隶属值,记录所述条件跳转分支基于其所隶属于的条件跳转分支跳转成功或是跳转不成功的情况。
可选的,所述遍历策略为深度遍历或宽度遍历,
所述深度遍历指将有隶属关系的条件跳转分支先行遍历;
所述宽度遍历指将同一隶属层次上的条件跳转分支先行遍历。
可选的,所述遍历策略为随机遍历或按序遍历,
所述随机遍历指随机选取条件跳转分支进行遍历;
所述按序遍历指按照所述分支索引号的顺序对条件跳转分支进行遍历。
可选的,还包括对所述测试程序运行过程出现的异常进行处理以使所述测试程序能够继续运行。
可选的,在退出所述测试程序前,还包括对所述测试程序运行的结果进行校验并输出测试报告。
为解决上述问题,本发明还提供了一种微处理器的测试装置,包括:
初始化模块、分支处理模块、跳转遍历处理模块,
所述初始化模块用于执行初始化操作,包括建立分支状态登记表,所述分支状态登记表包括分支索引号和分支当前状态,所述分支索引号用于使测试程序中的条件跳转分支对应于所述分支状态登记表以获取所述分支当前状态;所述分支当前状态,其状态位的改变决定该条件跳转分支成功跳转与否;
所述分支处理模块用于在扫描出测试程序的所有条件跳转分支后对所述分支状态登记表赋值;还用于依据选定的遍历策略动态修改所述分支状态登记表中的所述分支当前状态,并根据所述分支当前状态对所有条件跳转分支进行遍历;
所述跳转遍历处理模块用于判断是否完成对所有条件跳转分支的遍历,若未完成对所有条件跳转分支的遍历,则返回所述测试程序入口,继续由所述分支处理模块依据所述遍历策略动态修改所述分支状态登记表中的分支当前状态,并根据所述分支当前状态对所有条件跳转分支进行遍历;若完成对所有条件跳转分支的遍历,则退出所述测试程序。
可选的,所述初始化模块执行的初始化操作还包括建立分支状态数据结构,所述分支状态数据结构包括分支总个数和分支状态登记表地址,
所述分支总个数,记录所述测试程序中所有条件跳转分支的数量;
所述分支状态登记表地址,记录所述分支状态登记表所分配的地址,用于所述测试程序运行时访问所述分支状态登记表。
可选的,所述分支处理模块在扫描出所述测试程序的所有条件跳转分支之后,获取所有条件跳转分支的数量的值,并将该值赋予所述分支总个数。
可选的,所述分支处理模块依据选定的遍历策略动态修改所述分支状态登记表中的所述分支当前状态,并根据所述分支当前状态对所有条件跳转分支进行遍历包括:依据选定的遍历策略对所述分支状态登记表中的所述分支当前状态的状态位赋值,各条件跳转分支根据所述分支状态登记表中所述分支当前状态的状态位的值进行跳转以遍历所有条件跳转分支。
可选的,所述分支状态登记表还包括条件跳转分支的隶属关系、隶属层次、隶属值,
所述隶属关系,记录所述条件跳转分支之间的隶属关系;
所述隶属层次,记录所述条件跳转分支所属的层次;
所述隶属值,记录所述条件跳转分支基于其所隶属于的条件跳转分支跳转成功或是跳转不成功的情况。
可选的,所述遍历策略为深度遍历或宽度遍历,
所述深度遍历指将有隶属关系的条件跳转分支先行遍历;
所述宽度遍历指将同一隶属层次上的条件跳转分支先行遍历。
可选的,所述遍历策略为随机遍历或按序遍历,
所述随机遍历指随机选取条件跳转分支进行遍历;
所述按序遍历指按照所述分支索引号的顺序对条件跳转分支进行遍历。
可选的,还包括异常处理模块,用于对所述测试程序运行过程出现的异常进行处理以使所述测试程序能够继续运行。
可选的,还包括结果校验模块,用于在退出所述测试程序前,对所述测试程序运行的结果进行校验并输出测试报告。
与现有技术相比,本发明具有以下优点:
通过对测试课题的所有条件跳转分支进行遍历,极大地增强了对微处理器的测试力度,从而增强了被测试微处理器的可靠性,同时也大大减轻了测试课题改造的负担,节省了用于开发新的测试课题的时间,由此缩短了测试的周期,降低了成本。
此外,由于不再需要大量的测试课题,也节省了用于存储大量测试课题的存储空间,同样降低了成本。
附图说明
图1是本发明提供的微处理器的测试方法流程示意图;
图2是测试程序中条件跳转分支与程序块示意图;
图3是图2中测试程序的分支状态登记表示意图;
图4是本发明提供的微处理器的测试方法实施方式示意图;
图5是本发明提供的微处理器的测试装置实施方式示意图。
具体实施方式
为使本发明的上述目的、特征和优点能够更为明显易懂,下面结合附图对本发明的具体实施方式做详细的说明。
在以下描述中阐述了具体细节以便于充分理解本发明。但是本发明能够以多种不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广。因此本发明不受下面公开的具体实施方式的限制。
在实际应用中期望测试课题(具体为一测试程序)沿着确切的路径执行并产生正确的结果,但是对于微处理器测试而言,程序运行结束后的结果只是评判微处理器是否正确运行的标准,而不再具备应用上的意义,也就是说只要沿着某路径执行产生的结果是可验证的,即使该结果在应用上毫无意义,对微处理器测试来说它也是一个可用的测试用例。本发明正是基于上述考虑,设法使测试课题反复沿着不同的路径执行,每次执行都相当于一个新的测试用例,这样就极大的加强了测试的力度。
图1是本发明提供的微处理器的测试方法流程示意图。为解决,本发明提供的微处理器的测试方法如图1所示,包括:
步骤S101,执行初始化操作,包括建立分支状态登记表,所述分支状态登记表包括分支索引号和分支当前状态,所述分支索引号用于使测试程序中的条件跳转分支对应于所述分支状态登记表以获取所述分支当前状态;所述分支当前状态,其状态位的改变决定该条件跳转分支成功跳转与否;
步骤S102,扫描出测试程序的所有条件跳转分支,对所述分支状态登记表赋值;
步骤S103,依据选定的遍历策略动态修改所述分支状态登记表中的所述分支当前状态,并根据所述分支当前状态对所有条件跳转分支进行遍历;
步骤S104,若未完成对所有条件跳转分支的遍历,则返回所述测试程序入口,继续依据所述遍历策略动态修改所述分支状态登记表中的分支当前状态,并根据所述分支当前状态对所有条件跳转分支进行遍历;
步骤S105,若完成对所有条件跳转分支的遍历,则退出所述测试程序。
本发明的基本构思是通过对测试程序的条件跳转分支进行状态登记,遍历所述测试程序所有条件跳转分支执行的语句,达到对微处理器测试的最大力度。
具体实施时,可通过在用于测试的源程序中添加代码/指令以实现步骤S101至S105,而且,添加的代码/指令可以是由高级程序语言(例如C语言)通过编译器汇编得到,在插入时只需改动调用时该代码/指令的实际地址,也可以直接以汇编语言实现,无论采取哪种方式,最终都将添加代码/指令后生成的汇编程序编译生成目标码进行测试。其中,步骤S101至S105中所述的测试程序既可以指用于测试的源程序(这里称为原测试程序),也可以指添加了代码/指令之后的程序(这里称为新测试程序)。
具体地,通过在原测试程序的入口点添加初始化代码,使微处理器运行该初始化代码时即执行步骤S101中所述的初始化操作,包括建立分支状态登记表,当然,所述初始化操作还包括建立分支状态数据结构,所述分支状态数据结构包括分支总个数和分支状态登记表地址,其中,所述分支总个数,记录所述测试程序中所有条件跳转分支的数量;所述分支状态登记表地址,记录所述分支状态登记表所分配的地址,用于所述测试程序运行时访问所述分支状态登记表。以下为所述分支状态数据结构的定义示例:
typedef struct
{
    unsigned long  BranchTotal;        //分支总个数
    unsigned long  BranchTableAddr;    //分支状态登记表地址
}BranchState;                          //分支状态数据结构
在建立分支状态数据结构后,并对其赋初值,例如:将所述分支总个数赋初值零,将所述分支状态登记表地址赋予分配的虚地址。所述条件跳转分支为测试程序中的用于判断的条件转移语句或无条件转移语句,例如C语言中的if语句、if...else语句等。对于每个条件跳转分支,都有成功与否两条路径。如果测试程序中有n个条件跳转,成功记做1,不成功记做0,那么整个程序的条件跳转登记可以一个向量{M1,M2,......,Mn}表示,其中Mi=0或1,i=1,......,n。这样,原测试程序中输入一具体数据时走一条固定的路径,而在新测试程序中,不再需要输入具体数据,变成了有2n个路径要走(2n为理论上的最大路径数),相当于增加到2n个测试用例,但是实际情况中,考虑到由于条件跳转分支之间可能有隶属关系,所以实际的所有条件跳转分支遍历量会小于2n。测试程序中除了包括所述条件跳转分支,还包括程序块,关于所述程序块的定义一般如下:
定义1:程序块是指程序中一个含有少量的语句序列,其中只有一个入口语句和一个出口语句,执行时只能从入口语句进入,从出口语句退出。对于一个给定的程序,可以把它划分为一系列的程序块。
定义2:入口语句是指:1)程序的第一个语句;2)或者能够由条件转移语句或无条件转移语句转移到的语句;3)或者紧跟在条件转移语句后面的语句。
定义3:出口语句是指:1)下一条入口语句之前的那条语句;2)或者程序的终止语句。
图2是测试程序中条件跳转分支与程序块示意图,如图2所示,该测试程序包括7个条件跳转分支(简称分支)和9个程序块,程序块1执行后进入分支1,分支1跳转成功进入分支3,跳转不成功进入分支2,分支2和分支3又视其跳转情况不同进入下一个分支或执行对应的程序块。总之,每个分支都有跳转成功和跳转不成功两种情况,分别用1和0表示,而跳转成功和跳转不成功分别对应各自需要执行的程序块不同,例如,在分支4,跳转成功则执行程序块3,而跳转不成功则执行程序块2,另外,跳转成功和跳转不成功也可能进入下一个分支,例如,分支5在跳转不成功的时候执行程序块4,而在跳转成功的时候进入分支7。当然,在其他实施例中,并非每个分支跳转成功和跳转不成功都有不同的程序块需要执行,例如,也可能在分支4跳转成功的时候以及分支5跳转不成功的时候都需要执行同一个程序块。图2仅示出了一种简单的程序结构,每个分支跳转成功或跳转不成功进入下一个分支或执行各自的程序块,并在程序块执行完后结束程序。所述测试程序在由微处理器运行时,根据分支状态登记表来决定每个分支跳转情况,所述分支状态登记表包括分支索引号和分支当前状态,其中,所述分支索引号用于使所述测试程序中的条件跳转分支对应于所述分支状态登记表以获取所述分支当前状态;所述分支当前状态,其状态位的改变决定该条件跳转分支成功跳转与否。图3为图2中测试程序的分支状态登记表示意图,如图3所示,图2中测试程序的分支状态登记表包括分支索引号,在初始化操作后对其赋初值零,待执行步骤S102扫描出所述测试程序的所有条件跳转分支后,对每个条件跳转分支对应的分支索引号分别进行赋值,例如,图2中测试程序有7个条件跳转分支,则分支索引号1至7分别对应该测试程序的7个分支,这样便能根据分支索引号找到对应的条件跳转分支并进一步获取分支状态登记表中包括的分支当前状态,所述分支当前状态的状态位有两种,分别是0或1,分别表示跳转不成功或跳转成功,在初始化操作时对所有的分支当前状态的状态位赋初值零。所述分支状态登记表还包括条件跳转分支的隶属关系、隶属层次、隶属值,所述隶属关系,记录所述条件跳转分支之间的隶属关系;所述隶属层次,记录所述条件跳转分支所属的层次;所述隶属值,记录所述条件跳转分支基于其所隶属于的条件跳转分支跳转成功或是跳转不成功的情况。当然,对于所述的隶属关系、隶属层次、隶属值在初始化操作时被赋予初值零。
初始化操作后,执行步骤S102,扫描出测试程序的所有条件跳转分支,对所述分支状态登记表赋值;之后执行步骤S103,依据选定的遍历策略动态修改所述分支状态登记表中的所述分支当前状态,并根据所述分支当前状态对所有条件跳转分支进行遍历。在扫描出所述测试程序的所有条件跳转分支之后,便可以获取到所有条件跳转分支的数量的值,将该值赋予所述分支总个数。所述遍历策略是指按照一定顺序对所有条件跳转进行遍历,可以由不同的算法实现,例如:深度遍历、宽度遍历、随机遍历、按序遍历等等。一个条件跳转分支(简称分支)下可能有较多的其他分支,这些分支之间具有隶属关系,下一层分支的运行依赖于上一层分支。参阅图2,分支1是属于第一层分支;分支2和分支3分别隶属于分支1,属于第二层分支;分支4和分支5隶属于分支2,分支6隶属于分支3,属于第三层分支;分支7隶属于分支5,属于第四层分支。在扫描出所述测试程序的所有条件跳转分支之后,分别对条件跳转分支的隶属关系、隶属层次、隶属值进行赋值。结合图2,参阅图3,分支1由于是属于第一层分支,并没有隶属于的分支,所以在所述分支状态登记表中赋值为0,隶属层次赋值为1,并且,分支1的隶属值也没有意义,仍然保持为初始值零。分支2、分支3分别隶属于分支1,因此对隶属关系均赋值为1,又由于它们同属于第二层分支,故隶属层次均赋值为2,而分支2基于分支1跳转不成功的情况才能运行到的,故对分支2的隶属值赋值为0,同理,分支3基于分支1跳转成功的情况才能运行到,则对分支3的隶属值赋值为1。按照上述方法,将分支4、分支5、分支6、分支7的隶属关系、隶属层次、隶属值一一进行赋值,具体赋值情况如图3所示。因为对于即使相同数量的条件跳转分支而具体隶属层次、隶属关系等不同,在进行深度遍历或宽度遍历时遍历的路径是完全不同的,除了有分支索引号和分支当前状态,还需要有所述隶属关系、隶属层次、隶属值后,才可以得出所有条件跳转分支的层次结构,进而在选定的遍历策略下根据所述分支状态登记表中的值进行遍历。在实际实施时,对于条件跳转分支的所述隶属值的赋值,可在扫描测试程序的所有条件跳转分支时,将扫描到的在if语句(该条件语句属于第一层分支或相对于下一层分支的上一层分支)嵌套下的分支的隶属值赋值为1,而将在else语句(该条件语句属于第一层分支或相对于下一层分支的上一层分支)嵌套下的分支的隶属值赋值为0,例如某个if...else语句a1(假设该条件语句属于第一层分支)嵌套有两个if...else语句,分别为a2和a3(属于第二层分支),并且a2嵌套于a1的if语句下,a3嵌套于a1的else语句下,则a2这个分支的隶属值赋值为1,而a3这个分支的隶属值赋值为0。所述深度遍历指将有隶属关系的条件跳转分支先行遍历,在深度遍历时,则按照:分支1、分支2、分支4、分支5、分支7、分支3、分支6进行遍历,其中,对每个分支分别进行跳转不成功和跳转成功两种情况的遍历。所述宽度遍历指将同一层次上的条件跳转分支先行遍历,而同一隶属层次上的条件跳转分支彼此之间是没有隶属关系的。当宽度遍历时,按照:属于第一层分支的分支1,属于第二层分支的分支2、分支3,属于第三层分支的分支4、分支5、分支6,属于第四层分支的分支7进行遍历,其中,对每个分支分别进行跳转不成功和跳转成功两种情况的遍历。
所述随机遍历指随机选取条件跳转分支进行遍历,具体可设置一随机生成所述分支索引号的函数,按照其先后随机生成的分支索引号的顺序对所有条件跳转分支进行遍历。所述按序遍历指按照所述分支索引号的顺序对条件跳转分支进行遍历,具体地,在所述测试程序进行扫描后,对每个条件跳转分支对应的分支索引号分别进行赋值,按照所述分支索引号的顺序对条件跳转分支进行遍历,例如图2中的测试程序,当按序遍历时,则按照:分支的序号顺序1至7进行遍历。
以上提及的是较为普遍的几种遍历策略,但并不局限于此,可根据实际需求编制遍历策略。如果一个测试程序的分支过多,就需要选择遍历策略,因为将测试程序的所有分支都遍历的话,可能需要很长时间,那就需要从测试时间和强度的角度考虑要重点遍历的指令流(对应的程序块在运行时以指令流的形式执行),例如在某些分支层次较多而其他分支层次较少时,可以采取选择那些分支层次较多的分支先进行遍历,即有选择性地遍历一些分支。步骤S102和步骤S103可通过一分支处理模块实现,遍历策略位于所述分支处理模块中,遍历方法不同,指令也不同。可以将多个遍历策略集合在所述分支处理模块中,根据用户的需求选择。
选定遍历策略后,依据所选定的遍历策略对所述分支状态登记表中的所述分支当前状态的状态位赋值,各条件跳转分支根据所述分支状态登记表中所述分支当前状态的状态位的值进行跳转以遍历所有条件跳转分支。具体地,对条件跳转分支插入动态修改分支代码指令,以对跳转状态登记表进行动态修改,例如,将原来的分支if(condition)更改为if(BranchTable[index++]),这样,程序块的运行路径便不再依赖于用于判断的条件语句或非条件语句,其中BranchTable[index++]的值为0或1,表示跳转不成功或跳转成功,如此就无需输入具体数据而依靠对所述分支状态登记表中的所述分支当前状态的状态位的改变便能实现对条件跳转分支的遍历。具体动态修改所述分支状态登记表中的所述分支当前状态的状态位实现对所有条件跳转分支的遍历的过程,将在以下添加代码之后的测试程序运行流程中加以说明。
下面结合图4对添加代码之后的测试程序运行流程进行详细说明。图4是本发明提供的微处理器的测试方法实施方式示意图,如图4所示,从程序开始运行,进行初始化操作后(图中未示),运行程序块1,若选定的遍历策略为深度遍历,按照分支1、分支2、分支3的顺序进行遍历,其中,对每个分支分别进行跳转不成功和跳转成功两种情况的遍历。具体地,最初分支状态登记表中的分支当前状态的情况为{0,0,0},以此先进行第一次遍历,运行程序块1之后将运行程序块3、程序块4,之后会对是否遍历完所有条件跳转分支进行判断,具体判断是否完成对所有条件跳转分支的遍历,可以对已成功跳转的条件跳转分支进行计数,当其总数小于分支总个数时即执行步骤S104,若未完成对所有条件跳转分支的遍历,则返回所述测试程序入口,继续根据所述遍历策略动态修改所述分支状态登记表对所有条件跳转分支进行遍历;当其总数等于分支总个数时,即判断已完成对所有条件跳转分支的遍历,可执行步骤S105,若完成对所有条件跳转分支的遍历,则退出所述测试程序。具体可通过一跳转遍历处理模块决定执行步骤S104或步骤S105,并在原测试程序的末尾添加回跳程序入口和程序退出指令实现。以分支状态登记表中的分支当前状态为{0,0,0}进行遍历后,因并未完成对所有条件跳转分支的遍历,则返回测试程序的入口,继续根据所述遍历策略动态修改所述分支状态登记表中的所述分支当前状态,并根据所述分支当前状态对所有条件跳转分支进行遍历,此时,将分支状态登记表中的分支当前状态修改为{0,1,0}进行遍历,那么运行程序块1后会运行程序块2、程序块4。之后,再将分支状态登记表中的分支当前状态修改为{1,1,0}进行遍历,那么运行程序块1后运行程序块3、程序块4。最后,将分支状态登记表中的分支当前状态修改为{1,1,1}进行遍历,那么运行程序块1后运行程序块4。至此,已经完成了对所有条件跳转分支的遍历,则退出所述测试程序。若选定的遍历策略为宽度遍历,按照属于第一层分支的分支1,属于第二层分支的分支2、分支3的顺序进行遍历,同样可参照上述深度遍历时测试程序的运行流程,区别在于对分支状态登记表中的分支当前状态的修改,依次以{0,0,0}、{1,0,0}、{0,1,0}、{1,1,1}进行遍历。
通过以上描述内容,本实施例中,虽然已经完成对所有条件跳转分支的遍历,但需要依靠分支状态登记表中的所述隶属关系、隶属层次、隶属值,在其他实施例中,还可以按照预先决定的遍历策略,修改分支状态登记表中的分支当前状态的状态位,以所述状态位所有变化情况进行遍历,即共有23=8种情况,以{0,0,0}、{1,0,0}、{0,1,0}、{0,0,1}、{0,1,1}、{1,1,0}、{1,0,1}、{1,1,1}分别进行遍历,这样进行遍历虽然能够保证将所有条件跳转分支的路径都得到运行,并且实现算法较为简单(可以不需要依靠分支状态登记表中的所述隶属关系、隶属层次、隶属值),但是存在重复遍历的情况,导致花费时间较多,增加了系统开销。由于分支2、分支3与分支1有隶属关系,也就是分支1为“0”时,就不会运行到分支3,分支3的值的改变不影响程序路径;同样分支1为“1”时,不会运行到分支2,分支2的值的改变不影响程序路径,因此,只需以{0,0,0}、{1,0,0}、{0,1,0}、{1,1,1}进行遍历(宽度遍历)即可,既能遍历所有的条件跳转分支,又可以节省遍历时间,减小系统开销。
另外,根据遍历策略的不同,对于判断是否完成对所有条件跳转分支的遍历,还可以通过判断分支状态登记表中的分支当前状态的状态位是否均为1,若所述分支当前状态的状态位均为1,则表明已经遍历完所有条件跳转分支,否则说明还未遍历完所有条件跳转分支。
步骤S105中,在退出所述测试程序前,还包括对所述测试程序运行的结果进行校验并输出测试报告。具体可通过在原测试程序结束前添加正确性验证代码,所述正确性验证代码用于对所有遍历路径的运行结果进行校验并输出测试报告。如果是在微处理器的模拟环境上运行,则产生校验文件供校验;如果是在微处理器的测试平台上,则将运行结果与校验文件对比,判断结果对错。
此外,所述微处理器的测试方法中还包括对所述测试程序运行过程出现的异常进行处理以使所述测试程序能够继续运行。现有技术中,当程序运行出现异常时,操作系统默认会报错并退出程序的运行,而本发明所述微处理器的测试方法中具体可通过在原测试程序中添加异常处理函数,由于操作系统本身有异常定义接口,所以只需添加异常的处理方式(即添加异常处理函数的代码)即可,即当测试程序运行出现异常时,由所述异常处理函数对异常作出处理,而测试程序并不退出仍然继续运行直至按照遍历策略完成遍历。
对应于上述微处理器的测试方法,可由本发明提供的微处理器的测试装置实现。图5是本发明提供的微处理器的测试装置实施方式示意图,如图5所示,所述微处理器的测试装置包括:初始化模块501、分支处理模块502、跳转遍历处理模块503,所述初始化模块501用于执行初始化操作,包括建立分支状态登记表,所述分支状态登记表包括分支索引号和分支当前状态,所述分支索引号用于使测试程序中的条件跳转分支对应于所述分支状态登记表以获取所述分支当前状态;所述分支当前状态,其状态位的改变决定该条件跳转分支成功跳转与否;所述分支处理模块502用于扫描出测试程序的所有条件跳转分支后对所述分支状态登记表赋值;还用于依据选定的遍历策略动态修改所述分支状态登记表中的所述分支当前状态,并根据所述分支当前状态对所有条件跳转分支进行遍历;所述跳转遍历处理模块503用于判断是否完成对所有条件跳转分支的遍历,若未完成对所有条件跳转分支的遍历,则返回所述测试程序入口,继续由所述分支处理模块502依据所述遍历策略动态修改所述分支状态登记表中的分支当前状态,并根据所述分支当前状态对所有条件跳转分支进行遍历;若完成对所有条件跳转分支的遍历,则退出所述测试程序。所述微处理器的测试装置还包括异常处理模块(图中未示)和结果校验模块(图中未示),所述异常处理模块用于对所述测试程序运行过程出现的异常进行处理以使所述测试程序能够继续运行;所述结果校验模块,用于在退出所述测试程序前,对所述测试程序运行的结果进行校验并输出测试报告。所述微处理器的测试装置的具体实施方式,可参考上述微处理器的测试方法进行,在此不再赘述。
此外,本领域技术人员可以理解实现上述实施例的全部或部分是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机可读存储介质中,所述存储介质可以是ROM、RAM、磁碟、光盘等。
综上,本发明提供的微处理器的测试方法及测试装置至少具有如下有益效果:
通过对测试课题的条件跳转分支进行状态登记,遍历所有条件跳转分支,使测试课题的运行路径成指数级增长,极大地增强了对微处理器的测试力度,从而增强了被测试微处理器的可靠性,同时也大大减轻了测试课题改造的负担,节省了用于开发新的测试课题的时间,由此缩短了测试的周期,降低了成本。
此外,由于不再需要大量的测试课题,也节省了用于存储大量测试课题的存储空间,同样降低了成本。
本发明虽然已以较佳实施例公开如上,但其并不是用来限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,都可以利用上述揭示的方法和技术内容对本发明技术方案做出可能的变动和修改,因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化及修饰,均属于本发明技术方案的保护范围。

Claims (18)

1.一种微处理器的测试方法,其特征在于,包括:
执行初始化操作,包括建立分支状态登记表,所述分支状态登记表包括分支索引号和分支当前状态,所述分支索引号用于使测试程序中的条件跳转分支对应于所述分支状态登记表以获取所述分支当前状态;所述分支当前状态,其状态位的改变决定该条件跳转分支成功跳转与否;
扫描出测试程序的所有条件跳转分支,对所述分支状态登记表赋值;
依据选定的遍历策略动态修改所述分支状态登记表中的分支当前状态,并根据所述分支当前状态对所有条件跳转分支进行遍历;
若未完成对所有条件跳转分支的遍历,则返回所述测试程序入口,继续依据所述遍历策略动态修改所述分支状态登记表中的分支当前状态,并根据所述分支当前状态对所有条件跳转分支进行遍历;
若完成对所有条件跳转分支的遍历,则退出所述测试程序。
2.根据权利要求1所述的微处理器的测试方法,其特征在于,所述初始化操作还包括建立分支状态数据结构,所述分支状态数据结构包括分支总个数和分支状态登记表地址,
所述分支总个数,记录所述测试程序中所有条件跳转分支的数量;
所述分支状态登记表地址,记录所述分支状态登记表所分配的地址,用于所述测试程序运行时访问所述分支状态登记表。
3.根据权利要求2所述的微处理器的测试方法,其特征在于,还包括:在扫描出所述测试程序的所有条件跳转分支之后,获取所有条件跳转分支的数量的值,并将该值赋予所述分支总个数。
4.根据权利要求1所述的微处理器的测试方法,其特征在于,所述依据选定的遍历策略动态修改所述分支状态登记表中的分支当前状态,并根据所述分支当前状态对所有条件跳转分支进行遍历包括:依据选定的遍历策略对所述分支状态登记表中的所述分支当前状态的状态位赋值,各条件跳转分支根据所述分支状态登记表中所述分支当前状态的状态位的值进行跳转以遍历所有条件跳转分支。
5.根据权利要求1所述的微处理器的测试方法,其特征在于,所述分支状态登记表还包括条件跳转分支的隶属关系、隶属层次、隶属值,
所述隶属关系,记录所述条件跳转分支之间的隶属关系;
所述隶属层次,记录所述条件跳转分支所属的层次;
所述隶属值,记录所述条件跳转分支基于其所隶属于的条件跳转分支跳转成功或是跳转不成功的情况。
6.根据权利要求5所述的微处理器的测试方法,其特征在于,所述遍历策略为深度遍历或宽度遍历,
所述深度遍历指将有隶属关系的条件跳转分支先行遍历;
所述宽度遍历指将同一隶属层次上的条件跳转分支先行遍历。
7.根据权利要求1或5所述的微处理器的测试方法,其特征在于,所述遍历策略为随机遍历或按序遍历,
所述随机遍历指随机选取条件跳转分支进行遍历;
所述按序遍历指按照所述分支索引号的顺序对条件跳转分支进行遍历。
8.根据权利要求1所述的微处理器的测试方法,其特征在于,还包括对所述测试程序运行过程出现的异常进行处理以使所述测试程序能够继续运行。
9.根据权利要求1所述的微处理器的测试方法,其特征在于,在退出所述测试程序前,还包括对所述测试程序运行的结果进行校验并输出测试报告。
10.一种微处理器的测试装置,其特征在于,包括:初始化模块、分支处理模块、跳转遍历处理模块,
所述初始化模块用于执行初始化操作,包括建立分支状态登记表,所述分支状态登记表包括分支索引号和分支当前状态,所述分支索引号用于使测试程序中的条件跳转分支对应于所述分支状态登记表以获取所述分支当前状态;所述分支当前状态,其状态位的改变决定该条件跳转分支成功跳转与否;
所述分支处理模块用于在扫描出测试程序的所有条件跳转分支后对所述分支状态登记表赋值;还用于依据选定的遍历策略动态修改所述分支状态登记表中的所述分支当前状态,并根据所述分支当前状态对所有条件跳转分支进行遍历;
所述跳转遍历处理模块用于判断是否完成对所有条件跳转分支的遍历,若未完成对所有条件跳转分支的遍历,则返回所述测试程序入口,继续由所述分支处理模块依据所述遍历策略动态修改所述分支状态登记表中的分支当前状态,并根据所述分支当前状态对所有条件跳转分支进行遍历;若完成对所有条件跳转分支的遍历,则退出所述测试程序。
11.根据权利要求10所述的微处理器的测试装置,其特征在于,所述初始化模块执行的初始化操作还包括建立分支状态数据结构,所述分支状态数据结构包括分支总个数和分支状态登记表地址,
所述分支总个数,记录所述测试程序中所有条件跳转分支的数量;
所述分支状态登记表地址,记录所述分支状态登记表所分配的地址,用于所述测试程序运行时访问所述分支状态登记表。
12.根据权利要求11所述的微处理器的测试装置,其特征在于,所述分支处理模块在扫描出所述测试程序的所有条件跳转分支之后,获取所有条件跳转分支的数量的值,并将该值赋予所述分支总个数。
13.根据权利要求10所述的微处理器的测试装置,其特征在于,所述分支处理模块依据选定的遍历策略动态修改所述分支状态登记表中的所述分支当前状态,并根据所述分支当前状态对所有条件跳转分支进行遍历包括:依据选定的遍历策略对所述分支状态登记表中的所述分支当前状态的状态位赋值,各条件跳转分支根据所述分支状态登记表中所述分支当前状态的状态位的值进行跳转以遍历所有条件跳转分支。
14.根据权利要求10所述的微处理器的测试装置,其特征在于,所述分支状态登记表还包括条件跳转分支的隶属关系、隶属层次、隶属值,
所述隶属关系,记录所述条件跳转分支之间的隶属关系;
所述隶属层次,记录所述条件跳转分支所属的层次;
所述隶属值,记录所述条件跳转分支基于其所隶属于的条件跳转分支跳转成功或是跳转不成功的情况。
15.根据权利要求14所述的微处理器的测试装置,其特征在于,所述遍历策略为深度遍历或宽度遍历,
所述深度遍历指将有隶属关系的条件跳转分支先行遍历;
所述宽度遍历指将同一隶属层次上的条件跳转分支先行遍历。
16.根据权利要求10或14所述的微处理器的测试装置,其特征在于,所述遍历策略为随机遍历或按序遍历,
所述随机遍历指随机选取条件跳转分支进行遍历;
所述按序遍历指按照所述分支索引号的顺序对条件跳转分支进行遍历。
17.根据权利要求10所述的微处理器的测试装置,其特征在于,还包括异常处理模块,用于对所述测试程序运行过程出现的异常进行处理以使所述测试程序能够继续运行。
18.根据权利要求10所述的微处理器的测试装置,其特征在于,还包括结果校验模块,用于在退出所述测试程序前,对所述测试程序运行的结果进行校验并输出测试报告。
CN201010612480.9A 2010-12-29 2010-12-29 微处理器的测试方法及测试装置 Active CN102567169B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201010612480.9A CN102567169B (zh) 2010-12-29 2010-12-29 微处理器的测试方法及测试装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201010612480.9A CN102567169B (zh) 2010-12-29 2010-12-29 微处理器的测试方法及测试装置

Publications (2)

Publication Number Publication Date
CN102567169A true CN102567169A (zh) 2012-07-11
CN102567169B CN102567169B (zh) 2014-02-26

Family

ID=46412643

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201010612480.9A Active CN102567169B (zh) 2010-12-29 2010-12-29 微处理器的测试方法及测试装置

Country Status (1)

Country Link
CN (1) CN102567169B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105487973A (zh) * 2015-11-24 2016-04-13 无锡江南计算技术研究所 连续捕获程序异常的处理器异常测试方法
CN105653261A (zh) * 2015-12-22 2016-06-08 曙光云计算技术有限公司 基于云计算环境下的开发集成测试方法及系统
WO2016202157A3 (zh) * 2015-06-16 2017-02-09 深圳市中兴微电子技术有限公司 一种随机测试程序生成方法及装置、设备、存储介质
CN107423173A (zh) * 2017-05-19 2017-12-01 郑州云海信息技术有限公司 一种提升内存测试环节的优化方法

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4598357A (en) * 1980-11-14 1986-07-01 Sperry Corporation Cache/disk subsystem with file number for recovery of cached data
JPH04242440A (ja) * 1991-01-17 1992-08-31 Nec Corp デバッグ情報出力方式
CN101216803A (zh) * 2008-01-09 2008-07-09 四川大学 基于基路径的测试程序控制流路径集生成方法
CN101436128A (zh) * 2007-11-16 2009-05-20 北京邮电大学 软件测试用例自动生成方法及系统
CN101763291A (zh) * 2009-12-30 2010-06-30 中国人民解放军国防科学技术大学 一种程序控制流错误检测方法

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4598357A (en) * 1980-11-14 1986-07-01 Sperry Corporation Cache/disk subsystem with file number for recovery of cached data
JPH04242440A (ja) * 1991-01-17 1992-08-31 Nec Corp デバッグ情報出力方式
CN101436128A (zh) * 2007-11-16 2009-05-20 北京邮电大学 软件测试用例自动生成方法及系统
CN101216803A (zh) * 2008-01-09 2008-07-09 四川大学 基于基路径的测试程序控制流路径集生成方法
CN101763291A (zh) * 2009-12-30 2010-06-30 中国人民解放军国防科学技术大学 一种程序控制流错误检测方法

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2016202157A3 (zh) * 2015-06-16 2017-02-09 深圳市中兴微电子技术有限公司 一种随机测试程序生成方法及装置、设备、存储介质
CN105487973A (zh) * 2015-11-24 2016-04-13 无锡江南计算技术研究所 连续捕获程序异常的处理器异常测试方法
CN105487973B (zh) * 2015-11-24 2018-01-19 无锡江南计算技术研究所 连续捕获程序异常的处理器异常测试方法
CN105653261A (zh) * 2015-12-22 2016-06-08 曙光云计算技术有限公司 基于云计算环境下的开发集成测试方法及系统
CN105653261B (zh) * 2015-12-22 2019-04-12 曙光云计算集团有限公司 基于云计算环境下的开发集成测试方法及系统
CN107423173A (zh) * 2017-05-19 2017-12-01 郑州云海信息技术有限公司 一种提升内存测试环节的优化方法

Also Published As

Publication number Publication date
CN102567169B (zh) 2014-02-26

Similar Documents

Publication Publication Date Title
Guo et al. Exploiting community structure for floating-point precision tuning
Kattenbelt et al. Abstraction refinement for probabilistic software
CN106354630B (zh) 一种基于动态符号执行的软件缺陷检测方法
US8234636B2 (en) Source code modification technique
Hickmott et al. Planning via Petri Net Unfolding.
CN102880546A (zh) 一种基于xml数据库的软件集成测试方法及系统
CN109615517A (zh) 一种智能合约执行方法及智能合约执行系统
CN106547520B (zh) 一种代码路径分析方法及装置
CN102567169A (zh) 微处理器的测试方法及测试装置
CN103559125B (zh) 一种利用图同构验证编译器的方法
CN105302719A (zh) 一种变异测试方法及装置
CN104090798A (zh) 动静态结合的中断驱动程序数据竞争检测方法
CN103955354B (zh) 重定位方法和装置
Simaitis Automatic verification of competitive stochastic systems
CN114328213A (zh) 基于目标点任务划分的并行化模糊测试方法及系统
US8117604B2 (en) Architecture cloning for power PC processors
CN109145534A (zh) 针对软件虚拟机保护的反混淆系统及方法
CN114706762A (zh) 一种基于强化学习的Simulink软件测试方法
Cha et al. Learning a strategy for choosing widening thresholds from a large codebase
CN106886446A (zh) 软件源代码的验证方法及装置
Hong et al. Evaluation of model checkers by verifying message passing programs
CN102004660A (zh) 一种业务流程的实现方法及装置
CN115617410B (zh) 驱动接口识别方法、装置、设备及存储介质
CN110659492B (zh) 一种基于多智能体强化学习的恶意软件检测方法及装置
Cichos et al. Efficient reduction of model-based generated test suites through test case pair prioritization

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant