CN113238932A - 测试用例自动生成方法 - Google Patents

测试用例自动生成方法 Download PDF

Info

Publication number
CN113238932A
CN113238932A CN202110480682.0A CN202110480682A CN113238932A CN 113238932 A CN113238932 A CN 113238932A CN 202110480682 A CN202110480682 A CN 202110480682A CN 113238932 A CN113238932 A CN 113238932A
Authority
CN
China
Prior art keywords
node
test
path
data
count
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
CN202110480682.0A
Other languages
English (en)
Other versions
CN113238932B (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.)
Southwest Electronic Technology Institute No 10 Institute of Cetc
Original Assignee
Southwest Electronic Technology Institute No 10 Institute of Cetc
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 Southwest Electronic Technology Institute No 10 Institute of Cetc filed Critical Southwest Electronic Technology Institute No 10 Institute of Cetc
Priority to CN202110480682.0A priority Critical patent/CN113238932B/zh
Publication of CN113238932A publication Critical patent/CN113238932A/zh
Application granted granted Critical
Publication of CN113238932B publication Critical patent/CN113238932B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3692Test management for test results analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

发明公开的一种自动生成测试用例的测试方法,测试效率高,适应性强,复用性高。本发明通过下述技术方案实现:在基于工作流的测试模型将状态图测试模型转换至二叉状态树,并在此基础上结合边界值及等价类,提取用户输入的表达式或者用户根据自己需求定义的表达式中的参数及其判定条件;运用图的遍历算法获取测试模型中存在的目标路径,遍历所有状态至状态的边,分别得到二叉状态树中所有结点的序列表,通过边界值与等价类分析其取值得出测试项,对用户定义的表达式进行解析,获取出参数的判定条件,生成判定条件所对应的取值,自动生成测试用例,最后根据生成的测试用例进行反向验证,判断用例是否正确。

Description

