掌桥专利:专业的专利平台
掌桥专利
首页

测试案例的生成方法、装置、设备、介质和程序产品

文献发布时间:2023-06-19 10:57:17


测试案例的生成方法、装置、设备、介质和程序产品

技术领域

本公开涉及软件测试的技术领域,特别是涉及一种测试案例的生成方法、装置、设备、介质和程序产品。

背景技术

随着互联网行业的快速发展,信息化程度越来越高,程序代码的规模呈现增大的趋势,不仅体现在新增代码的数量增多,而且还体现在存量代码的数量也越来越多,使得程序代码的维护和测试都需要投入越来越多的人力成本和时间成本,因此软件测试技术正在向纵深发展,新的效率高的软件测试方法不断涌现,其中具有效率优势的自动化测试方法成为大势所趋,统计表明,现阶段在软件测试的所有开销中,约40%花在测试案例上,包括生成测试数据和检查测试结果。

测试案例的生成是软件测试的基础,无论哪种测试方法,都涉及到这个问题。目前有很多种测试案例生成方法,如遗传算法、随机法、爬山法、探索法、解方程法等,但研究成果离实用还有很大距离。这也是目前制约软件测试技术发展的主要因素之一。目前在国际上所开发的先进软件测试工具中,一般都回避测试案例自动生成这个问题,或者至多能提供半自动生成测试案例的解决方案。

发明内容

有鉴于此,为了至少部分地克服相关技术存在的上述技术问题,提供一种测试案例的自动化生成的解决方案,提高测试案例的生成效率,加速软件测试的技术发展。本公开提供了一种测试案例的生成方法、装置、设备、介质和程序产品。

为了实现上述目标,本公开的一个方面提供了一种测试案例的生成方法,该方法可以包括:获得目标程序的语法树,其中,上述语法树用于描述上述目标程序中程序要素之间的逻辑关系,遍历上述语法树,提取上述程序要素中的目标程序要素,其中,上述目标程序要素包括逻辑判断表达式,以及响应于读取到逻辑判断表达式,构建目标逻辑分支树,以生成上述目标程序的测试案例,其中,上述目标逻辑分支树用于描述上述目标程序的逻辑分支之间的逻辑关系。

根据本公开的实施例,上述逻辑判断表达式包括第一逻辑判断表达式,上述响应于读取到逻辑判断表达式,构建目标逻辑分支树可以包括:响应于读取到第一逻辑判断表达式,检测是否可确定m条第一逻辑分支表达式,其中,m为正整数,且m≥2,若可确定上述m条第一逻辑分支表达式,则检测是否存在初始逻辑分支树,其中,上述初始逻辑分支树配置有n个节点,每个节点配置有初始逻辑分支表达式,若存在上述初始逻辑分支树,则将上述m条第一逻辑分支表达式分别与每个节点配置的初始逻辑分支表达式进行逻辑和运算的运算结果,确定为与上述每个节点对应的m条目标逻辑分支表达式,以及将上述与上述每个节点对应的m条目标逻辑分支表达式配置为与上述每个节点对应的子节点,以构建上述目标逻辑分支树。

根据本公开的实施例,当m=2时,上述响应于读取到第一逻辑判断表达式,检测是否可确定m条第一逻辑分支表达式可以包括:响应于读取到第一逻辑判断表达式,检测是否存在第二逻辑判断表达式,其中,上述第二逻辑判断表达式是与上述第一逻辑判断表达式具有否定逻辑关系的表达式,以及若存在上述第二逻辑判断表达式,则可确定m条第一逻辑分支表达式,其中,上述m条第一逻辑分支表达式包括上述第一逻辑判断表达式和上述第二逻辑判断表达式。

根据本公开的实施例,当m>2时,上述响应于读取到第一逻辑判断表达式,检测是否可确定m条第一逻辑分支表达式可以包括:响应于读取到第一逻辑判断表达式,检测是否存在p个指定运算符,其中,上述p个指定运算符用于分割具有逻辑或关系的p+1条逻辑分支表达式,p为正整数,且p≥2,以及若存在上述p个指定运算符,则可确定m条第一逻辑分支表达式,其中,上述m条第一逻辑分支表达式包括上述p+1条逻辑分支表达式。

根据本公开的实施例,上述方法还可以包括:若不可确定上述m条第一逻辑分支表达式,则获取上述初始逻辑分支树,将上述第一逻辑判断表达式与上述初始逻辑分支表达式进行逻辑和运算的运算结果,确定为与上述每个节点对应的第一目标逻辑分支表达式,将上述初始逻辑分支表达式确定为与上述每个节点对应的第二目标逻辑分支表达式,以及将上述第一目标逻辑分支表达式和上述第二目标逻辑分支表达式配置为与上述每个节点对应的子节点,以构建上述目标逻辑分支树。

根据本公开的实施例,上述方法还可以包括:若不存在上述初始逻辑分支树,则生成根节点,以及将上述m条第一逻辑分支表达式配置为上述根节点的子节点,以构建上述目标逻辑分支树。

为了实现上述目标,本公开的另一个方面提供了一种测试案例的生成装置,该装置可以包括:获得模块,用于获得目标程序的语法树,其中,上述语法树用于描述上述目标程序中程序要素之间的逻辑关系,提取模块,用于遍历上述语法树,提取上述程序要素中的目标程序要素,其中,上述目标程序要素包括逻辑判断表达式,以及构建模块,用于响应于读取到逻辑判断表达式,构建目标逻辑分支树,以生成上述目标程序的测试案例,其中,上述目标逻辑分支树用于描述上述目标程序的逻辑分支之间的逻辑关系。

根据本公开的实施例,上述逻辑判断表达式包括第一逻辑判断表达式,上述构建模块可以包括:第一检测子模块,用于响应于读取到第一逻辑判断表达式,检测是否可确定m条第一逻辑分支表达式,其中,m为正整数,且m≥2,第二检测子模块,用于若可确定上述m条第一逻辑分支表达式,则检测是否存在初始逻辑分支树,其中,上述初始逻辑分支树配置有n个节点,每个节点配置有初始逻辑分支表达式。第一确定子模块,用于若存在上述初始逻辑分支树,则将上述m条第一逻辑分支表达式分别与每个节点配置的初始逻辑分支表达式进行逻辑和运算的运算结果,确定为与上述每个节点对应的m条目标逻辑分支表达式,以及第一配置子模块,用于将上述与上述每个节点对应的m条目标逻辑分支表达式配置为与上述每个节点对应的子节点,以构建上述目标逻辑分支树。

