一种测试参数的生成方法及装置与流程

文档序号:21362234发布日期:2020-07-04 04:36阅读:204来源:国知局
一种测试参数的生成方法及装置与流程

本发明涉及金融科技(fintech)领域和软件测试领域,尤其涉及一种测试参数的生成方法及装置。



背景技术:

随着计算机技术的发展,越来越多的技术应用在金融领域,传统金融业正在逐步向金融科技(fintech)转变,但由于金融行业的安全性、实时性要求,也对技术提出的更高的要求。在金融科技的相关软件上线之前,为验证软件的可靠性等,通常要对软件做测试,以及时修复软件漏洞。

软件中会用到各种各样的参数,各参数之间可能存在依赖关系,即一个参数的合法取值范围可能受到另一个参数取值的影响,举例来说,参数一表示月份,参数二表示一个月的天数,显然,参数一取2时,参数二便不能取30。因此在测试生成各参数的具体值时,需要考虑到各参数之间存在依赖关系。为了尽可能减少生成的测试用例,目前常通过对各参数等价类进行划分后,再生成等价类测试,即将软件中各参数的取值范围划分为等价类,基于等价关系的性质,在每个等价类中选择一个具有代表性的元素生成测试参数,便可测试出整个等价类是否有问题。显然,等价类划分对于软件测试来说有重要意义,但目前需要人为分析排查等价类,这无疑会拖延整个测试过程的进度。因此,现有技术中不能自动通过各参数之间的依赖关系生成各等价类的测试参数,这是一个亟待解决的问题。



技术实现要素:

本发明提供一种测试参数的生成方法及装置,解决了现有技术中不能自动通过各参数之间的依赖关系生成各等价类的测试参数的问题。

第一方面,本发明提供一种测试参数的生成方法,包括:获取表征待测各参数之间依赖关系的第一逻辑表达式;所述第一逻辑表达式包括通过蕴含连接词关联的依赖条件和依赖取值,其中,所述依赖条件和所述依赖取值中包括约束各参数的取值范围的各独立命题,或,各独立命题及各独立命题之间的各逻辑连接词;将所述第一逻辑表达式转换为第二逻辑表达式,其中,所述第二逻辑表达式中各蕴含连接词关联的依赖取值仅包含一个独立命题且所述各蕴含连接词的依赖条件中的各独立命题之间符合简单合取式的要求;根据所述第二逻辑表达式确定所述待测各参数的取值范围的各等价类,并生成所述各等价类的测试参数。

上述方法中,获取表征待测各参数之间依赖关系的第一逻辑表达式后,对所述第一逻辑表达式中的依赖条件和依赖取值进行转换,得到第二逻辑表达式,第二逻辑表达式中各蕴含连接词关联的依赖取值仅包含一个独立命题且所述各蕴含连接词的依赖条件中的各独立命题之间符合简单合取式的要求,并进一步得到各等价类,生成各等价类的测试参数,从而提出了一种根据特定形式的第一逻辑表达式转换为特定形式的第二逻辑表达式的方法,并可基于特定形式的第二逻辑表达式确定所述待测各参数的取值范围的各等价类,并生成所述各等价类的测试参数。

可选地,所述将所述第一逻辑表达式转换为第二逻辑表达式,包括:根据预设的等价转换公式,对所述第一逻辑表达式中的依赖取值进行转换处理,得到所述第一逻辑表达式等价转换后的依赖条件及所述第二逻辑表达式中的各依赖取值;所述第一逻辑表达式中的依赖取值进行转换处理后的各蕴含连接词关联的依赖取值仅包含一个独立命题;根据所述等价转换公式,对所述第一逻辑表达式等价转换后的依赖条件转换为简单合取式形式的依赖条件,作为所述第二逻辑表达式中的依赖条件。

上述方法中,先根据预设的等价转换公式,对所述第一逻辑表达式中的依赖取值进行转换处理,使得变换后的逻辑表达式中的各依赖取值仅包含一个独立命题,再根据所述等价转换公式,对所述第一逻辑表达式等价转换后的依赖条件转换为简单合取式形式的依赖条件,从而提出了一种按照特定形式先对所述第一逻辑表达式中的依赖取值进行转换处理,再对所述第一逻辑表达式等价转换后的依赖条件的固定方法,得到特定形式的第二逻辑表达式。

可选地,所述预设的等价变换公式包括:公式一:p->(q∧r)=>(p->q)∧(p->r);公式二:p->(q∨r)=>(p∨(!r))->q;其中,p、q和r均包括至少一个独立命题,且p、q和r中均不包括蕴含连接词;->表示蕴含连接词;∧表示和连接词;∨表示或连接词;!表示非连接词;=>表示等价变换。

上述方法中,公式一给出了第一逻辑表达式中的依赖取值中最外层含或连接词时减少依赖取值中独立命题数目的等价转换方式,公式二给出了第一逻辑表达式中的依赖取值中最外层含与连接词时减少依赖取值中独立命题数目的等价转换方式,从而给出了通过公式一和公式二减少依赖取值中独立命题数目的等价转换方式。