测试用例自动生成方法
技术领域
本发明涉及软件测试领域的模型测试,如流程图、判定表、状态转化图。用户正确搭建好模型后,能够自动生成测试用例。辅助测试人员完成测试工作。
背景技术
随着科技的进步,软件的发展。各式各样的软件融入人们的日常生活中。在大量软件出现的今天,也对软件本身提出更高的安全性和稳定性。一款软件在上线前夕,需要进行大量的测试,以便提升软件的质量。软件测试这一环节在软件开发周期中不可缺。然而软件测试却花费软件开发超过一半的成本。软件测试是一个非常耗费资源的活动,其中比较重要的工作就是找一组合适的测试集合进行测试,以此达到测试目的。因此利用软件测试用例自动生成技术来降低软件开发成本并提高软件开发效率就变得至关重要。软件测试中常用的模型测试,如流程图、判定表、状态转化图。用户正确搭建好模型后,能够自动生成测试用例。辅助测试人员完成测试工作。软件测试数据生成在软件系统开发费用中占很大比重。如果该过程能自动实现,则会极大地减少软件开发的周期和费用。目前测试人员面临的问题是找到额外的测试数据测定没有被覆盖的程序元素,如何找到合适的数据测试未被覆盖的语句(称为节点)或者条件,需要程序员有丰富的编程经验,往往需要花费很多时间,从而增加了软件开发的整体开销。由于当前软件系统的不断扩大,手工生成测试案例既不科学、也不现实,这就需要基于模型测试的方法,给出其自动生成测试用例的扩展有限状态机。实现测试用例自动生成技术将大大改变以往靠直觉、经验生成测试用例的传统做法,无疑将使软件测试的效率显著提高。测试用例的生成工作是指用户建立好模型选定被测任务,定义好需要的参数的类型,步进等相关信息,最后生成合适的参数取值组合也即为测试用例。模型测试的思想,主要使用的测试方法有:等价类划分法、边界值分析法。等价类划分法顾名思义,等价类划分,就是将测试的范围划分成几个互不相交的子集,他们的并集是全集,从每个子集选出若干个有代表性的值作为测试用例。等价类的划分,最关键的是子集的划分。实际上,非数字还可以继续划分子集:字母,特殊字符。边界值分析法针对各种边界情况设计测试用例,可以查出更多的错误。选出的测试用例。
随着软件行业的快速发展,软件测试的作用也越来越大,自动化测试用例生成方法也越来越多。如何找到一种高效的测试用例生成算法,一直是测试领域关注的热点。目前大部分的测试用例都由测试人员或开发人员手动录入。开发人员对软件了解程度,导致了看待问题的局限性,用例不具备太大价值,也不能从客观的角度看待问题。测试人员编写测试用例时,往往因为依据文档的不一致性,或测试人员本身经验的不充分,使得用例价值也大打折扣。有时花费大量的时间和精力也得不出一个较好的用例。设计测试用例时,也存在测试用例的设计过程不规范的问题。同时,设计的用例的输出结果的正确性(即根据测试输入数据得到测试的输出数据)还需要通过人工结合需求进行判定来保证。手工编写测试用例占用了测试人员的大部分测试时间,加上被测件版本迭代导致测试用例的维护成本也较高。因此,如何更加快速的创建测试用例,并使得软件在开发过程中也与测试相结合,是目前软件测试的重要挑战。基于模型测试的用例自动生成方法,能够去掉传统手工录入测试用例的工作,简化测试的流程。并且开发人员在编写软件时,也能够使用,并验证程序的目的是否与预期相符合。而且,传统的软件测试,往往需要有一定的代码基础,才能开展测试。使得测试与开发脱节。而往往,软件的缺陷随着时间的推移是一个正比的过程。如果在软件上线前,才发现在软件需求的理解出现了错误,那么其后果是不可估量的。因此为了提升软件测试效率,使得测试能够在软件开发初期便进行介入。
(1)测试用例的设计与软件开发明显脱节,测试效率低下。测试用例的设计与软件开发,往往都是分开进行。测试人员在拿到测试任务,并设计测试用例后,发现实际软件实际内容与开发需求明细不符,并且在用例执行过程中可能会发现其它问题,导致用例需要重新设计,并再次执行。使得测试人员需要重复劳动,并且效率低下。
(2)测试用例手动设计,限制了测试人员的思维。往往测试用例的本身难度不大,但数量较多。测试人员为了完成工作,没有进一步思考软件问题的根源,不一定能够提出有效的建议和总结问题的本质。测试用例自动生成,能够大量减少枯燥和无意义测试用例的设计,使得测试人员有时间与精力发现软件问题的本质,提出有价值的测试用例。软件的复杂度逐渐提升,用户对复杂系统的可靠性要求逐步提高。对自动化测试的需求也更加急切。
(3)软件的复杂度逐渐提升,用户对复杂系统的可靠性要求逐步提高。对自动化测试的需求也更加急切,而模型测试可以被用到软件生命周期的各个方面,如系统设计、验证、代码生成等。通过模型实现从代码到测试软件开发过程的过渡,能够节省软件开发的费用和时间。
将测试用例生成方法和B/S架构结合。使得多个用户能够同时开展测试工作。并且在后台对构建模型时的数据,生成的测试用例数据进行管理。使得测试数据具有可追踪性和恢复性。
发明内容
本发明针对现有技术存在的不足之处,提供一种测试效率高和自动化程度高,应用范围广,适应性强,复用性高的自动生成相对应的测试用例的测试方法。
本发明解决现有技术问题所采用的方案是:一种测试用例自动生成方法,其特征在于:在网页上在线编辑流程图,判定表,状态转换图,获取基于工作流的测试模型,并对工作流、判断表、状态转换图进行数据结构的定义,用于前后端数据之间的交互,后端获取数据后,将状态图测试模型转换至二叉状态树,并在此基础上结合边界值及等价类,提取用户输入的表达式“count==0||(count!=1&&count!=0)”中的参数’count’及其判定条件‘==’,‘!=’,‘||’,‘&&’。用户可以根据自己的需求,定义类似的表达式;运用图的遍历算法获取测试模型中存在的目标路径,依次对二叉状态树中每个结点均做一次访问,遍历所有状态至状态的边,按访问结点的先后次序将结点排列起来,分别得到二叉状态树中所有结点的序列表,通过边界值与等价类分析其取值得出测试项。对用户定义的表达式进行解析,获取出参数的判定条件,并运用边界值,等价类生成判定条件所对应的取值,自动生成测试用例,最后根据生成的测试用例进行反向验证,判断自动生成的用例是否正确。
本发明相比于现有的技术具有如下有益效果:
本发明基于测试模型的测试可以让测试工作提前开展,在软件开发初期,就能避免错误,带来回报。同时,自动生成用例不仅能对完整测试流程提供支持,其本身也是支持尽早测试和连续测试的手段,在回归测试的过程中,使用该方法能大幅度减少测试人员的工作量,快速发现版本迭代后带来的问题。而测试模型测试可以被用到软件生命周期的各个方面,如系统设计、验证、代码生成等。通过测试模型实现从代码到测试软件开发过程的过渡,能够节省软件开发的费用和时间。
本发明针对测试用例的设计与软件开发明显脱节,测试效率低下。采用自动生成测试用例的方法,用户在网页上在线编辑流程图,判定表,状态转换图,并实时生成测试用例基于工作流程图,判定表,状态转换等多种测试方式,在此基础上结合边界值及等价类的思想,提取用户输入表达式中的参数及其判定条件,最后自动生成测试用例,减少了测试人员在用例编写所花费的时间,解决了多个测试人员相互协作时带来的干扰。使得测试人员能够将时间投入到软件更深层次的问题中。能够在测试人员拿到测试任务与需求后,快速将需求中描述的功能项中的处理流程搭建未状态模型。就算后期需求发生变动,也只需要对模型进行修改。使得测试人员不需要重复劳动,大大提升效率。
本发明基于该测试用例自动生成与B/S架构相结合,利用B/S结构不断成熟的WWW浏览器技术,结合浏览器的多种Script语言(VBScript、JavaScript…)和ActiveX技术,用通用浏览器就实现了原来需要复杂专用软件才能实现的强大功能,并节约了开发成本。将基于模型的测试用例自动生成方法和B/S架构结合。使得多个用户能够同时开展测试工作。并且在后台对构建模型时的数据,生成的测试用例数据进行管理。使得测试数据具有可追踪性和恢复性。将基于模型的测试用例自动生成方法和B/S架构结合,使得多个用户能够同时开展测试工作,充分利用现在PC机的硬件优势和网络的稳定性,将逻辑处理合理分担到客户机和服务器,减轻服务器负担,能实现更加好的功能。将大量的事务逻辑工作放在服务器端,而在Browser端只有很少的事务逻辑。这样对前端计算机的硬件要求降低了。并且在后台对构建模型时的数据,生成的测试用例数据进行管理。使得测试数据具有可追踪性和恢复性。解决了多个测试人员相互协作时带来的干扰。使得测试人员能够将时间投入到软件更深层次的问题中。
试用结果表明,该方法性能稳定、通用性好、可靠性高,自动化程度高,应用范围广,适应性强,复用性高,不仅替代了手工生成用例,而且性能更加优越。生成的测试用例本身不会出现问题。
附图说明
图1是用户输入的表达式转换至二叉状态树的示意图;
图2是测试模型中的一种典型的状态转换示意图;。
图3是图2生成的状态转换树的示意图。
下面结合附图和实施实例对本发明进一步说明。
具体实施方式
参阅图1。根据本发明,在网页上在线编辑流程图,判定表,状态转换图,获取基于工作流的测试模型,并对工作流、判断表、状态转换图进行数据结构的定义,用于前后端数据之间的交互,后端获取数据后,将状态图测试模型转换至二叉状态树,并在此基础上结合边界值及等价类,提取用户输入的表达式“count==0||(count!=1&&count!=0)”中的参数’count’及其判定条件‘==’,‘!=’,‘||’,‘&&’。用户可以根据自己的需求,定义类似的表达式;运用图的遍历算法获取测试模型中存在的目标路径,依次对二叉状态树中每个结点均做一次访问,遍历所有状态至状态的边,按访问结点的先后次序将结点排列起来,分别得到二叉状态树中所有结点的序列表,通过边界值与等价类分析其取值得出测试项。对用户定义的表达式进行解析,获取出参数的判定条件,并运用边界值,等价类生成判定条件所对应的取值,自动生成测试用例,最后根据生成的测试用例进行反向验证,判断自动生成的用例是否正确。
在获取测试模型中,结合B/S结构网络结构模式浏览器通过网页服务器WebServer同数据库进行数据交互,融入B/S架构,一直到用例生成;然后分别对本文工作流,判定表,状态转换图进行测试模型搭建,并通过实例,验证可行性。
首先测试人员根据需求文档或者使用说明书等,画出绘制被测对象的工作流程图。本方法将流程图中的不同节点的类型统一划分为:开始节点,结束节点,动作节点,判定节点。测试人员绘制的流程图中必须包含最基本的开始与结束节点。否则,将提示用户模型搭建不完整。其次用户可添加判定分支、动作流程等完善该工作流。用户在画流程图的过程中,可以定义自己需要的参数,布尔型Bool,整型Int,双浮点型Double等类型都可以使用,用于在分支节点时,利用该参数的取值决定走那一条分支。
本方法的核心思想是遍历从开始节点至结束节点的每一条路径,一条路径也就对应着一个测试项。如果工作流程中出现环的情况下,也即为代码中的循环。生成的路径中还需要覆盖到该环或者多个环组合的情况。
根据需文档或者使用说明书将文档流程图中被测对象不同节点的类型统一划分为开始节点、结束节点、动作节点和判定节点,添加判定分、动作流程完善工作流。
动作流程的一条路径对应一个测试项,从开始节点至结束节点遍历每一条路径,如果工作流程中出现代码中的循环,将生成路径中的代码覆盖到该循环或者多个环组合。
采用有向图对用户创建的工作流进行底层数据的存储,每一个节点代表有向图中的顶点,节点到节点的路径中为有向图中的边C,将流程图转换为数据结构中的有向图,通过对有向图的遍历,即可完成工作流的路径遍历。
遍历路径时,采用深度遍历的算法,首先使用一个临时数组或队列存储路径中的节点,从起点开始,遍历其下一个可到达的节点,再遍历该节点的下一个可达节点。最后判断该节点是否为结束节点,或者没有下一个可到达节点时,则返回,并将数组的头节点出队,如果已经到达结束节点,则将数组中的节点,按照入队时的顺序存储在最后的结果中,如此循环代表一条从开始至结束的完整路径,生成简单路径。利用上述思想能够得出有向图中的所有简单路径,没有重复节点出现的情况。
因为是简单路径,不能将有环的路径遍历得到,否则循环将不会结束。得出工作流程图中的简单路径后,找出图中所有的环,在生成简单路径时,每到达一个节点,取出该节点中下一个可到达的节点,如果该节点已经出现在临时的数组中时,则认定目前数组中的路径为一个环,遍历所有的简单路径与环,查看简单路径中是否包含环的起点,如果有则将其放入一个临时数组中,把该简单路径中涉及到的所有相关环进行记录,使用排列组合,将多个环组合后,插入至简单路径中,一条包含环的复杂路径即可生成完毕。
所以得出工作流程图中的简单路径后,还需要找出图中所有的环。在生成简单路径时,每到达一个节点,会取出该节点中下一个可到达的节点。如果该节点已经出现在临时的数组中时,则认定目前数组中的路径为一个环。最后,遍历所有的简单路径与环,查看简单路径中是否包含环的起点。如果有则将其放入一个临时数组中,把该简单路径中涉及到的所有相关环进行记录,最后使用排列组合的思想,将多个环组合后,插入至简单路径中。那么一条包含环的复杂路径即可生成完毕。
基于上述方法生成的测试路径在测试环节中相当于测试点,而对于该测试点,选用不同的取值对其进行测试,相当于测试用例。因此用例的生成需要将路径中的参数实例化,通过边界值与等价类分析其取值。然而在实际使用过程中,用户定义的判定条件并不是简单的A>0,这么简单,可能会出现“(A>0&&B>0)||C>10,A==true&&B==false”,等各种各样的组合。因此对条件的解析也是生成测试用例的难题。
为解决上述问题,可以采用二叉树进行解析。首先需要确定表达式中符号之间的优先级,按照C语言的语法,用全局变量的形式,存储两个符号间的优先级关系。在这里要注意的是,不同语言之间符号的优先级关系可能不一致,如“a&1==1”,在python中会优先计算a&1,但在C语言中会优先判断1==1,因此为避免上述问题,希望用户在输入时为“a&1”加上括号,转变为”(a&1)==1”。这样,不管任何语言,都会优先计算a&1。同时,同一个符号在不同语句中的意义不同,优先级的关系也就不同。例如“a-b>0”,“-a>0”。‘-’号在第一个表达式”a-b>0”中代表减号的意义,在第二个表达式“-a>0”中代表取反的意义,两个的优先级是不同的。又比如,“*a”,“a*b”,‘*’号,在第一个表达式“*a”中是指针的含义,在第二个表达式“a*b”则是乘号。因此该问题也是影响表达式解析的难题。
首先需要使用两个栈,第一个栈用于存储操作符,第二个栈用于存储除开操作符的变量名或者数字。首先对表达式count==0||(count!=1&&count!=0)进行循环,依次判断字符是不是操作符,如果是则将其入栈至操作符栈,且在入栈之前判断是否为空,以及当前栈顶的操作符的优先级是否大于即将入栈的操作符,如果大于,则出栈当前栈顶的元素,创建一个新的二叉树节点,并将操作数栈中的数据出栈两个,将其作为该二叉树的左右节,然后再将新节点入操作数栈,如果该字符不是操作符,则将其先加入一个临时变量中,并进入下一次循环,直到字符为操作符时,先把临时变量中的数据存入数据栈,并清空临时变量,再继续操作符的操作流程。因为用户定义变量名时可能是多个字符,例如‘time’,‘count’等,并不是简单的a,b的形式。所以需要一个临时变量,来获取完整的变量名,或者是变量的取值。
参阅图1,例如用户输入表达式“count==0||(count!=1&&count!=0)”,则需要提取参数“count”及其判定条件‘==’,‘!=’,‘||’,‘&&’。表达式“count==0||(count!=1&&count!=0)”通过二叉树与栈解析后可得图1。表达式中所有的参数只会出现在生成的二叉树的叶子节点上,参数节点的父节点即为判断的条件。参数节点的左右同级节点则为具体取值。得到具体取值后,则可通过边界值与等价类的思想,生成数据。生成数据时,会根据参数的类型,步进,是否有固定取值(枚举)等情况综合进行考虑。在上述实施例中,用户定义的count变量为枚举型,它的取值只可能是-1,0,1。所以不用判断生成的数据是否合法。如是其它类型数据,如整型,则将会生成表达式提取出来的取值,取值加步进,取值减步进的3个数据。如果用户没有定义参数的步进,那么默认是取1。有时,当用户定义的参数类型为无符号整型时,并且取值为0,那么自动生成的取值减去步进后得出的-1,将会超过该参数的取值范围。因此在生成数据时,还需要判定生成的数据是否超过了参数类型的取值范围。
通过上述分析,count的取值为-1,0,1。为了使得生成的数据具有正确性,还需要将取值-1,0,1再次代入表达式。因为在工作流中,如果要走某一条边,则必须使得该边的条件为真。为了验证该条件在使用了具体取值之后是否为真。还需要计算出表达式最后的结果。解决上述问题其实可以通过栈与树的形式去进行计算。但在本方法中,使用了python语言中提供的eval函数。该函数可将字符串转变为可执行的语句。因此原表达式“count==0||(count!=1&&count!=0)”,count取-1时,在替换后变成了“-1==0||(-1!=1&&-1!=0)”。通过eval函数运行该语句,可直接得出语句的真假。有时在用户定义的表达式中有多个参数,例如“A>0||B>0”,A,B为用户定义的变量。同上述一样的分析,参数A生成的数据有-1,0,1。参数B生成的数据也为-1,0,1。但是要表达式成立,则需要参数A,参数B两者的取值进行组合。因此需要把参数的取值进行组合后再次代入表达式中,才能得出合适的取值。
参阅判定表1,
Figure BDA0003049118610000071
基于工作流的测试模型分析完毕后,本方法对判定表的分析则显得稍微简单,但也有不同之处。一个简单的判定表由规则(rule),参数,动作组成。如表所示,该判定表有4条规则。因此对应的测试点也有4个,每一条规则分别由参数的取值情况和动作组成。因此,在定义判定表的数据结构时采用以下策略。
首先本方法需要对整个判定表中需要使用的参数进行定义,同工作流,需要指定参数的类型,步进等信息,其次再定义单元格(cell),单元格即为使用的参数,及其表达式。例如下述表格中‘≤25’即为一个表达式。该列的首行单元格即为用户定义的参数。同一列中的单元格中的表达式应该使用相同的参数,并且,为区分该单元格是参数还是动作,需要指定该单元格的类型,以供后续分析使用,最后,再定义规则rule,并把同一行的单元格作为规则rule的成员。例如红色字体的一行单元格即为规则rule1的成员。在对判定表进行自动生成测试用例之前,需要对规则rule中的条件进行组合得出规则rule的完整表达式。因为不同单元格之间是且的关系,需要同时使得单元格中的条件成立。所以在生成规则rule完整表达式时需要使用‘&&’操作符。例如规则rule1生成的条件为’Age<=25&&Gender==Male&&(Type==Family||Type==mid)’。最后将上述表达式使用同工作流条件解析的方法,将条件解析为二叉树后,再提取参数及其取值,并利用边界值与等价类,生成测试数据后,再使用eval函数去除不合适的数据。那么一条规则rule的测试数据即可自动生成完毕。
参阅图2。一个典型的状态转换流程如图2所示。状态是事物存在时的具体形态。用户在使用本方法时,可以根据自己的需求,定义为出合适的状态。图2中存在4种状态。状态与状态之间的路径,称为边,如图中的C1,C2等。只有存在该路径时,状态才能发生转换。每一条边上都有其具体的转换条件,如C1边的条件为“A>0”。其中A为用户定义的参数。如果希望状态1能够转换为状态2,则需要当参数A满足大于0的条件下,才能够进行转换。同理,不同状态间的转换时,需要存在边,并且边中的条件满足时,才能够进行转换。
状态转换图与工作流类似,可将状态视为工作流中的节点,状态与状态之间的转换,可以理解为节点至节点的边。但是状态转换图中并没有起始节点和结束节点的概念,只存在一个初始状态的节点,定义图2中的状态1为初始状态。并且状态转换图中测试点的概念也与工作流的的概念不同。在工作流中,从起始节点至结束节点的一条路径即为一个测试点。而在状态转化图中,测试的目的是测试不同状态之间是否按照规定的条件进行转换,并且可以存在状态之间的多次循环转换的情况,因此循环转换次数的多少需要由测试人员凭经验决定。往往在实际测试项目中,简单的从状态1转换至状态2并不会出现问题。但在循环转换时,状态1至状态2,状态2再转换至状态1,状态1再转换至转状态2时,会出现错误。其他情况同理。为解决上述问题,决定采用以下策略。
首先将状态转换图转换至状态转换树。因为状态之间可以循环转换,所以该状态转换树可以无限衍生下去。因此需要定义,一个深度的概念,该概念与二叉树的深度不同,当所有状态都遍历到,所有状态至状态的边都遍历到时,此时生成状态转换的树,称为深度为1的状态转换树。如果测试人员想对循环状态转换进行测试,可以继续对该状态转换树进行拓展,如只进行一次循环状态测试,则该状态转换树向下再拓展一层。因此由用户决定需要深度为多少的树结构之后再去生成。
参阅图3。通过上述方法将状态图转换至状态转换树后,可得图3。第一层为初始状态。第二层为状态1能够达到的状态的集合,在图2中,状态1只能够达到状态2,并且是经过边C1,因此第二层只包括了状态2。第三层为第二层中的状态集合(状态2)能够到达的状态集合(状态3),并且经过边C2。第四层为第三层状态集合(状态3)能够达到的状态集合(状态1,状态2,状态3,状态4),并且两个状态间使用了不同边(C7,C5,C6,C3)。同理,可以得出第五层,以及之后用户希望达到的层次。可以看出,在状态转换树第四层时,所有的状态已经遍历完毕,但是边C4这一条边并没有遍历。因此还需要再向下遍历一层。得出第五层。此时生成的树才称为深度为1的树。之后用户可以根据自己的需求对这棵树进行拓展。状态树生成完毕及可以开始自动生成测试用例。与工作流类似。其起始节点为初始状态一,结束节点为状态转换树的叶子节点。从起始节点至叶子节点,取出状态与状态转换间的表达式,并利用边界值与等价类的思想,生成测试数据后,再使用eval函数去除不合适的数据。那么一个测试点的测试数据即可自动生成。
上述内容对对测试用例生成方法进行了详细的讲述。在实际使用过程中,需要将其融入B/S架构中的测试数据管理系统中。而融入B/S架构中的难点在于前后端数据的交互。用户在使用时,只会在网页中构建状态转换图以及定义使用参数的类型与取值范围等相关信息。该信息与算法分析时所需要的数据结构之间还存在一定差距。因此需要定义好前后端交互时采用的数据结构,以便后端在收到数据后能够翻译成本方法需要使用的模型。
首先前后端交互使用JSON的数据格式,因此数据结构也要符合JSON的语法。JSON格式其实与python中的dict类似。因此定义以下键名。‘name’,代表用户创建的模型名称。‘type’代表模型的类型。如果选用状态转换图,则会读取键名为‘nodes’的数组。因为是多个节点,所以各节点的内容都作为数组中的一个元素。每一个元素都必须包含节点的类型,序号,可选边。边的信息存储在键名为‘edges’的数组中。每一个边都必须指定边的起始节点,结束节点,边上的表达式。最后所有的参数存储在键为‘params’的数组中。参数中需要包含参数名字,在表达式中的变量名,参数类型,步进,如果是枚举值,则还需要详细列举出。数据定义好后,后端按照上述格式即可将用户定义的模型转换为算法需要使用的数据结构。
本发明通过具体实施方式对本发明进行了阐述,以上实施例的说明只是用于帮助理解本发明的设备;同时,对于本领域的技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (10)