根据本公开的实施例,当m=2时,上述第一检测子模块可以包括:第一检测单元,用于响应于读取到第一逻辑判断表达式,检测是否存在第二逻辑判断表达式,其中,上述第二逻辑判断表达式是与上述第一逻辑判断表达式具有否定逻辑关系的表达式,以及第一确定单元,用于第一逻辑分支表达式若存在上述第二逻辑判断表达式,则可确定m条第一逻辑分支表达式,其中,上述m条第一逻辑分支表达式包括上述第一逻辑判断表达式和上述第二逻辑判断表达式。

根据本公开的实施例,当m>2时,上述第一检测子模块可以包括:第二检测单元,用于响应于读取到第一逻辑判断表达式,检测是否存在p个指定运算符,其中,上述p个指定运算符用于分割具有逻辑或关系的p+1条逻辑分支表达式,p为正整数,且p≥2,以及第二确定单元,用于若存在上述p个指定运算符,则可确定m条第一逻辑分支表达式,其中,上述m条第一逻辑分支表达式包括上述p+1条逻辑分支表达式。

根据本公开的实施例,上述构建模块还可以包括:获取子模块,用于若不可确定上述m条第一逻辑分支表达式,则获取上述初始逻辑分支树,第二确定子模块,用于将上述第一逻辑判断表达式与上述初始逻辑分支表达式进行逻辑和运算的运算结果,确定为与上述每个节点对应的第一目标逻辑分支表达式,第三确定子模块,用于将上述初始逻辑分支表达式确定为与上述每个节点对应的第二目标逻辑分支表达式,以及第二配置子模块,用于将上述第一目标逻辑分支表达式和上述第二目标逻辑分支表达式配置为与上述每个节点对应的子节点,以构建上述目标逻辑分支树。

根据本公开的实施例,上述构建模块还可以包括:生成子模块,用于若不存在上述初始逻辑分支树,则生成根节点,以及第三配置子模块,用于将上述m条第一逻辑分支表达式配置为上述根节点的子节点,以构建上述目标逻辑分支树。

为了实现上述目标,本公开的另一方面提供了一种电子设备,包括:一个或多个处理器,存储器,用于存储一个或多个程序,其中,当上述一个或多个程序被上述一个或多个处理器执行时,使得上述一个或多个处理器实现如上所述的测试案例的生成方法。

为了实现上述目标,本公开的另一方面提供了一种计算机可读存储介质,存储有计算机可执行指令,上述指令在被执行时用于实现如上所述的测试案例的生成方法。

为了实现上述目标,本公开的另一方面提供了一种计算机程序,上述计算机程序包括计算机可执行指令,上述指令在被执行时用于实现如上所述的测试案例的生成方法。

针对现有技术中对海量程序进行自动化测试的需求,本公开提供了一种测试案例的全自动的生成方法,基于树形结构生成全覆盖的测试案例。先把目标程序转换成语法树,通过对语法树的遍历,对所有的逻辑分支进行处理,对于可产生逻辑分支的目标程序要素进行解析,用树形结构来表述目标程序要素中所有的逻辑分支,最终可以构建生成目标逻辑分支树,描述目标程序的逻辑分支之间的逻辑关系,本公开提供的自动化的测试案例的生成方法,与相关技术提供的手动或办自动化的测试案例的生成方法相比,将所有逻辑分支之间的逻辑关系用树结构描述,逻辑关系一目了然,不仅能够覆盖所有逻辑分支,不会遗漏,而且可以提高测试案例的生成效率,进而可以提升软件测试的效率,节省大量人力资源,守护程序质量。

附图说明

通过以下参照附图对本公开实施例的描述,本公开的上述以及其他目的、特征和优点将更为清楚,在附图中:

图1示意性示出了适用于本公开实施例的可以应用测试案例的生成方法和装置的应用场景;

图2示意性示出了根据本公开实施例的测试案例的生成方法的流程图;

图3示意性示出了根据本公开实施例的语法树的后台数据结构示意图;

图4示意性示出了根据本公开实施例的语法树的树结构示意图;

图5示意性示出了根据本公开另一实施例的测试案例的生成方法的流程图;

图6示意性示出了根据本公开另一实施例的测试案例的生成方法生成的逻辑分支树一;

图7示意性示出了根据本公开另一实施例的测试案例的生成方法生成的逻辑分支树二;

图8示意性示出了根据本公开另一实施例的测试案例的生成方法生成的逻辑分支树三;

图9示意性示出了根据本公开另一实施例的测试案例的生成方法生成的逻辑分支树四;

图10示意性示出了根据本公开另一实施例的测试案例的生成方法生成的逻辑分支树五;

图11示意性示出了根据本公开另一实施例的测试案例的生成方法生成的逻辑分支树六;

图12示意性示出了根据本公开实施例的测试案例的生成装置的框图;

图13示意性示出了根据本公开实施例的适于实现上文描述的测试案例的生成方法的计算机可读存储介质产品的示意图;以及

图14示意性示出了根据本公开实施例的适于实现上文描述的测试案例的生成方法的电子设备的框图。

在附图中,相同或对应的标号表示相同或对应的部分。

应该注意的是,附图并未按比例绘制,并且出于说明目的,在整个附图中类似结构或功能的元素通常用类似的附图标记来表示。

具体实施方式

以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。

在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了上述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。

在使用类似于“A、B和C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B和C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。在使用类似于“A、B或C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B或C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。

附图中示出了一些方框图和/或流程图。应理解,方框图和/或流程图中的一些方框或其组合可以由计算机程序指令来实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其他可编程测试案例生成装置的处理器,从而这些指令在由该处理器执行时可以创建用于实现这些方框图和/或流程图中所说明的功能/操作的装置。本公开的技术可以硬件和/或软件(包括固件、微代码等)的形式来实现。本公开的技术可以采取存储有指令的计算机可读存储介质上的计算机程序产品的形式,该计算机程序产品可供指令执行系统使用或者结合指令执行系统使用。

随着互联网行业的快速发展,基于X86架构的开发平台分布式架构日趋成熟,展现了成本可控、弹性伸缩、技术体系开放等优点。原有大型金融机构普遍采用的基于IBM大型机技术的架构体系,亟待向基于X86架构的分布式架构转型。测试案例是测试工作的指导,是软件测试必须遵守的准则,更是软件测试质量稳定的根本保障。测试案例是一个文档,是执行的最小实体。测试案例包括输入、动作、时间和一个期望的结果,其目的是确定应用程序的某个特性是否可正常工作,并且达到程序所设计的结果,以便测试某个程序路径或核实是否满足某个特定需求般在进行测试案例设计前要全面了解被测试产品的功能、明确测试范围(特别是要明确哪些是不需要测试的)、具备基本的测试技术与方法等。测试案例设计一般遵循以下原则:正确性、全面性、连贯性、可判定性和可操作性。

