CN109992498B - 测试用例的生成方法及系统、计算机系统 - Google Patents

测试用例的生成方法及系统、计算机系统 Download PDF

Info

Publication number
CN109992498B
CN109992498B CN201711485313.0A CN201711485313A CN109992498B CN 109992498 B CN109992498 B CN 109992498B CN 201711485313 A CN201711485313 A CN 201711485313A CN 109992498 B CN109992498 B CN 109992498B
Authority
CN
China
Prior art keywords
path
tested
program
coverage
case
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.)
Active
Application number
CN201711485313.0A
Other languages
English (en)
Other versions
CN109992498A (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.)
Beijing Jingdong Century Trading Co Ltd
Beijing Jingdong Shangke Information Technology Co Ltd
Original Assignee
Beijing Jingdong Century Trading Co Ltd
Beijing Jingdong Shangke Information Technology Co Ltd
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 Beijing Jingdong Century Trading Co Ltd, Beijing Jingdong Shangke Information Technology Co Ltd filed Critical Beijing Jingdong Century Trading Co Ltd
Priority to CN201711485313.0A priority Critical patent/CN109992498B/zh
Publication of CN109992498A publication Critical patent/CN109992498A/zh
Application granted granted Critical
Publication of CN109992498B publication Critical patent/CN109992498B/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/3676Test management for coverage analysis
    • 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

Abstract

本公开提供了一种测试用例的生成方法,该方法包括:获取待测程序中包含的至少一条待测路径;确定所述至少一条待测路径中每条待测路径包含的路径组合因子;针对所述每条待测路径,在确定出其包含的路径组合因子后,获取与其包含的路径组合因子对应的目标测试用例;以及基于所述目标测试用例生成相应待测路径的路径测试用例。本公开提供了一种测试用例的生成系统、一种计算机系统和一种计算机可读存储介质。

Description