1.一种测试用例自动生成方法,其特征在于:在网页上在线编辑流程图,判定表,状态转换图,获取基于工作流的测试模型,并对工作流、判断表、状态转换图进行数据结构的定义,用于前后端数据之间的交互,后端获取数据后,将状态图测试模型转换至二叉状态树,并在此基础上结合边界值及等价类,提取用户输入的表达式“count==0||(count!=1&&count!=0)”中的参数’count’及其判定条件‘==’,‘!=’,‘||’,‘&&’,用户根据自己的需求,定义类似的表达式;运用图的遍历算法获取测试模型中存在的目标路径,依次对二叉状态树中每个结点均做一次访问,遍历所有状态至状态的边,按访问结点的先后次序将结点排列起来,分别得到二叉状态树中所有结点的序列表,通过边界值与等价类分析其取值得出测试项。
2.对用户定义的表达式进行解析,获取出参数的判定条件,并运用边界值,等价类生成判定条件所对应的取值,自动生成测试用例,最后根据生成的测试用例进行反向验证,判断自动生成的用例是否正确。
3.如权利要求1所述的测试用例自动生成方法,其特征在于:在获取测试模型中,结合B/S结构网络结构模式浏览器,通过网页服务器Web Server同数据库进行数据交互,融入B/S架构,一直到用例生成;然后分别对本文工作流,判定表,状态转换图进行测试模型搭建,并通过实例,验证可行性。
4.如权利要求1所述的测试用例自动生成方法,其特征在于:根据需文档或者使用说明书将文档流程图中被测对象不同节点的类型统一划分为开始节点、结束节点、动作节点和判定节点,添加判定分、动作流程完善工作流。
5.如权利要求1所述的测试用例自动生成方法,其特征在于:动作流程的一条路径对应一个测试项,从开始节点至结束节点遍历每一条路径,如果工作流程中出现代码中的循环,将生成路径中的代码覆盖到该循环或者多个环组合。
6.如权利要求1所述的测试用例自动生成方法,其特征在于:采用有向图对用户创建的工作流进行底层数据的存储,每一个节点代表有向图中的顶点,节点到节点的路径中为有向图中的边C,将流程图转换为数据结构中的有向图,通过对有向图的遍历,完成工作流的路径遍历。
7.如权利要求6所述的测试用例自动生成方法,其特征在于:遍历路径时,采用深度遍历的算法,首先使用一个临时数组或队列存储路径中的节点,从起点开始,遍历其下一个可到达的节点,再遍历该节点的下一个可达节点,最后判断该节点是否为结束节点,或者没有下一个可到达节点时,则返回,并将数组的头节点出队,如果已经到达结束节点,则将数组中的节点,按照入队时的顺序存储在最后的结果中,如此循环代表一条从开始至结束的完整路径,生成简单路径。
8.如权利要求1所述的测试用例自动生成方法,其特征在于:得出工作流程图中的简单路径后,找出图中所有的环,在生成简单路径时,每到达一个节点,取出该节点中下一个可到达的节点,如果该节点已经出现在临时的数组中时,则认定目前数组中的路径为一个环,遍历所有的简单路径与环,查看简单路径中是否包含环的起点,如果有则将其放入一个临时数组中,把该简单路径中涉及到的所有相关环进行记录,使用排列组合,将多个环组合后,插入至简单路径中,一条包含环的复杂路径即可生成完毕。
9.如权利要求1所述的测试用例自动生成方法,其特征在于:采用二叉树进行解析,确定表达式中“count==0||(count!=1&&count!=0)”符号之间的优先级,按照C语言的语法,用全局变量的形式,存储两个符号间的优先级关系;用户在输入时为“a&1”加上括号,转变为”(a&1)==1”。
10.如权利要求1所述的测试用例自动生成方法,其特征在于:对表达式count==0||(count!=1&&count!=0)进行循环,依次判断字符是不是操作符,如果是则将其入栈至操作符栈,且在入栈之前判断是否为空,以及当前栈顶的操作符的优先级是否大于即将入栈的操作符,如果大于,则出栈当前栈顶的元素,创建一个新的二叉树节点,并将操作数栈中的数据出栈两个,将其作为该二叉树的左右节,然后再将新节点入操作数栈,如果该字符不是操作符,则将其先加入一个临时变量中,并进入下一次循环,直到字符为操作符时,先把临时变量中的数据存入数据栈,并清空临时变量,再继续操作符的操作流程,获取完整的变量名,或者是变量的取值。
CN202110480682.0A 2021-04-30 2021-04-30 测试用例自动生成方法 Active CN113238932B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110480682.0A CN113238932B (zh) 2021-04-30 2021-04-30 测试用例自动生成方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110480682.0A CN113238932B (zh) 2021-04-30 2021-04-30 测试用例自动生成方法