本公开提供了一种测试案例的自动生成方法,包括程序要素的提取阶段和逻辑分支树的构建阶段。在程序要素的提取阶段,获得目标程序的语法树,该语法树用于描述目标程序中程序要素之间的逻辑关系,遍历语法树,以及提取程序要素中的目标程序要素,该目标程序要素包括逻辑判断表达式。在逻辑分支树的构建阶段,响应于读取到逻辑判断表达式,构建目标逻辑分支树,以生成目标程序的测试案例,该目标逻辑分支树用于描述目标程序的逻辑分支之间的逻辑关系。

本公开提供的测试案例的全自动的生成方法,先把目标程序转换成语法树,通过对语法树的遍历,对所有的逻辑分支进行处理,对于可产生逻辑分支的目标程序要素进行解析,用树形结构来表述目标程序要素中所有的逻辑分支,最终可以构建生成目标逻辑分支树,描述目标程序的逻辑分支之间的逻辑关系,本公开提供的自动化的测试案例的生成方法,基于树形结构生成全覆盖的测试案例,与相关技术提供的手动或办自动化的测试案例的生成方法相比,将所有逻辑分支之间的逻辑关系用树结构描述,逻辑关系一目了然,不仅能够覆盖所有逻辑分支,不会遗漏,而且可以提高测试案例的生成效率,进而可以提升软件测试的效率,节省大量测试人力资源,守护程序质量。

需要说明的是,本公开提供的测试案例的生成方法和装置可以用于金融领域中,也可以用于除金融领域之外的任意软件测试领域中。因此,对本公开所提供的测试案例的生成方法和装置的应用领域不做限定。

图1示意性示出了适用于本公开实施例的可以应用测试案例的生成方法和装置的应用场景100。需要注意的是,图1所示仅为可应用本公开实施例的应用场景的示例,以帮助本领域技术人员理解本公开的技术内容,但并不意味着本公开实施例不可以用于其他应用场景。

如图1所示,应用测试案例的生成方法和装置的应用场景100可以包括目标程序110、语法树120以及逻辑分支树130。语法树120是对目标程序110进行转换得到的树结构,用于描述目标程序110中各个程序要素之间的逻辑关系。逻辑分支树130是基于语法树120构建的树结构,用于描述目标程序110中各个逻辑分支之间的逻辑关系。

图1中所示的语法树120包括1个根节点(程序要素A)、2个分支节点和4个叶子节点。其中2个分支节点分别是分支节点(程序要素B1)和分支节点(程序要素B2),4个叶子节点分别是叶子节点(程序要素C11)、叶子节点(程序要素C12)、叶子节点(程序要素C21)以及叶子节点(程序要素C22)。分支节点(程序要素B1)和分支节点(程序要素B2)分别为根节点(程序要素A)的左子节点和右子节点。需要说明的是,分支节点由于还有子节点,也可以被称为非终端节点,叶子节点由于没有子节点,也可以被称为终端节点。从语法树120所示的树形结构可以看出,分支节点作为非终端节点,其本身既为根节点的子节点,又为叶子节点的父节点。例如,分支节点(程序要素B1)既为根节点(程序要素A)的子节点,又为叶子节点(程序要素C11)和叶子节点(程序要素C12)的父节点,而叶子节点(程序要素C11)和叶子节点(程序要素C12)分别为分支节点(程序要素B1)的左子节点和右子节点。分支节点(程序要素B2)既为根节点(程序要素A)的子节点,又为叶子节点(程序要素C21)和叶子节点(程序要素C22)的父节点,而叶子节点(程序要素C21)和叶子节点(程序要素C22)分别为分支节点(程序要素B2)的左子节点和右子节点。

图1中所示的逻辑分支树130包括1个根节点、2个分支节点和4个叶子节点。其中2个分支节点分别是分支节点(a>0 and b<100)和分支节点(a>0 and c=50),4个叶子节点分别是叶子节点(a>30 and b<100)、叶子节点(0<a≤30 and b<100)、叶子节点(a>30 and c=50)以及叶子节点(0<a≤30 and c=50)。分支节点(a>0 and b<100)和分支节点(a>0 and c=50)分别为根节点的左子节点和右子节点。如前所述,分支节点由于还有子节点,也可以被称为非终端节点,而叶子节点由于没有子节点,也可以被称为终端节点。从逻辑分支树130的树形结构可以看出,分支节点作为非终端节点,其本身既为根节点的子节点,又为叶子节点的父节点。例如,分支节点(a>0 and b<100)既为根节点的子节点,又为叶子节点(a>30 and b<100)和叶子节点(0<a≤30 and b<100)的父节点,而叶子节点(a>30 and b<100)和叶子节点(0<a≤30 and b<100)分别为分支节点(a>0and b<100)的左子节点和右子节点。分支节点(a>0 and c=50)既为根节点的子节点,又为叶子节点(a>30 and c=50)和叶子节点(0<a≤30 and c=50)的父节点,而叶子节点(a>30 and c=50)和叶子节点(0<a≤30 and c=50)分别为分支节点(a>30 and c=50)的左子节点和右子节点。需要说明的是,图1中所示的语法树和逻辑分支树的树形结构仅仅是示意性的。根据目标程序的实际情况,可以具有与程序逻辑对应的语法树和逻辑分支树,本公开对此不做限定。

图2示意性示出了根据本公开实施例的测试案例的生成方法的流程图。如图2所示,该生成方法200可以包括操作S210~操作S230。

在操作S210,获得目标程序的语法树。

根据本公开的实施例,语法树用于描述目标程序中程序要素之间的逻辑关系。程序要素可以包括程序要素名和程序要素类型,程序要素名可以包括但不限于A程序、通讯区定义、通讯区a1、通讯区a2、A的MAIN函数、函数A1、函数A2、SQL1、表达式1、SQL_SELECT1、TABLE1、TABLE1_ITEM1以及TABLE1_ITEM2。

可以理解的是,语法树是程序要素结构的图形表示,它代表了程序要素之间逻辑关系的推导结果,有利于理解程序要素的语法结构的层次。本领域技术人员可以根据目标程序的实际情况,选择相应的转换方法,实现目标程序到语法树的转换,此处将不再赘述其细节。

在操作S220,遍历语法树,提取程序要素中的目标程序要素。

根据本公开的实施例,把目标程序转换成一个树形结构的语法树之后,在该树形结构中,可以提取出目标程序要素,该目标程序要素可以是产生逻辑分支的逻辑表达式。在本公开中,逻辑判断表达式指的是与程序要素类型对应的表达式。程序要素类型可以是if语句,也可以是while语句,还可以是for语句。

在操作S230,响应于读取到逻辑判断表达式,构建目标逻辑分支树,以生成目标程序的测试案例。

