CN103198012A - 一种基于扩展状态机图的测试用例自动产生方法 - Google Patents
一种基于扩展状态机图的测试用例自动产生方法 Download PDFInfo
- Publication number
- CN103198012A CN103198012A CN2013100347385A CN201310034738A CN103198012A CN 103198012 A CN103198012 A CN 103198012A CN 2013100347385 A CN2013100347385 A CN 2013100347385A CN 201310034738 A CN201310034738 A CN 201310034738A CN 103198012 A CN103198012 A CN 103198012A
- Authority
- CN
- China
- Prior art keywords
- state
- path
- bag
- output function
- variable
- 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.)
- Pending
Links
Images
Landscapes
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明公开了一种扩展状态机图的结构和构建方法,以及在其上实现遍历的方法,还公开了根据遍历结果产生测试用例的方法。该扩展状态机图对分析覆盖率有很好的帮助。遍历方法简单实用,可以产生状态序列、状态转移时选取的输出函数、使状态转移发生的测试激励包的约束标签或其中产生的具体输入信号值。测试用例产生方法,可以根据遍历结果的不同形式,包括固定值的激励包、带约束的激励包、带不可实现标记的激励包,完成测试用例的产生,实现对更多覆盖率指标的高覆盖效果。测试用例的产生过程,可以接受人工的指导来减少运算量。该套方法对边角情况的自动验证非常有效,减低了验证工程师制造边角情况场景和测试用例的成本。
Description
技术领域
本发明涉及一种基于扩展状态机图的测试用例自动产生方法,属于集成电路功能验证的技术领域。
背景技术
现有的集成电路功能验证方法主要通过限制性随机验证完成大部分应用场景的模拟。对于很难在随机情况中产生的边角情况由验证工程师手工编写,并通过原有的验证平台加载到被测设计中,这时边角情况种类的完全性、产生的复杂度、与现有验证平台的兼容性都直接影响到了验证成本。
验证工程师会根据状态机的状态点和状态之间的转移功能是否被覆盖到来决定手工编写的测试案例的内容,以达到两者覆盖率的完整。状态机图中只标注了状态和其之间的转移连线,状态内部的各种情况没有进行图形标注,致使边角情况的制造困难。
在状态机图上的遍历研究中,最优解的查找往往比较复杂,根据功能验证的特性,少量的重复减少大量的计算是更实用的方案。而且仅对简单的状态的遍历,对其他覆盖率指标和一些边角情况的功能测点效果不明显。
随机加手工的方法产生的测试用例集合整体效率并不高,因为其中测试用例的针对性不强,对某些覆盖的重复测试过多,影响相同覆盖率下仿真软件的运行时间。为解决高覆盖率且高效的测试用例的产生问题,甚至是对于某些指标的全覆盖率和最高效问题,本专利将提出一种扩展的状态机模型,配以低复杂度的遍历方法和测试用例产生方法,完成高效高覆盖率测试用例的自动产生。
现有根据状态序列产生测试信号的方法,仅考虑当前运行周期输入信号对状态转移的影响,对复杂状态机,特别是由内部变量引起的状态转移,现有方法无法满足。
发明内容
本发明要解决的主要技术问题是,提供一种扩展的状态机图及其构建方法,在此基础上提供对应的遍历方法和测试用例的自动生成方法。
为解决上述技术问题,本发明采用的技术方案如下:
一种扩展的状态机图及其构建方法:
1.状态集合、状态转移集合、状态转移条件集合分别用带有状态名的圆圈、带箭头的曲线、曲线上转移条件的文字表示。
2.收集并分类每个状态中涉及的输入信号、内部变量、输出信号、输出函数。
3.对于每个状态中的每个输出函数,收集和记录实现该输出函数对输入信号和内部变量的要求,以及该输出函数输出时所影响的内部变量与输出信号。
4.将每个状态中的每个输出函数,按照输出后的下一状态分类。即该状态的状态扇出数目为输出函数的分类数目。
5.在每个状态圆圈中,构建影响输出函数选择,由输入信号和内部变量取值约束构成的,具有优先级先后顺序的路径图。
进一步地,状态圆圈中的路径图,其特征在于,每个状态有几种下一状态,就有几个路径终点,即该状态的状态扇出数。该路径图上的每一条路径都由一个统一的起点出发,路经该状态所有输入信号和内部变量,最后汇聚到这几个终点中的一个上,形成一条完整的路径。该起点由该状态的扇入状态转移曲线的终点汇合而成。每一条连接到终点的路径都对应着一种输出函数的选择。从起点走到终点的一条完整路径,表示了如果要走到最后连接终点的线路所表示的输出函数,需要经过一路上各相关输入信号和内部变量的约束,随后通过终点对应的状态转移曲线,进入下一个状态。
更进一步地,状态圆圈中的路径图,其特征在于,在路径上标注通过该路径时对输入信号和内部变量相关的约束条件,包括与多个信号或多个变量相关的组合约束条件,并且同一条路径上相同的约束条件可以合并。同一个状态圆圈中的各输出函数的选取条件可能会存在重叠,根据设计中判断输出函数选择的实际判断条件的优先级从上到下排列,高优先级的选择条件自动从低优先级的选择条件中减掉,使每条完整路径上的约束条件不会重叠。
在扩展的状态机图上遍历的方法:
1)计算并保存状态机图上任意一个状态到另一个状态中间经过的最少状态路径,即任意两状态间的最短路径。从一个状态到另一个状态,如果是不可达的,最短路径则为无限大。进入第二步。
2)如果从复位后的初始状态存在到某一个状态的最短路径是不可达,停止该方法,打印状态机设计错误信息,否则进入第三步。
3)统计每一个状态到其每种下一个状态可能通过的路径图中的路径种类。并将种类数标记在该状态到其下一状态的状态转移连线上。
4)创建一条路径,增加到遍历路径集合中,以复位后的初始状态节点作为起始节点,进入第5步。
5)如果当前状态节点到任意下一状态节点存在3步中标记的大于零的转移连线,从中选择一个下一状态,并选择一条可以连接到该状态转移的输出函数的约束路径通过,在4步中创建的路径中记录这个状态转移,并将这个转移的连线上标记的数字减一,再以进入的下一状态节点作为当前节点,进入5步骤。如果当前状态节点到任意下一状态节点转移连线上的数字都为零,则进入6步骤。
6)如果状态机图中所有状态之间的转移连线上的数字都不大于零时,则遍历完成,停止该方法,打印所有遍历路径集合中的路径。如果状态机图中状态之间的转移连线上的数字存在大于零的情况时,进入步骤7。
7)如果不存在路径从当前状态节点到任何一个标记的数字还大于零的状态转移连线的起始状态节点,则进入步骤4,建立另一个从复位动作开始的路径。如果存在路径从当前状态节点到一个标记的数字还大于零的状态转移连线的起始状态节点,从所有满足该条件的起始状态节点中选择一个,从步骤1中保存的任意两个可达节点的最短路径中找到当前状态节点到所选大于零的状态转移连线的起始状态节点的最短路径,将该路径记录在遍历路径中,路径中经历的连线上的数字减一。被选择的大于零的连线的起始状态节点作为当前节点,进入步骤5。
在扩展的状态机图上遍历的方法,其特征在于,先确定下一状态,再确定进入该下一状态的输出函数。
在扩展的状态机图上遍历的方法,其特征在于,选择下一状态的选择条件按优先级从高到低的排序为:优先选择没有走过的状态转移和状态、选择在当前条件下可实现该状态转移的、选择该状态转移上标记数字大的、选择该状态转移上已减掉的数字小的、选择该状态转移上可实现的输出函数的种类数字大的、随机选择。
在扩展的状态机图上遍历的方法,其特征在于,选择输出函数时,备选输出函数集合是连接到选定的下一状态的输出函数路径集合。选择的优先级从高到低的排序为:优先选择没有走过的输出函数路径、选择当前条件下可实现的输出函数、选取位置靠上的路径即路径图中判断条件处于较高优先级的路径。
在扩展的状态机图上遍历的方法,其特征在于,记录遍历集合中每条路径经过各节点时状态转移的可实现性、选择的输出函数、输入信号与内部变量的约束条件、该输出函数对内部变量值的影响。需要产生具体输入信号值时,按照约束条件产生。需要计算输出信号和内部变量时,根据所选输出函数设计的功能计算输出信号和内部变量。
在扩展的状态机图上遍历的方法,其特征在于,选择标记数字大于零的状态转移连线的起始状态节点时优先级从高到低的排序是:优先选择从当前状态节点到各大于零的状态转移连线的起始状态节点的最短路径中路径长度最短的、选择从该起始状态节点所有状态扇出连线上大于零的数字的总和最大的、选择从当前状态节点到各大于零的状态转移连线的起始状态节点的最短路径中路径上大于零的数字的总和最大的,随机选择。
在扩展的状态机图上遍历的方法,其特征在于,可实现性的判断由是否可以产生满足该路径选择中所有约束条件的数据为依据。
在扩展的状态机图上遍历的方法,其特征在于,对于选定的状态转移和输出函数,如果输入信号的生成不可实现,则用符合选定状态转移和输出函数的内部变量值替换当时内部变量的实际值,生成输入信号,继续向后计算,同时标记该状态转移的不可实现性。
在扩展的状态机图上遍历的方法,其特征在于,使用在仅对一般状态机图进行遍历的时候,只需要将所有状态转移曲线上的数字都标记为一,并去除输出函数选择部分。
基于状态序列自动产生测试用例的方法:
1.建立带约束的激励包结构。包结构中包含被测设计的所有输入信号、存储被测设计中传来内部变量的空间、对输出信号预测的函数、产生随机信号的约束条件。包在每次例化时,都要通过标签和加载激励前被测设计中的内部变量值作为参数,对包中产生的输入信号进行约束和选择。包结构还可以接受对输出信号的限制。包中所有要产生的输入信号被定义为位宽一定的随机变量,每次例化时根据约束条件赋予具体的信号值。包中存在一种设定约束条件的机制,该机制包括粗约束和细约束两部分,当只提供测试序列的状态序列信息时只进行粗约束,当同时提供测试序列的状态信息和输出函数信息时,先粗约束再细约束。粗约束根据表示状态转移的标签选择实现该状态转移的约束条件来限制输入信号,细约束根据表示输出函数的标签和对输出值的要求选择该输出函数的约束条件来限制输入信号。约束中包括对输入信号、内部变量、输出信号和输出的内部变量的要求。
2.在每次对设计加载激励时,根据状态转移序列,为激励包的例化提供状态转移标签和输出函数标签,并通过验证平台中的接口,在例化包前,从设计中将内部变量的值读出传入包中,作为影响约束的另一个因素,设定包中约束条件的选择。
3如果状态序列中保存了每次状态转移时的输入信号值,则直接使用这个保存,建立固定值的激励包序列,即激励包序列中的包里每个输入信号都具有具体值,具体值可以为遍历时保存的值;如果状态序列中没有指明输入信号的具体值,则根据状态序列的状态转移的标签和输出函数选择的标签,建立带约束的激励包序列,这种激励包序列只有在进入被验证的设计之前才确定输入信号的具体值;如果状态序列中只保存了状态节点没有记录输出函数,此时只能根据状态转移的标签限制输入信号,完成状态转移。
4.不插状态点将不可实现的激励包调整为可实现。
4.1从固定值的激励包序列的第一个,依次向后搜索每一个包。向后表示作为激励加载到设计时,加载的时间更晚的包。
4.2如果固定值的激励包序列中出现了不可实现的状态转移或输出函数,这时通过每个包中所选择的输出函数对内部变量的影响,向前寻找序列中离该不可实现包最近的且输出可以影响该不满足条件的内部变量的包。如果找到了,进入4.3步骤。如果没有找到,且4.1步骤的搜索还没有结束,进入4.1步骤。如果没找到,且4.1的搜索已经结束,进入5步骤。如果固定值的激励包序列中没有出现不可实现的状态转移或输出函数,则以固定值的激励包序列作为测试激励。
4.3将不可实现包中对内部变量的要求,作为对该寻找到的包输出值的要求,并以从寻找到的包到不可实现包中间的激励包不能从可实现变为不可实现为约束条件,重新生成该寻找到的包的输入信号值。
4.4如果生成成功,用重新生成的新的输入信号值代替该寻找到的包中原有的输入信号值,再按照不可实现包中的约束条件,重新生成不可实现包中的输入信号,并标记不可实现包为可实现。回到4.1步骤。
4.5如果生成不成功,在该寻找到的包的原有约束中增加对该输出值的要求。
4.5.1如果影响该输出的因素只有输入信号,则停止,保持原有不可实现标记。如果4.1步骤的搜索还没有结束,进入4.1步骤。如果4.1步骤的搜索结束,进入5步骤。
4.5.2如果影响该输出的因素还包括内部变量,则以该寻找到的包作为不可实现包,进入4.2步骤,向前继续寻找,直至寻找完第一个激励包,如果还是无法生成成功,则结束。如果可以生成成功,不可实现包将被标记为可实现并重新生成。如果4.1步骤的搜索还没有结束,进入4.1步骤。如果4.1步骤的搜索结束,进入5步骤。
4.6如果带约束的激励包序列中出现了不可实现的状态转移或输出函数,因为约束的激励包是实时的,不能对以前进入设计的包再修改,所以直接进入5步骤。如果没有出现不可实现的状态转移或输出函数,则正常产生符合约束测试激励。
5.插状态点将不可实现的激励包调整为可实现。:
5.1对于固定值的激励包序列,从第一个或当前的搜索位置向后搜索不可实现包,将找到的不可实现包输入5.2步骤。对于带约束的激励包序列,输入为实时激励产生的不可实现包。如果不存在不可实现包,搜索结束,测试用例产生完毕,如果存在不可实现包,进入5.2步骤。
5.2将该不可实现包实现的状态转移打断。
5.3寻找插入状态点的产生方式
5.3.1如果该状态转移的前一个状态到它自己本身不存在路径:
在状态转移的打断处插入一个复位操作,用宽度优先算法,寻找从复位后的初试状态到被打断的状态转移的前一个状态的所有路径,此时不考虑输出函数的选择问题,路径中间可以出现环路的重复,较先出现的路径为距离较短的路径。进入5.4步骤。
5.3.2如果该状态转移的前一个状态到它自己本身存在路径:
用宽度优先算法,寻找该状态转移的前一个状态到它自己本身的所有路径,此时不考虑输出函数的选择问题,路径中间可以出现环路的重复,较先出现的路径为距离较短的路径。进入5.4步骤。
5.4对先出现的路径,在路径最后一个状态中,加入原有不可实现包中对内部变量的要求作为约束,即用一条环路路径的操作来代替一个状态点,以满足对不可实现包中内部变量的要求,尝试生成一个有具体信号值的激励包序列取代原来的不可实现包,该激励包序列引起的状态转移的路径插入到被打断的位置。如果生成不成功,宽度优先算法向下继续搜索,直到找到为止,如果生成成功,该不可实现包标记为可实现,然后进入5.1步骤。
5.5当运算时间超过预期设定,终止该搜索。报告运算超时。
测试用例自动产生的方法,其特征在于,插状态点实现步骤中,可以通过人工填写路径的方式取代宽度优先算法的方式产生路径,再按照路径上的约束生成固定值的序列包。
测试用例自动产生的方法,其特征在于,如果被打断的状态转移的前一个状态到它自己本身存在路径时,也可以插入从复位后的初试状态到前一个状态的路径。
测试用例自动产生的方法,其特征在于,对输入信号、输出信号、内部变量,建立临时存储空间,该存储空间采集当前周期的输入信号、执行后的输出信号和内部变量值。在带约束的激励包例化产生下一周期输入信号的具体值时,预测执行后的输出信号和内部变量值,给予一个最低优先级的约束,该约束条件为使存储中表示的二进制位发生尽可能多的跳转变换,即O变1,1变0。所谓最低优先级的约束,即如果该约束使在原有约束条件下本可以产生的输入信号不可以产生,则放弃该约束条件。
本发明的有益效果是:
扩展的状态机图比现有的状态机图对产生测试用例,产生了更大的指导意义,对自动产生测试用例提供了数据结构和清晰的路线图。和随机测试相比,本发明产生的测试用例包含了更全面的情况,大大减少了验证工程师对随机不容易达到的边角情况场景设计的工作量。和一般的状态遍历算法相比,本算法实现更简单,使用局部最优代替全局最优解,用可能的少量状态数的增长换取计算复杂度的大大降低。弥补了仅依据遍历一般状态机图产生测试序列,只能达到状态遍历和状态转移遍历的高覆盖性,本发明同时对其他覆盖率指标包括行覆盖率、语句覆盖率、分支覆盖率、翻转覆盖率都有更好的覆盖效果。本发明实现了在给定状态序列下的测试用例的自动产生,弥补了现有技术中在产生序列后,需要全部或半人工的设计测试用例。在某些边角情况需要大量循环才能产生特定场景时,采用人工辅助指导的方式减轻计算量。一般根据状态序列产生测试用例和测试信号的方法,仅考虑当前执行周期输入的输入信号,所以对于复杂状态机,特别是由内部变量限定的状态转移,不能完成状态转移的实现。本发明很好的解决了这个问题。
附图说明
图1为本发明所述的一种扩展状态机图的实施例;
图2为本发明所述的一种扩展状态机图遍历方法实施例的流程图;
图3为本发明所述的一种测试用例自动产生方法实施例的流程图的一部分;
图4为本发明所述的一种测试用例自动产生方法实施例的流程图的另一部分;
图5为本发明所述遍历方法和产生测试用例包的一个实施例;
具体实施方式
下面通过具体实施方式结合附图对本发明作进一步详细说明
如图1所示,一般的状态机图原本由reset初始条件(进入初始状态INIT),三个状态:INIT、ANALISI_REQ、ASSIGN,三个状态转移:INIT状态在下一周期进入ANALISI_REQ状态、ANALISI_REQ状态在下一周期进入ASSIGN状态、ASSIGN状态在下一周期进入ANALISI_REQ状态,构成。扩展状态机图以后,在ANALISI_REQ状态中,一共有5种输出函数,对应着5种约束路径的选择。输出函数它们分别是:ru1=′1′&&fu1=′0′的输出函数、ru2=’1′&&fu2=′0′的输出函数、ru3=′1′&&fu3=′O′的输出函数、ru4=′1′&&fu4=′O′的输出函数、除上述四种情况外其他情况的输出函数。在ASSIGN状态中,一共有6种输出函数,对应着21种约束路径的选择。输出函数它们分别是:(fu1 or fu2 or fu3 or fu4)=′1′&&coda0=′100′的输出函数、(fu1 or fu2 or fu3 or fu4)=′1′&&codaO=′010′的输出函数、(fu1 or fu2 or fu3 or fu4)=′1′&&coda0=′001′的输出函数、(fu1 or fu2 or fu3 or fu4)=′1′&&coda0=′111′的输出函数、(fu1 or fu2 or fu3 or fu4)='1'&&codaO=else的输出函数、!(fu1 or fu2 or fu3 or fu4)=′1′的输出函数。而由于在作图时将(fu1 or fu2 or fu3 or fu4)=′1′分别用4条独立的线段作为优先一级的路径选择,再和后面的coda0值进行组合,这样就出现了一个4*5=20种的路径约束选择,最后是!(fu1 or fu2 or fu3 or fu4)=′1′的一条路径约束选择,加起来一共21种约束路径可以选择。其中相同始点和终点的路径之间,按照约束判断时优先级的先后顺序从上向下排列,比如优先判断ru1=′1′&&fu1=′O′条件,然后判断ru2=′l′&&fu2=′0′条件。连接到状态转移曲线起点的路径图的终点上面出现了几条连线,就意味着对应该种状态转移有几种输出函数,而所有通过该状态下路径图起点能走到该终点的路径都可以调用对应的输出函数,所以出现了5种输出函数对应21种约束路径的情况。也可以通过约束路径图的其他表示形式调整5种输出函数对应的约束路径,比如调整成5对5的情况,这样画出的路径图就类似状态ANALISI_REQ的路径图样子了。即扩展状态机图中,状态圆圈内路径图的表现形式,可能因对约束条件分析的梳理形式不同,产生不同的路径形式,从而影响遍历时需要考虑的细致程度和路径条数,但本质是一致的。
如图2所示,为扩展状态机图遍历方法的流程图。本流程在一般状态机图中也可以使用,前提条件是所有转移连线上的数字标为一,去除输出函数的选择部分。根据发明内容中描述的对下一状态的选择、对输出函数的选择、对标记数字大于零的状态转移连线的起始状态节点的选择的要求进行选择。遍历过程中,在确定细节且需要产生固定值时:需要产生具体输入信号值时,按照约束条件产生。需要计算输出信号和内部变量时,根据设计的功能计算输出信号和内部变量。
如图3和图4所示,为测试用例自动产生方法的流程图。测试包结构内部包括要产生的输入信号,从设计中传来的内部信号的存储变量,预测的输出信号、约束条件、接受标签的变量等内容。如果遍历时已经记录了状态转移时用的激励包的具体输入信号值,就直接使用该值,如果仅是一种带约束的激励包,即包中只有标签,而没有具体信号值,则在需要例化时,实时产生并加载。在测试包序列中如果出现了不可实现的包,就意味着生成该包时的条件不满足,这种不满足会出现在产生有具体固定值的遍历结果中,也会出现在带约束的测试序列包的实时例化过程中。首先考虑不向遍历结果增加其他激励包,即不修改原来的状态转移的路径,仅调节不可实现包之前各激励包产生的输入信号,以试图满足当前激励包的约束,使不可实现包变为可实现。如果不能成功,则必须在遍历结果中插入其他激励包,修改状态转移的路径,而实时例化遇到不可实现包的时候,必须使用插入其他激励包的方法。插入包的方法,是为了实现该不可实现包要完成的状态转移和其规定的输出函数,所以在当前状态无法实现时,通过增加状态转移的路径,再回到当前状态的方法,使再次回到当前状态时可以满足该转移的要求。为达到可实现的目的而增加的状态转移路径,可以通过复位来完成,也可以不同过复位来完成。
如图5所示,为本发明所述遍历方法和产生测试用例包的一个实施例。图中扩展状态机图,如果按照一般状态机图进行遍历产生的状态转移结果为:INIT-->ANALISI_REQ-->ASSIGN-->ANALISI_REQ;而作为扩展状态机图,根据状态转移曲线上标记的数字和本发明的遍历方法会产生如下的状态转移结果:INIT-->ANALISI_REQ-->ASSIGN-->ANALISI_REQ-->ASSIGN-->…;该结果中ANALISI_REQ-->ASSIGN至少出现5次,保证ANAUSI_REQ内的5种输出函数对应的5种输出约束的路径选择都遍历到;ASSIGN-->ANALISI_REQ至少出现21次,保证ASSIGN内的6种输出函数对应的21种输出约束的路径选择都遍历到。输出函数的种类和输出约束的路径的对应关系已经在图1的实施例中介绍过了。当需要通过ANALISI_REQ状态中的ru1=′1′,fu1=′0′路径进入ASSIGN状态时,产生的带约束的激励包中的标签应该是:TAG_AN2AS(状态转移标签)和TAG_ru1fu1(输出函数选择标签:)。该两个标签对激励包结构内部构成的约束为:(tag_s==TAG_AN2AS &&tag f==TAG_ru1fu1)->(ru1,fu1)=(1,0);
以上内容是结合具体的实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
Claims (10)
1.一种扩展的状态机图及其构建方法,其特征在于包括:
1)状态集合、状态转移集合、状态转移条件集合分别用带有状态名的圆圈、带箭头的曲线、曲线上转移条件的文字表示。
2)收集并分类每个状态中涉及的输入信号、内部变量、输出信号、输出函数。
3)对于每个状态中的每个输出函数,收集和记录实现该输出函数对输入信号和内部变量的要求,以及该输出函数输出时所影响的内部变量与输出信号。
4)将每个状态中的每个输出函数,按照输出后的下一状态分类。即该状态的状态扇出数目为输出函数的分类数目。
5)在每个状态圆圈中,构建影响输出函数选择,由输入信号和内部变量取值约束构成的,具有优先级先后顺序的路径图。
2.如权利要求1所述的扩展状态机图及其构建的方法,其特征在于,所述状态圆圈中的路径图的特征包括:
每个状态有几种下一状态,就有几个路径终点,即该状态的状态扇出数。该路径图上的每一条路径都由一个统一的起点出发,路经该状态所有输入信号和内部变量,最后汇聚到这几个终点中的一个上,形成一条完整的路径。该起点由该状态的扇入状态转移曲线的终点汇合而成。每一条连接到终点的路径都对应着一种输出函数的选择。从起点走到终点的一条完整路径,表示了如果要走到最后连接终点的线路所表示的输出函数,需要经过一路上各相关输入信号和内部变量的约束,随后通过终点对应的状态转移曲线,进入下一个状态。
3.如权利要求1所述的扩展状态机图及其构建的方法,其特征在于,所述状态圆圈中的路径图的特征包括:
在路径上标注通过该路径时对输入信号和内部变量相关的约束条件,包括与多个信号或多个变量相关的组合约束条件,并且同一条路径上相同的约束条件可以合并。根据设计中判断输出函数选择的实际判断条件的优先级高低,从上到下依次排列路径,优先级高的在上面。
4.一种在扩展的状态机图上遍历的方法,其特征在于包括:
1)计算并保存状态机图上任意一个状态到另一个状态中间经过的最少状态路径,即任意两状态间的最短路径。从一个状态到另一个状态,如果是不可达的,最短路径则为无限大。进入第二步。
2)如果从复位后的初始状态存在到某一个状态的最短路径是不可达,停止该方法,打印状态机设计错误信息,否则进入第三步。
3)统计每一个状态到其每种下一个状态可能通过的路径图中的路径种类。并将种类数标记在该状态到其下一状态的状态转移连线上。
4)创建一条路径,增加到遍历路径集合中,以复位后的初始状态节点作为起始节点,进入第5步。
5)如果当前状态节点到任意下一状态节点存在3步中标记的大于零的转移连线,从中选择一个下一状态,并选择一条可以连接到该状态转移的输出函数的约束路径通过,在4步中创建的路径中记录这个状态转移,并将这个转移的连线上标记的数字减一,再以进入的下一状态节点作为当前节点,进入5步骤。如果当前状态节点到任意下一状态节点转移连线上的数字都为零,则进入6步骤。
6)如果状态机图中所有状态之间的转移连线上的数字都不大于零时,则遍历完成,停止该方法,打印所有遍历路径集合中的路径。如果状态机图中状态之间的转移连线上的数字存在大于零的情况时,进入步骤7。
7)如果不存在路径从当前状态节点到任何一个标记的数字还大于零的状态转移连线的起始状态节点,则进入步骤4,建立另一个从复位动作开始的路径。如果存在路径从当前状态节点到一个标记的数字还大于零的状态转移连线的起始状态节点,从所有满足该条件的起始状态节点中选择一个,从步骤1中保存的任意两个可达节点的最短路径中找到当前状态节点到所选大于零的状态转移连线的起始状态节点的最短路径,将该路径记录在遍历路径中,路径中经历的连线上的数字减一。被选择的大于零的连线的起始状态节点作为当前节点,进入步骤5。
5.如权利要求4所述的遍历方法,其特征在于:
先确定下一状态,再确定进入该下一状态的输出函数。
选择下一状态的选择条件按优先级从高到低的排序为:优先选择没有走过的状态转移和状态、选择在当前条件下可实现该状态转移的、选择该状态转移上标记数字大的、选择该状态转移上已减掉的数字小的、选择该状态转移上可实现的输出函数的种类数字大的、随机选择。
选择输出函数时,备选输出函数集合是连接到选定的下一状态的输出函数路径集合。选择的优先级从高到低的排序为:优先选择没有走过的输出函数路径、选择当前条件下可实现的输出函数、选取路径图中判断条件处于较高优先级的路径。
选择标记数字大于零的状态转移连线的起始状态节点时优先级从高到低的排序是:优先选择从当前状态节点到各大于零的状态转移连线的起始状态节点的最短路径中路径长度最短的、选择从该起始状态节点所有状态扇出连线上大于零的数字的总和最大的、选择从当前状态节点到各大于零的状态转移连线的起始状态节点的最短路径中路径上大于零的数字的总和最大的,随机选择。
6.如权利要求4所述的遍历方法,其特征在于:
记录遍历集合中每条路径经过各节点时状态转移的可实现性、选择的输出函数、输入信号与内部变量的约束条件、该输出函数对内部变量值的影响。需要产生具体输入信号值时,按照约束条件产生。需要计算输出信号和内部变量时,根据所选输出函数设计的功能计算输出信号和内部变量。
可实现性的判断由是否可以产生满足该路径选择中所有约束条件的数据为依据
对于选定的状态转移和输出函数,如果输入信号的生成不可实现,则用符合选定状态转移和输出函数的内部变量值替换当时内部变量的实际值,生成输入信号,继续向后计算,同时标记该状态转移的不可实现性。
7.如权利要求4所述的遍历方法,其特征在于:
使用在仅对一般状态机图进行遍历的时候,只需要将所有状态转移曲线上的数字都标记为一,并去除输出函数选择部分。
8.一种基于状态序列自动产生测试用例的方法,其特征在于包括:
1.建立带约束的激励包结构。包结构中包含被测设计的所有输入信号、存储被测设计中传来内部变量的空间、对输出信号预测的函数、产生随机信号的约束条件。包在每次例化时,都要通过标签和加载激励前被测设计中的内部变量值作为参数,对包中产生的输入信号进行约束和选择。包结构还可以接受对输出信号的限制。包中所有要产生的输入信号被定义为位宽一定的随机变量,每次例化时根据约束条件赋予具体的信号值。包中存在一种设定约束条件的机制,该机制包括粗约束和细约束两部分,当只提供测试序列的状态序列信息时只进行粗约束,当同时提供测试序列的状态信息和输出函数信息时,先粗约束再细约束。粗约束根据表示状态转移的标签选择实现该状态转移的约束条件来限制输入信号,细约束根据表示输出函数的标签和对输出值的要求选择该输出函数的约束条件来限制输入信号。约束中包括对输入信号、内部变量、输出信号和输出的内部变量的要求。
2.在每次对设计加载激励时,根据状态转移序列,为激励包的例化提供状态转移标签和输出函数标签,并通过验证平台中的接口,在例化包前,从设计中将内部变量的值读出传入包中,作为影响约束的另一个因素,设定包中约束条件的选择。
3.如果状态序列中保存了每次状态转移时的输入信号值,则直接使用这个保存,建立固定值的激励包序列,即激励包序列中的包里每个输入信号都具有具体值;如果状态序列中没有指明输入信号的具体值,则根据状态序列的状态转移的标签和输出函数选择的标签,建立带约束的激励包序列,这种激励包序列只有在进入被验证的设计之前才确定输入信号的具体值;如果状态序列中只保存了状态节点没有记录输出函数,此时只能根据状态转移的标签限制输入信号,完成状态转移。
4.不插状态点将不可实现的激励包调整为可实现。
4.1从固定值的激励包序列的第一个,依次向后搜索每一个包。向后表示作为激励加载到设计时,加载的时间更晚的包。
4.2如果固定值的激励包序列中出现了不可实现的状态转移或输出函数,这时通过每个包中所选择的输出函数对内部变量的影响,向前寻找序列中离该不可实现包最近的且输出可以影响该不满足条件的内部变量的包。如果找到了,进入4.3步骤。如果没有找到,且4.1步骤的搜索还没有结束,进入4.1步骤。如果没找到,且4.1的搜索已经结束,进入5步骤。如果固定值的激励包序列中没有出现不可实现的状态转移或输出函数,则以固定值的激励包序列作为测试激励。
4.3将不可实现包中对内部变量的要求,作为对该寻找到的包输出值的要求,并以从寻找到的包到不可实现包中间的激励包不能从可实现变为不可实现为约束条件,重新生成该寻找到的包的输入信号值。
4.4如果生成成功,用重新生成的新的输入信号值代替该寻找到的包中原有的输入信号值,再按照不可实现包中的约束条件,重新生成不可实现包中的输入信号,并标记不可实现包为可实现。回到4.1步骤。
4.5如果生成不成功,在该寻找到的包的原有约束中增加对该输出值的要求。
4.5.1如果影响该输出的因素只有输入信号,则停止,保持原有不可实现标记。如果4.1步骤的搜索还没有结束,进入4.1步骤。如果4.1步骤的搜索结束,进入5步骤。
4.5.2如果影响该输出的因素还包括内部变量,则以该寻找到的包作为不可实现包,进入4.2步骤,向前继续寻找,直至寻找完第一个激励包,如果还是无法生成成功,则结束。如果可以生成成功,不可实现包将被标记为可实现并重新生成。如果4.1步骤的搜索还没有结束,进入4.1步骤。如果4.1步骤的搜索结束,进入5步骤。
4.6如果带约束的激励包序列中出现了不可实现的状态转移或输出函数,因为约束的激励包是实时的,不能对以前进入设计的包再修改,所以直接进入5步骤。如果没有出现不可实现的状态转移或输出函数,则正常产生符合约束测试激励。
5.插状态点将不可实现的激励包调整为可实现。:
5.1对于固定值的激励包序列,从第一个或当前的搜索位置向后搜索不可实现包,将找到的不可实现包输入5.2步骤。对于带约束的激励包序列,输入为实时激励产生的不可实现包。如果不存在不可实现包,搜索结束,测试用例产生完毕,如果存在不可实现包,进入5.2步骤。
5.2将该不可实现包实现的状态转移打断。
5.3寻找插入状态点的产生方式
5.3.1如果该状态转移的前一个状态到它自己本身不存在路径:
在状态转移的打断处插入一个复位操作,用宽度优先算法,寻找从复位后的初试状态到被打断的状态转移的前一个状态的所有路径,此时不考虑输出函数的选择问题,路径中间可以出现环路的重复,较先出现的路径为距离较短的路径。进入5.4步骤。
5.3.2如果该状态转移的前一个状态到它自己本身存在路径:
用宽度优先算法,寻找该状态转移的前一个状态到它自己本身的所有路径,此时不考虑输出函数的选择问题,路径中间可以出现环路的重复,较先出现的路径为距离较短的路径。进入5.4步骤。
5.4对先出现的路径,在路径最后一个状态中,加入原有不可实现包中对内部变量的要求作为约束,即用一条环路路径的操作来代替一个状态点,以满足对不可实现包中内部变量的要求,尝试生成一个有具体信号值的激励包序列取代原来的不可实现包,该激励包序列引起的状态转移的路径插入到被打断的位置。如果生成不成功,宽度优先算法向下继续搜索,直到找到为止,如果生成成功,该不可实现包标记为可实现,然后进入5.1步骤。
5.5当运算时间超过预期设定,终止该搜索。报告运算超时。
9.权利要求8所述的测试用例自动产生的方法,其特征在于,插状态点实现步骤中,可以通过人工填写路径的方式取代宽度优先算法的方式产生路径,再按照路径上的约束生成固定值的序列包。如果被打断的状态转移的前一个状态到它自己本身存在路径时,也可以插入从复位后的初试状态到前一个状态的路径。
10.权利要求8所述的测试用例自动产生的方法,其特征在于,对输入信号、输出信号、内部变量,建立临时存储空间,该存储空间采集当前周期的输入信号、执行后的输出信号和内部变量值。在带约束的激励包例化产生下一周期输入信号的具体值时,预测执行后的输出信号和内部变量值,给予一个最低优先级的约束,该约束条件为使存储中表示的二进制位发生尽可能多的跳转变换,即0变1,1变0。所谓最低优先级的约束,即如果该约束使在原有约束条件下本可以产生的输入信号不可以产生,则放弃该约束条件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2013100347385A CN103198012A (zh) | 2013-04-25 | 2013-04-25 | 一种基于扩展状态机图的测试用例自动产生方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2013100347385A CN103198012A (zh) | 2013-04-25 | 2013-04-25 | 一种基于扩展状态机图的测试用例自动产生方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103198012A true CN103198012A (zh) | 2013-07-10 |
Family
ID=48720594
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2013100347385A Pending CN103198012A (zh) | 2013-04-25 | 2013-04-25 | 一种基于扩展状态机图的测试用例自动产生方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103198012A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103500142A (zh) * | 2013-10-12 | 2014-01-08 | 南京大学 | 面向动态Web应用的多目标测试用例优先级测试方法 |
CN105160163A (zh) * | 2015-08-24 | 2015-12-16 | 珠海格力电器股份有限公司 | 一种用于机组的覆盖度测试方法、装置和系统 |
CN106777712A (zh) * | 2016-12-22 | 2017-05-31 | 盛科网络(苏州)有限公司 | 基于线性学习快速提高芯片验证随机回归覆盖率的方法 |
CN107229486A (zh) * | 2016-03-24 | 2017-10-03 | 阿里巴巴集团控股有限公司 | 应用场景确定方法及装置 |
CN108459967A (zh) * | 2018-03-21 | 2018-08-28 | 东南大学 | 基于用户接口状态流图的Web应用测试用例生成方法 |
CN109446146A (zh) * | 2018-11-09 | 2019-03-08 | 中国科学院长春光学精密机械与物理研究所 | 一种应用层通信协议的状态转换序列生成方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1776644A (zh) * | 2005-12-09 | 2006-05-24 | 中兴通讯股份有限公司 | 一种基于有限状态机的对内存变量改写进行监控的方法 |
US20110307872A1 (en) * | 2010-06-15 | 2011-12-15 | Microsoft Corporation | Script debugging |
-
2013
- 2013-04-25 CN CN2013100347385A patent/CN103198012A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1776644A (zh) * | 2005-12-09 | 2006-05-24 | 中兴通讯股份有限公司 | 一种基于有限状态机的对内存变量改写进行监控的方法 |
US20110307872A1 (en) * | 2010-06-15 | 2011-12-15 | Microsoft Corporation | Script debugging |
Non-Patent Citations (1)
Title |
---|
张琛: "基于UML2.0模型的测试与验证方法", 《万方学位论文全文数据库》 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103500142A (zh) * | 2013-10-12 | 2014-01-08 | 南京大学 | 面向动态Web应用的多目标测试用例优先级测试方法 |
CN103500142B (zh) * | 2013-10-12 | 2016-05-04 | 南京大学 | 面向动态Web应用的多目标测试用例优先级测试方法 |
CN105160163A (zh) * | 2015-08-24 | 2015-12-16 | 珠海格力电器股份有限公司 | 一种用于机组的覆盖度测试方法、装置和系统 |
CN105160163B (zh) * | 2015-08-24 | 2019-03-26 | 珠海格力电器股份有限公司 | 一种用于机组的覆盖度测试方法、装置和系统 |
CN107229486A (zh) * | 2016-03-24 | 2017-10-03 | 阿里巴巴集团控股有限公司 | 应用场景确定方法及装置 |
CN106777712A (zh) * | 2016-12-22 | 2017-05-31 | 盛科网络(苏州)有限公司 | 基于线性学习快速提高芯片验证随机回归覆盖率的方法 |
CN108459967A (zh) * | 2018-03-21 | 2018-08-28 | 东南大学 | 基于用户接口状态流图的Web应用测试用例生成方法 |
CN108459967B (zh) * | 2018-03-21 | 2021-04-06 | 东南大学 | 基于用户接口状态流图的Web应用测试用例生成方法 |
CN109446146A (zh) * | 2018-11-09 | 2019-03-08 | 中国科学院长春光学精密机械与物理研究所 | 一种应用层通信协议的状态转换序列生成方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103198012A (zh) | 一种基于扩展状态机图的测试用例自动产生方法 | |
US6099584A (en) | System to fix post-layout timing and design rules violations | |
CN100440480C (zh) | 用于校验受研究系统的完整模型的属性的方法和系统 | |
CN103324774B (zh) | 一种基于时钟规划偏差算法的处理器性能优化方法 | |
CN104657140B (zh) | 代码生成方法及装置 | |
CN104885078A (zh) | 用于大规模并行处理数据库集群中的两阶段查询优化的方法 | |
CN105138802B (zh) | 一种枪管智能设计系统及设计方法 | |
CN102176200A (zh) | 一种软件测试用例自动生成方法 | |
CN105531672A (zh) | 解析器生成 | |
CN104613976A (zh) | 确定路径的方法及装置 | |
CN107402745A (zh) | 数据流图的映射方法及装置 | |
CN112985443B (zh) | 路径规划方法、装置及终端设备 | |
CN102523155B (zh) | 一种基于Boost库的K则最短路径搜索方法和系统 | |
CN108197187A (zh) | 查询语句的优化方法、装置、存储介质和计算机设备 | |
CN104462726B (zh) | 用于反熔丝的现场可编程门阵列的布线方法 | |
CN110490302A (zh) | 一种神经网络编译优化方法、装置以及相关产品 | |
CN112015382B (zh) | 一种处理器构架解析方法、装置、设备及储存介质 | |
Bliek | Generalizing partial order and dynamic backtracking | |
CN103959652A (zh) | 集成电路内的嵌入式存储器和专用处理器结构 | |
CN109542938B (zh) | 一种基于行为规则引导仿真的故障场景自动推理方法 | |
CN104572774A (zh) | 搜索方法及装置 | |
CN102902519B (zh) | 一种基于动态系统实现复合断言计算的方法 | |
CN107608780A (zh) | 一种资源树加载方法、装置及传输网管 | |
CN109766727B (zh) | 智能区块网络构建方法及系统 | |
CN105159835A (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 | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20130710 |
|
WD01 | Invention patent application deemed withdrawn after publication |