Publications (2)

Publication Number Publication Date
CN113238932A true CN113238932A (zh) 2021-08-10
CN113238932B CN113238932B (zh) 2024-03-19

Family

ID=77131741

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110480682.0A Active CN113238932B (zh) 2021-04-30 2021-04-30 测试用例自动生成方法

Country Status (1)

Country Link
CN (1) CN113238932B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113377683A (zh) * 2021-08-12 2021-09-10 神州数码融信软件有限公司 软件测试用例的生成方法、系统、设备、终端、介质及应用
CN113641591A (zh) * 2021-10-14 2021-11-12 腾讯科技(深圳)有限公司 测试用例生成方法及装置、测试方法及装置
CN113760621A (zh) * 2021-09-07 2021-12-07 四川中微芯成科技有限公司 触摸芯片的测试方法、装置、计算机设备和存储介质
CN113778893A (zh) * 2021-09-18 2021-12-10 中国平安人寿保险股份有限公司 对话机器人测试用例生成方法、装置、设备及存储介质
CN117596165A (zh) * 2024-01-18 2024-02-23 中国人民解放军军事科学院系统工程研究院 一种基于逻辑功能封装的软件无线电标准符合性测试方法及装置

Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101436128A (zh) * 2007-11-16 2009-05-20 北京邮电大学 软件测试用例自动生成方法及系统
KR101089816B1 (ko) * 2010-06-09 2011-12-08 강원대학교산학협력단 소프트웨어 컴포넌트의 상태 테스팅을 위한 테스트 스윗 생성 방법 및 장치
US20130185056A1 (en) * 2012-01-12 2013-07-18 Accenture Global Services Limited System for generating test scenarios and test conditions and expected results
CN104375943A (zh) * 2014-12-11 2015-02-25 吴翔虎 一种基于静态模型的嵌入式软件黑盒测试用例生成方法
CN104809067A (zh) * 2015-05-07 2015-07-29 北京邮电大学 面向等式约束的测试用例生成方法和装置
CN105718372A (zh) * 2016-01-22 2016-06-29 珠海市精实测控技术有限公司 一种电控板黑盒测试用例生成及自动测试方法
CN105930268A (zh) * 2016-04-19 2016-09-07 努比亚技术有限公司 一种基于树型的黑盒测试用例生成方法及其系统
US20160283201A1 (en) * 2013-05-08 2016-09-29 Nanjing University Activity Diagram Model-Based System Behavior Simulation Method
CN106951368A (zh) * 2017-03-12 2017-07-14 北京工业大学 基于uml时序图的测试用例自动生成方法
CN108509339A (zh) * 2018-03-22 2018-09-07 京北方信息技术股份有限公司 基于浏览器和思维导图的测试用例生成方法、装置及设备
CN108804304A (zh) * 2017-05-05 2018-11-13 北京京东尚科信息技术有限公司 测试用例生成方法及装置、存储介质、电子设备
CN111897739A (zh) * 2020-08-21 2020-11-06 四川长虹电器股份有限公司 一种基于优化后深度优先算法的测试用例生成方法