根据本公开的实施例,目标逻辑分支树用于描述目标程序的逻辑分支之间的逻辑关系。基于目标程序中目标程序要素找到的所有逻辑判断的表达式,就能找到目标程序中所有的逻辑分支。在存在多条逻辑判断表达式的情况下,只要读取到逻辑判断表达式,就可以基于该逻辑判断表达式,构建目标逻辑分支树。

根据本公开的实施例,针对每条逻辑判断表达式,可以转换成等价的如下格式(.and.and..)or(.and.and..)or...or(.and.and..)。每条逻辑判断表达式,如果可以用or分割开来,那么分割后的多个逻辑分支表达式则互为兄弟节点。

根据本公开的实施例,目标程序中顺序执行的两条逻辑判断表达式,在目标逻辑分支树中,在后执行的逻辑判断表达式作为在前执行的逻辑判断表达式的子节点存在,并且与在前执行的逻辑判断表达式进行逻辑和(and)运算。

通过本公开的实施例,先把目标程序转换成语法树,通过对语法树的遍历,对所有的逻辑分支进行处理,对于可产生逻辑分支的目标程序要素进行解析,用树形结构来表述目标程序要素中所有的逻辑分支,最终可以构建生成目标逻辑分支树,描述目标程序的逻辑分支之间的逻辑关系,本公开提供的自动化的测试案例的生成方法,与相关技术提供的手动或办自动化的测试案例的生成方法相比,将所有逻辑分支之间的逻辑关系用树结构描述,逻辑关系一目了然,不仅能够覆盖所有逻辑分支,不会遗漏,而且可以提高测试案例的生成效率,进而可以提升软件测试的效率,节省大量人力资源,守护程序质量。

根据前述实施例,将目标程序A转换成用于描述该目标程序A中各个程序要素之间的逻辑关系的语法树,该语法树由多个树节点组装而成,多个树节点可以包括1个根节点、若干个分支节点和叶子节点,其中每个树节点配置有程序要素名以及对应的程序要素类型。

图3示意性示出了根据本公开实施例的语法树的后台数据结构示意图。如图3所示,后台数据结构300可以包括在后台保存的程序要素表310和源程序表320。程序要素表310包含源程序名、程序要素类型、程序要素名、节点ID、父节点ID以及源程序ID。源程序表320包含源程序ID、源程序名、应用名、应用ID以及源程序所在目录。

图4示意性示出了根据本公开实施例的语法树的树结构示意图。

如图4所示,该语法树400配置有十三个树节点,包括一个根节点411,五个分支节点(分别是421、422、433、441和451)以及七个叶子节点(分别是431、432、434、442、452、461和462),其中每个树节点都包含程序要素名和程序要素类型,例如根节点411对应的程序要素名为A程序,对应的程序要素类型为EGL(Enterprise Generation Language,业务编程语言)程序,其余每个树节点对应的程序要素名以及对应的程序要素类型如图4中的语法树400所示,此次不再赘述。由树结构的特点可知根节点作为整个语法树的开端节点,其只有子节点,而没有父节点,叶子节点作为分支节点的终端节点,其只有父节点,而没有子节点,任意一个分支节点作为根节点与叶子节点之间的非终端节点,既有子节点又有父节点,例如分支节点421既有子节点(叶子节点431和叶子节点432)又有父节点(根节点411),属于同一个父节点的多个子节点互为兄弟节点。

根据本公开的实施例,在得到如图4所示的语法树400之后,通过遍历该语法树,对所有的逻辑分支进行处理,对于可产生逻辑分支的程序要素类型为表达式进行解析,就可以用另外一棵具有树形结构的逻辑分支树来描述A程序所有的逻辑分支,最终得到A程序构建的逻辑分支树。具体的逻辑分支树的构建方式详细描述如下。

根据本公开的实施例,根据第一逻辑判断表达式对应的语句类型不同,可以确定出不同数量的第一逻辑分支表达式,例如可以确定出一条第一逻辑分支表达式,也可以确定出两条第一逻辑分支表达式,还可以确定出两条以上的第一逻辑分支表达式。根据确定出的第一逻辑分支表达式的数量不同,逻辑分支树的构建方式也有所不同。

作为一种可选的实施例,逻辑判断表达式包括第一逻辑判断表达式,前述操作S230(响应于读取到逻辑判断表达式,构建目标逻辑分支树)可以包括:响应于读取到第一逻辑判断表达式,检测是否可确定m条第一逻辑分支表达式,m为正整数且m≥2。若可确定m条第一逻辑分支表达式,则检测是否存在初始逻辑分支树,初始逻辑分支树配置有n个节点,每个节点配置有初始逻辑分支表达式。若存在初始逻辑分支树,则将m条第一逻辑分支表达式分别与每个节点配置的初始逻辑分支表达式进行逻辑和运算的运算结果,确定为与每个节点对应的m条目标逻辑分支表达式。将与每个节点对应的m条目标逻辑分支表达式配置为与每个节点对应的子节点,以构建目标逻辑分支树。

根据本公开的实施例,在根据读取到的第一逻辑判断表达式确定出两条以上的第一逻辑分支表达式之后,还要检测是否已经生成了初始逻辑分支树,若已经生成了初始逻辑分支树,则表明第一逻辑判断表达式为在后执行的逻辑判断表达式,则可以将两条以上的第一逻辑分支表达式分别与初始逻辑分支树的每个节点配置的初始逻辑分支表达式进行逻辑和运算,将运算结果配置为与每个节点对应的子节点。

通过本公开的实施例,可以在第一逻辑判断表达式可确定出至少两条第一逻辑分支表达式,且存在初始逻辑分支树的情况下,将至少两条第一逻辑分支表达式和初始逻辑分支树的每个节点配置的初始逻辑分支表达式进行逻辑和运算,构建目标逻辑分支树,可以提高案例生成的效率。

作为一种可选的实施例,响应于读取到第一逻辑判断表达式,检测是否可确定m条第一逻辑分支表达式可以包括:响应于读取到第一逻辑判断表达式,检测是否存在第二逻辑判断表达式,第二逻辑判断表达式是与第一逻辑判断表达式具有否定逻辑关系的表达式,以及若存在第二逻辑判断表达式,则可确定m条第一逻辑分支表达式,m条第一逻辑分支表达式包括第一逻辑判断表达式和第二逻辑判断表达式。

根据本公开的实施例,第一逻辑判断表达式对应if语句,其逻辑分支表达式为a,第二逻辑判断表达式可以为与if语句对应的else语句,else语句相当于对if语句取逻辑“否”,其逻辑分支表达式为a的否定表达式。例如,第一逻辑判断表达式为a>30,第二逻辑判断表达式为a≤30。