可选地,所述根据离散数学的等价转换公式,对所述第一逻辑表达式等价转换后的依赖条件转换为简单合取式形式的依赖条件,包括:根据所述第一逻辑表达式等价转换后的依赖条件,建立所述第一逻辑表达式等价转换后的依赖条件的表达式树;通过表达式树算法,对所述第一逻辑表达式运用离散数学的等价转换公式,从而将所述第一逻辑表达式等价转换后的依赖条件转换为简单合取式形式的依赖条件。

上述方式下,建立较为直观的所述第一逻辑表达式等价转换后的依赖条件的表达式树,再通过表达式树算法,对所述第一逻辑表达式运用离散数学的等价转换公式,从而提供了一种通过表达式树算法转换得到简单合取式形式的依赖条件的方法。

可选地,所述第一逻辑表达式等价转换后的依赖条件的表达式树是通过表达式树栈和符号栈建立的;所述表达式树栈用于存储所述表达式树;所述符号栈用于存储逻辑连接词或括号;所述根据所述第一逻辑表达式等价转换后的依赖条件,建立所述第一逻辑表达式等价转换后的依赖条件的表达式树,包括:从左往右依次扫描所述第一逻辑表达式等价转换后的依赖条件,针对每次扫描到的扫描单元,对所述扫描单元执行第一预设操作;将对所述第一逻辑表达式等价转换后的依赖条件扫描完毕后得到的表达式树,作为所述第一逻辑表达式等价转换后的依赖条件的表达式树;所述第一预设操作为:若所述扫描单元为独立命题,则压入所述表达式树栈;若所述扫描单元为逻辑连接词,且所述符号栈的栈顶元素不为空且所述逻辑连接词的运算优先级低于或等于所述符号栈的栈顶的逻辑连接词优先级,则从所述表达式树栈弹出两棵表达式树,并将根据所述两棵表达式树及所述扫描单元生成的一颗表达式树,压入所述表达式树栈;若所述扫描单元为逻辑连接词,且所述逻辑连接词的运算优先级高于所述符号栈的栈顶的逻辑连接词优先级或所述符号栈的栈顶元素为空,则将所述扫描单元压入所述符号栈;若所述扫描单元为左括号,则将所述扫描单元压入所述符号栈,若所述扫描单元为右括号,则从所述表达式树栈弹出两棵表达式树,并根据所述符号栈的栈顶逻辑连接词与所述两棵表达式树生成一颗表达式树,将所述表达式树压入所述表达式树栈。

上述方式下,所述第一逻辑表达式等价转换后的依赖条件的表达式树是通过表达式树栈和符号栈建立的;所述表达式树栈用于存储所述表达式树;所述符号栈用于存储逻辑连接词或括号,在定义好的第一预设操作的基础上,从左往右依次扫描所述第一逻辑表达式等价转换后的依赖条件,并针对每次扫描到的扫描单元执行第一预设操作,扫描完毕便能得到的表达式树,从而提供了一种通过表达式树栈和符号栈自动完成表达式树建立的方法。

可选地,所述第一逻辑表达式等价转换后的依赖条件的表达式树为二叉树,其中每个节点对应或连接词,或,与连接词,或独立命题;所述表达式树算法为:针对目标节点,若所述目标节点为所述表达式树的非叶子节点,则执行第二预设操作;所述第二预设操作为:若所述目标节点对应与连接词,且所述目标节点的目标子树的根节点对应或连接词,则将所述目标节点对应于或连接词,将所述目标节点的目标子树的根节点和余子树的根节点均对应于与连接词,并用所述目标节点的余子树替换所述目标节点的目标子树的左子树(或右子树),以及用所述目标节点的余子树和所述目标节点的目标子树中未被替换的子树组成的树替换所述目标节点的余子树,从而更新所述表达式树,并将所述目标节点的目标子树的根节点和余子树的根节点分别重新作为所述目标节点,并返回所述针对目标节点,执行第二预设操作的步骤;若所述目标节点为所述表达式树的叶子节点,则确定所述表达式树符合简单合取式形式;当所述目标节点的目标子树为所述目标节点的左子树时,所述目标节点的余子树为所述目标节点的右子树;当所述目标节点的目标子树为所述目标节点的右子树时,所述目标节点的余子树为所述目标节点的左子树。

上述方式下,第一逻辑表达式等价转换后的依赖条件的表达式树中每个节点对应或连接词,或,与连接词,或独立命题;针对目标节点,若所述目标节点为所述表达式树的非叶子节点,执行第二预设操作,从而更新所述表达式树,直至所述目标节点为所述表达式树的叶子节点,则确定所述表达式树符合简单合取式形式;从而提供了一种通过对表达式树做变换,将所述第一逻辑表达式等价转换后的依赖条件转换为简单合取式形式的实现方法。

可选地,所述待测各参数预设了参数优先级;所述根据所述第二逻辑表达式确定所述待测各参数的取值范围的各等价类,生成所述各等价类的测试参数;包括:针对所述第二逻辑表达式中用或连接词隔开的各小项中每个小项,根据离散数学的等价转换公式,对所述小项进行等价变换,使得所述小项的依赖取值仅包括约束所述小项中参数优先级最低的待测参数的独立命题,并将变换后的逻辑表达式作为第三逻辑表达式;将所述第三逻辑表达式的各小项中每个待测参数的独立命题的真值取真或假时的每一组取值范围,作为所述待测各参数的取值范围的各等价类中的一个等价类;将所述各等价类的每个等价类中的至少一组随机取值,作为所述等价类生成的测试参数。