Patent Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101436128A (zh) * 2007-11-16 2009-05-20 北京邮电大学 软件测试用例自动生成方法及系统
KR101089816B1 (ko) * 2010-06-09 2011-12-08 강원대학교산학협력단 소프트웨어 컴포넌트의 상태 테스팅을 위한 테스트 스윗 생성 방법 및 장치
US20130185056A1 (en) * 2012-01-12 2013-07-18 Accenture Global Services Limited System for generating test scenarios and test conditions and expected results
US20160283201A1 (en) * 2013-05-08 2016-09-29 Nanjing University Activity Diagram Model-Based System Behavior Simulation Method
CN104375943A (zh) * 2014-12-11 2015-02-25 吴翔虎 一种基于静态模型的嵌入式软件黑盒测试用例生成方法
CN104809067A (zh) * 2015-05-07 2015-07-29 北京邮电大学 面向等式约束的测试用例生成方法和装置
CN105718372A (zh) * 2016-01-22 2016-06-29 珠海市精实测控技术有限公司 一种电控板黑盒测试用例生成及自动测试方法
CN105930268A (zh) * 2016-04-19 2016-09-07 努比亚技术有限公司 一种基于树型的黑盒测试用例生成方法及其系统
CN106951368A (zh) * 2017-03-12 2017-07-14 北京工业大学 基于uml时序图的测试用例自动生成方法
CN108804304A (zh) * 2017-05-05 2018-11-13 北京京东尚科信息技术有限公司 测试用例生成方法及装置、存储介质、电子设备
CN108509339A (zh) * 2018-03-22 2018-09-07 京北方信息技术股份有限公司 基于浏览器和思维导图的测试用例生成方法、装置及设备
CN111897739A (zh) * 2020-08-21 2020-11-06 四川长虹电器股份有限公司 一种基于优化后深度优先算法的测试用例生成方法