测试用例的生成方法及系统、计算机系统
技术领域
本公开涉及测试领域,更具体地,涉及一种测试用例的生成方法及系统、计算机系统、计算机可读存储介质。
背景技术
一般地,整个软件开发过程的生命周期可以包括两个阶段:代码实现阶段和程序调试阶段。代码实现阶段结束后,一般需要对软件进行代码层面上的单元测试,测试代码中的每个系统、每个函数的覆盖率是否达标。代码覆盖率(Code Coverage)是反映测试用例对被测软件覆盖程度的重要指标,也是衡量测试工作进展情况,对测试工作进行量化的重要指标之一。
根据覆盖内容的不同,代码覆盖率可以细分为:语句覆盖率、分支覆盖率、条件覆盖率以及路径覆盖率。在理想状态下,一个完美的软件,其语句覆盖率、分支覆盖率、条件覆盖率、路径覆盖率均需达到100%,这样的软件才够健壮。路径覆盖率作为其中粒度最精细的一个指标,它反应了程序可能执行的所有路径。然而在现实状态下,路径覆盖率由于受代码复杂度、路径数量、完成时间节点、测试工具等各方面原因的限制,往往很难达到100%,这样也为软件留下了潜在的风险。
目前的单元测试在测试路径覆盖率的过程中所执行的测试用例都是手动编写的,并且在测试过程中需要反复查看路径覆盖率百分比,如果路径覆盖率百分比尚未达到100%,则需要继续编写测试用例,制造未覆盖路径的测试用例,并继续执行新编写的测试用例,不断尝试,如此反复,直到路径覆盖率百分比达到100%为止。
然而,在实现本公开构思的过程中,发明人发现相关技术中至少存在如下问题:对于代码复杂度较高,路径较多的软件,由于其各种路径的排列组合很多,因此需要手动编写的路径覆盖率测试用例也就很多,工作量很大,不便于提高路径覆盖率。
发明内容
有鉴于此,本公开提供了一种能够自动生成路径测试用例的测试用例的生成方法和测试用例的生成系统。
本公开的一个方面提供了一种测试用例的生成方法,包括:获取待测程序中包含的至少一条待测路径;确定上述至少一条待测路径中每条待测路径包含的路径组合因子;针对上述每条待测路径,在确定出其包含的路径组合因子后,获取与其包含的路径组合因子对应的目标测试用例;以及基于上述目标测试用例生成相应待测路径的路径测试用例。
根据本公开的实施例,获取待测程序中包含的至少一条待测路径包括:获取上述待测程序的程序结构框图;从上述程序结构框图中识别出上述待测程序中包含的所有路径;或者从上述程序结构框图中识别出上述待测程序中包含的所有路径中的至少一条路径;或者基于上述待测程序的代码执行情况,从上述程序结构框图中识别出上述待测程序中包含的所有待执行的路径;或者基于上述待测程序的代码执行情况,从上述程序结构框图中识别出上述待测程序中包含的所有待执行的路径中的至少一条路径。
根据本公开的实施例,获取上述待测程序的程序结构框图包括:获取上述待测程序;获取上述待测程序中包含的关键字;基于获取的上述关键字对上述待测程序进行语法分析,得到以下结构中的一种或多种:顺序结构、分支结构和循环结构;以及基于语法分析得到的结构画出上述待测程序的程序结构框图。
根据本公开的实施例,确定上述至少一条待测路径中每条待测路径包含的路径组合因子包括:确定上述至少一条待测路径中上述每条待测路径包含的语句、分支和条件。
根据本公开的实施例,获取与其包含的路径组合因子对应的目标测试用例包括:确定上述每条待测路径包含的路径组合因子中在上述待测程序的测试过程中已被测试过的路径组合因子;以及获取测试上述已被测试过的路径组合因子时所执行的测试用例。
根据本公开的实施例,上述方法还包括:读取上述待测程序的程序代码;对上述程序代码进行关键字插桩;在上述待测程序的测试过程中,将关键字覆盖前后中的测试用例记录为语句覆盖用例并保存;和/或在上述待测程序的测试过程中,将关键字覆盖过程中的测试用例记录为分支覆盖用例并保存;和/或在上述待测程序的测试过程中,将关键字部分覆盖中的测试用例记录为条件覆盖用例并保存。
根据本公开的实施例,上述方法还包括:在保存上述语句覆盖用例和/或上述分支覆盖用例和/或上述条件覆盖用例之前,判断上述语句覆盖用例和/或上述分支覆盖用例和/或上述条件覆盖用例是否已保存过;以及若尚未保存过,则保存上述语句覆盖用例和/或上述分支覆盖用例和/或上述条件覆盖用例。
根据本公开的实施例,上述方法还包括:在保存上述语句覆盖用例和/或上述分支覆盖用例和/或上述条件覆盖用例的过程中,关联上述语句覆盖用例和/或上述分支覆盖用例和/或上述条件覆盖用例与上述待测程序中的线路的对应关系。
本公开的另一个方面提供了一种测试用例的生成系统,包括:第一获取模块,用于获取待测程序中包含的至少一条待测路径;确定模块,用于确定上述至少一条待测路径中每条待测路径包含的路径组合因子;第二获取模块,用于针对上述每条待测路径,在确定出其包含的路径组合因子后,获取与其包含的路径组合因子对应的目标测试用例;以及生成模块,用于基于上述目标测试用例生成相应待测路径的路径测试用例。
根据本公开的实施例,上述第一获取模块包括:第一获取单元,用于获取上述待测程序的程序结构框图;以及识别单元,用于:从上述程序结构框图中识别出上述待测程序中包含的所有路径;或者从上述程序结构框图中识别出上述待测程序中包含的所有路径中的至少一条路径;或者基于上述待测程序的代码执行情况,从上述程序结构框图中识别出上述待测程序中包含的所有待执行的路径;或者基于上述待测程序的代码执行情况,从上述程序结构框图中识别出上述待测程序中包含的所有待执行的路径中的至少一条路径。
根据本公开的实施例,上述获取单元包括:第一获取子单元,用于获取上述待测程序;第二获取子单元,用于获取上述待测程序中包含的关键字;分析子单元,用于基于获取的上述关键字对上述待测程序进行语法分析,得到以下结构中的一种或多种:顺序结构、分支结构和循环结构;以及绘制子单元,用于基于语法分析得到的结构画出上述待测程序的程序结构框图。
根据本公开的实施例,上述确定模块还用于:确定上述至少一条待测路径中上述每条待测路径包含的语句、分支和条件。
根据本公开的实施例,上述第二获取模块包括:确定单元,用于确定上述每条待测路径包含的路径组合因子中在上述待测程序的测试过程中已被测试过的路径组合因子;以及第二获取单元,用于获取测试上述已被测试过的路径组合因子时所执行的测试用例。
根据本公开的实施例,上述系统还包括:读取模块,用于读取上述待测程序的程序代码;插桩模块,用于对上述程序代码进行关键字插桩;以及保存模块,用于:在上述待测程序的测试过程中,将关键字覆盖前后中的测试用例记录为语句覆盖用例并保存;和/或在上述待测程序的测试过程中,将关键字覆盖过程中的测试用例记录为分支覆盖用例并保存;和/或在上述待测程序的测试过程中,将关键字部分覆盖中的测试用例记录为条件覆盖用例并保存。
根据本公开的实施例,上述系统还包括:判断模块,用于在保存上述语句覆盖用例和/或上述分支覆盖用例和/或上述条件覆盖用例之前,判断上述语句覆盖用例和/或上述分支覆盖用例和/或上述条件覆盖用例是否已保存过;以及上述保存模块,还用于在上述语句覆盖用例和/或上述分支覆盖用例和/或上述条件覆盖用例尚未保存过的情况下,保存上述语句覆盖用例和/或上述分支覆盖用例和/或上述条件覆盖用例。
根据本公开的实施例,上述系统还包括:关联模块,用于在保存上述语句覆盖用例和/或上述分支覆盖用例和/或上述条件覆盖用例的过程中,关联上述语句覆盖用例和/或上述分支覆盖用例和/或上述条件覆盖用例与上述待测程序中的线路的对应关系。
本公开的另一方面提供了一种计算机系统,包括:一个或多个处理器;存储器,用于存储一个或多个程序,其中,当上述一个或多个程序被上述一个或多个处理器执行时,使得上述一个或多个处理器实现如上任一项所述的测试用例的生成方法。
本公开的另一方面提供了一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器实现如上任一项所述的测试用例的生成方法。
通过本公开的实施例,因为采用了基于语句测试用例、条件测试用例和分支测试用例自动生成对应路径的路径测试用例的技术手段,所以可以根据已有的语句、分支和条件覆盖率的测试用例,自动识别路径覆盖率的测试用例,并自动生成所有路径覆盖的测试用例所以至少部分地克服了相关技术中需要手动编写路径测试用例而导致工作量大,不便于提高路径覆盖率的技术问题,进而达到了降低编写路径覆盖率的测试用例的工作量,有效地提高路径覆盖率的技术效果。
附图说明
通过以下参照附图对本公开实施例的描述,本公开的上述以及其他目的、特征和优点将更为清楚,在附图中:
图1示意性示出了可以应用本公开的测试用例的生成方法和系统的示例性系统架构;
图2示意性示出了根据本公开实施例的测试用例的生成方法和系统的应用场景;
图3示意性示出了根据本公开实施例的测试用例的生成方法的流程图;
图4A示意性示出了根据本公开实施例的获取待测路径的流程图;
图4B示意性示出了根据本公开实施例的获取待测程序的程序结构框图的流程图;
图4C示意性示出了根据本公开实施例的图形化待测程序的示意图;
图4D示意性示出了根据本公开实施例的图形化待测程序的效果图;
图4E示意性示出了根据本公开实施例的获取与路径组合因子对应的目标测试用例的流程图;
图5示意性示出了根据本公开实施例的测试用例的生成系统的框图;
图6A示意性示出了根据本公开实施例的第一获取模块的框图;
图6B示意性示出了根据本公开实施例的获取单元的框图;
图6C示意性示出了根据本公开实施例的第二获取模块的框图;以及
图7示意性示出了根据本公开实施例的适于实现测试用例的生成方法的计算机系统的框图。
具体实施方式
以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
在使用类似于“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的系统等)。本领域技术人员还应理解,实质上任意表示两个或更多可选项目的转折连词和/或短语,无论是在说明书、权利要求书还是附图中,都应被理解为给出了包括这些项目之一、这些项目任一方、或两个项目的可能性。例如,短语“A或B”应当被理解为包括“A”或“B”、或“A和B”的可能性。
在详细阐述本公开之前,先介绍本案可能涉及到的技术术语如下:
语句覆盖率:又称行覆盖(Line Coverage)、段覆盖(Segment Coverage)或基本块覆盖(Basic Block Coverage),这是最常用也是最常见的一种覆盖方式,它度量被测代码(又称被测程序)中每个可执行语句是否被执行到了,这里说的是“可执行语句”。
分支覆盖率:又称判定覆盖(Decision Coverage),它度量被测程序中每一个判定的分支是否都被测试到了。
条件覆盖率:它度量判定语句中的每个子表达式的结果true和false是否被测试到了。
路径覆盖率:它度量函数的每一个分支是否都被执行了,就是所有可能的分支都执行一遍;有多个分支嵌套时,需要对多个分支进行排列组合。路径覆盖率=覆盖的路径数/总路径数。
本公开的实施例提供了一种能够自动生成路径测试用例的测试用例的生成方法以及能够应用该方法的测试用例的生成系统。该方法包括获取待测程序中包含的至少一条待测路径;确定上述至少一条待测路径中每条待测路径包含的路径组合因子;针对上述每条待测路径,在确定出其包含的路径组合因子后,获取与其包含的路径组合因子对应的目标测试用例;以及基于上述目标测试用例生成相应待测路径的路径测试用例。
图1示意性示出了可以应用本公开的测试用例的生成方法和系统的示例性系统架构。
如图1所示,根据该实施例的系统架构100可以包括终端设备101、102、103,网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线和/或无线通信链路等等。
用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端和/或社交平台软件等(仅为示例)。
终端设备101、102、103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器105可以是提供各种服务的服务器,例如对用户利用终端设备101、102、103所浏览的网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的用户请求等数据进行分析等处理,并将处理结果(例如根据用户请求获取或生成的网页、信息、或数据等)反馈给终端设备。
需要说明的是,本公开实施例所提供的测试用例的生成方法一般可以由服务器105执行。相应地,本公开实施例所提供的测试用例的生成系统一般可以设置于服务器105中。本公开实施例所提供的测试用例的生成方法也可以由不同于服务器105且能够与终端设备101、102、103和/或服务器105通信的服务器或服务器集群执行。相应地,本公开实施例所提供的测试用例的生成系统也可以设置于不同于服务器105且能够与终端设备101、102、103和/或服务器105通信的服务器或服务器集群中。或者,本公开实施例所提供的测试用例的生成方法也可以由终端设备101、102、或103执行,或者也可以由不同于终端设备101、102、或103的其他终端设备执行。相应地,本公开实施例所提供的测试用例的生成系统也可以设置于终端设备101、102、或103中,或设置于不同于终端设备101、102、或103的其他终端设备中。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
图2示意性示出了根据本公开实施例的测试用例的生成方法和系统的应用场景。
目前的单元测试在测试路径覆盖率的过程中,主要包括以下几个步骤:搭建被测试对象的测试工程;编写测试用例;插桩;Mock被调用类;执行测试用例;查看被测试对象的语句、分支、条件和路径覆盖率百分比;等语句、分支、条件覆盖率都达到100%后,再查看路径覆盖率的百分比是否达到100%(对于代码较复杂、路径较多的软件而言,路径覆盖率很难达到100%);如果未达到100%,则再次编写测试用例,用来覆盖未执行的路径,并继续执行;再次查看路径覆盖率的百分比是否达到100%;如果未达到100%,则再次编写测试用例,用来覆盖未执行的路径,并继续执行;如此反复,不断尝试,提高路径覆盖率;直到路径覆盖率达到要求为止;测试结束。
可见,对于代码复杂度较高,路径较多的软件而言,其各种路径的排列组合很多,使用现有技术提供的上述测试方案测试路径覆盖率,需要手动编写的各路径的测试用例很多,工作量很大,并且现有的测试系统和工具不能自动生成路径覆盖率的测试用例,不便于提高路径覆盖率,也不能减少编写测试用例的工作量。在这种情况下,可以使用本公开提供的下述方案自动生成测试路径覆盖率的路径测试用例,可以提高路径覆盖率,减少编写测试用例的工作量。
由于路径覆盖率的测试用例(又称为路径测试用例)一般是其它三种覆盖率测试用例的有效结合,而现有的覆盖率测试方案无法将其它三种覆盖率测试用例有效地利用到路径覆盖率的测试中,而是依赖手动编写方式,需要测试人员人为的去编写各种线路排列组合的测试用例,不能有效利用已有测试用例,不够智能。
基于此,本公开构思考虑将其它三种覆盖率的测试用例有效地利用到路径覆盖率的测试中。
对于一个待测程序中,含有一个for循环,循环体内含有2个if,else和1个switch,case嵌套的代码,其预计绘制出的程序整体结构图效果如图2所示,其中:分支覆盖,对应结构框图中的多个并联分支;条件覆盖,对应A and B,C or D;语句覆盖,对应各串联线路;路径覆盖,为语句+分支+条件覆盖的各种路径的排列组合。
图3示意性示出了根据本公开实施例的测试用例的生成方法的流程图。如图3所示,该方法包括操作S310~S340,其中:
操作S310,获取待测程序中包含的至少一条待测路径。
通常情况下程序都包括语句、分支、条件和路径四部分,并且路径是由语句、分支和条件排列组合形成的。基于此,为了获取一段程序的路径,可以基于关键词对该段程序进行语法分析,先得到相应的语句结构、分支结构和条件结构,再对语句、分支和条件进行排列组合,从而得到该段程序中包含的所有路径。
而在本操作中,为了减少编写测试用例的工作量,可以获取待测程序中包含的所有路径,进而对所有路径都采取自动方式生成测试用例,这种情况可以全自动生成所有路径的路径测试用例(可简称为测试用例),从而能够最大化地减少编写测试用例的工作量。
当然,也可以根据实际情况,从所有路径中选择任意多条路径进行测试用例的自动化生成,未被选中的任意多条路径则辅助手动编写测试用例实现。
操作S320,确定至少一条待测路径中每条待测路径包含的路径组合因子。
此处,路径组合因子是一个统称,对于任一条路径而言,它包括该路径中包含的所有语句、分支和条件。
操作S330,针对每条待测路径,在确定出其包含的路径组合因子后,获取与其包含的路径组合因子对应的目标测试用例。
例如,对于任一条路径而言,假设其路径组合因子都包括:语句1、语句2和语句3,条件1和条件2,分支1、分支2和分支3,则此操作需要获取语句1的测试用例、语句2的测试用例和语句3的测试用例,条件1的测试用例和条件2的测试用例,以及分支1的测试用例、分支2的测试用例和分支3的测试用例,即所有这些测试用例都是本操作需要获取的目标测试用例。
操作S340,基于目标测试用例生成相应待测路径的路径测试用例。
具体地,对于任意路径而言,自动生成路径测试用例时,可以将与各路径组合因子对应的目标测试用例按照该路径中各路径组合因子的排列组合方式进行排列组合,从而生成对应的路径测试用例。
通过本公开的实施例,因为采用了基于语句测试用例、条件测试用例和分支测试用例自动生成对应路径的路径测试用例的技术手段,所以可以根据已有的语句、分支和条件覆盖率的测试用例,自动识别路径覆盖率的测试用例,并自动生成所有路径覆盖的测试用例所以至少部分地克服了相关技术中需要手动编写路径测试用例而导致工作量大,不便于提高路径覆盖率的技术问题,进而达到了降低编写路径覆盖率的测试用例的工作量,有效地提高路径覆盖率的技术效果。
下面参考图4A~图4E,结合具体实施例对图3所示的方法做进一步说明。
图4A示意性示出了根据本公开实施例的获取待测路径的流程图。
作为一种可选的实施例,如图4A所示,上述操作S310可以包括操作S311以及S312~S315中的任意一个:
操作S311,获取待测程序的程序结构框图。
具体地,程序结构框图的获取方式可以包括多种,在此不做限定,例如,可以根据待测程序画出对应的程序结构框图,或者可以从存储设备中读取该待测程序已画好的程序结构框图。
操作S312,从程序结构框图中识别出待测程序中包含的所有路径;或者
操作S313,从程序结构框图中识别出待测程序中包含的所有路径中的至少一条路径;或者
操作S314,基于待测程序的代码执行情况,从程序结构框图中识别出待测程序中包含的所有待执行的路径;或者
操作S315,基于待测程序的代码执行情况,从程序结构框图中识别出待测程序中包含的所有待执行的路径中的至少一条路径。
如图4A所示,操作S312~S314可以择一执行,实际操作时可以根据具体情况选择一种操作执行。
执行操作S312表明待测程序中包含的所有路径都需要自动生成路径覆盖的测试用例;执行操作S313表明待测程序中包含的所有路径中的部分路径需要自动生成路径覆盖的测试用例,而其他路径可以手动编写对应的路径覆盖的测试用例;执行操作S314表明待测程序中已经被覆盖的路径在自动生成路径覆盖的测试用例时可以不考虑,而只考虑自动生成待测程序中尚未被覆盖的所有路径的路径覆盖的测试用例;执行操作S315表明待测程序中已经被覆盖的路径在自动生成路径覆盖的测试用例时可以不考虑,而只考虑自动生成待测程序中尚未被覆盖的所有路径中的部分路径的路径覆盖的测试用例。
通过本公开实施例,可以根据被测程序本身和工作量大小的实际情况考虑对哪些路径进行自动生成路径覆盖的测试用例,具有更高的灵活性。
作为一种可选的实施例,如图4B所示,上述操作S311可以包括操作S3111~S3114:
操作S3111,获取待测程序;
操作S3112,获取待测程序中包含的关键字;
操作S3113,基于获取的关键字对待测程序进行语法分析,得到以下结构中的一种或多种:顺序结构、分支结构和循环结构;以及
操作S3114,基于语法分析得到的结构画出待测程序的程序结构框图。
具体地,如图4C所示,对于一待测程序,绘制其程序结构框图时,需要获取其中包含的所有关键字,并基于这些关键字对该待测程序进行语法分析,得到顺序结构、分支结构和循环结构中的一种或者多种,一般情况下,稍微复杂点的程序都会同时包含顺序结构、分支结构和循环结构的可能性比较大,在得到对应的程序结构后,定义各结构的大小并确定绘图起点,之后通过Datagenerator()将数据源变换为二维数组形式,进而根据二维数组对应的坐标值绘图,最后还可以根据显示界面的大小对绘制的程序结构框图进行缩放处理。
例如,如图4D所示,对于一for循环程序,其中包括for、if/else、case/default等关键字,基于这些关键字进行语法分析后,可以画出图中所示的程序结构框图。
通过本公开实施例,可以简单、准确地画出待测程序的程序结构框图。
作为一种可选的实施例,上述操作S320确定至少一条待测路径中每条待测路径包含的路径组合因子包括:确定至少一条待测路径中每条待测路径包含的语句、分支和条件。
一般情况下,稍微复杂点的程序都会同时包含顺序结构、分支结构和循环结构的可能性比较大,此种情况下,在确定待测路径包含的路径组合因子时可以确定其中包含的所有路径组合因子,具体可以包括语句、分支和条件。
作为一种可选的实施例,如图4E所示,上述操作S330获取与其包含的路径组合因子对应的目标测试用例可以包括操作S331和操作S332:
操作S331,确定每条待测路径包含的路径组合因子中在待测程序的测试过程中已被测试过的路径组合因子;以及
操作S332,获取测试已被测试过的路径组合因子时所执行的测试用例。
此处已被测试过的路径组合因子也称为已被覆盖过的路径组合因子。由于已被覆盖过的路径组合因子一般都是测试通过的路径组合因子,因此其覆盖这些路径组合因子的测试用例也可以确保是能够正常执行的。
具体地,可以基于程序结构框图的代码执行情况,识别已覆盖线路的语句、分支、条件覆盖的测试用例,并保存,其具体实现方案,如下:读取被测对象的源代码,在不破坏被测试程序原有逻辑完整性的前提下,在程序的关键字位置上(if,else,for,switch,case,default等)插入探针,进行代码执行情况的信息采集工作,监控并记录被测代码的覆盖情况。对于完全覆盖的关键字,程序结构框图上相应位置标记绿色;对于部分覆盖的关键字,程序结构框图上相应位置标记黄色;对于没有覆盖的关键字,程序结构框图上相应位置标记红色;效果图如图4D所示。遍历测试用例中的@Test(每个@Test对应一条测试用例),根据代码执行情况,记录关键字覆盖前、后(到下一个关键字覆盖前)的测试用例,视为语句覆盖用例;记录关键字覆盖过程中的测试用例,视为分支覆盖用例;关键字被部分覆盖的测试用例,视为条件覆盖用例。在保存测试用例前,判断该用例是否已保存,若没有,保存该部分用例,并关联该用例与程序结构框图中相应线路位置的对应关系;若已保存过,放弃保存该部分用例,直到所有程序结构框图上的所有线路用例都已保存为止。
作为一种可选的实施例,上述方法还包括:读取待测程序的程序代码;对程序代码进行关键字插桩;在待测程序的测试过程中,将关键字覆盖前后中的测试用例记录为语句覆盖用例并保存;和/或在待测程序的测试过程中,将关键字覆盖过程中的测试用例记录为分支覆盖用例并保存;和/或在待测程序的测试过程中,将关键字部分覆盖中的测试用例记录为条件覆盖用例并保存。
具体地,首先读取待测程序,对待测程序的源代码进行插桩,然后对待测程序进行词法和语法分析,通过分析得到程序控制流关系,对于循环语句分支For,while,do while,分为进入循环体和不进入循环体(循环结共计2个并联;对于判定语句(分支结构):if,else,switch,case,default,按是否满足判定条件,分为2个或多个并联分支;对于程序中的赋值语句、调用语句(顺序结构):按串联方式处理,根据程序内外嵌套的结构,将整体分支串联连接起来。将图形展示在预先设置好的指定大小的窗口中,并设定串/并联结构的图形大小,以及绘图的起点,再将其转换成图形化的数据源数据,根据得到的坐标值,在窗口内画出程序整体结构框图,并标记为灰色线条。对于图形较大超出展示窗口的情况,进行缩放处理,使其以适当大小展示在指定窗口中。
例如,对于一个待测程序,含有一个for循环,循环体内含有2个if,else和1个switch,case嵌套的代码,其预计绘制出的程序整体结构图效果,如图4D所示,其中:分支覆盖,对应结构框图中的多个并联分支;条件覆盖,对应Aand B,C or D;语句覆盖,对应各串联线路;路径覆盖,为语句+分支+条件覆盖的各种路径的排列组合。
作为一种可选的实施例,上述方法还包括:在保存语句覆盖用例和/或分支覆盖用例和/或条件覆盖用例之前,判断语句覆盖用例和/或分支覆盖用例和/或条件覆盖用例是否已保存过;以及若尚未保存过,则保存语句覆盖用例和/或分支覆盖用例和/或条件覆盖用例。
作为一种可选的实施例,上述方法还包括:在保存语句覆盖用例和/或分支覆盖用例和/或条件覆盖用例的过程中,关联语句覆盖用例和/或分支覆盖用例和/或条件覆盖用例与待测程序中的线路的对应关系。
具体地,根据程序路径和已保存的测试用例,驱动生成路径覆盖用例,其设计方案如下:首先,根据程序结构框图,得到程序所有待执行的路径。当测试用例代码执行到第一个关键字节点时,判断该节点与其它节点的结构关系,若是串联,则继续往下执行,判断下一节点与后续其它节点的结构关系,如此往复轮循,当测试用例执行完成时,记录下当前的路径,记为n/总路径数(其中n=1,2,3总路径数),对于已经记录过的重复路径,不予保存,不再记录;若是并联,则跳出该节点,判断下一节点与其它节点的结构关系,如此往复循环,得到程序所有待执行的路径。在得到路径后,开始创建路径覆盖用例。对于每一条路径,由语句、分支、条件组合而成,上面步骤己经将相应的语句覆盖、分支覆盖和条件覆盖的测试用例保存,在生成路径覆盖测试用例时,根据程序结构框图中所有路径,分别将每条待执行测试路径的语句+分支+条件的组合,后台处理查找相应已保存的测试用例,驱动生成相应路径的测试用例。不同的路径组合,组装不同的测试用例,如此往复循环,驱动生成所有路径的路径覆盖率测试用例。
通过本公开实施例,能够识别程序结构框图上的语句、分支和条件覆盖的测试用例,且能够自动生成所有路径的路径覆盖率测试用例,这样能够有效地提高单元测试的路径覆盖率,减少测试人员编写路径覆盖率测试用例的工作量。也即,基于程序结构框图,自动识别语句、分支和条件覆盖的测试用例;根据语句、分支和条件覆盖的测试用例,自动生成所有路径的路径覆盖率测试用例;通过自动生成所有路径的路径覆盖率测试用例的方法,减少测试人员在单元测试时的工作量。
需要说明的是,前述的串联是指各节点首尾相接连起来,并与程序的开始和结束相连。并联是指各节点首与首、尾与尾相接连起来,并与程序的开始和结束相连。
图5示意性示出了根据本公开实施例的测试用例的生成系统的框图。如图5所示,该测试用例的生成系统500包括第一获取模块510、确定模块520、第二获取模块530和生成模块540。
第一获取模块510,用于获取待测程序中包含的至少一条待测路径;确定模块520,用于确定至少一条待测路径中每条待测路径包含的路径组合因子;第二获取模块530,用于针对每条待测路径,在确定出其包含的路径组合因子后,获取与其包含的路径组合因子对应的目标测试用例;以及生成模块540,用于基于目标测试用例生成相应待测路径的路径测试用例。
通过本公开的实施例,因为采用了基于语句测试用例、条件测试用例和分支测试用例自动生成对应路径的路径测试用例的技术手段,所以可以根据已有的语句、分支和条件覆盖率的测试用例,自动识别路径覆盖率的测试用例,并自动生成所有路径覆盖的测试用例所以至少部分地克服了相关技术中需要手动编写路径测试用例而导致工作量大,不便于提高路径覆盖率的技术问题,进而达到了降低编写路径覆盖率的测试用例的工作量,有效地提高路径覆盖率的技术效果。
作为一种可选的实施例,如图6A所示,上述第一获取模块510包括:第一获取单元511,用于获取待测程序的程序结构框图;以及识别单元512,用于:从程序结构框图中识别出待测程序中包含的所有路径;或者从程序结构框图中识别出待测程序中包含的所有路径中的至少一条路径;或者基于待测程序的代码执行情况,从程序结构框图中识别出待测程序中包含的所有待执行的路径;或者基于待测程序的代码执行情况,从程序结构框图中识别出待测程序中包含的所有待执行的路径中的至少一条路径。
通过本公开实施例,可以根据被测程序本身和工作量大小的实际情况考虑对哪些路径进行自动生成路径覆盖的测试用例,具有更高的灵活性。
作为一种可选的实施例,如图6B所示,上述获取单元511包括:第一获取子单元5111,用于获取待测程序;第二获取子单元5112,用于获取待测程序中包含的关键字;分析子单元5113,用于基于获取的关键字对待测程序进行语法分析,得到以下结构中的一种或多种:顺序结构、分支结构和循环结构;以及绘制子单元5114,用于基于语法分析得到的结构画出待测程序的程序结构框图。
通过本公开实施例,可以简单、准确地画出待测程序的程序结构框图。
作为一种可选的实施例,上述确定模块还用于:确定至少一条待测路径中每条待测路径包含的语句、分支和条件。
一般情况下,稍微复杂点的程序都会同时包含顺序结构、分支结构和循环结构的可能性比较大,此种情况下,在确定待测路径包含的路径组合因子时可以确定其中包含的所有路径组合因子,具体可以包括语句、分支和条件。
作为一种可选的实施例,如图6C所示,上述第二获取模块530包括:确定单元531,用于确定每条待测路径包含的路径组合因子中在待测程序的测试过程中已被测试过的路径组合因子;以及第二获取单元532,用于获取测试已被测试过的路径组合因子时所执行的测试用例。
此处已被测试过的路径组合因子也称为已被覆盖过的路径组合因子。由于已被覆盖过的路径组合因子一般都是测试通过的路径组合因子,因此其覆盖这些路径组合因子的测试用例也可以确保是能够正常执行的。
作为一种可选的实施例,上述系统还包括:读取模块,用于读取待测程序的程序代码;插桩模块,用于对程序代码进行关键字插桩;以及保存模块,用于:在待测程序的测试过程中,将关键字覆盖前后中的测试用例记录为语句覆盖用例并保存;和/或在待测程序的测试过程中,将关键字覆盖过程中的测试用例记录为分支覆盖用例并保存;和/或在待测程序的测试过程中,将关键字部分覆盖中的测试用例记录为条件覆盖用例并保存。
通过本公开实施例,能够识别程序结构框图上的语句、分支和条件覆盖的测试用例,且能够自动生成所有路径的路径覆盖率测试用例,这样能够有效地提高单元测试的路径覆盖率,减少测试人员编写路径覆盖率测试用例的工作量。也即,基于程序结构框图,自动识别语句、分支和条件覆盖的测试用例;根据语句、分支和条件覆盖的测试用例,自动生成所有路径的路径覆盖率测试用例;通过自动生成所有路径的路径覆盖率测试用例的方法,减少测试人员在单元测试时的工作量。
作为一种可选的实施例,上述系统还包括:判断模块,用于在保存语句覆盖用例和/或分支覆盖用例和/或条件覆盖用例之前,判断语句覆盖用例和/或分支覆盖用例和/或条件覆盖用例是否已保存过;以及保存模块,还用于在语句覆盖用例和/或分支覆盖用例和/或条件覆盖用例尚未保存过的情况下,保存语句覆盖用例和/或分支覆盖用例和/或条件覆盖用例。
作为一种可选的实施例,上述系统还包括:关联模块,用于在保存语句覆盖用例和/或分支覆盖用例和/或条件覆盖用例的过程中,关联语句覆盖用例和/或分支覆盖用例和/或条件覆盖用例与待测程序中的线路的对应关系。
通过本公开实施例,能够识别程序结构框图上的语句、分支和条件覆盖的测试用例,且能够自动生成所有路径的路径覆盖率测试用例,这样能够有效地提高单元测试的路径覆盖率,减少测试人员编写路径覆盖率测试用例的工作量。也即,基于程序结构框图,自动识别语句、分支和条件覆盖的测试用例;根据语句、分支和条件覆盖的测试用例,自动生成所有路径的路径覆盖率测试用例;通过自动生成所有路径的路径覆盖率测试用例的方法,减少测试人员在单元测试时的工作量。
可以理解的是,第一获取模块510、确定模块520、第二获取模块530和生成模块540可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本发明的实施例,第一获取模块510、确定模块520、第二获取模块530和生成模块540中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以以对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式的适当组合来实现。或者,第一获取模块510、确定模块520、第二获取模块530和生成模块540中的至少一个可以至少被部分地实现为计算机程序模块,当该程序被计算机运行时,可以执行相应模块的功能。
需要说明的是,本公开的方法实施例部分与本公开的系统实施例是相对应的,系统部分的描述具体请参考方法部分,在此不再赘述。
图7示意性示出了根据本公开实施例的适于实现测试用例的生成方法的计算机系统的框图。图7示出的计算机系统仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图7所示,根据本公开实施例的计算机系统700包括处理器701,其可以根据存储在只读存储器(ROM)702中的程序或者从存储部分708加载到随机访问存储器(RAM)703中的程序而执行各种适当的动作和处理。处理器701例如可以包括通用微处理器(例如CPU)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC)),等等。处理器701还可以包括用于缓存用途的板载存储器。处理器701可以包括用于执行参考图3,图4A~图4E描述的根据本公开实施例的系统流程的不同动作的单一处理单元或者是多个处理单元。
在RAM 703中,存储有系统700操作所需的各种程序和数据。处理器701、ROM 702以及RAM 703通过总线704彼此相连。处理器701通过执行ROM 702和/或RAM 703中的程序来执行以上参考图3,图4A~图4E描述的各种操作。需要注意,所述程序也可以存储在除ROM 702和RAM 703以外的一个或多个存储器中。处理器701也可以通过执行存储在所述一个或多个存储器中的程序来执行以上参考图3,图4A~图4E描述的各种操作。
根据本公开的实施例,系统700还可以包括输入/输出(I/O)接口705,输入/输出(I/O)接口705也连接至总线704。系统700还可以包括连接至I/O接口705的以下部件中的一项或多项:包括键盘、鼠标等的输入部分706;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分707;包括硬盘等的存储部分708;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分709。通信部分709经由诸如因特网的网络执行通信处理。驱动器710也根据需要连接至I/O接口705。可拆卸介质711,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器710上,以便于从其上读出的计算机程序根据需要被安装入存储部分708。
根据本公开的实施例,上文参考流程图描述的系统可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读存储介质上的计算机程序,该计算机程序包含用于执行流程图所示的系统的程序代码。在这样的实施例中,该计算机程序可以通过通信部分709从网络上被下载和安装,和/或从可拆卸介质711被安装。在该计算机程序被处理器701执行时,执行本公开实施例的系统中限定的上述功能。根据本公开的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。
需要说明的是,本公开所示的计算机可读存储介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读存储介质,该计算机可读存储介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。根据本公开的实施例,计算机可读存储介质可以包括上文描述的ROM 702和/或RAM 703和/或ROM702和RAM 703以外的一个或多个存储器。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、系统和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
作为另一方面,本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备执行:获取待测程序中包含的至少一条待测路径;确定至少一条待测路径中每条待测路径包含的路径组合因子;针对每条待测路径,在确定出其包含的路径组合因子后,获取与其包含的路径组合因子对应的目标测试用例;以及基于目标测试用例生成相应待测路径的路径测试用例。
以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。