上述方式下,所述待测各参数预设了参数优先级;针对所述第二逻辑表达式中用或连接词隔开的各小项中每个小项,根据离散数学的等价转换公式,对所述小项进行等价变换,使得所述小项的依赖取值仅包括约束所述小项中参数优先级最低的待测参数的独立命题,并将变换后的逻辑表达式作为第三逻辑表达式;由于每个小项中依赖取值需要在依赖条件下生成,在预设了参数优先级后,保证依赖取值中约束的待测参数优先级小于或等于依赖条件中约束的待测参数,统一了参数的生成顺序,从而避免了各等价类中每个等价类生成测试参数时顺序冲突而发生错乱。

第二方面,本发明提供一种测试参数的生成装置,包括:获取模块,用于获取表征待测各参数之间依赖关系的第一逻辑表达式;所述第一逻辑表达式包括通过蕴含连接词关联的依赖条件和依赖取值,其中,所述依赖条件和所述依赖取值中包括约束各参数的取值范围的各独立命题,或,各独立命题及各独立命题之间的各逻辑连接词;处理模块,用于将所述第一逻辑表达式转换为第二逻辑表达式,其中,所述第二逻辑表达式中各蕴含连接词关联的依赖取值仅包含一个独立命题且所述各蕴含连接词的依赖条件中的各独立命题之间符合简单合取式的要求;以及用于根据所述第二逻辑表达式确定所述待测各参数的取值范围的各等价类,并生成所述各等价类的测试参数。

可选地,所述处理模块具体用于:根据预设的等价转换公式,对所述第一逻辑表达式中的依赖取值进行转换处理,得到所述第一逻辑表达式等价转换后的依赖条件及所述第二逻辑表达式中的各依赖取值;所述第一逻辑表达式中的依赖取值进行转换处理后的各蕴含连接词关联的依赖取值仅包含一个独立命题;根据所述等价转换公式,对所述第一逻辑表达式等价转换后的依赖条件转换为简单合取式形式的依赖条件,作为所述第二逻辑表达式中的依赖条件。

可选地,所述预设的等价变换公式包括:公式一:p->(q∧r)=>(p->q)∧(p->r);公式二:p->(q∨r)=>(p∨(!r))->q;其中,p、q和r均包括至少一个独立命题,且p、q和r中均不包括蕴含连接词;->表示蕴含连接词;∧表示和连接词;∨表示或连接词;!表示非连接词;=>表示等价变换。

可选地,所述处理模块具体用于:根据所述第一逻辑表达式等价转换后的依赖条件,建立所述第一逻辑表达式等价转换后的依赖条件的表达式树;通过表达式树算法,对所述第一逻辑表达式运用离散数学的等价转换公式,从而将所述第一逻辑表达式等价转换后的依赖条件转换为简单合取式形式的依赖条件。

可选地,所述第一逻辑表达式等价转换后的依赖条件的表达式树是通过表达式树栈和符号栈建立的;所述表达式树栈用于存储所述表达式树;所述符号栈用于存储逻辑连接词或括号;所述处理模块具体用于:从左往右依次扫描所述第一逻辑表达式等价转换后的依赖条件,针对每次扫描到的扫描单元,对所述扫描单元执行第一预设操作;将对所述第一逻辑表达式等价转换后的依赖条件扫描完毕后得到的表达式树,作为所述第一逻辑表达式等价转换后的依赖条件的表达式树;所述第一预设操作为:若所述扫描单元为独立命题,则压入所述表达式树栈;若所述扫描单元为逻辑连接词,且所述符号栈的栈顶元素不为空且所述逻辑连接词的运算优先级低于或等于所述符号栈的栈顶的逻辑连接词优先级,则从所述表达式树栈弹出两棵表达式树,并将根据所述两棵表达式树及所述扫描单元生成的一颗表达式树,压入所述表达式树栈;若所述扫描单元为逻辑连接词,且所述逻辑连接词的运算优先级高于所述符号栈的栈顶的逻辑连接词优先级或所述符号栈的栈顶元素为空,则将所述扫描单元压入所述符号栈;若所述扫描单元为左括号,则将所述扫描单元压入所述符号栈,若所述扫描单元为右括号,则从所述表达式树栈弹出两棵表达式树,并根据所述符号栈的栈顶逻辑连接词与所述两棵表达式树生成一颗表达式树,将所述表达式树压入所述表达式树栈。