Non-Patent Citations (7)

* Cited by examiner, † Cited by third party
Title
ZHENYU DAI: "Publisher: IEEE Cite This PDF", 《2007 9TH IEEE INTERNATIONAL WORKSHOP ON WEB SITE EVOLUTION》, pages 1 - 11 *
唐培;徐拾义;: "基于软件内建自测试的测试用例研究", 计算机应用与软件, no. 10, pages 1 - 6 *
李文锋: "软件内建自测试中的模板库及测试路径分析", 《计算机工程》, pages 1 - 7 *
杨波: "基于UML种软件测试需求建模及测试用例生成方法", 《计算机学报》, pages 522 - 538 *
王秀玄: "基于UML顺序图的软件路径测试用例生成方法研究", 《中国优秀硕士学位论文全文数据库 (工程科技Ⅱ辑)》, pages 033 - 396 *
程序员臻叔: "自动化工具 (开源) XMind2TestCase:一个高效测试用例设计的解决方案!", pages 1 - 10, Retrieved from the Internet <URL:《https://testerhome.com/topics/17554》> *
雷斌;崔丽婷;: "基于UML状态图的类测试用例生成", 电子质量, no. 08, pages 1 - 4 *

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113377683A (zh) * 2021-08-12 2021-09-10 神州数码融信软件有限公司 软件测试用例的生成方法、系统、设备、终端、介质及应用
CN113377683B (zh) * 2021-08-12 2022-01-28 神州数码融信软件有限公司 软件测试用例的生成方法、系统、设备、终端、介质及应用
CN113760621A (zh) * 2021-09-07 2021-12-07 四川中微芯成科技有限公司 触摸芯片的测试方法、装置、计算机设备和存储介质
CN113778893A (zh) * 2021-09-18 2021-12-10 中国平安人寿保险股份有限公司 对话机器人测试用例生成方法、装置、设备及存储介质
CN113778893B (zh) * 2021-09-18 2024-03-15 中国平安人寿保险股份有限公司 对话机器人测试用例生成方法、装置、设备及存储介质
CN113641591A (zh) * 2021-10-14 2021-11-12 腾讯科技(深圳)有限公司 测试用例生成方法及装置、测试方法及装置
CN117596165A (zh) * 2024-01-18 2024-02-23 中国人民解放军军事科学院系统工程研究院 一种基于逻辑功能封装的软件无线电标准符合性测试方法及装置
CN117596165B (zh) * 2024-01-18 2024-03-29 中国人民解放军军事科学院系统工程研究院 一种基于逻辑功能封装的软件无线电标准符合性测试方法及装置