Claims (16)

1.一种测试用例的生成方法,包括:
获取待测程序中包含的至少一条待测路径;
确定所述至少一条待测路径中每条待测路径包含的路径组合因子;
针对所述每条待测路径,在确定出其包含的路径组合因子后,获取与其包含的路径组合因子对应的目标测试用例;以及
基于所述目标测试用例生成相应待测路径的路径测试用例;
其中,所述确定所述至少一条待测路径中每条待测路径包含的路径组合因子包括:
确定所述至少一条待测路径中所述每条待测路径包含的语句、分支和条件;
其中,所述基于所述目标测试用例生成相应待测路径的路径测试用例,包括:将所述待测路径包含的路径组合因子对应的目标测试用例按照所述待测路径的路径组合因子的排列组合方式进行排列组合,生成相应所述待测路径的路径测试用例。
2.根据权利要求1所述的方法,其中,获取待测程序中包含的至少一条待测路径包括:
获取所述待测程序的程序结构框图;
从所述程序结构框图中识别出所述待测程序中包含的所有路径;或者
从所述程序结构框图中识别出所述待测程序中包含的所有路径中的至少一条路径;或者
基于所述待测程序的代码执行情况,从所述程序结构框图中识别出所述待测程序中包含的所有待执行的路径;或者
基于所述待测程序的代码执行情况,从所述程序结构框图中识别出所述待测程序中包含的所有待执行的路径中的至少一条路径。
3.根据权利要求2所述的方法,其中,获取所述待测程序的程序结构框图包括:
获取所述待测程序;
获取所述待测程序中包含的关键字;
基于获取的所述关键字对所述待测程序进行语法分析,得到以下结构中的一种或多种:顺序结构、分支结构和循环结构;以及
基于语法分析得到的结构画出所述待测程序的程序结构框图。
4.根据权利要求1所述的方法,其中,获取与其包含的路径组合因子对应的目标测试用例包括:
确定所述每条待测路径包含的路径组合因子中在所述待测程序的测试过程中已被测试过的路径组合因子;以及
获取测试所述已被测试过的路径组合因子时所执行的测试用例。
5.根据权利要求1所述的方法,其中,所述方法还包括:
读取所述待测程序的程序代码;
对所述程序代码进行关键字插桩;
在所述待测程序的测试过程中,将关键字覆盖前后中的测试用例记录为语句覆盖用例并保存;和/或
在所述待测程序的测试过程中,将关键字覆盖过程中的测试用例记录为分支覆盖用例并保存;和/或
在所述待测程序的测试过程中,将关键字部分覆盖中的测试用例记录为条件覆盖用例并保存。
6.根据权利要求5所述的方法,其中,所述方法还包括:
在保存所述语句覆盖用例和/或所述分支覆盖用例和/或所述条件覆盖用例之前,判断所述语句覆盖用例和/或所述分支覆盖用例和/或所述条件覆盖用例是否已保存过;以及
若尚未保存过,则保存所述语句覆盖用例和/或所述分支覆盖用例和/或所述条件覆盖用例。
7.根据权利要求5或6所述的方法,其中,所述方法还包括:
在保存所述语句覆盖用例和/或所述分支覆盖用例和/或所述条件覆盖用例的过程中,关联所述语句覆盖用例和/或所述分支覆盖用例和/或所述条件覆盖用例与所述待测程序中的线路的对应关系。
8.一种测试用例的生成系统,包括:
第一获取模块,用于获取待测程序中包含的至少一条待测路径;
确定模块,用于确定所述至少一条待测路径中每条待测路径包含的路径组合因子;
第二获取模块,用于针对所述每条待测路径,在确定出其包含的路径组合因子后,获取与其包含的路径组合因子对应的目标测试用例;以及
生成模块,用于基于所述目标测试用例生成相应待测路径的路径测试用例;
其中,所述确定模块还用于:确定所述至少一条待测路径中所述每条待测路径包含的语句、分支和条件;
其中,所述生成模块还用于:将所述待测路径包含的路径组合因子对应的目标测试用例按照所述待测路径的路径组合因子的排列组合方式进行排列组合,生成相应所述待测路径的路径测试用例。
9.根据权利要求8所述的系统,其中,所述第一获取模块包括:
第一获取单元,用于获取所述待测程序的程序结构框图;以及
识别单元,用于:
从所述程序结构框图中识别出所述待测程序中包含的所有路径;或者
从所述程序结构框图中识别出所述待测程序中包含的所有路径中的至少一条路径;或者
基于所述待测程序的代码执行情况,从所述程序结构框图中识别出所述待测程序中包含的所有待执行的路径;或者
基于所述待测程序的代码执行情况,从所述程序结构框图中识别出所述待测程序中包含的所有待执行的路径中的至少一条路径。
10.根据权利要求9所述的系统,其中,所述获取单元包括:
第一获取子单元,用于获取所述待测程序;
第二获取子单元,用于获取所述待测程序中包含的关键字;
分析子单元,用于基于获取的所述关键字对所述待测程序进行语法分析,得到以下结构中的一种或多种:顺序结构、分支结构和循环结构;以及
绘制子单元,用于基于语法分析得到的结构画出所述待测程序的程序结构框图。
11.根据权利要求8所述的系统,其中,所述第二获取模块包括:
确定单元,用于确定所述每条待测路径包含的路径组合因子中在所述待测程序的测试过程中已被测试过的路径组合因子;以及
第二获取单元,用于获取测试所述已被测试过的路径组合因子时所执行的测试用例。
12.根据权利要求8所述的系统,其中,所述系统还包括:
读取模块,用于读取所述待测程序的程序代码;
插桩模块,用于对所述程序代码进行关键字插桩;以及
保存模块,用于:
在所述待测程序的测试过程中,将关键字覆盖前后中的测试用例记录为语句覆盖用例并保存;和/或
在所述待测程序的测试过程中,将关键字覆盖过程中的测试用例记录为分支覆盖用例并保存;和/或
在所述待测程序的测试过程中,将关键字部分覆盖中的测试用例记录为条件覆盖用例并保存。
13.根据权利要求12所述的系统,其中:
所述系统还包括:判断模块,用于在保存所述语句覆盖用例和/或所述分支覆盖用例和/或所述条件覆盖用例之前,判断所述语句覆盖用例和/或所述分支覆盖用例和/或所述条件覆盖用例是否已保存过;以及
所述保存模块,还用于在所述语句覆盖用例和/或所述分支覆盖用例和/或所述条件覆盖用例尚未保存过的情况下,保存所述语句覆盖用例和/或所述分支覆盖用例和/或所述条件覆盖用例。
14.根据权利要求12或13所述的系统,其中,所述系统还包括:
关联模块,用于在保存所述语句覆盖用例和/或所述分支覆盖用例和/或所述条件覆盖用例的过程中,关联所述语句覆盖用例和/或所述分支覆盖用例和/或所述条件覆盖用例与所述待测程序中的线路的对应关系。
15.一种计算机系统,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序,
其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器实现权利要求1至7中任一项所述的测试用例的生成方法。
16.一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器实现权利要求1至7中任一项所述的测试用例的生成方法。
CN201711485313.0A 2017-12-29 2017-12-29 测试用例的生成方法及系统、计算机系统 Active CN109992498B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711485313.0A CN109992498B (zh) 2017-12-29 2017-12-29 测试用例的生成方法及系统、计算机系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711485313.0A CN109992498B (zh) 2017-12-29 2017-12-29 测试用例的生成方法及系统、计算机系统