可选地,所述第一逻辑表达式等价转换后的依赖条件的表达式树为二叉树,其中每个节点对应或连接词,或,与连接词,或独立命题;所述表达式树算法为:针对目标节点,若所述目标节点为所述表达式树的非叶子节点,则执行第二预设操作;所述第二预设操作为:若所述目标节点对应与连接词,且所述目标节点的目标子树的根节点对应或连接词,则将所述目标节点对应于或连接词,将所述目标节点的目标子树的根节点和余子树的根节点均对应于与连接词,并用所述目标节点的余子树替换所述目标节点的目标子树的左子树(或右子树),以及用所述目标节点的余子树和所述目标节点的目标子树中未被替换的子树组成的树替换所述目标节点的余子树,从而更新所述表达式树,并将所述目标节点的目标子树的根节点和余子树的根节点分别重新作为所述目标节点,并返回所述针对目标节点,执行第二预设操作的步骤;若所述目标节点为所述表达式树的叶子节点,则确定所述表达式树符合简单合取式形式;当所述目标节点的目标子树为所述目标节点的左子树时,所述目标节点的余子树为所述目标节点的右子树;当所述目标节点的目标子树为所述目标节点的右子树时,所述目标节点的余子树为所述目标节点的左子树。

可选地,所述待测各参数预设了参数优先级;所述处理模块具体用于:针对所述第二逻辑表达式中用或连接词隔开的各小项中每个小项,根据离散数学的等价转换公式,对所述小项进行等价变换,使得所述小项的依赖取值仅包括约束所述小项中参数优先级最低的待测参数的独立命题,并将变换后的逻辑表达式作为第三逻辑表达式;将所述第三逻辑表达式的各小项中每个待测参数的独立命题的真值取真或假时的每一组取值范围,作为所述待测各参数的取值范围的各等价类中的一个等价类;将所述各等价类的每个等价类中的至少一组随机取值,作为所述等价类生成的测试参数。

上述第二方面及第二方面各个的有益效果,可以参考上述第一方面及第一方面各个的有益效果,这里不再赘述。

第三方面,本发明提供一种计算机设备,包括程序或指令,当所述程序或指令被执行时,用以执行上述第一方面及第一方面各个可选的方法。

第四方面,本发明提供一种存储介质,包括程序或指令,当所述程序或指令被执行时,用以执行上述第一方面及第一方面各个可选的方法。

附图说明

图1为本申请实施例提供的一种测试参数的生成方法的步骤流程示意图;

图2为本申请实施例提供的一种测试参数的生成方法中依赖取值分解的处理过程示意图;

图3为本申请实施例提供的一种测试参数的生成方法中表达式树算法的处理过程示意图;

图4为本申请实施例提供的一种测试参数的生成装置的结构示意图。

具体实施方式

为了更好的理解上述技术方案,下面将结合说明书附图及具体的实施方式对上述技术方案进行详细的说明,应当理解本申请实施例以及实施例中的具体特征是对本申请技术方案的详细的说明,而不是对本申请技术方案的限定,在不冲突的情况下,本申请实施例以及实施例中的技术特征可以相互结合。

下面首先列出本申请实施例中涉及到的名词定义。

待测参数:软件测试过程中的基本测试单元,也是测试生成过程中的基本生成单元。

独立命题:只约束一个待测参数的合法取值范围的命题称为独立命题。如待测参数a>0,只约束了待测参数a。任何命题都是由独立命题通过逻辑连接词连接或复合而成。

逻辑连接词包括以下几种:and(与连接词,可用∧表示),连接两个独立命题,同时满足时取值为真;or(或连接词,可用∨表示),连接两个事件,表示其中一个满足时取值为真;not(非连接词,可用!表示),紧跟一个独立命题,表示该事件不满足时取值为真;->(蕴含连接词),连接两个独立命题,当前者为假,或者前者为真,后者为真时,取值为真。上述依赖表达式的含义为,如果参数a=3,参数b=4,那么,要么参数c=4,要么参数d=4。

待测参数依赖:在测试生成过程中,若一个待测参数a的合法取值范围受到另一个待测参数b取值的影响,则称这两个待测参数存在待测参数依赖。比如一个产品类别这个参数,会影响到产品参数的合法取值范围。其中,影响待测参数a的合法取值范围的待测参数b称为依赖参数。

依赖表达式:表示待测参数间依赖关系的逻辑表达式。举例来说,如(a=3∧b=4)->(c=4∨d=4)。其中,含蕴含连接词的依赖表达式称为蕴含逻辑表达式,仅含一个蕴含连接词的依赖表达式称为独立蕴含表达式,需要说明的是,本申请实施例中,蕴含逻辑表达式中不含复合的蕴含逻辑关系。

依赖条件:一个蕴含逻辑表达式中蕴含连接词左侧的命题,称为这个蕴含逻辑表达式的依赖条件,如(a=3∧b=4)->(c=4∨d=4)中的a=3∧b=4。

依赖取值:一个蕴含逻辑表达式中蕴含连接词右侧的命题,称为这个蕴含逻辑表达式的依赖条件,如(a=3∧b=4)->(c=4∨d=4)中的c=4∨d=4。

在金融机构(银行机构、保险机构或证券机构)在进行业务(如银行的贷款业务、存款业务等)运转过程中,会使用各种各样的金融软件,软件中涉及多个参数,各参数之间可能存在依赖关系。因此软件上线之前,通常要生成软件的测试参数,来实现对软件的测试。目前软件测试中的一个常用方法为等价类测试法,但目前需要人为分析排查等价类。这种情况不符合银行等金融机构的需求,无法保证金融机构各项业务的高效运转。

为此,如图1所示,本申请实施例提供一种测试参数的生成方法。