通过本公开的实施例,可以在存在第二逻辑判断表达式的情况下,将第一逻辑判断表达式和第二逻辑判断表达式确定为2条第一逻辑分支表达式,构建目标逻辑分支树,可以提高测试案例生成的效率。

作为一种可选的实施例,当m>2时,响应于读取到第一逻辑判断表达式,检测是否可确定m条第一逻辑分支表达式可以包括:响应于读取到第一逻辑判断表达式,检测是否存在p个指定运算符,p个指定运算符用于分割具有逻辑或关系的p+1条逻辑分支表达式,p为正整数,且p≥2,以及若存在p个指定运算符,则可确定m条第一逻辑分支表达式,m条第一逻辑分支表达式包括p+1条逻辑分支表达式。

根据本公开的实施例,指定运算符可以为or,若第一逻辑判断表达式可以转换为等价的用p个指定运算符分割的p+1条逻辑分支表达式,则m条第一逻辑分支表达式包括p+1条逻辑分支表达式。例如,第一逻辑判断表达式转换为(A and B)or(C and D)or(E andF),则2个指定运算符or分割开来3条逻辑分支表达式,分别是A and B、C and D和E and F。

通过本公开的实施例,在第一逻辑判断表达式可确定出2条以上第一逻辑分支表达式,且存在初始逻辑分支树的情况下,将2条以上的第一逻辑分支表达式和初始逻辑分支树的每个节点配置的初始逻辑分支表达式进行逻辑和运算,确定为初始逻辑分支树中配置的每个节点配置的p+1个子节点,将确定出的p+1个子节点,添加到初始逻辑树中,以构建目标逻辑分支树,可以提高测试案例生成的效率。

作为一种可选的实施例,方法还可以包括:若不可确定m条第一逻辑分支表达式,则获取初始逻辑分支树,将第一逻辑判断表达式与初始逻辑分支表达式进行逻辑和运算的运算结果,确定为与每个节点对应的第一目标逻辑分支表达式,将初始逻辑分支表达式确定为与每个节点对应的第二目标逻辑分支表达式,以及将第一目标逻辑分支表达式和第二目标逻辑分支表达式配置为与每个节点对应的子节点,以构建目标逻辑分支树。

根据本公开的实施例,第一逻辑判断表达式对应if语句,其逻辑分支表达式为a,该if语句没有对应的else语句,则相当于else语句直接继承了父节点。第一逻辑判断表达式对应while语句,本公开将其简化处理,分为进入循环和不进入循环两种情况,即类似于if语句,但是该if语句没有对应的else语句的情况。

首先获取初始逻辑分支树,然后,根据初始逻辑分支树和确定出的1条第一逻辑分支表达式,确定为初始逻辑分支树中配置的每个节点配置的两个子节点。具体实施时,一个子节点是第一目标逻辑分支表达式,该第一目标逻辑分支表达式是将第一逻辑判断表达式与初始逻辑分支表达式进行逻辑和运算得到的运算结果,而另一个子节点是第二目标逻辑分支表达式,该第二目标逻辑分支表达式是初始逻辑分支树中配置的初始逻辑分支表达式。

通过本公开的实施例,在第一逻辑判断表达式仅可确定出1条第一逻辑分支表达式的情况下,根据初始逻辑分支树和确定出的1条第一逻辑分支表达式,确定为初始逻辑分支树中配置的每个节点配置的两个子节点,将确定出的两个子节点,添加到初始逻辑树中,以构建目标逻辑分支树,可以提高测试案例生成的效率。

作为一种可选的实施例,方法还可以包括:若不存在初始逻辑分支树,则生成根节点,以及将m条第一逻辑分支表达式配置为根节点的子节点,以构建目标逻辑分支树。

根据本公开的实施例,若不存在初始逻辑分支树,则表明第一逻辑判断表达式为目标程序中最先执行的逻辑判断表达式,则先配置根节点,然后将第一逻辑判断表达式确定出的m条第一逻辑分支表达式配置为根节点的子节点。需要说明的是,此时m条第一逻辑分支表达式包括前述p+1条逻辑分支表达式,或者第一逻辑判断表达式和第二逻辑判断表达式。

图5示意性示出了根据本公开另一实施例的测试案例的生成方法的流程图。如图5所示,该方法500可以包括操作S510~操作S570。

开始后,在操作S510,扫描程序库,生成目标程序的语法树。其中目标程序为程序库中的任一程序。在操作S520,遍历语法树,找到所有的逻辑判断表达式。在操作S530,对每个逻辑判断表达式进行必要转换,使得转换后都符合(.and.and..)or.and.and..)or。在操作S540,生成逻辑分支树的根节点。在操作S550,顺序处理每一个逻辑判断表达式。在操作S560,按照既定原则,根据当前逻辑判断表达式,生成逻辑分支树的新一层叶子节点。需要说明的是,既定原则包括:用一个空节点来表示逻辑分支树的根节点,将目标程序中第一个出现的逻辑判断表达式作为根节点的子节点。每个逻辑判断表达式,都要转换成等价的多个逻辑判断分支表达式,即逻辑判断子表达式。分割后的多个逻辑判断分支表达式,若用“or”进行分割,则多个逻辑判断分支表达式互为兄弟节点。针对顺序执行的在前执行的逻辑判断表达式和在后执行的逻辑判断表达式,在后执行的逻辑判断表达式作为在前执行的逻辑判断表达式的子节点,且与在前执行的逻辑判断表达式执行“and”运算。针对if语句对应的逻辑判断表达式,检测是否存在否定逻辑关系的分支表达式,若存在,则转换成等价的2个逻辑判断分支表达式。若不存在,则if语句直接继承父节点。针对while语句对应的逻辑判断表达式,本公开将其简化处理,分为进入循环和不进入循环两种情况,即类似于if语句,但不存在否定逻辑关系的分支表达式“else”的处理方式。最后在操作S570,判断是否为最后一个表达式。若是,则结束逻辑分支树的构建。若否,则重新执行操作S550~操作S570,直到判断结果表明为最后一个表达式为止。

以下将以本公开提供的测试案例的生成方法,结合将程序A进行转换生成的如图3所示的语法树,如何对可以产生逻辑分支的程序要素,即逻辑表达式(如下所示的一段程序代码)进行解析,最终生成逻辑分支树的整个流程进行详细阐述,以期本领域的技术人员能够依照本公开的技术方案精神,对其他可以产生逻辑分支的程序要素进行解析,生成对应的逻辑分支树。整个流程包括如下所述的三个部分。

第一部分:把目标程序A转换为语法树,如图3所示,由于语法树是本领域技术人员可以根据实际情况自由选择的技术,在本公开中对此该不展开讨论其细节。

第二部分:遍历转换得到的语法树,找到目标程序A中所有涉及逻辑判断的表达式。具体实施时,从程序A转换得到的语法树中提取的逻辑表达式如下所示。本公开涉及逻辑判断表达式指的是目标程序代码中包含的逻辑判断表达式,这些逻辑判断表达式是区分目标程序代码中不同逻辑分支的关键语句。需要说明的是,本公开选择语法树出于以下几个原因:第一,语法树能识别出特点的程序要素。第二,语法树包含程序代码的所有信息,不会遗漏。第三,语法树的遍历算法是成熟的。

具体实施时,根据目标程序A的语法树可以找出所有涉及逻辑判断的逻辑判断表达式,包括与if语句对应的(a>0 and(b<100 or c=50),与if语句对应的a>30和else,以及与while语句对应的d>5。

第三部分:基于上述找出的所有逻辑判断表达式,可以生成逻辑分支树。具体地在找出所有逻辑判断表达式之后,对其进行后续处理,可以确定与每条逻辑判断表达式对应的逻辑分支表达式,按照各个逻辑判断表达式的执行先后顺序,可以依次与每条逻辑判断表达式对应的逻辑分支表达式配置为当前逻辑分支树的新增节点,最终构建得到目标程序的目标逻辑分支树。

以下详细描述根据上述逻辑分支树的配置原则,构建目标逻辑分支树的过程。需要说明的是,图6~图11依次示意性示出了根据本公开另一实施例的测试案例的生成方法在不同阶段的目标逻辑分支树。其中,图6示意性示出了根据本公开另一实施例的测试案例的生成方法生成的逻辑分支树一。图7示意性示出了根据本公开另一实施例的测试案例的生成方法生成的逻辑分支树二。图8示意性示出了根据本公开另一实施例的测试案例的生成方法生成的逻辑分支树三。图9示意性示出了根据本公开另一实施例的测试案例的生成方法生成的逻辑分支树四。图10示意性示出了根据本公开另一实施例的测试案例的生成方法生成的逻辑分支树五。图11示意性示出了根据本公开另一实施例的测试案例的生成方法生成的逻辑分支树六。需要说明的是,新构建的目标逻辑分支树是在之前已经构建好的目标逻辑分支树的基础上构建出来的。

第一步:可以配置一个根节点。

第二步:读取前述目标程序代码中第一个出现的逻辑判断表达式“a>0 and(b<100 or c=50)”,对其进行逻辑分支的等价转换,形成用“or”加以分割的逻辑分支“(a>0and b<100)or(a>0 and c=50)”,由此可以得到两个逻辑分支表达式,分别为逻辑分支表达式“a>0 and b<100”以及逻辑分支表达式“a>0 and c=50”,将分割得到的2个逻辑分支表达式均配置为根节点的子节点。需要说明的是,由于多个逻辑分支表达式作为子节点,它们具有共同的父节点,即已经配置好的根节点,所以由第一个出现的逻辑判断表达式分割得到的多个逻辑分支表达式作为逻辑分支树中位于根节点下处于同一层级的子节点,互为兄弟节点,在本公开中将基于第一个出现的逻辑判断表达式为逻辑分支树配置的树节点称为第一级树节点。如图6所示,此时生成的逻辑分支树配置有一个根节点以及两个第一级树节点,其中两个第一级树节点包括逻辑分支表达式为“a>0 and b<100”的子节点以及逻辑分支表达式为“a>0 and c=50”的子节点。

第三步:读取前述目标程序代码中第二个出现的逻辑判断表达式“a>30”,检测是否存在与“a>30”存在否定逻辑关系逻辑分支,由于存在“else”这一逻辑分支语句,其相当于对“a>30”取逻辑“非”运算,因此可以确定存在第二逻辑判断表达式,由此可以得到两个逻辑分支表达式,分别为第二个出现的逻辑判断表达式“a>30”以及第二逻辑判断表达式“a≤30”。由于已经存在逻辑分支树,所以需要将确定的这两个逻辑分支表达式分别和已经存在的逻辑分支树中配置的第一级树节点(逻辑分支表达式“a>0 and b<100”以及“a>0and c=50”)进行逻辑“和”运算,来确定最终配置给每个第一级树节点的子节点。如图7所示,将第一级树节点中的逻辑分支表达式“a>0 and b<100”与第二个出现的逻辑判断表达式“a>30”进行逻辑“和”运算,将第一级树节点中的逻辑分支表达式“a>0 and b<100”与第二逻辑判断表达式“a≤30”进行逻辑“和”运算,将第一级树节点中的逻辑分支表达式“a>0 and c=50”与第二个出现的逻辑判断表达式“a>30”进行逻辑“和”运算,以及将第一级树节点中的逻辑分支表达式“a>0 and c=50”与第二逻辑判断表达式“a≤30”进行逻辑“和”运算,可以得到如图8所示的逻辑“和”运算的运算结果,分别是将第一级树节点中的逻辑分支表达式“a>0 and b<100”与第二个出现的逻辑判断表达式“a>30”进行逻辑“和”运算得到的逻辑分支表达式“a>30 and b<100”,将第一级树节点中的逻辑分支表达式“a>0 and b<100”与第二逻辑判断表达式“a≤30”进行逻辑“和”运算得到的逻辑分支表达式“0<a≤30 and b<100”,将第一级树节点中的逻辑分支表达式“a>0 and c=50”与第二个出现的逻辑判断表达式“a>30”进行逻辑“和”运算得到的逻辑分支表达式“a>30and c=50”,以及将第一级树节点中的逻辑分支表达式“a>0 and c=50”与第二逻辑判断表达式“a≤30”进行逻辑“和”运算得到的逻辑分支表达式“0<a≤30 and c=50”,将上述运算得到的四个逻辑分支表达式作为运算结果,分别配置为两个第一级树节点的子节点,每个第一级树节点配置两个子节点,得到如图8所示的逻辑分支树,此时生成的逻辑分支树配置有一个根节点、两个第一级树节点以及四个第二级树节点,其中四个第二级树节点包括逻辑分支表达式为“a>30 and b<100”的子节点、逻辑分支表达式为“0<a≤30 and b<100”的子节点、逻辑分支表达式为“a>30 and c=50”的子节点以及逻辑分支表达式为“0<a≤30 and c=50”的子节点。可以看出,图8所示的逻辑分支树除了包括如图6所示的一个根节点和两个第一级树节点之外,还包括新增的四个第二级树节点。

第四步:读取前述目标程序代码中第三个出现的逻辑判断表达式“b>70”,检测是否存在与第三个出现的逻辑判断表达式“b>70”具有否定逻辑关系逻辑分支,由于不存在“else”这一逻辑分支语句,因此可以确定第三个出现的逻辑判断表达式不存在否定逻辑关系逻辑分支,则配置给每个第二级树节点的两个子节点,一个子节点是第一目标逻辑分支表达式,该第一目标逻辑分支表达式是将第三个出现的逻辑判断表达式“b>70”与第二级树节点对应的逻辑分支表达式进行逻辑“和”运算得到的运算结果,而另一个子节点是第二目标逻辑分支表达式,该第二目标逻辑分支表达式是与第二级树节点对应的逻辑分支表达式。如图9所示,将第三个出现的逻辑判断表达式“b>70”与第二级树节点“a>30 and b<100”进行逻辑“和”运算,确定与第二级树节点“a>30 and b<100”对应的第一目标逻辑分支表达式,与第二级树节点“a>30 and b<100”对应的第二目标逻辑分支表达式继承第二级树节点的表达式“a>30 and b<100”。针对第二树节点“0<a≤30 and b<100”、“a>30and c=50”以及“0<a≤30 and c=50”,可以按照相同的方式确定与每个第二级树节点对应的一条第一目标逻辑分支表达式和一条第二目标逻辑分支表达式,共计四条第一目标逻辑分支表达式和四条第二目标逻辑分支表达式,将确定出的四条第一目标逻辑分支表达式和四条第二目标逻辑分支表达式分别配置为四个第二级树节点的子节点,每个第二级树节点配置两个子节点,得到如图10所示的逻辑分支树,此时生成的逻辑分支树配置有一个根节点、两个第一级树节点、四个第二级树节点以及八个第三级树节点,其中八个第三级树节点包括逻辑分支表达式为“a>30 and 70<b<100”的子节点、逻辑分支表达式为“a>30and b<100”的子节点、逻辑分支表达式为“0<a≤30 and 70<b<100”的子节点、逻辑分支表达式为“0<a≤30 and b<100”的子节点、逻辑分支表达式为“a>30 and c=50 andb>70”的子节点、逻辑分支表达式为“a>30 and c=50”的子节点、逻辑分支表达式为“0<a≤30 and c=50 and b>70”的子节点、以及逻辑分支表达式为“0<a≤30 and c=50”的子节点。可以看出,图10所示的逻辑分支树除了包括如图8所示的一个根节点、两个第一级树节点以及四个第二级树节点之外,还包括新增的八个第三级树节点。

第五步:读取前述目标程序代码中第四个出现的逻辑判断表达式“d>5”,检测是否存在与第四个出现的逻辑判断表达式“d>5”具有否定逻辑关系逻辑分支,由于不存在与while语句对应的否定逻辑分支语句,因此可以确定第四个出现的逻辑判断表达式不存在否定逻辑关系逻辑分支,则配置给每个第三级树节点的两个子节点,一个子节点是第一目标逻辑分支表达式,该第一目标逻辑分支表达式是将第四个出现的逻辑判断表达式“d>5”与第三级树节点对应的逻辑分支表达式进行逻辑“和”运算得到的运算结果,而另一个子节点是第二目标逻辑分支表达式,该第二目标逻辑分支表达式是与第三级树节点对应的逻辑分支表达式。可以按照第四步相同的方式确定与每个第三级树节点对应的一条第一目标逻辑分支表达式和一条第二目标逻辑分支表达式,共计八条第一目标逻辑分支表达式和八条第二目标逻辑分支表达式,将确定出的八条第一目标逻辑分支表达式和八条第二目标逻辑分支表达式分别配置为八个第二级树节点的子节点,每个第三级树节点配置两个子节点,得到如图11所示的逻辑分支树,此时生成的逻辑分支树配置有一个根节点、两个第一级树节点、四个第二级树节点、八个第三级树节点以及十六个第四级树节点。可以看出,图11所示的逻辑分支树除了包括如图10所示的一个根节点、两个第一级树节点、四个第二级树节点以及八个第三级树节点之外,还包括新增的十六个第四级树节点。

本公开的实施例可以基于树形的数据结构为目标程序代码自动化生成全覆盖的测试案例,通过遍历程序语法树,,可以确保提取出目标程序所有的逻辑判断表达式,即实现逻辑分支的全覆盖,避免遗漏,同时所有逻辑分支的自动提取方式,可以提高测试案例的生成效率,提升软件程序的测试效率,可以节省大量人力资源,守护程序质量。

图12示意性示出了根据本公开实施例的测试案例的生成装置的框图。如图12所示,该装置1200可以包括获得模块1210、提取模块1220以及构建模块1230。

获得模块1210,用于获得目标程序的语法树,该语法树用于描述目标程序中程序要素之间的逻辑关系。可选地,获得模块1210例如可以用于执行图2描述的操作S210,在此不再赘述。

提取模块1220,用于遍历语法树,提取程序要素中的目标程序要素,其中,目标程序要素包括逻辑判断表达式。可选地,提取模块1220例如可以用于执行图2描述的操作S220,在此不再赘述。

构建模块1230,用于响应于读取到逻辑判断表达式,构建目标逻辑分支树,以生成目标程序的测试案例,该目标逻辑分支树用于描述目标程序的逻辑分支之间的逻辑关系。可选地,构建模块1230例如可以用于执行图2描述的操作S230,在此不再赘述。

作为一种可选的实施例,前述逻辑判断表达式包括第一逻辑判断表达式,前述构建模块1230可以包括:第一检测子模块,用于响应于读取到第一逻辑判断表达式,检测是否可确定m条第一逻辑分支表达式,其中,m为正整数,且m≥2;第二检测子模块,用于若可确定前述m条第一逻辑分支表达式,则检测是否存在初始逻辑分支树,其中,前述初始逻辑分支树配置有n个节点,每个节点配置有初始逻辑分支表达式;第一确定子模块,用于若存在前述初始逻辑分支树,则将前述m条第一逻辑分支表达式分别与每个节点配置的初始逻辑分支表达式进行逻辑和运算的运算结果,确定为与前述每个节点对应的m条目标逻辑分支表达式;以及第一配置子模块,用于将前述与前述每个节点对应的m条目标逻辑分支表达式配置为与前述每个节点对应的子节点,以构建前述目标逻辑分支树。

作为一种可选的实施例,当m=2时,前述第一检测子模块可以包括:第一检测单元,用于响应于读取到第一逻辑判断表达式,检测是否存在第二逻辑判断表达式,其中,前述第二逻辑判断表达式是与前述第一逻辑判断表达式具有否定逻辑关系的表达式;以及第一确定单元,用于第一逻辑分支表达式若存在前述第二逻辑判断表达式,则可确定m条第一逻辑分支表达式,其中,前述m条第一逻辑分支表达式包括前述第一逻辑判断表达式和前述第二逻辑判断表达式。

作为一种可选的实施例,当m>2时,前述第一检测子模块可以包括:第二检测单元,用于响应于读取到第一逻辑判断表达式,检测是否存在p个指定运算符,其中,前述p个指定运算符用于分割具有逻辑或关系的p+1条逻辑分支表达式,p为正整数,且p≥2;以及第二确定单元,用于若存在前述p个指定运算符,则可确定m条第一逻辑分支表达式,其中,前述m条第一逻辑分支表达式包括前述p+1条逻辑分支表达式。

作为一种可选的实施例,前述构建模块1230还可以包括:获取子模块,用于若不可确定前述m条第一逻辑分支表达式,则获取前述初始逻辑分支树;第二确定子模块,用于将前述第一逻辑判断表达式与前述初始逻辑分支表达式进行逻辑和运算的运算结果,确定为与前述每个节点对应的第一目标逻辑分支表达式;第三确定子模块,用于将前述初始逻辑分支表达式确定为与前述每个节点对应的第二目标逻辑分支表达式;以及第二配置子模块,用于将前述第一目标逻辑分支表达式和前述第二目标逻辑分支表达式配置为与前述每个节点对应的子节点,以构建前述目标逻辑分支树。

作为一种可选的实施例,前述构建模块1230还可以包括:生成子模块,用于若不存在前述初始逻辑分支树,则生成根节点;以及第三配置子模块,用于将前述m条第一逻辑分支表达式配置为前述根节点的子节点,以构建前述目标逻辑分支树。

需要说明的是,测试案例的生成装置的部分实施例中各模块的实施方式、解决的技术问题、实现的功能、以及达到的技术效果分别与测试案例的生成方法部分各实施例中各对应的步骤的实施方式、解决的技术问题、实现的功能、以及达到的技术效果相同或类似,在此不再赘述。

根据本公开的实施例的模块、子模块、单元中的任意多个、或其中任意多个的至少部分功能可以在一个模块中实现。根据本公开实施例的模块、子模块、单元中的任意一个或多个可以被拆分成多个模块来实现。根据本公开实施例的模块、子模块、单元中的任意一个或多个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FNGA)、可编程逻辑阵列(NLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式的硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,根据本公开实施例的模块、子模块、单元中的一个或多个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。

例如,获得模块、提取模块、构建模块、第一检测子模块、第二检测子模块、第一确定子模块、第一配置子模块、获取子模块、第二确定子模块、第三确定子模块、第二配置子模块、生成子模块、第三配置子模块、第一检测单元、第一确定单元、第二检测单元以及第二确定单元可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本公开的实施例,获得模块、提取模块、构建模块、第一检测子模块、第二检测子模块、第一确定子模块、第一配置子模块、获取子模块、第二确定子模块、第三确定子模块、第二配置子模块、生成子模块、第三配置子模块、第一检测单元、第一确定单元、第二检测单元以及第二确定单元中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FNGA)、可编程逻辑阵列(NLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,获得模块、提取模块、构建模块、第一检测子模块、第二检测子模块、第一确定子模块、第一配置子模块、获取子模块、第二确定子模块、第三确定子模块、第二配置子模块、生成子模块、第三配置子模块、第一检测单元、第一确定单元、第二检测单元以及第二确定单元中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。

图13示意性示出了根据本公开实施例的适于实现上文描述的测试案例的生成方法的计算机可读存储介质产品的示意图。

在一些可能的实施方式中,本发明的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在设备上运行时,程序代码用于使设备执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施例的测试案例的生成方法中的前述各项操作(或步骤)。例如,电子设备可以执行如图2中所示的操作S210~操作S230。电子设备也可以执行如图5中所示的操作S510~操作S570。

程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、系统或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(ENROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。

如图13所示,描述了根据本发明的实施方式的测试案例的生成方法的程序产品1300,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在设备,例如个人电脑上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、系统或者器件使用或者与其结合使用。

可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、系统或者器件使用或者与其结合使用的程序。可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、有线、光缆,RF等等,或者上述的任意合适的组合。

可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,程序设计语言包括面向对象的程序设计语言-诸如Java,C++等,还包括常规的过程式程序设计语言-诸如“C”,语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络——包括局域网(LAA)或广域网(WAA)一连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。

图14示意性示出了根据本公开实施例的适于实现上文描述的测试案例的生成方法的电子设备的框图。图14示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。

如图14所示,根据本公开实施例的电子设备1400包括处理器1401,其可以根据存储在只读存储器(ROM)1402中的程序或者从存储部分1408加载到随机访问存储器(RAM)1403中的程序而执行各种适当的动作和处理。处理器1401例如可以包括通用微处理器(例如CNU)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC)),等等。处理器1401还可以包括用于缓存用途的板载存储器。处理器1401可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。