Publications (2)

Publication Number Publication Date
CN109992498A CN109992498A (zh) 2019-07-09
CN109992498B true CN109992498B (zh) 2022-12-02

Family

ID=67111266

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711485313.0A Active CN109992498B (zh) 2017-12-29 2017-12-29 测试用例的生成方法及系统、计算机系统

Country Status (1)

Country Link
CN (1) CN109992498B (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110377524B (zh) * 2019-07-25 2023-04-18 中国工商银行股份有限公司 报表系统的测试方法、装置、系统及介质
CN112527571B (zh) * 2019-09-18 2024-02-02 珠海零边界集成电路有限公司 一种cpu指令集覆盖率计算方法及装置
CN111382085A (zh) * 2020-05-09 2020-07-07 北京字节跳动网络技术有限公司 测试用例生成方法、装置、设备及介质
CN111930613B (zh) * 2020-07-14 2023-11-28 深圳市紫光同创电子有限公司 待测芯片的测试用例生成方法、装置、电子设备以及介质
CN112486808B (zh) * 2020-11-20 2024-04-16 中国人寿保险股份有限公司 一种系统测试方法、装置、电子设备及存储介质
CN112559338B (zh) * 2020-12-11 2024-02-06 北京百度网讯科技有限公司 应用程序的校验方法、装置、设备及存储介质
CN114721932B (zh) * 2021-01-06 2024-04-09 腾讯科技(深圳)有限公司 一种数据处理方法、装置、设备及存储介质
CN113377683B (zh) * 2021-08-12 2022-01-28 神州数码融信软件有限公司 软件测试用例的生成方法、系统、设备、终端、介质及应用
CN113641591B (zh) * 2021-10-14 2022-06-24 腾讯科技(深圳)有限公司 测试用例生成方法及装置、测试方法及装置
CN115015683B (zh) * 2022-08-09 2022-11-04 深圳永贵技术有限公司 电缆生产的性能测试方法、装置、设备及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101984416A (zh) * 2010-11-02 2011-03-09 中兴通讯股份有限公司 一种测试用例的生成方法及装置
CN102176200A (zh) * 2009-09-25 2011-09-07 南京航空航天大学 一种软件测试用例自动生成方法
CN102968368A (zh) * 2012-08-30 2013-03-13 中国人民解放军63928部队 一种遍历场景状态图的嵌入式测试用例设计与生成方法
CN105022691A (zh) * 2015-07-22 2015-11-04 国家电网公司 一种基于uml图的高度自动化软件测试方法
CN106681927A (zh) * 2017-01-09 2017-05-17 郑州云海信息技术有限公司 一种测试用例生成方法及其装置

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1908892A (zh) * 2005-08-01 2007-02-07 王彤 测试用例设计方法和系统
CN101075208B (zh) * 2007-07-19 2011-04-06 中兴通讯股份有限公司 应用于白盒路径测试的测试用例生成方法
CN102419728B (zh) * 2011-11-01 2014-10-29 北京邮电大学 基于覆盖率量化指标确定软件测试过程充分性的方法
CN103530223B (zh) * 2012-07-06 2018-05-04 百度在线网络技术(北京)有限公司 一种自动生成单元测试用例的方法及装置
JP6287447B2 (ja) * 2014-03-26 2018-03-07 富士通株式会社 テストケース生成プログラム、装置、及び方法
CN106681903B (zh) * 2015-11-11 2020-05-12 阿里巴巴集团控股有限公司 生成测试用例的方法及装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102176200A (zh) * 2009-09-25 2011-09-07 南京航空航天大学 一种软件测试用例自动生成方法
CN101984416A (zh) * 2010-11-02 2011-03-09 中兴通讯股份有限公司 一种测试用例的生成方法及装置
CN102968368A (zh) * 2012-08-30 2013-03-13 中国人民解放军63928部队 一种遍历场景状态图的嵌入式测试用例设计与生成方法
CN105022691A (zh) * 2015-07-22 2015-11-04 国家电网公司 一种基于uml图的高度自动化软件测试方法
CN106681927A (zh) * 2017-01-09 2017-05-17 郑州云海信息技术有限公司 一种测试用例生成方法及其装置

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
基本路径测试用例设计算法;王敏,陈少敏,陈亚光;《计算机应用》;20131130;全文 *
用于基本路径测试的路径字符串组合算法;王敏,陈亚光;《计算机工程与科学》;20131231;全文 *
软件集成测试中的一种用例生成方法;王战敏;《西安交通大学学报》;20071231;全文 *

Also Published As

Publication number Publication date
CN109992498A (zh) 2019-07-09

Similar Documents

Publication Publication Date Title
CN109992498B (zh) 测试用例的生成方法及系统、计算机系统
US11151018B2 (en) Method and apparatus for testing a code file
CN107506300B (zh) 一种用户界面测试方法、装置、服务器和存储介质
US10318595B2 (en) Analytics based on pipes programming model
CN108197036B (zh) 用于确定增量代码的覆盖率信息的方法和装置
CN111221521B (zh) 日志代码的生成方法、装置、计算机系统和可读存储介质
CN109684188B (zh) 测试方法和装置
CN110134604A (zh) 一种无需代码的单元或接口测试方法、装置和计算机设备
CN113032244A (zh) 接口测试方法、装置、计算机系统和计算机可读存储介质
CN112199261A (zh) 应用程序性能分析方法及装置、电子设备
CN103955425B (zh) 网页web探索测试装置及方法
US20160292067A1 (en) System and method for keyword based testing of custom components
CN116483888A (zh) 程序评估方法及装置、电子设备和计算机可读存储介质
CN110764760A (zh) 用于绘制程序流程图的方法、装置、计算机系统和介质
CN116166547A (zh) 代码变更范围分析方法、装置、设备、存储介质
CN111666201A (zh) 回归测试方法、装置、介质及电子设备
CN116257226A (zh) 数据校验方法、装置、电子设备及存储介质
CN117667663A (zh) 控件定位路径确定方法、装置、设备、存储介质及产品
CN111427874B (zh) 医疗数据生产的质控方法、装置以及电子设备
CN113626301A (zh) 生成测试脚本的方法和装置
CN113360365A (zh) 一种流程测试方法和流程测试系统
CN110825438B (zh) 用于模拟人工智能芯片的数据处理的方法和装置
CN113360380A (zh) 基于流程图生成数据案例的方法及装置
CN110618927A (zh) 用于测试应用的方法和装置
CN115904985A (zh) 一种应用测试方法、装置、电子设备及可读存储介质

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