发明内容
有鉴于此,本发明目的是在于建立一种基于用户使用流程加权有向图的测试用例自动生成方法及测试方式,使得用户流程测试更加规范,提高软件在流程关联性方面的质量。
为了实现前述发明目的,本发明提供了一种基于用户使用流程加权有向图的测试用例自动生成方法,包括以下步骤: 步骤一、建立用户使用流程明细表;步骤二、建立用户使用流程加权有向图;步骤三、建立使用流程加权有向图的测试用例生成引擎;其中,所述步骤一包括:根据软件的设计建立主要步骤;增加两个固定的步骤:用户进入使用状态的开始步骤start,用户退出使用状态的退出步骤quit;建立上述步骤间的权重和转移条件;建立在每个步骤内改变转移条件;所述建立上述步骤间的权重和转移条件的规则是步骤start根据转移条件可以向其他步骤转移,但其他步骤不可以向步骤start转移,只在行出现;步骤quit不可以向其他步骤转移,但其他步骤根据转移条件可以向步骤quit转移,只在列出现;所述用户使用流程明细表中的表格第一列代表当前步骤,表格最后一列代表当前步骤可改变的权重和转移条件,两者之间用冒号间隔,权重为整数;要求一定要写权重值,可以没有转移条件;当没有转移条件时,冒号可不写;表格倒数第二列表示其他步骤到步骤quit的权重和转移条件,两者之间用冒号间隔,权重为整数;要求一定要写权重值,可以没有转移条件;当没有转移条件时,冒号可不写;表格第一行代表下一个步骤,表格最后一行表示从步骤start到其他步骤的权重和转移条件,两者之间用冒号间隔,权重为整数;要求一定要写权重值,可以没有转移条件;当没有转移条件时,冒号可不写;其他列和行表示除步骤start和步骤quit外的各个步骤相互间跳转的权重和转移条件,两者之间用冒号间隔,权重为整数;要求一定要写权重值,可以没有转移条件;当没有转移条件时,冒号可不写;所述用户使用流程加权有向图具有圆圈作为有向图的节点,表示步骤,圆圈内的名字为步骤名;圆圈间的有向连线作为有向图的边,代表步骤间转移的路径,线上的说明代表两部分内容:权重和转移条件,两者之间用冒号间隔,权重为整数;要求一定要写权重值,可以没有转移条件;当没有转移条件时,冒号可不写;圆圈外的方框代表步骤可改变转移条件的值,方框内的说明代表具体改变转移条件值得情况;无方框代表不需要改变转移条件的值; 加权有向图还具有两个特殊的步骤:start步骤代表用户进入使用;quit步骤代表用户退出使用;所述步骤三把用户使用流程明细表作为输入文件,用户使用步骤的步数作为输入的第二个参数;测试用例脚本作为输出;
所述测试用例生成引擎的具体步骤包括:
步骤S1、按照明细表最后一行最后一列:步骤“start”的“改变条件”说明代码,初始化有向图上所有边的条件的初始值;
步骤S2、记录最后一列其他所有节点的“改变条件”说明代码;
步骤S3、给每个节点可前进的下一个节点从0开始编号,并记录最大编号N、边上权重、转移条件;
步骤S4、设定当前节点为步骤start节点;
步骤S5、任取随机数r,得到r除N的余数n;设置临时变量t=0,遍历每条边的权重w;每经过一条边t=t+w;余数n落入[t, t+w]内,则选这边所指向的节点作为下一步的要去的节点;
步骤S6、判断当前节点与下一步要去的节点之间连线上的边是否满足;若不满足,返回步骤S5,否则跳到步骤S7;
步骤S7、改变当前节点为选取的节点,并改变新的节点条件所要改变的状态,记录到测试用例脚本文件;
步骤S8、自增步骤变量;
步骤S9、判断步骤变量是否达到设定的步数S;若没有达到,返回步骤步骤S5,否则跳到步骤S10;
步骤S10、根据引擎设置,可有两种情况产生:第一种情况,执行当前节点能到退出步骤quit节点的最短路径,把所经过的所有节点都记录到测试用例脚本文件;第二种情况,无论有向图是否有连接,直接跳到步骤S11;
步骤S11、退出用户使用流程。
为了实现前述发明目的,本发明提供了一种基于用户使用流程加权有向图的测试方法,包括以下步骤,步骤一: 建立用户使用流程明细表;步骤二:建立用户使用流程加权有向图;步骤三: 建立测试用例生成引擎;步骤四: 运行测试用例,得到测试结果; 步骤五:评价测试结果,统计路径测试覆盖率;所述步骤一包括:根据软件的设计建立主要步骤;增加两个固定的步骤:用户进入使用状态的开始步骤start,用户退出使用状态的退出步骤quit;建立上述步骤间的权重和转移条件;建立在每个步骤内改变转移条件;所述建立上述步骤间的权重和转移条件的规则是步骤start根据转移条件可以向其他步骤转移,但其他步骤不可以向步骤start转移,只在行出现;步骤quit不可以向其他步骤转移,但其他步骤根据转移条件可以向步骤quit转移,只在列出现;所述用户使用流程明细表中的表格第一列代表当前步骤,表格最后一列代表当前步骤可改变的权重和转移条件,两者之间用冒号间隔,权重为整数;要求一定要写权重值,可以没有转移条件;当没有转移条件时,冒号可不写;表格倒数第二列表示其他步骤到步骤quit的权重和转移条件,两者之间用冒号间隔,权重为整数;要求一定要写权重值,可以没有转移条件;当没有转移条件时,冒号可不写;表格第一行代表下一个步骤,表格最后一行表示从步骤start到其他步骤的权重和转移条件,两者之间用冒号间隔,权重为整数;要求一定要写权重值,可以没有转移条件;当没有转移条件时,冒号可不写;其他列和行表示除步骤start和步骤quit外的各个步骤相互间跳转的权重和转移条件,两者之间用冒号间隔,权重为整数;要求一定要写权重值,可以没有转移条件;当没有转移条件时,冒号可不写;所述用户使用流程加权有向图具有圆圈作为有向图的节点,表示步骤,圆圈内的名字为步骤名;圆圈间的有向连线作为有向图的边,代表步骤间转移的路径,线上的说明代表两部分内容:权重和转移条件,两者之间用冒号间隔,权重为整数;要求一定要写权重值,可以没有转移条件;当没有转移条件时,冒号可不写;圆圈外的方框代表步骤可改变转移条件的值,方框内的说明代表具体改变转移条件值得情况;无方框代表不需要改变转移条件的值; 加权有向图还具有两个特殊的步骤:start步骤代表用户进入使用;quit步骤代表用户退出使用;
所述步骤三把用户使用流程明细表作为输入文件,用户使用步骤的步数作为输入的第二个参数;测试用例脚本作为输出;
所述测试用例生成引擎的具体操作步骤包括:
步骤S1、按照明细表最后一行最后一列:步骤“start”的“改变条件”说明代码,初始化有向图上所有边的条件的初始值;
步骤S2、记录最后一列其他所有节点的“改变条件”说明代码;
步骤S3、给每个节点可前进的下一个节点从0开始编号,并记录最大编号N、边上权重、转移条件;
步骤S4、设定当前节点为步骤start节点;
步骤S5、任取随机数r,得到r除N的余数n;设置临时变量t=0,遍历每条边的权重w;每经过一条边t=t+w;所余数n落入[t, t+w]内,则选这边所指向的节点作为下一步的要去的节点;
步骤S6、判断当前节点与下一步要去的节点之间连线上的边是否满足;若不满足,返回步骤S5,否则跳到步骤S7;
步骤S7、改变当前节点为选取的节点,并改变新的节点条件所要改变的状态,记录到测试用例脚本文件;
步骤S8、自增步骤变量;
步骤S9、判断步骤变量是否达到设定的步数S;若没有达到,返回步骤步骤S5,否则跳到步骤S10;
步骤S10、根据引擎设置,可有两种情况产生:第一种情况,执行当前节点能到退出步骤quit节点的最短路径,把所经过的所有节点都记录到测试用例脚本文件;第二种情况,无论有向图是否有连接,直接跳到步骤S11;
步骤S11、退出用户使用流程。
相较于现有技术,本发明通过先建立用户流程明细表,从而可得到用户流程加权有向图,并可自动生成测试用例,最终实现测试。本发明属于黑盒测试,建立方法简单,测试方式方便灵活,通用性强,可适合各类具有API函数的软件或类CPU指令测试。对不可预测的用户使用流程的测试到问题能力大为增强。
具体实施方式
下面参照附图具体介绍本发明的实施例,图中相同的结构或功能用相同的数字标出。应该指出的是,附图的目的只是便于对本发明具体实施例的说明,不是一种多余的叙述或是对本发明范围的限制。
在实际应用软件时,用户使用根据使用需求、使用环境、使用习惯都不一致,覆盖的路径会很复杂且很难预测,但是,主要的流程出现的概率会稍大一些。为使测试更加符合实际使用,本发明建立了一种基于用户使用流程加权有向图的测试用例自动生成方法及测试方法,使得用户流程测试更加规范更加精确,大幅度提高软件在流程关联性方面的测试质量。
本发明基于用户使用流程加权有向图的测试方法包括以下步骤:
步骤一、建立用户使用流程明细表; 步骤二、以用户使用流程明细表作为数据来源,生成用户流程测试用例; 步骤三、运行测试用例,得到测试结果; 步骤四、评价测试结果,统计路径测试覆盖率:覆盖可结合权重进行分析,按照N步覆盖率进行考察(N为自然数)。
本发明基于用户使用流程加权有向图的测试用例自动生成方法,包括以下步骤:步骤一、建立用户使用流程明细表;步骤二、建立用户使用流程加权有向图;步骤三、建立使用流程加权有向图的测试用例生成引擎。
步骤一、建立用户使用流程明细表的说明:
表1: 用户使用流程明细表
通过步骤一建立用户流程明细表,从而可得到用户流程加权有向图。建立用户使用流程明细表(如表1)的具体方法如下:
1、根据软件的设计建立主要步骤,如软件中的API函数,CPU指令等等;如表1中的三个API函数:create_project, get_project_list, close_project;
2、增加两个固定的步骤:用户进入使用状态的开始步骤(start);用户退出使用状态的退出步骤(quit);
3、建立上述步骤间的权重和转移条件;
规则: 步骤start根据转移条件可以向其他步骤转移,但其他步骤不可以向start转移,只在行出现;
规则: 步骤quit不可以向其他步骤转移,但其他步骤根据转移条件可以向quit转移,只在列出现;
4、建立在每个步骤内改变转移条件;
如果有n个步骤,则建立的使用流程表明细表只有(n+1)行x (n+2)列。如果有100 API等待用户流程测试,则只需10302个单元填充。
用户使用流程明细表的说明:
其中,关于列的说明:表格第一列代表当前步骤,表格最后一列代表当前步骤可改变的权重和转移条件,两者之间用冒号间隔,权重为整数;要求一定要写权重值,可以没有转移条件;当没有转移条件时,冒号可不写;表格倒数第二列表示其他步骤到步骤quit的权重和转移条件,两者之间用冒号间隔,权重为整数;要求一定要写权重值,可以没有转移条件;当没有转移条件时,冒号可不写。
关于行的说明:表格第一行代表下一个步骤,表格最后一行表示从步骤start到其他步骤的权重和转移条件,两者之间用冒号间隔,权重为整数;要求一定要写权重值,可以没有转移条件;当没有转移条件时,冒号可不写。
其他列和行表示除步骤start和步骤quit外的各个步骤相互间跳转的权重和转移条件,两者之间用冒号间隔,权重为整数;要求一定要写权重值,可以没有转移条件;当没有转移条件时,冒号可不写。
步骤二、建立用户使用加权流程图:
虽然用户使用流程路径复杂很难预测,但从一个步骤到下一个步骤的流程路经选择是有限的和有条件的。据此我们可以画出这样的用户使用流程有向图,具体说明请参图1:
1、圆圈作为有向图的节点,表示步骤,圆圈内的名字为步骤名;
2、圆圈间的有向连线作为有向图的边,代表步骤间转移的路径,线上的说明代表两部分内容:权重和转移条件,两者之间用冒号间隔,权重为整数;要求一定要写权重值,可以没有转移条件;当没有转移条件时,冒号可不写;
3、圆圈外的方框代表步骤可改变转移条件的值,方框内的说明代表具体改变转移条件值得情况;无方框代表不需要改变转移条件的值;
4、两个特殊的步骤:start步骤代表用户进入使用;quit步骤代表用户退出使用。
一开始从start步骤进入用户使用流程有向图到最终通过quit步骤退出用户使用流程有向图中间的步骤依据用户的使用需求和习惯选择,这种使用需求和习惯每个用户都是不一致,不可以预测。但本发明通过测试用例生成引擎随机模拟用户使用路径,达到用户使用路径覆盖率测试要求。
步骤三: 建立使用流程加权有向图的测试用例生成引擎:
该引擎采用脚本或者可编译语言实现,其输入和输出如图2所示。把用户使用流程明细表作为输入文件,用户使用步骤的步数作为输入的第二个参数;测试用例脚本作为输出。
该引擎的具体操作流程图如图3所示,按照明细表,要记录的数据有:
{
条件C;
节点列表node:{
当前节点的名称、能改变的条件;
下一步各节点的名称、编号、权重、转移条件;
}
步骤步数S;
}
引擎包括如下步骤:
步骤S1、按照明细表最后一行最后一列:步骤“start”的“改变条件”说明代码,初始化有向图上所有边的条件的初始值;
步骤S2、记录最后一列其他所有节点的“改变条件”说明代码;
步骤S3、给每个节点可前进的下一个节点从0开始编号,并记录最大编号N、边上权重、转移条件;
步骤S4、设定当前节点为步骤start节点;
步骤S5、任取随机数r,得到r除N的余数n;设置临时变量t=0,遍历每条边的权重w;每经过一条边t=t+w;所余数n落入[t, t+w]内,则选这边所指向的节点作为下一步的要去的节点;
步骤S6、判断当前节点与下一步要去的节点之间连线上的边是否满足。若不满足,返回步骤S5,否则跳到步骤S7;
步骤S7、改变当前节点为选取的节点,并改变新的节点条件所要改变的状态,记录到测试用例脚本文件;
步骤S8、自增步骤变量;
步骤S9、判断步骤变量是否达到设定的步数S;若没有达到,返回步骤步骤S5,否则跳到步骤S10;
步骤S10、根据引擎设置,可有两种情况产生:第一种情况,执行当前节点能到退出步骤quit节点的最短路径,把所经过的所有节点都记录到测试用例脚本文件;第二种情况,无论有向图是否有连接,直接跳到步骤S11;
步骤S11、退出用户使用流程。
生成的测试用例脚本包含两部分功能:
a、设置实时断点,一旦有错误,立即退出测试用例脚本;比如每个API函数都必须返回成功,若不成功则可判定为有错误产生;b、记录期望的测试结果(包括路径、每个节点达到的步数),可与运行时得到的实际结果比较。
本发明引擎对使用步骤没有限制,方便灵活生成测试用例。
本发明通过先建立用户流程明细表,从而可得到用户流程加权有向图,并可自动生成测试用例,最终实现测试。本发明属于黑盒测试,建立方法简单,测试方式方便灵活,通用性强,可适合各类具有API函数的软件或类CPU指令测试。对不可预测的用户使用流程的测试到问题能力大为增强。
以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制。任何熟悉本领域的技术人员,在不脱离本发明技术方案范围情况下,利用上述揭示的方法内容对本发明技术方案做出许多可能的变动和修饰,均属于权利要求书保护的范围。