步骤101:获取表征待测各参数之间依赖关系的第一逻辑表达式。

步骤102:将所述第一逻辑表达式转换为第二逻辑表达式。

步骤103:根据所述第二逻辑表达式确定所述待测各参数的取值范围的各等价类,并生成所述各等价类的测试参数。

步骤101中,所述第一逻辑表达式包括通过蕴含连接词关联的依赖条件和依赖取值,其中,所述依赖条件和所述依赖取值中包括约束各参数的取值范围的各独立命题,或,各独立命题及各独立命题之间的各逻辑连接词。

举例来说,第一逻辑表达式可以为e1->f1,其中,e1为依赖条件,f1为依赖取值。e1、f1均可以包括一个独立命题和多个独立命题。举例来说,e1为(e1∧e2∨e3),e1也可以为e4;f1为(f1∧f2),f1也可以为f3;第一逻辑表达式还可以为e2->f2∧e3->f3;其中,e1、e2、e3、e4、f1、f2、f3均为独立命题。

步骤102中,所述第二逻辑表达式中各蕴含连接词关联的依赖取值仅包含一个独立命题且所述各蕴含连接词的依赖条件中的各独立命题之间符合简单合取式的要求。

也就是说,针对第二逻辑表达式中每个独立蕴含表达式中,独立蕴含表达式的依赖取值仅包含一个独立命题,即仅约束一个参数的取值范围,另外独立蕴含表达式的依赖条件中包括用∨连接的多个小项。举例来说,独立蕴含表达式e4->f4中,e4为e4-1∨e4-2,e4-1和e4-2既可以为一个独立命题,也可以为仅用∧、!连接的复合命题,f4为一个独立命题。第二逻辑表达式每个独立蕴含表达式的形式也称为标准化的蕴含表达式。

举例来说,第二逻辑表达式的形式为:g1->h1∧g2->h2∧g3->h3;g1->h1、g2->h2、g3->h3均为独立蕴含表达式,即g1、h1、g2、h2、g3、h3中均不含蕴含连接词;各独立蕴含表达式中的依赖条件g1、g2、g3中各独立命题之间均符合简单合取式的要求。举例来说,g1为g1-1∧g1-2∨g1-3。

举例来说,第一逻辑表达式为:(a=3∧b=4)->(c=4∨d=4);那么第二逻辑表达式为:

(a=3∧b=4∧c≠4)->(d=4)。

需要说明的是,标准化的依赖表达式也不是唯一的,如表达式也可以表示为:

(a=3∧c≠4∧d≠4)->(b≠4)。

步骤102的一种可选实施方式中,可以按照以下方式执行:

第一步:根据离散数学的等价转换公式,对所述第一逻辑表达式中的依赖取值进行转换处理,得到所述第一逻辑表达式等价转换后的依赖条件及所述第二逻辑表达式中的各依赖取值;所述第一逻辑表达式中的依赖取值进行转换处理后的各蕴含连接词关联的依赖取值仅包含一个独立命题。第一步可以简称为依赖取值分解。

第二步:根据离散数学的等价转换公式,对所述第一逻辑表达式等价转换后的依赖条件转换为简单合取式形式的依赖条件,作为所述第二逻辑表达式中的依赖条件。第二步可以简称为依赖条件分解。

需要说明的是,第一步使得第一逻辑表达式转换后的逻辑表达式中每个独立蕴含表达式的依赖取值为独立命题;第二步使得第一逻辑表达式转换后的逻辑表达式中每个独立蕴含表达式的依赖条件为简单合取式形式。步骤102中得到第二逻辑表达式的过程并不限于上述第一步先进行依赖取值分解,再经过第二步进行依赖条件分解的方法。比如,可以不将独立蕴含表达式的依赖取值化为独立命题,先将独立蕴含表达式的依赖取值化为两个独立命题的独立蕴含表达式,再进行依赖条件分解,再将依赖条件分解后得到的逻辑表达式进行依赖取值分解,只要最终是第二逻辑表达式的形式,具体在步骤102中如何转换的中间过程不做限定。

在第一步的一种可选实施方式中,所述预设的等价变换公式包括:公式一:p->(q∧r)=>(p->q)∧(p->r);公式二:p->(q∨r)=>(p∨(!r))->q;其中,p、q和r均包括至少一个独立命题,且p、q和r中均不包括蕴含连接词;->表示蕴含连接词;∧表示和连接词;∨表示或连接词;!表示非连接词;=>表示等价变换。

对于任何独立蕴含表达式都可以逐层递归运用公式一或公式二,具体过程如图2所示。

首先,确定目标独立蕴含表达式的依赖取值是否存在逻辑连接词;若存在,则获取最外层的第一个不为非连接词的逻辑连接词;如果不存在,则算法结束,目标独立蕴含表达式的依赖取值为独立命题。

最外层的逻辑连接词指目标独立蕴含表达式的依赖取值中运算优先级最低的一个或多个逻辑连接词;目标独立蕴含表达式初始可以为第一逻辑表达式中任一个独立蕴含表达式。

获取最外层的第一个不为非连接词的逻辑连接词后,执行以下步骤:

如果是与连接词(and,∧),则根据公式一,将目标独立蕴含表达式拆分两个子目标逻辑表达式,并将两个子目标独立蕴含表达式分别重新作为目标独立蕴含表达式,返回获取目标独立蕴含表达式的最外层第一个逻辑连接词的步骤,从而进行递归处理。

如果是或连接词(or,∨),则根据公式二,将∨后的式子移动到目标独立蕴含表达式的依赖条件中。

举例来说,如q为复合命题a∧b;按公式一第一次运用得到:(p->a∧b)∧(p->r);再对(p->a∧b)递归处理运用得到:(p->a)∧(p->b)∧(p->r)。

需要说明的是,根据离散数学的等价转换公式,对所述第一逻辑表达式中的依赖取值进行转换处理中的离散数学的等价变换公式也不做限定,只要是与公式一和公式二等价的公式也可以。

举例来说,公式一的等价公式为公式三:

p->q∧r=>!q∨!r->!p;公式三同样可以达到依赖取值分解的目的。

举例来说,公式二的等价公式为公式四:

p->q∨r=>!q∧!r)->!p;公式四同样可以达到依赖取值分解的目的。

需要说明的是,经过第一步的依赖取值分解后,依赖条件将会变得更加复杂,因此需要执行第二步的依赖条件分解,使得第一步得到的依赖条件化为简单合取式的形式。值得一提的是,第一步得到的各独立蕴含表达式中的依赖条件必然不含蕴含连接词,第二步中可以再通过离散数学中的等价变换公式来得到,如可通过公式五得到:(p∨q)∧r=(p∧r)∨(q∧r)。如果p或q或r为复合命题,可再递归处理。

第二步的一种可选实施方式中,可用按照以下方式执行:

步骤(2-1):根据所述第一逻辑表达式等价转换后的依赖条件,建立所述第一逻辑表达式等价转换后的依赖条件的表达式树。

步骤(2-2):通过表达式树算法,对所述第一逻辑表达式运用离散数学的等价转换公式,从而将所述第一逻辑表达式等价转换后的依赖条件转换为简单合取式形式的依赖条件。

具体来说,步骤(2-1)的一种可选实施方式中,所述第一逻辑表达式等价转换后的依赖条件的表达式树是通过表达式树栈和符号栈建立的;所述表达式树栈用于存储所述表达式树;所述符号栈用于存储逻辑连接词或括号;步骤(2-1)执行过程可以如下:

从左往右依次扫描所述第一逻辑表达式等价转换后的依赖条件,针对每次扫描到的扫描单元,对所述扫描单元执行第一预设操作;将对所述第一逻辑表达式等价转换后的依赖条件扫描完毕后得到的表达式树,作为所述第一逻辑表达式等价转换后的依赖条件的表达式树。

其中,所述第一预设操作具体包括(a)~(d):

(a)若所述扫描单元为独立命题,则压入所述表达式树栈。

(b)若所述扫描单元为逻辑连接词,且所述符号栈的栈顶元素不为空且所述逻辑连接词的运算优先级低于或等于所述符号栈的栈顶的逻辑连接词优先级,则从所述表达式树栈弹出两棵表达式树,并将根据所述两棵表达式树及所述扫描单元生成的一颗表达式树,压入所述表达式树栈。

(c)若所述扫描单元为逻辑连接词,且所述逻辑连接词的运算优先级高于所述符号栈的栈顶的逻辑连接词优先级或所述符号栈的栈顶元素为空,则将所述扫描单元压入所述符号栈。

(d)若所述扫描单元为左括号,则将所述扫描单元压入所述符号栈,若所述扫描单元为右括号,则从所述表达式树栈弹出两棵表达式树,并根据所述符号栈的栈顶逻辑连接词与所述两棵表达式树生成一颗表达式树,将所述表达式树压入所述表达式树栈。

举例来说,所述第一逻辑表达式等价转换后的依赖条件为a∧(b∨c)。

第一次扫描:表达式树栈中元素自顶向下为a。

第二次扫描:表达式树栈中元素自顶向下为a;符号栈中元素自顶向下为∧。

第三次扫描:表达式树栈中元素自顶向下为a;符号栈中元素自顶向下为(,∧。

第四次扫描:表达式树栈中元素自顶向下为a,b;符号栈中元素自顶向下为(,∧。

第五次扫描:表达式树栈中元素自顶向下为a,b;符号栈中元素自顶向下为∨(∧。

第六次扫描:表达式树栈中元素自顶向下为a,b,c;符号栈中元素自顶向下为∨(∧。

第七次扫描:表达式树栈中元素自顶向下为a,(b∨c);符号栈中元素自顶向下为∧。

第八次扫描:表达式树栈中元素自顶向下为a∧(b∨c);符号栈中元素自顶向下为空。

具体来说,步骤(2-2)的一种可选实施方式中,所述第一逻辑表达式等价转换后的依赖条件的表达式树为二叉树,其中每个节点对应或连接词,或,与连接词,或独立命题;所述表达式树算法具体为:

针对目标节点,若所述目标节点为所述表达式树的非叶子节点,则执行第二预设操作;若所述目标节点为所述表达式树的叶子节点,则确定所述表达式树符合简单合取式形式。

所述第二预设操作具体为:

若所述目标节点对应与连接词,且所述目标节点的目标子树的根节点对应或连接词,则将所述目标节点对应于或连接词,将所述目标节点的目标子树的根节点和余子树的根节点均对应于与连接词,并用所述目标节点的余子树替换所述目标节点的目标子树的左子树(或右子树),以及用所述目标节点的余子树和所述目标节点的目标子树中未被替换的子树组成的树替换所述目标节点的余子树,从而更新所述表达式树,并将所述目标节点的目标子树的根节点和余子树的根节点分别重新作为所述目标节点,并返回所述针对目标节点,执行第二预设操作的步骤。

上述对于目标节点的处理过程如图3所示,当目标节点对应与连接词,且所述目标节点的目标子树(a和b构成的子树)的根节点对应或连接词,则将所述目标节点对应于或连接词,将所述目标节点的目标子树(a和b构成的子树)的根节点和余子树的根节点(c)均对应于与连接词,并用c替换a(或b),以及用c和所述目标节点的目标子树中未被替换的子树组成的树b(或a)替换所述目标节点的余子树。

当所述目标节点的目标子树为所述目标节点的左子树时,所述目标节点的余子树为所述目标节点的右子树;当所述目标节点的目标子树为所述目标节点的右子树时,所述目标节点的余子树为所述目标节点的左子树。

需要说明的是,上述实施方式实际上是将或连接词(or,∨)的节点对应位置逐渐往上移,直到不存在或连接词(∨)对应的节点在与连接词(∧)对应的节点下面时,得到的表达式树对应的逻辑表达式即为简单合取式形式的逻辑表达式。

在经过步骤101和步骤102得到第二逻辑表达式后,可能会出现待测参数顺序冲突的情况。举例来说,对于两个不同的待测参数,在两个不同的独立蕴含表达式中,分别出现在了依赖条件和依赖取值中,例如第二逻辑表达式为(a=4)->(b=4)∧(b=3)->(a=3),含义为在a=4的依赖条件下取b=4且在b=3的依赖条件下取a=4,也就是说一个要求先生成a另一个要求先生成b,这将导致在生成参数时,先生成参数a和先生成参数b都是不妥的。

为此,在步骤103中,可以通过消去其中的循环来规避上述情况。具体可以任意的为参数设定优先级顺序,并在每一个标准化表达式中,将优先级最低的参数变换至条件表达式的右侧。

步骤103中的一种可选实施方式中,所述待测各参数预设了参数优先级;步骤103具体可以包括:

步骤(3-1):针对所述第二逻辑表达式中用或连接词隔开的各小项中每个小项,根据离散数学的等价转换公式,对所述小项进行等价变换,使得所述小项的依赖取值仅包括约束所述小项中参数优先级最低的待测参数的独立命题,并将变换后的逻辑表达式作为第三逻辑表达式。

步骤(3-2):将所述第三逻辑表达式的各小项中每个待测参数的独立命题的真值取真或假时的每一组取值范围,作为所述待测各参数的取值范围的各等价类中的一个等价类。

步骤(3-3):将所述各等价类的每个等价类中的至少一组随机取值,作为所述等价类生成的测试参数。

例如,参数的优先级顺序为a,b,c,那么,第二逻辑表达式(a=3∧c=3)->(b=4)可以转化为第三逻辑表达式(a=3∧!b=4)->(!c=3);再如第二逻辑表达式(a=4)->(b=4)∧(b=3)->(a=3)可以转化为第三逻辑表达式(a=4)->(b=4)∧(!a=3)->(!b=3),这样以来便不会形成冲突。

另外,步骤(3-2)~步骤(3-3)中,举例来说,第三逻辑表达式为(a=4)->(b=4)∧(!a=3)->(!b=3)时,则(a=4)为真或假;(b=4)为真或假;(!a=3)为真或假;(!b=3)为真或假所组成的共16种取值组合的每一种取值组合变为一个等价类。

在上述实施方式下,通过对待测参数依赖的重新整理,可以更清晰的看出每个待测参数的依赖情况,在后续的自动化测试生成时,可以随时可以知道,当前生成的参数的合法取值与非法取值范围。经过等价类的划分,不需要在测试中生成过多的冗余数据,经过待测参数的优先级设置后,不会因为参数的顺序冲突出现测试参数生成错乱,从而提高测试数据的质量和测试的效率。

如图4所示,本发明提供一种测试参数的生成装置,包括:获取模块401,用于获取表征待测各参数之间依赖关系的第一逻辑表达式;所述第一逻辑表达式包括通过蕴含连接词关联的依赖条件和依赖取值,其中,所述依赖条件和所述依赖取值中包括约束各参数的取值范围的各独立命题,或,各独立命题及各独立命题之间的各逻辑连接词;处理模块402,用于将所述第一逻辑表达式转换为第二逻辑表达式,其中,所述第二逻辑表达式中各蕴含连接词关联的依赖取值仅包含一个独立命题且所述各蕴含连接词的依赖条件中的各独立命题之间符合简单合取式的要求;以及用于根据所述第二逻辑表达式确定所述待测各参数的取值范围的各等价类,并生成所述各等价类的测试参数。

可选地,所述处理模块402具体用于:根据预设的等价转换公式,对所述第一逻辑表达式中的依赖取值进行转换处理,得到所述第一逻辑表达式等价转换后的依赖条件及所述第二逻辑表达式中的各依赖取值;所述第一逻辑表达式中的依赖取值进行转换处理后的各蕴含连接词关联的依赖取值仅包含一个独立命题;根据所述等价转换公式,对所述第一逻辑表达式等价转换后的依赖条件转换为简单合取式形式的依赖条件,作为所述第二逻辑表达式中的依赖条件。

可选地,所述预设的等价变换公式包括:公式一:p->(q∧r)=>(p->q)∧(p->r);公式二:p->(q∨r)=>(p∨(!r))->q;其中,p、q和r均包括至少一个独立命题,且p、q和r中均不包括蕴含连接词;->表示蕴含连接词;∧表示和连接词;∨表示或连接词;!表示非连接词;=>表示等价变换。

可选地,所述处理模块402具体用于:根据所述第一逻辑表达式等价转换后的依赖条件,建立所述第一逻辑表达式等价转换后的依赖条件的表达式树;通过表达式树算法,对所述第一逻辑表达式运用离散数学的等价转换公式,从而将所述第一逻辑表达式等价转换后的依赖条件转换为简单合取式形式的依赖条件。

可选地,所述第一逻辑表达式等价转换后的依赖条件的表达式树是通过表达式树栈和符号栈建立的;所述表达式树栈用于存储所述表达式树;所述符号栈用于存储逻辑连接词或括号;所述处理模块402具体用于:从左往右依次扫描所述第一逻辑表达式等价转换后的依赖条件,针对每次扫描到的扫描单元,对所述扫描单元执行第一预设操作;将对所述第一逻辑表达式等价转换后的依赖条件扫描完毕后得到的表达式树,作为所述第一逻辑表达式等价转换后的依赖条件的表达式树;所述第一预设操作为:若所述扫描单元为独立命题,则压入所述表达式树栈;若所述扫描单元为逻辑连接词,且所述符号栈的栈顶元素不为空且所述逻辑连接词的运算优先级低于或等于所述符号栈的栈顶的逻辑连接词优先级,则从所述表达式树栈弹出两棵表达式树,并将根据所述两棵表达式树及所述扫描单元生成的一颗表达式树,压入所述表达式树栈;若所述扫描单元为逻辑连接词,且所述逻辑连接词的运算优先级高于所述符号栈的栈顶的逻辑连接词优先级或所述符号栈的栈顶元素为空,则将所述扫描单元压入所述符号栈;若所述扫描单元为左括号,则将所述扫描单元压入所述符号栈,若所述扫描单元为右括号,则从所述表达式树栈弹出两棵表达式树,并根据所述符号栈的栈顶逻辑连接词与所述两棵表达式树生成一颗表达式树,将所述表达式树压入所述表达式树栈。

可选地,所述第一逻辑表达式等价转换后的依赖条件的表达式树为二叉树,其中每个节点对应或连接词,或,与连接词,或独立命题;所述表达式树算法为:针对目标节点,若所述目标节点为所述表达式树的非叶子节点,则执行第二预设操作;所述第二预设操作为:若所述目标节点对应与连接词,且所述目标节点的目标子树的根节点对应或连接词,则将所述目标节点对应于或连接词,将所述目标节点的目标子树的根节点和余子树的根节点均对应于与连接词,并用所述目标节点的余子树替换所述目标节点的目标子树的左子树(或右子树),以及用所述目标节点的余子树和所述目标节点的目标子树中未被替换的子树组成的树替换所述目标节点的余子树,从而更新所述表达式树,并将所述目标节点的目标子树的根节点和余子树的根节点分别重新作为所述目标节点,并返回所述针对目标节点,执行第二预设操作的步骤;若所述目标节点为所述表达式树的叶子节点,则确定所述表达式树符合简单合取式形式;当所述目标节点的目标子树为所述目标节点的左子树时,所述目标节点的余子树为所述目标节点的右子树;当所述目标节点的目标子树为所述目标节点的右子树时,所述目标节点的余子树为所述目标节点的左子树。

可选地,所述待测各参数预设了参数优先级;所述处理模块402具体用于:针对所述第二逻辑表达式中用或连接词隔开的各小项中每个小项,根据离散数学的等价转换公式,对所述小项进行等价变换,使得所述小项的依赖取值仅包括约束所述小项中参数优先级最低的待测参数的独立命题,并将变换后的逻辑表达式作为第三逻辑表达式;将所述第三逻辑表达式的各小项中每个待测参数的独立命题的真值取真或假时的每一组取值范围,作为所述待测各参数的取值范围的各等价类中的一个等价类;将所述各等价类的每个等价类中的至少一组随机取值,作为所述等价类生成的测试参数。

本申请实施例提供一种计算机设备,包括程序或指令,当所述程序或指令被执行时,用以执行本申请实施例提供的一种测试参数的生成方法及任一可选方法。

本申请实施例提供一种存储介质,包括程序或指令,当所述程序或指令被执行时,用以执行本申请实施例提供的一种测试参数的生成方法及任一可选方法。

最后应说明的是:本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1