在RAM 1403中,存储有电子设备1400操作所需的各种程序和数据。处理器1401、ROM 1402以及RAM 1403通过总线1404彼此相连。处理器1401通过执行ROM 1402和/或RAM1403中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,所述程序也可以存储在除ROM 1402和RAM 1403以外的一个或多个存储器中。处理器1401也可以通过执行存储在所述一个或多个存储器中的程序来执行根据本公开实施例图2中所示的操作S210~操作S230,或者也可以执行如图5中所示的操作S510~操作S570。

根据本公开的实施例,电子设备1400还可以包括输入/输出(I/O)接口1405,输入/输出(I/O)接口1405也连接至总线1404。系统1400还可以包括连接至I/O接口1405的以下部件中的一项或多项:包括键盘、鼠标等的输入部分1406;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分1407;包括硬盘等的存储部分1408;以及包括诸如LAA卡、调制解调器等的网络接口卡的通信部分1409。通信部分1409经由诸如因特网的网络执行通信处理。驱动器1410也根据需要连接至I/O接口1405。可拆卸介质1411,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1410上,以便于从其上读出的计算机程序根据需要被安装入存储部分1408。

根据本公开的实施例,根据本公开实施例的方法流程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读存储介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1409从网络上被下载和安装,和/或从可拆卸介质1411被安装。在该计算机程序被处理器1401执行时,执行本公开实施例的系统中限定的上述功能。根据本公开的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。

本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的测试案例的生成方法,包括图2中所示的操作S210~操作S230。电子设备也可以执行如图5中所示的操作S510~操作S570。

根据本公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(ENROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。例如,根据本公开的实施例,计算机可读存储介质可以包括上文描述的ROM 1402和/或RAM 1403和/或ROM 1402和RAM 1403以外的一个或多个存储器。

附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。

以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目标,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。

相关技术
  • 测试案例的生成方法、装置、设备、介质和程序产品
  • 测试案例生成方法、数据生成方法、装置、设备及介质
技术分类

06120112740793