Also Published As

Publication number Publication date
CN113238932B (zh) 2024-03-19

Similar Documents

Publication Publication Date Title
CN113238932B (zh) 测试用例自动生成方法
Lin et al. Interactive and guided architectural refactoring with search-based recommendation
Zhang et al. Repairing bugs in python assignments using large language models
US10324695B2 (en) Method for transforming first code instructions in a first programming language into second code instructions in a second programming language
CN110209387B (zh) 一种顶层hdl文件生成方法和装置、计算机可读存储介质
CN108647146B (zh) 基于修正条件判定组合覆盖的测试用例生成方法
Valenzuela-Toledo et al. Evolution of github action workflows
CN111176979A (zh) 一种图数据库的测试用例生成方法和装置
CN114036041B (zh) 一种基于机器学习的scade模型组合验证环境假设自动生成方法
CN114416547A (zh) 基于测试用例的测试方法
CN112395198B (zh) 一种基于区分子图挖掘的软件缺陷发现方法
Teixeira et al. EasyTest: An approach for automatic test cases generation from UML Activity Diagrams
CN116383070B (zh) 一种面向高mc/dc的符号执行方法
Fumagalli et al. Towards automated support for conceptual model diagnosis and repair
Nguyen et al. Model-based testing of multiple GUI variants using the GUI test generator
CN115904480B (zh) 代码重构方法、装置、电子设备及存储介质
Saddler et al. EventFlowSlicer: a tool for generating realistic goal-driven GUI tests.
CN116483700A (zh) 一种基于反馈机制的api误用检测与修正方法
Tatale et al. A Survey on Test Case Generation using UML Diagrams and Feasibility Study to Generate Combinatorial Logic Oriented Test Cases.
Smirnov et al. Revizor: a data-driven approach to automate frequent code changes based on graph matching
CN114461514A (zh) 一种基于低代码的自动化测试方法和系统
Li et al. Hybrid model with multi-level code representation for multi-label code smell detection (077)
Kaushalya et al. Framework to Migrate AngularJS Based Legacy Web Application to React Component Architecture
Singh et al. Automated generation of functional test cases and use case diagram using srs analysis
Shanthi et al. A heuristic technique for automated test cases generation from UML activity diagram

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant