CN113722228A - 软件系统测试方法及装置 - Google Patents
软件系统测试方法及装置 Download PDFInfo
- Publication number
- CN113722228A CN113722228A CN202111032331.XA CN202111032331A CN113722228A CN 113722228 A CN113722228 A CN 113722228A CN 202111032331 A CN202111032331 A CN 202111032331A CN 113722228 A CN113722228 A CN 113722228A
- Authority
- CN
- China
- Prior art keywords
- api
- test
- software system
- target
- test 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.)
- Pending
Links
- 238000012360 testing method Methods 0.000 title claims abstract description 642
- 238000000034 method Methods 0.000 claims abstract description 55
- 230000001419 dependent effect Effects 0.000 claims abstract description 33
- 239000008186 active pharmaceutical agent Substances 0.000 claims abstract 129
- 230000008859 change Effects 0.000 claims description 56
- 238000004519 manufacturing process Methods 0.000 claims description 31
- 238000004590 computer program Methods 0.000 claims description 16
- 238000012986 modification Methods 0.000 claims description 15
- 230000004048 modification Effects 0.000 claims description 15
- 238000003860 storage Methods 0.000 claims description 12
- 239000012085 test solution Substances 0.000 claims description 8
- 230000008569 process Effects 0.000 abstract description 31
- 238000007726 management method Methods 0.000 description 35
- 238000010586 diagram Methods 0.000 description 29
- 230000006870 function Effects 0.000 description 15
- 238000004891 communication Methods 0.000 description 10
- 238000012423 maintenance Methods 0.000 description 10
- 230000010354 integration Effects 0.000 description 9
- 238000012545 processing Methods 0.000 description 9
- SPBWHPXCWJLQRU-FITJORAGSA-N 4-amino-8-[(2r,3r,4s,5r)-3,4-dihydroxy-5-(hydroxymethyl)oxolan-2-yl]-5-oxopyrido[2,3-d]pyrimidine-6-carboxamide Chemical compound C12=NC=NC(N)=C2C(=O)C(C(=O)N)=CN1[C@@H]1O[C@H](CO)[C@@H](O)[C@H]1O SPBWHPXCWJLQRU-FITJORAGSA-N 0.000 description 8
- 238000013507 mapping Methods 0.000 description 7
- 238000010998 test method Methods 0.000 description 7
- 238000005516 engineering process Methods 0.000 description 6
- 238000013100 final test Methods 0.000 description 6
- 125000004122 cyclic group Chemical group 0.000 description 5
- 238000004458 analytical method Methods 0.000 description 4
- 239000000872 buffer Substances 0.000 description 4
- 239000000306 component Substances 0.000 description 4
- 238000012544 monitoring process Methods 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 3
- 239000000243 solution Substances 0.000 description 3
- 239000013589 supplement Substances 0.000 description 3
- 239000008358 core component Substances 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013524 data verification Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000012217 deletion Methods 0.000 description 1
- 230000037430 deletion Effects 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 239000011521 glass Substances 0.000 description 1
- 238000002372 labelling Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000013522 software testing Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 230000003245 working effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3684—Test management for test design, e.g. generating new test cases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
Abstract
本申请实施例提供一种软件系统测试方法及装置,可用于大数据技术领域,方法包括:在软件系统对应的API依赖关系图中查找当前在软件系统中发生变更的目标API对应的目标测试对象,目标测试对象包括:目标API和该目标API对应的全部依赖API,以及目标API和依赖API各自所属的应用或子系统;获取目标测试对象对应的测试用例集并生成目标测试方案以在软件系统中对目标测试对象进行测试。本申请能够有效提高查找受到当前发生变更的目标API影响的全部的测试对象的效率及自动化程度,进而能够有效提高软件系统测试过程的效率及自动化程度,并能够在提高测试效率并降低冗余的基础上,提高软件系统测试过程的测试可靠性及全面性。
Description
技术领域
本申请涉及软件测试技术领域,特别涉及大数据技术领域,具体涉及软件系统测试方法及装置。
背景技术
随着云计算、云原生等技术迅速发展,用户对软件系统的需求趋于多样化,软件系统的复杂度日益提升,并且向分布式、高可用、可伸缩和智能化运维方向发展。当前,软件系统逐渐向微服务技术架构演进。在微服务技术框架下,复杂软件系统由大量拥有独立进程,具备独立的开发、测试、部署和运维能力的微服务构建,微服务之间由应用编程接口API相互连接。API的变更对整个软件系统的稳定性带来重大影响,因此,需要针对API变更快速制定单元测试和系统集成测试方案,并评估测试效果。
在现有的软件系统测试过程中,当软件系统中的部分API发生变化时,需要依赖人工或使用预先定义的映射表判定受到影响的子系统进行集成测试。当API发生变化时,由于需要依赖人工或使用预先定义的映射表判定受到影响的API、应用及子系统等待测试对象,因此导致现有的软件系统测试方式存在测试效率低、冗余度高以及待测试对象被遗漏而导致的测试可靠性及全面性差等问题。
发明内容
针对现有技术中的问题,本申请提供一种软件系统测试方法及装置,能够有效提高查找受到当前发生变更的目标API影响的全部的测试对象的效率及自动化程度,进而能够有效提高软件系统测试过程的效率及自动化程度,并能够在提高测试效率并降低冗余的基础上,提高软件系统测试过程的测试可靠性及全面性。
为解决上述技术问题,本申请提供以下技术方案:
第一方面,本申请提供一种软件系统测试方法,包括:
在软件系统对应的API依赖关系图中查找当前在所述软件系统中发生变更的目标API对应的目标测试对象,其中,所述目标测试对象包括:所述目标API和该目标API对应的全部依赖API,以及所述目标API和依赖API各自所属的应用或子系统;
获取所述目标测试对象对应的测试用例集并生成目标测试方案,以基于该目标测试方案在所述软件系统中对所述目标测试对象进行测试。
进一步地,在所述在软件系统对应的API依赖关系图中查找当前在所述软件系统中发生变更的目标API对应的目标测试对象之前,还包括:
获取软件系统对应的各个API元数据,其中,所述API元数据用于存储唯一对应的一个API的唯一标识以及该API与其他API之间的依赖关系,该API元数据还用于唯一对应的一个API所属的应用或子系统;
将各个所述API元数据分别作为节点,并根据各个API之间的依赖关系确定各个所述节点之间的有向边,以生成由各个所述节点和各个所述节点之间的有向边构成的API依赖关系图。
进一步地,所述在软件系统对应的API依赖关系图中查找当前在所述软件系统中发生变更的目标API对应的目标测试对象,包括:
接收针对所述软件系统的API变更消息,其中,该API变更消息中包含有发送变更的目标API的唯一标识和变更类型,所述变更类型包括:新增、删除或修改;
基于所述目标API的唯一标识,在软件系统对应的API依赖关系图中查找该目标API对应的API依赖关系子图,其中,该API依赖关系子图中包含有所述目标API对应的目标测试对象。
进一步地,所述获取所述目标测试对象对应的测试用例集并生成目标测试方案,包括:
获取所述目标测试对象中各个API各自对应的API覆盖图,其中,各个所述API覆盖图与各个测试用例之间为一一对应关系;
根据所述API依赖关系子图及所述API覆盖图,选取所述目标测试对象对应的测试用例集;
基于所述测试用例集生成针对所述目标测试对象的目标测试方案。
进一步地,在所述获取所述目标测试对象对应的测试用例集并生成目标测试方案之前,还包括:
获取软件系统中各个子系统或应用对应的测试用例,所述测试用例包括:用于覆盖单一子系统或应用中的API的单元测试用例,以及,用于覆盖多个子系统或应用之间的API的集成测试用例;
根据所述软件系统当前对应的API依赖关系图,生成各个所述测试用例各自对应的API覆盖图;
其中,所述单元测试用例对应的API覆盖图用于存储该单元测试用例覆盖的单一子系统或应用中的API,若覆盖单一子系统或应用中的API有多个,则所述单元测试用例对应的API覆盖图还用于存储该单元测试用例覆盖的单一子系统或应用中的各个API之间的依赖关系;
所述集成测试用例对应的API覆盖图用于存储该集成测试用例覆盖的多个子系统或应用之间的各个API及各个API之间的依赖关系。
进一步地,所述根据所述API依赖关系子图及所述API覆盖图,选取所述目标测试对象对应的测试用例集,包括:
根据所述API依赖关系子图和所述API覆盖图,确定所述API依赖关系子图中的各个所述API各自对应的测试用例的标识及总数;
若所述API依赖关系子图中存在测试用例总数为1的API,则将测试用例总数为1的API对应的测试用例的标识加入测试用例集中;
若所述API依赖关系子图中存在测试用例总数多于1的API,且该API对应的测试用例中覆盖预设的热点子系统和/或热点API,则将覆盖预设的热点子系统和/或热点API的测试用例的标识加入所述测试用例集中。
进一步地,所述API覆盖图还用于存储对应的测试用例的测试成本;
相对应的,所述根据所述API依赖关系子图及所述API覆盖图,选取所述目标测试对象对应的测试用例集,还包括:
若所述API依赖关系子图中存在测试用例总数多于1的API,且该API对应的测试用例中未覆盖所述热点子系统和/或热点API,则根据该API对应的各个所述测试用例各自对应的测试成本及API覆盖率选取对应的测试用例的标识加入所述测试用例集中。
进一步地,还包括:
接收针对所述软件系统的API新增消息,其中,该API新增消息中包含有待新增API对应的API元数据;
根据所述待新增API对应的API元数据,在所述API依赖关系图增加所述待新增API对应的节点以及与所述待新增API之间存在的依赖关系的其他节点之间的有向边。
进一步地,还包括:
接收针对所述软件系统的API删除消息,其中,该API删除消息中包含有待删除API对应的API元数据;
根据所述待删除API对应的API元数据,在所述API依赖关系图删除所述待删除API对应的节点以及与所述待删除API之间存在的依赖关系的其他节点之间的有向边。
进一步地,还包括:
接收针对所述软件系统的API修改消息,其中,所述API修改消息中包含有待修改API的API修改元数据;
根据所述待修改API对应在所述API依赖关系图中的原API元数据与所述API修改元数据,确定受到所述待修改API的修改影响的待修改内容,其中,所述待修改内容包括所述待修改API的依赖API、待删除的所述目标API与其他API之间的依赖关系及待新增的所述目标API与其他API之间的依赖关系中的至少一项;
基于所述待修改内容在所述API依赖关系图中修改与所述待修改API之间存在的依赖关系的其他节点之间的有向边。
进一步地,还包括:
接收API隐式调用关系记录,其中,该API隐式调用关系记录预先基于所述软件系统的生产事故日志对应的回溯事故原因数据中获取;
根据所述API隐式调用关系记录在所述API依赖关系图中增加对应的API隐式调用关系。
进一步地,还包括:
自所述软件系统的生产环境产生的日志中,提取热点对象,所述热点对象包括热点子系统和/或热点API;
根据所述热点对象更新所述API依赖关系子图。
第二方面,本申请提供一种软件系统测试装置,包括:
查图模块,用于在软件系统对应的API依赖关系图中查找当前在所述软件系统中发生变更的目标API对应的目标测试对象,其中,所述目标测试对象包括:所述目标API和该目标API对应的全部依赖API,以及所述目标API和依赖API各自所属的应用或子系统;
测试模块,用于获取所述目标测试对象对应的测试用例集并生成目标测试方案,以基于该目标测试方案在所述软件系统中对所述目标测试对象进行测试。
第三方面,本申请提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现所述的软件系统测试方法。
第四方面,本申请提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现所述的软件系统测试方法。
由上述技术方案可知,本申请提供的一种软件系统测试方法及装置,方法包括:在软件系统对应的API依赖关系图中查找当前在所述软件系统中发生变更的目标API对应的目标测试对象,其中,所述目标测试对象包括:所述目标API和该目标API对应的全部依赖API,以及所述目标API和依赖API各自所属的应用或子系统;获取所述目标测试对象对应的测试用例集并生成目标测试方案,以基于该目标测试方案在所述软件系统中对所述目标测试对象进行测试;通过预设目标软件系统对应的API依赖关系图,并在目标软件系统中存在发生变更的目标API时,在API依赖关系图中查找与所述目标API之间存在依赖关系的全部的依赖API,以及所述目标API和关联API各自所属的应用或子系统,能够有效提高查找受到当前发生变更的目标API影响的全部的测试对象的效率及自动化程度,进而能够有效提高软件系统测试过程的效率及自动化程度;同时,由于无需对目标软件系统进行全面测试,因此能够进一步降低软件系统测试的冗余度;在此基础上,还能够避免待测试对象被遗漏,有效提高待测试对象的获取全面性及可靠性,因此能够在提高测试效率并降低冗余的基础上,提高软件系统测试过程的测试可靠性及全面性,进而提高软件系统测试结果的可靠性及有效性。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例中的软件系统测试装置与客户端设备之间的关系示意图。
图2是本申请实施例中的软件系统测试方法的第一种流程示意图。
图3是本申请实施例中的软件系统测试方法的第二种流程示意图。
图4是本申请实施例中的软件系统测试方法的第三种流程示意图。
图5是本申请实施例中的软件系统测试方法的第四种流程示意图。
图6是本申请实施例中的软件系统测试方法的第五种流程示意图。
图7是本申请实施例中的软件系统测试方法中步骤220的流程示意图。
图8是本申请实施例中的软件系统测试方法的第六种流程示意图。
图9是本申请实施例中的软件系统测试方法中步骤310和步骤320的流程示意图。
图10是本申请实施例中的软件系统测试方法中步骤410和步骤420的流程示意图。
图11是本申请实施例中的软件系统测试方法中步骤510至步骤520的流程示意图。
图12是本申请实施例中的软件系统测试方法中步骤610和步骤620的流程示意图。
图13是本申请实施例中的软件系统测试方法的第七种流程示意图。
图14是本申请实施例中的软件系统测试装置的结构示意图。
图15是本申请应用实例提供的应用软件系统测试系统实现软件系统测试方法的逻辑示意图。
图16是本申请应用实例提供的API的元数据核心内容的举例示意图。
图17是本申请应用实例提供的调用API节点对被调用API节点的依赖关系的举例示意图。
图18是本申请应用实例提供的API依赖关系的传递性的举例示意图。
图19是本申请应用实例提供的包含全部子系统、API、应用的API依赖关系图的举例示意图。
图20是本申请应用实例提供受到影响的API和子系统的举例示意图。
图21是本申请应用实例提供的测试用例的API覆盖图的举例示意图。
图22是本申请实施例中的电子设备的结构示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,本申请公开的软件系统测试方法和装置可用于大数据技术领域,也可用于除大数据技术领域之外的任意领域,本申请公开的软件系统测试方法和装置的应用领域不做限定。
在传统API单元测试和系统集成测试方法中,当软件系统中的部分API发生变化时,需要依赖人工或使用预先定义的映射表判定受到影响的子系统进行集成测试。这种传统的API单元测试与系统集成测试方法效率较低,生成的测试方案冗余度较高。当复杂的软件系统内各子系统及API变更频繁时,也无法快速生成有针对性的测试方案,无法满足用户对软件系统内部API变更的自动化单元测试和系统集成测试的需求。
基于此,针对现有的软件系统测试方式,当API发生变化时,由于需要依赖人工或使用预先定义的映射表判定受到影响的API、应用及子系统等待测试对象,因此导致现有的软件系统测试方式存在测试效率低、冗余度高以及待测试对象被遗漏而导致的测试可靠性及全面性差等问题,本申请实施例提供一种软件系统测试方法,通过预设目标软件系统对应的API依赖关系图,并在目标软件系统中存在发生变更的目标API时,在API依赖关系图中查找与所述目标API之间存在依赖关系的全部的依赖API,以及所述目标API和关联API各自所属的应用或子系统,能够有效提高查找受到当前发生变更的目标API影响的全部的测试对象的效率及自动化程度,进而能够有效提高软件系统测试过程的效率及自动化程度;同时,由于无需对目标软件系统进行全面测试,因此能够进一步降低软件系统测试的冗余度;在此基础上,还能够避免待测试对象被遗漏,有效提高待测试对象的获取全面性及可靠性,因此能够在提高测试效率并降低冗余的基础上,提高软件系统测试过程的测试可靠性及全面性,进而提高软件系统测试结果的可靠性及有效性。
基于上述内容,本申请还提供一种用于实现本申请一个或多个实施例中提供的软件系统测试方法的软件系统测试装置,该软件系统测试装置可以为一服务器,参见图1,该软件系统测试装置可以自行或通过第三方服务器等与各个客户端设备之间依次通信连接,软件系统测试装置可以接收客户端设备发送的软件系统测试指令,并根据该软件系统测试指令在软件系统对应的API依赖关系图中查找当前在所述软件系统中发生变更的目标API对应的目标测试对象,软件系统测试装置还可以将对所述目标测试对象进行测试的测试结果发送至用户的客户端设备等。
在另一种实际应用情形中,前述的软件系统测试装置进行软件系统测试的部分可以在如上述内容的服务器中执行,也可以所有的操作都在所述用户端设备中完成。具体可以根据所述用户端设备的处理能力,以及用户使用场景的限制等进行选择。本申请对此不作限定。若所有的操作都在所述用户端设备中完成,所述用户端设备还可以包括处理器,用于软件系统测试的具体处理。
可以理解的是,所述移动终端可以包括智能手机、平板电子设备、网络机顶盒、便携式计算机、个人数字助理(PDA)、车载设备、智能穿戴设备等任何能够装载应用的移动设备。其中,所述智能穿戴设备可以包括智能眼镜、智能手表、智能手环等。
上述的移动终端可以具有通信模块(即通信单元),可以与远程的服务器进行通信连接,实现与所述服务器的数据传输。所述服务器可以包括任务调度中心一侧的服务器,其他的实施场景中也可以包括中间平台的服务器,例如与任务调度中心服务器有通信链接的第三方服务器平台的服务器。所述的服务器可以包括单台计算机设备,也可以包括多个服务器组成的服务器集群,或者分布式装置的服务器结构。
上述服务器与所述移动终端之间可以使用任何合适的网络协议进行通信,包括在本申请提交日尚未开发出的网络协议。所述网络协议例如可以包括TCP/IP协议、UDP/IP协议、HTTP协议、HTTPS协议等。当然,所述网络协议例如还可以包括在上述协议之上使用的RPC协议(Remote Procedure Call Protocol,远程过程调用协议)、REST协议(Representational State Transfer,表述性状态转移协议)等。
在本申请的一个或多个实施例中,微服务技术框架是指为每个微服务提供一个或多个API。
在本申请的一个或多个实施例中,应用程序编程接口API(ApplicationProgramming Interface)是一些预先定义的接口(如函数、HTTP接口),或指软件系统不同组成部分衔接的约定。用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程,而又无需访问源码,或理解内部工作机制的细节。
具体通过下述各个实施例及应用实例分别进行详细说明。
为了解决现有的软件系统测试方式,当API发生变化时,由于需要依赖人工或使用预先定义的映射表判定受到影响的API、应用及子系统等待测试对象,因此导致现有的软件系统测试方式存在测试效率低、冗余度高以及待测试对象被遗漏而导致的测试可靠性及全面性差等问题,本申请提供一种软件系统测试方法的实施例,参见图2,基于软件系统测试装置执行的所述软件系统测试方法具体包含有如下内容:
步骤100:在软件系统对应的API依赖关系图中查找当前在所述软件系统中发生变更的目标API对应的目标测试对象,其中,所述目标测试对象包括:所述目标API和该目标API对应的全部依赖API,以及所述目标API和依赖API各自所属的应用或子系统。
可以理解的是,软件系统测试装置可以预先根据API实现及API元数据自动发现API之间的调用关系,建立API依赖关系有向有环图。API资产管理库随API的变化更新,当引入新的API,或API变更导致API之间的调用关系发生变化时,重建API依赖关系图。
步骤200:获取所述目标测试对象对应的测试用例集并生成目标测试方案,以基于该目标测试方案在所述软件系统中对所述目标测试对象进行测试。
可以理解的是,当软件系统中的一部分API发生变化时,需要针对该变化选择测试用例,生成测试方案。测试方案需要满足如下条件:1、测试方案需要覆盖发生变化的API,以及所有依赖该API的子系统、API、应用程序;2、测试方案需要尽可能覆盖热点子系统、API、应用程序;3、测试方案需要在保证1和2的同时,降低测试成本。测试方案以发生变更的API列表、API依赖关系图、热点子系统及API列表、测试用例的API覆盖图、测试用例的综合成本为输入,输出为一组测试用例的列表。
从上述描述可知,本申请实施例提供的软件系统测试方法,通过预设目标软件系统对应的API依赖关系图,并在目标软件系统中存在发生变更的目标API时,在API依赖关系图中查找与所述目标API之间存在依赖关系的全部的依赖API,以及所述目标API和关联API各自所属的应用或子系统,能够有效提高查找受到当前发生变更的目标API影响的全部的测试对象的效率及自动化程度,进而能够有效提高软件系统测试过程的效率及自动化程度;同时,由于无需对目标软件系统进行全面测试,因此能够进一步降低软件系统测试的冗余度;在此基础上,还能够避免待测试对象被遗漏,有效提高待测试对象的获取全面性及可靠性,因此能够在提高测试效率并降低冗余的基础上,提高软件系统测试过程的测试可靠性及全面性,进而提高软件系统测试结果的可靠性及有效性。
为了进一步提高在软件系统对应的API依赖关系图中查找当前在所述软件系统中发生变更的目标API对应的目标测试对象的效率及自动化程度,在本申请提供的软件系统测试方法的一个实施例,参见图3,所述软件系统测试方法的步骤100之前还具体包含有如下内容:
步骤010:获取软件系统对应的各个API元数据,其中,所述API元数据用于存储唯一对应的一个API的唯一标识以及该API与其他API之间的依赖关系,该API元数据还用于唯一对应的一个API所属的应用或子系统。
步骤020:将各个所述API元数据分别作为节点,并根据各个API之间的依赖关系确定各个所述节点之间的有向边,以生成由各个所述节点和各个所述节点之间的有向边构成的API依赖关系图。
可以理解的是,API的元数据有软件系统开发人员提供。每个API包含一个唯一标识符,并包含一个或多个指向其他API的链接,用于标识该API所调用(依赖)的API列表。对所有API及元数据进行遍历,为每个API建立一个节点。若API包含对其他API的调用,则遍历该API中包含的调用链接,找到被调用的API节点,并建立一条由被调用节点指向调用节点的有向边,表示调用API节点对被调用API节点的依赖关系。API依赖关系的传递性在遍历全部API的过程中自动建立。当API资产管理模块中登记记录的全部API完成遍历时,即可建立一个包含全部子系统、API、应用的API依赖关系图。
从上述描述可知,本申请实施例提供的软件系统测试方法,通过生成由各个所述节点和各个所述节点之间的有向边构成的API依赖关系图,且该API依赖关系图中涵盖了各个API的唯一标识、各个API分别与其他API之间的依赖关系以及各个API所属的应用或子系统,能够进一步提高在软件系统对应的API依赖关系图中查找当前在所述软件系统中发生变更的目标API对应的目标测试对象的效率及自动化程度,并进一步避免待测试对象被遗漏,有效提高待测试对象的获取全面性及可靠性。
为了更加直观地确定发生变更的目标API对应的目标测试对象,在本申请提供的软件系统测试方法的一个实施例,参见图4,所述软件系统测试方法的步骤100具体包含有如下内容:
步骤110:接收针对所述软件系统的API变更消息,其中,该API变更消息中包含有发送变更的目标API的唯一标识和变更类型,所述变更类型包括:新增、删除或修改。
步骤120:基于所述目标API的唯一标识,在软件系统对应的API依赖关系图中查找该目标API对应的API依赖关系子图,其中,该API依赖关系子图中包含有所述目标API对应的目标测试对象。
具体来说,软件系统测试装置可以根据API依赖关系图查询受API变更影响的API、子系统及应用,并计算受影响的API、子系统及应用的依赖关系子图。
从上述描述可知,本申请实施例提供的软件系统测试方法,通过在API依赖关系图中直接查找目标API对应的API依赖关系子图,能够更加直观地确定发生变更的目标API对应的目标测试对象,进而能够进一步提高查找受到当前发生变更的目标API影响的全部的测试对象的效率及自动化程度,进而能够进一步提高软件系统测试过程的效率及自动化程度。
为了提高确定所述目标测试对象对应的测试用例集的效率及自动化程度,在本申请提供的软件系统测试方法的一个实施例,参见图5,所述软件系统测试方法的步骤200具体包含有如下内容:
步骤210:获取所述目标测试对象中各个API各自对应的API覆盖图,其中,各个所述API覆盖图与各个测试用例之间为一一对应关系。
步骤220:根据所述API依赖关系子图及所述API覆盖图,选取所述目标测试对象对应的测试用例集。
步骤230:基于所述测试用例集生成针对所述目标测试对象的目标测试方案。
从上述描述可知,本申请实施例提供的软件系统测试方法,在API依赖关系图的基础上,通过采用测试用例的API覆盖图,能够有效提高确定所述目标测试对象对应的测试用例集的效率及自动化程度,并能够进一步提高确定所述目标测试对象对应的测试用例集的全面性,进而能够进一步提高软件系统测试过程的效率及自动化程度,并能够在降低软件系统测试冗余的基础上,进一步提高软件系统测试过程的全面性及可靠性。
为了进一步提高确定所述目标测试对象对应的测试用例集的效率及自动化程度,在本申请提供的软件系统测试方法的一个实施例,参见图6,所述软件系统测试方法的步骤200之前还具体包含有如下内容:
步骤021:获取软件系统中各个子系统或应用对应的测试用例,所述测试用例包括:用于覆盖单一子系统或应用中的API的单元测试用例,以及,用于覆盖多个子系统或应用之间的API的集成测试用例;
步骤022:根据所述软件系统当前对应的API依赖关系图,生成各个所述测试用例各自对应的API覆盖图;其中,所述单元测试用例对应的API覆盖图用于存储该单元测试用例覆盖的单一子系统或应用中的API,若覆盖单一子系统或应用中的API有多个,则所述单元测试用例对应的API覆盖图还用于存储该单元测试用例覆盖的单一子系统或应用中的各个API之间的依赖关系;所述集成测试用例对应的API覆盖图用于存储该集成测试用例覆盖的多个子系统或应用之间的各个API及各个API之间的依赖关系。
具体来说,软件系统测试装置为测试用例建立API覆盖图,并记录测试用例的综合成本。单元测试用例覆盖单一子系统内部一个或多个API;集成测试用例覆盖多个子系统之间的多个API。测试用例的API覆盖图为有向有环图,是API资产管理库中,API依赖关系图的子图。测试用例的综合成本值由测试人员、测试设备、测试运行时间等开销综合评定。测试用例管理库随测试用例及API资产管理库的变化更新。当测试用例发生变化时,根据测试用例的设计和实现更新测试用例的API覆盖图。
从上述描述可知,本申请实施例提供的软件系统测试方法,通过预先构建单元测试用例和集成测试用例对应的API覆盖图,能够进一步提高确定所述目标测试对象对应的测试用例集的效率及自动化程度,并能够进一步提高确定所述目标测试对象对应的测试用例集的全面性,进而能够进一步提高软件系统测试过程的效率及自动化程度,并能够在降低软件系统测试冗余的基础上,进一步提高软件系统测试过程的全面性及可靠性。
为了覆盖全部受本次变更影响的API及API之间的调用关系,在本申请提供的软件系统测试方法的一个实施例,参见图7,所述软件系统测试方法中的步骤220具体包含有如下内容:
步骤221:根据所述API依赖关系子图和所述API覆盖图,确定所述API依赖关系子图中的各个所述API各自对应的测试用例的标识及总数。
步骤222:若所述API依赖关系子图中存在测试用例总数为1的API,则将测试用例总数为1的API对应的测试用例的标识加入测试用例集中。
步骤223:若所述API依赖关系子图中存在测试用例总数多于1的API,且该API对应的测试用例中覆盖预设的热点子系统和/或热点API,则将覆盖预设的热点子系统和/或热点API的测试用例的标识加入所述测试用例集中。
可以理解的是,可以遍历变更API的依赖关系子图中的全部API节点,对每一个API节点,计算候选测试方案中,能够覆盖该API的测试用例数量及测试用例列表;若某API节点的测试用例覆盖数量为1,则选择该测试用例作为唯一覆盖测试用例加入最终方案;遍历剩余的测试用例,若该测试用例覆盖热点子系统、API,则将该测试用例加入最终测试方案。
从上述描述可知,本申请实施例提供的软件系统测试方法,能够根据受API变更影响的API依赖关系子图和测试用例覆盖图,选择一组单元测试用例和集成测试用例,用于生成针对该次API变更的测试方案。该测试方案中的测试用例覆盖全部受本次变更影响的API及API之间的调用关系。
为了进一步去除重复率较高、测试成本较高的测试用例,降低测试的测试成本,在本申请提供的软件系统测试方法的一个实施例,所述API覆盖图还用于存储对应的测试用例的测试成本,参见图8,所述软件系统测试方法中的步骤210之后还具体包含有如下内容:
步骤224:将若所述API依赖关系子图中存在测试用例总数多于1的API,且该API对应的测试用例中未覆盖所述热点子系统和/或热点API,则根据该API对应的各个所述测试用例各自对应的测试成本及API覆盖率选取对应的测试用例的标识加入所述测试用例集中。
具体来说,针对已经选定的最终测试方案,计算子系统、API覆盖,并和变更API的依赖关系子图中的API节点列表进行对比。尚未被最终测试方案覆盖的API列表可以由候选测试方案中的多个剩余测试用例进行覆盖。此时,逐步选择综合测试成本值较低且覆盖率高的测试用例,对剩余API进行覆盖补充,直至完成剩余API的全覆盖。
从上述描述可知,本申请实施例提供的软件系统测试方法,产生的测试方案可以完全覆盖发生变更的API及受到该变更影响的子系统、API、应用程序,确保受到该变更影响的热点子系统、API、应用程序可以被测试覆盖,去除重复率较高、测试成本较高的测试用例,降低测试的测试成本。
为了进一步提高API依赖关系图的应用可靠性及有效性,在本申请提供的软件系统测试方法的一个实施例,参见图9,所述软件系统测试方法中的步骤012之后还具体包含有如下内容:
步骤310:接收针对所述软件系统的API新增消息,其中,该API新增消息中包含有待新增API对应的API元数据;
步骤320:根据所述待新增API对应的API元数据,在所述API依赖关系图增加所述待新增API对应的节点以及与所述待新增API之间存在的依赖关系的其他节点之间的有向边。
具体来说,软件开发人员向软件系统新增API时,向API资产管理模块注册新的API,并提供API元数据。API资产管理模块为新API在API依赖关系图中注册新的节点,然后遍历该API的调用关系列表,在API依赖关系图中找到该API的依赖API节点列表,为该API的依赖节点建立指向该API的有向边,完成新增API的注册,并完成API依赖关系图的更新和维护。
从上述描述可知,本申请实施例提供的软件系统测试方法,通过在API依赖关系图中增加所述待新增API对应的节点以及与所述待新增API之间存在的依赖关系的其他节点之间的有向边,能够有效提高API依赖关系图的应用可靠性及有效性,及时实现API依赖关系图的更新和维护,进而能够有效提高查找当前在所述软件系统中发生变更的目标API对应的目标测试对象的准确性、全面性及可靠性,进而能够进一步提高软件系统测试过程的测试准确性、全面性及可靠性。
为了进一步提高API依赖关系图的应用可靠性及有效性,在本申请提供的软件系统测试方法的一个实施例,参见图10,所述软件系统测试方法中的步骤012之后还具体包含有如下内容:
步骤410:接收针对所述软件系统的API删除消息,其中,该API删除消息中包含有待删除API对应的API元数据;
步骤420:根据所述待删除API对应的API元数据,在所述API依赖关系图删除所述待删除API对应的节点以及与所述待删除API之间存在的依赖关系的其他节点之间的有向边。
具体来说,软件开发人员删除软件系统中的API时,API资产管理模块根据该API的元数据遍历该API的依赖API节点,删除依赖API节点指向该变更API的边。当全部依赖API节点遍历完成之后,删除该API节点,完成API依赖关系图的更新和维护。
从上述描述可知,本申请实施例提供的软件系统测试方法,通过在API依赖关系图中删除所述待删除API对应的节点以及与所述待删除API之间存在的依赖关系的其他节点之间的有向边,能够有效提高API依赖关系图的应用可靠性及有效性,及时实现API依赖关系图的更新和维护,进而能够有效提高查找当前在所述软件系统中发生变更的目标API对应的目标测试对象的准确性、全面性及可靠性,进而能够进一步提高软件系统测试过程的测试准确性、全面性及可靠性。
为了进一步提高API依赖关系图的应用可靠性及有效性,在本申请提供的软件系统测试方法的一个实施例,参见图11,所述软件系统测试方法中的步骤012之后还具体包含有如下内容:
步骤510:接收针对所述软件系统的API修改消息,其中,所述API修改消息中包含有待修改API的API修改元数据。
步骤520:根据所述待修改API对应在所述API依赖关系图中的原API元数据与所述API修改元数据,确定受到所述待修改API的修改影响的待修改内容,其中,所述待修改内容包括所述待修改API的依赖API、待删除的所述目标API与其他API之间的依赖关系及待新增的所述目标API与其他API之间的依赖关系中的至少一项。
步骤530:基于所述待修改内容在所述API依赖关系图中修改与所述待修改API之间存在的依赖关系的其他节点之间的有向边。
具体来说,软件开发人员向软件系统提交API变更时,向API资产管理模块提交更新后的API元数据。API资产管理模块比较新、旧API元数据中的API调用关系列表,并找到受影响的依赖API节点。对于变更中删除的API调用关系,API资产管理模块删除原依赖API节点中指向变更API节点的边;对于变更中新增的API调用关系,API资产管理模块新增依赖API节点指向变更API节点的边。完成API依赖关系图的重建后,API资产管理模块使用新的API元数据覆盖旧的API元数据,完成API依赖关系图的更新和维护。
从上述描述可知,本申请实施例提供的软件系统测试方法,通过在API依赖关系图中修改与所述待修改API之间存在的依赖关系的其他节点之间的有向边,能够有效提高API依赖关系图的应用可靠性及有效性,及时实现API依赖关系图的更新和维护,进而能够有效提高查找当前在所述软件系统中发生变更的目标API对应的目标测试对象的准确性、全面性及可靠性,进而能够进一步提高软件系统测试过程的测试准确性、全面性及可靠性。
为了进一步完善API依赖关系图,在本申请提供的软件系统测试方法的一个实施例,参见图12,所述软件系统测试方法中的步骤012之后还具体包含有如下内容:
步骤610:接收API隐式调用关系记录,其中,该API隐式调用关系记录预先基于所述软件系统的生产事故日志对应的回溯事故原因数据中获取。
步骤620:根据所述API隐式调用关系记录在所述API依赖关系图中增加对应的API隐式调用关系。
具体来说,生产事故分析中,若发现API之间没有显式的调用关系,但存在隐式的依赖,软件系统的开发或测试人员可以用人工分析的方法在API元数据中增加隐式调用关系记录,然后通过上述步骤3.2描述的方法,更新API依赖关系图。隐式依赖关系也将参与后续测试方案的生成,确保当部分API发生变更时,受该API隐式依赖影响的子系统、API、应用也能够被测试方案覆盖。
从上述描述可知,本申请实施例提供的软件系统测试方法,通过在所述API依赖关系图中增加对应的API隐式调用关系,能够进一步完善API依赖关系图,隐式依赖关系也将参与后续测试方案的生成,确保当部分API发生变更时,受该API隐式依赖影响的子系统、API、应用也能够被测试方案覆盖。
为了进一步完善API依赖关系子图,在本申请提供的软件系统测试方法的一个实施例,参见图13,所述软件系统测试方法中的步骤120和步骤200之间还具体包含有如下内容:
步骤130:自所述软件系统的生产环境产生的日志中,提取热点对象,所述热点对象包括热点子系统和/或热点API。
步骤140:根据所述热点对象更新所述API依赖关系子图。
具体来说,热点子系统、API定义为用户访问量大、故障影响范围广、测试优先级高的子系统、API。当多个子系统、API的测试覆盖相同时,优先选择热点子系统、API进行测试,可以保证在覆盖重点应用的同时,解决测试时间和测试成本。热点子系统、API可以由生产数据中的日志流量信息自动发现,也可由人工标注。热点子系统和API的自动发现不在本申请应用实例的讨论范围之内。生产数据监控模块用于自动或人工提取热点子系统、API,作为测试方案生成模块的补充输入。
从上述描述可知,本申请实施例提供的软件系统测试方法,热点API和子系统为软件系统中的核心组件或模块,对整个软件系统的运行产生重大影响。根据测试阶段和测试需求的不同,热点API和子系统可以被加入上述API依赖关系子图,使得计算生成的测试方案能够覆盖生产环境中的热点API和子系统。
从软件层面来说,为了解决现有的软件系统测试方式,当API发生变化时,由于需要依赖人工或使用预先定义的映射表判定受到影响的API、应用及子系统等待测试对象,因此导致现有的软件系统测试方式存在测试效率低、冗余度高以及待测试对象被遗漏而导致的测试可靠性及全面性差等问题,本申请提供一种用于执行所述软件系统测试方法中全部或部分内容的软件系统测试装置的实施例,参见图14,所述软件系统测试装置具体包含有如下内容:
查图模块10,用于在软件系统对应的API依赖关系图中查找当前在所述软件系统中发生变更的目标API对应的目标测试对象,其中,所述目标测试对象包括:所述目标API和该目标API对应的全部依赖API,以及所述目标API和依赖API各自所属的应用或子系统。
测试模块20,用于获取所述目标测试对象对应的测试用例集并生成目标测试方案,以基于该目标测试方案在所述软件系统中对所述目标测试对象进行测试。
本申请提供的软件系统测试装置的实施例具体可以用于执行上述实施例中的软件系统测试方法的实施例的处理流程,其功能在此不再赘述,可以参照上述方法实施例的详细描述。
从上述描述可知,本申请实施例提供的软件系统测试装置,通过预设目标软件系统对应的API依赖关系图,并在目标软件系统中存在发生变更的目标API时,在API依赖关系图中查找与所述目标API之间存在依赖关系的全部的依赖API,以及所述目标API和关联API各自所属的应用或子系统,能够有效提高查找受到当前发生变更的目标API影响的全部的测试对象的效率及自动化程度,进而能够有效提高软件系统测试过程的效率及自动化程度;同时,由于无需对目标软件系统进行全面测试,因此能够进一步降低软件系统测试的冗余度;在此基础上,还能够避免待测试对象被遗漏,有效提高待测试对象的获取全面性及可靠性,因此能够在提高测试效率并降低冗余的基础上,提高软件系统测试过程的测试可靠性及全面性,进而提高软件系统测试结果的可靠性及有效性。
为了进一步说明本方案,为解决当前API接口测试问题,本申请应用实例提供一种应用软件系统测试系统实现的软件系统测试方法,涉及软件测试技术领域,是一种自动化和半自动化的应用编程接口API单元测试和系统集成测试的软件系统测试方法。具体说明如下:
(1)本申请应用实例提供一种API资产管理的方法和装置,用于建立和维护软件系统、各子系统及各应用的API列表,根据API实现及API元数据自动发现API之间的调用关系,建立API依赖关系有向有环图。API资产管理库随API的变化更新,当引入新的API,或API变更导致API之间的调用关系发生变化时,重建API依赖关系图。
(2)本申请应用实例提供一种测试用例管理的方法和装置,用于维护软件系统内的单元测试用例和集成测试用例,为测试用例建立API覆盖图,并记录测试用例的综合成本。单元测试用例覆盖单一子系统内部一个或多个API;集成测试用例覆盖多个子系统之间的多个API。测试用例的API覆盖图为有向有环图,是API资产管理库中,API依赖关系图的子图。测试用例的综合成本值由测试人员、测试设备、测试运行时间等开销综合评定。测试用例管理库随测试用例及API资产管理库的变化更新。当测试用例发生变化时,根据测试用例的设计和实现更新测试用例的API覆盖图。
(3)本申请应用实例提供一种针对API变更的API测试方案自动化生成方法,包括:根据API依赖关系图查询受API变更影响的API、子系统及应用,并计算受影响的API、子系统及应用的依赖关系子图;根据受API变更影响的API依赖关系子图和测试用例覆盖图,选择一组单元测试用例和集成测试用例,用于生成针对该次API变更的测试方案。该测试方案中的测试用例覆盖全部受本次变更影响的API及API之间的调用关系,并且所有测试用例的合并综合成本最低。
(4)本申请应用实例提供一种基于生产数据的测试方案验证、优化方法和装置。该装置从生产环境产生的日志中提取热点API和子系统。热点API和子系统为软件系统中的核心组件或模块,对整个软件系统的运行产生重大影响。根据测试阶段和测试需求的不同,热点API和子系统可以被加入上述API依赖关系子图,使得计算生成的测试方案能够覆盖生产环境中的热点API和子系统。
(5)本申请应用实例提供一种生产事故回溯方法,用于从生产事故日志中回溯事故原因,寻找缺失的API测试点和API依赖关系,完善测试方案。不同的API之间可能存在隐式依赖关系。忽略API间的隐式依赖关系可能导致生成的测试方案不足以覆盖全部业务流程。生产事故回溯可以通过人工或基于机器学习的方法发现API之间的隐式调用关系,将API间的隐式依赖关系加入API资产管理库并参与测试方案生成计算,增加测试方案的覆盖。
基于上述内容,本申请应用实例主要由API资产管理模块、测试用例管理模块、生产事故回溯模块、生产数据监控模块、测试方案生成模块构成。API资产管理模块记录软件系统内所有子系统、API、及应用的调用关系信息,用于生成API依赖关系图。生产事故回溯模块通过人工审核生产事故中的日志信息,添加API隐士依赖关系,补充并完善API依赖关系图。测试用例管理模块记录软件测试中的单元测试、系统集成测试的测试用例,以及每个测试用例所覆盖的子系统、API、应用信息,并提供测试用例的综合成本。生产数据监控模块收集生产环境的日志、访问流量等信息,提供热点子系统、API的列表。测试方案生成模块以API依赖关系图、测试用例的API覆盖图、测试用例的综合成本、热点API、子系统列表为输入,根据发生变更的API自动选择测试用例,生成测试方案。
参见图15,本申请应用实例提供的应用软件系统测试系统实现的软件系统测试方法具体包含有如下内容:
步骤1:构建API元数据。API的元数据有软件系统开发人员提供。API的元数据核心内容如图16所示,具体包含有API元数据中关于API之间调用关系的定义。每个API包含一个唯一标识符,并包含一个或多个指向其他API的链接,用于标识该API所调用(依赖)的API列表。
步骤2:构建API依赖关系图。对API资产管理模块中的所有API及元数据进行遍历,为每个API建立一个节点。若API包含对其他API的调用,则遍历该API中包含的调用链接,找到被调用的API节点,并建立一条由被调用节点指向调用节点的有向边,表示调用API节点对被调用API节点的依赖关系,如图17所示。其中,若API_1调用了API_2,则API_2上的变更会影响API_1的运行。定义API_1,API_2为API依赖关系有向有环图的两个节点,且有一条有向边由API_2指向API_1。
API依赖关系的传递性(图18)在遍历全部API的过程中自动建立。其中,若应用APP调用API_1,且API_1调用API_2,则API_2上的变更会传递至API_1及APP。
当API资产管理模块中登记记录的全部API完成遍历时,即可建立一个包含全部子系统、API、应用的API依赖关系图,如图19所示。其中,任一API发生变更时,可藉由API节点之间的有向边计算所有受到该API节点变更所影响的API、子系统、应用。以使后续可以根据API依赖关系图生成对有的API依赖关系子图。其中,若子系统1中API_1发生变更,则可生成如图20所示的受到影响的API和子系统,可作为测试方案生成模块的输入,用以选择测试用例对节点和边进行覆盖。
步骤3:API依赖关系图的更新与维护。API依赖关系图的更新通常由API变更触发,由API资产管理模块完成。API变更可以包括API的新增、既有API依赖关系的变更、API的删除。具体包含有下述步骤3.1至步骤3.3。
步骤3.1:新增API。软件开发人员向软件系统新增API时,向API资产管理模块注册新的API,并提供API元数据。API资产管理模块为新API在API依赖关系图中注册新的节点,然后遍历该API的调用关系列表,在API依赖关系图中找到该API的依赖API节点列表,为该API的依赖节点建立指向该API的有向边,完成新增API的注册,并完成API依赖关系图的更新和维护。
步骤3.2:变更API。软件开发人员向软件系统提交API变更时,向API资产管理模块提交更新后的API元数据。API资产管理模块比较新、旧API元数据中的API调用关系列表,并找到受影响的依赖API节点。对于变更中删除的API调用关系,API资产管理模块删除原依赖API节点中指向变更API节点的边;对于变更中新增的API调用关系,API资产管理模块新增依赖API节点指向变更API节点的边。完成API依赖关系图的重建后,API资产管理模块使用新的API元数据覆盖旧的API元数据,完成API依赖关系图的更新和维护。
步骤3.3:删除API。软件开发人员删除软件系统中的API时,API资产管理模块根据该API的元数据遍历该API的依赖API节点,删除依赖API节点指向该变更API的边。当全部依赖API节点遍历完成之后,删除该API节点,完成API依赖关系图的更新和维护。
步骤4:根据生产事故回溯测试缺陷,完善API依赖关系图。生产事故分析中,若发现API之间没有显式的调用关系,但存在隐式的依赖,软件系统的开发或测试人员可以用人工分析的方法在API元数据中增加隐式调用关系记录,然后通过上述步骤3.2描述的方法,更新API依赖关系图。隐式依赖关系也将参与后续测试方案的生成,确保当部分API发生变更时,受该API隐式依赖影响的子系统、API、应用也能够被测试方案覆盖。
步骤5:热点子系统、API的发现和标注。热点子系统、API定义为用户访问量大、故障影响范围广、测试优先级高的子系统、API。当多个子系统、API的测试覆盖相同时,优先选择热点子系统、API进行测试,可以保证在覆盖重点应用的同时,解决测试时间和测试成本。热点子系统、API可以由生产数据中的日志流量信息自动发现,也可由人工标注。热点子系统和API的自动发现不在本申请应用实例的讨论范围之内。生产数据监控模块用于自动或人工提取热点子系统、API,作为测试方案生成模块的补充输入。
步骤6:构建测试用例的API覆盖图。测试用例的API覆盖图由软件测试人员提供,参见图21。其中,测试用例的覆盖图为API依赖关系图的子图,表示该测试用例能够覆盖的API节点及API之间的调用/依赖关系。通常,单元测试用例可以覆盖单一子系统内的一个或多个API,系统集成测试用例可以覆盖多个子系统的多个API。
步骤7:构建测试用例的综合成本列表。测试用例的综合成本定义为运行该测试用例的综合开销,可包括测试用例的运行时间、运行该测试用例需要消耗的系统资源、运行该测试用例需要的测试人员等。测试用例的综合成本可用于在测试方案的生成过程中计算测试方案的消耗。当多种测试方案都符合测试覆盖的需求时,可以选择综合成本较低的测试方案。
步骤8:构建测试方案。当软件系统中的一部分API发生变化时,需要针对该变化选择测试用例,生成测试方案。测试方案需要满足如下条件:1、测试方案需要覆盖发生变化的API,以及所有依赖该API的子系统、API、应用程序;2、测试方案需要尽可能覆盖热点子系统、API、应用程序;3、测试方案需要在保证1和2的同时,降低测试成本。测试方案以发生变更的API列表、API依赖关系图、热点子系统及API列表、测试用例的API覆盖图、测试用例的综合成本为输入,输出为一组测试用例的列表。如下步骤可以用于测试方案的构建:
步骤8.1:标注变更API。可参考图21。变更的API列表由软件系统的开发人员提供,测试方案生成模块在API依赖关系图中对发生变更的API进行标注。
步骤8.2:变更API的依赖关系子图。在API依赖关系图中,以发生变更的API节点为起点,遍历所有的依赖API节点及应用节点,并对依赖API、应用节点进行标注。当遍历完成时,所有被标注节点构成了发生变更的API的依赖关系子图。
步骤8.3:构建候选测试方案。候选测试方案可定义为覆盖变更API的依赖关系子图中全部API节点的测试用例的集合。候选测试方案中的测试用例组合可以完全覆盖发生变更的API以及受到该变更影响的子系统、API、应用程序,并且对部分API可能存在重复覆盖。在不计测试成本的情况下,该测试方案可以提交测试系统进行测试。
步骤8.4:优化测试方案。在考虑测试成本、需要对测试方案进行择优、去重的情况下,按如下方法进行测试方案优化:
1、遍历变更API的依赖关系子图中的全部API节点,对每一个API节点,计算候选测试方案中,能够覆盖该API的测试用例数量及测试用例列表;
2、若某API节点的测试用例覆盖数量为1,则选择该测试用例作为唯一覆盖测试用例加入最终方案;
3、遍历剩余的测试用例,若该测试用例覆盖热点子系统、API,则将该测试用例加入最终测试方案;
4、针对已经选定的最终测试方案,计算子系统、API覆盖,并和变更API的依赖关系子图中的API节点列表进行对比。尚未被最终测试方案覆盖的API列表可以由候选测试方案中的多个剩余测试用例进行覆盖。此时,逐步选择综合测试成本值较低且覆盖率高的测试用例,对剩余API进行覆盖补充,直至完成剩余API的全覆盖。
该步骤产生的测试方案可以完全覆盖发生变更的API及受到该变更影响的子系统、API、应用程序,确保受到该变更影响的热点子系统、API、应用程序可以被测试覆盖,去除重复率较高、测试成本较高的测试用例,降低测试的综合成本。
本申请应用实例提供的软件系统测试方法具备如下有益效果:
1、可以根据API的实现和原数据自动生成API资产库和API依赖关系图,避免手工配置、维护API的繁琐,同时提高准确度。
2、可以为测试用例建立完备的API覆盖图,完善测试用例的管理和效能评估;并通过API依赖关系图、测试用例API覆盖图、测试用例综合成本值自动生成最优化的测试方案,在保证API和API调用路径全覆盖的同时,选取综合成本值最低的测试用例组合,减少测试冗余。
3、可以建立生产数据验证机制和生产事故回溯机制,将生产运行数据和生产事故数据引入测试方案的生成过程,实现测试效率的可持续增长。
从硬件层面来说,为了解决现有的软件系统测试方式,当API发生变化时,由于需要依赖人工或使用预先定义的映射表判定受到影响的API、应用及子系统等待测试对象,因此导致现有的软件系统测试方式存在测试效率低、冗余度高以及待测试对象被遗漏而导致的测试可靠性及全面性差等问题,本申请提供一种用于实现所述软件系统测试方法中的全部或部分内容的电子设备的实施例,所述电子设备具体包含有如下内容:
图22为本申请实施例的电子设备9600的系统构成的示意框图。如图22所示,该电子设备9600可以包括中央处理器9100和存储器9140;存储器9140耦合到中央处理器9100。值得注意的是,该图22是示例性的;还可以使用其他类型的结构,来补充或代替该结构,以实现电信功能或其他功能。
在一实施例中,软件系统测试功能可以被集成到中央处理器中。其中,中央处理器可以被配置为进行如下控制:
步骤100:在软件系统对应的API依赖关系图中查找当前在所述软件系统中发生变更的目标API对应的目标测试对象,其中,所述目标测试对象包括:所述目标API和该目标API对应的全部依赖API,以及所述目标API和依赖API各自所属的应用或子系统。
步骤200:获取所述目标测试对象对应的测试用例集并生成目标测试方案,以基于该目标测试方案在所述软件系统中对所述目标测试对象进行测试。
从上述描述可知,本申请实施例提供的电子设备,通过预设目标软件系统对应的API依赖关系图,并在目标软件系统中存在发生变更的目标API时,在API依赖关系图中查找与所述目标API之间存在依赖关系的全部的依赖API,以及所述目标API和关联API各自所属的应用或子系统,能够有效提高查找受到当前发生变更的目标API影响的全部的测试对象的效率及自动化程度,进而能够有效提高软件系统测试过程的效率及自动化程度;同时,由于无需对目标软件系统进行全面测试,因此能够进一步降低软件系统测试的冗余度;在此基础上,还能够避免待测试对象被遗漏,有效提高待测试对象的获取全面性及可靠性,因此能够在提高测试效率并降低冗余的基础上,提高软件系统测试过程的测试可靠性及全面性,进而提高软件系统测试结果的可靠性及有效性。
在另一个实施方式中,软件系统测试装置可以与中央处理器9100分开配置,例如可以将软件系统测试装置配置为与中央处理器9100连接的芯片,通过中央处理器的控制来实现软件系统测试功能。
如图22所示,该电子设备9600还可以包括:通信模块9110、输入单元9120、音频处理器9130、显示器9160、电源9170。值得注意的是,电子设备9600也并不是必须要包括图22中所示的所有部件;此外,电子设备9600还可以包括图22中没有示出的部件,可以参考现有技术。
如图22所示,中央处理器9100有时也称为控制器或操作控件,可以包括微处理器或其他处理器装置和/或逻辑装置,该中央处理器9100接收输入并控制电子设备9600的各个部件的操作。
其中,存储器9140,例如可以是缓存器、闪存、硬驱、可移动介质、易失性存储器、非易失性存储器或其它合适装置中的一种或更多种。可储存上述与失败有关的信息,此外还可存储执行有关信息的程序。并且中央处理器9100可执行该存储器9140存储的该程序,以实现信息存储或处理等。
输入单元9120向中央处理器9100提供输入。该输入单元9120例如为按键或触摸输入装置。电源9170用于向电子设备9600提供电力。显示器9160用于进行图像和文字等显示对象的显示。该显示器例如可为LCD显示器,但并不限于此。
该存储器9140可以是固态存储器,例如,只读存储器(ROM)、随机存取存储器(RAM)、SIM卡等。还可以是这样的存储器,其即使在断电时也保存信息,可被选择性地擦除且设有更多数据,该存储器的示例有时被称为EPROM等。存储器9140还可以是某种其它类型的装置。存储器9140包括缓冲存储器9141(有时被称为缓冲器)。存储器9140可以包括应用/功能存储部9142,该应用/功能存储部9142用于存储应用程序和功能程序或用于通过中央处理器9100执行电子设备9600的操作的流程。
存储器9140还可以包括数据存储部9143,该数据存储部9143用于存储数据,例如联系人、数字数据、图片、声音和/或任何其他由电子设备使用的数据。存储器9140的驱动程序存储部9144可以包括电子设备的用于通信功能和/或用于执行电子设备的其他功能(如消息传送应用、通讯录应用等)的各种驱动程序。
通信模块9110即为经由天线9111发送和接收信号的发送机/接收机9110。通信模块(发送机/接收机)9110耦合到中央处理器9100,以提供输入信号和接收输出信号,这可以和常规移动通信终端的情况相同。
基于不同的通信技术,在同一电子设备中,可以设置有多个通信模块9110,如蜂窝网络模块、蓝牙模块和/或无线局域网模块等。通信模块(发送机/接收机)9110还经由音频处理器9130耦合到扬声器9131和麦克风9132,以经由扬声器9131提供音频输出,并接收来自麦克风9132的音频输入,从而实现通常的电信功能。音频处理器9130可以包括任何合适的缓冲器、解码器、放大器等。另外,音频处理器9130还耦合到中央处理器9100,从而使得可以通过麦克风9132能够在本机上录音,且使得可以通过扬声器9131来播放本机上存储的声音。
本申请的实施例还提供能够实现上述实施例中的软件系统测试方法中全部步骤的一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述实施例中的执行主体为服务器或客户端的软件系统测试方法的全部步骤,例如,所述处理器执行所述计算机程序时实现下述步骤:
步骤100:在软件系统对应的API依赖关系图中查找当前在所述软件系统中发生变更的目标API对应的目标测试对象,其中,所述目标测试对象包括:所述目标API和该目标API对应的全部依赖API,以及所述目标API和依赖API各自所属的应用或子系统。
步骤200:获取所述目标测试对象对应的测试用例集并生成目标测试方案,以基于该目标测试方案在所述软件系统中对所述目标测试对象进行测试。
从上述描述可知,本申请实施例提供的计算机可读存储介质,通过预设目标软件系统对应的API依赖关系图,并在目标软件系统中存在发生变更的目标API时,在API依赖关系图中查找与所述目标API之间存在依赖关系的全部的依赖API,以及所述目标API和关联API各自所属的应用或子系统,能够有效提高查找受到当前发生变更的目标API影响的全部的测试对象的效率及自动化程度,进而能够有效提高软件系统测试过程的效率及自动化程度;同时,由于无需对目标软件系统进行全面测试,因此能够进一步降低软件系统测试的冗余度;在此基础上,还能够避免待测试对象被遗漏,有效提高待测试对象的获取全面性及可靠性,因此能够在提高测试效率并降低冗余的基础上,提高软件系统测试过程的测试可靠性及全面性,进而提高软件系统测试结果的可靠性及有效性。
本领域内的技术人员应明白,本发明的实施例可提供为方法、装置、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(装置)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
本发明中应用了具体实施例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (15)
1.一种软件系统测试方法,其特征在于,包括:
在软件系统对应的API依赖关系图中查找当前在所述软件系统中发生变更的目标API对应的目标测试对象,其中,所述目标测试对象包括:所述目标API和该目标API对应的全部依赖API,以及所述目标API和依赖API各自所属的应用或子系统;
获取所述目标测试对象对应的测试用例集并生成目标测试方案,以基于该目标测试方案在所述软件系统中对所述目标测试对象进行测试。
2.根据权利要求1所述的软件系统测试方法,其特征在于,在所述在软件系统对应的API依赖关系图中查找当前在所述软件系统中发生变更的目标API对应的目标测试对象之前,还包括:
获取软件系统对应的各个API元数据,其中,所述API元数据用于存储唯一对应的一个API的唯一标识以及该API与其他API之间的依赖关系,该API元数据还用于唯一对应的一个API所属的应用或子系统;
将各个所述API元数据分别作为节点,并根据各个API之间的依赖关系确定各个所述节点之间的有向边,以生成由各个所述节点和各个所述节点之间的有向边构成的API依赖关系图。
3.根据权利要求2所述的软件系统测试方法,其特征在于,所述在软件系统对应的API依赖关系图中查找当前在所述软件系统中发生变更的目标API对应的目标测试对象,包括:
接收针对所述软件系统的API变更消息,其中,该API变更消息中包含有发送变更的目标API的唯一标识和变更类型,所述变更类型包括:新增、删除或修改;
基于所述目标API的唯一标识,在软件系统对应的API依赖关系图中查找该目标API对应的API依赖关系子图,其中,该API依赖关系子图中包含有所述目标API对应的目标测试对象。
4.根据权利要求3所述的软件系统测试方法,其特征在于,所述获取所述目标测试对象对应的测试用例集并生成目标测试方案,包括:
获取所述目标测试对象中各个API各自对应的API覆盖图,其中,各个所述API覆盖图与各个测试用例之间为一一对应关系;
根据所述API依赖关系子图及所述API覆盖图,选取所述目标测试对象对应的测试用例集;
基于所述测试用例集生成针对所述目标测试对象的目标测试方案。
5.根据权利要求4所述的软件系统测试方法,其特征在于,在所述获取所述目标测试对象对应的测试用例集并生成目标测试方案之前,还包括:
获取软件系统中各个子系统或应用对应的测试用例,所述测试用例包括:用于覆盖单一子系统或应用中的API的单元测试用例,以及,用于覆盖多个子系统或应用之间的API的集成测试用例;
根据所述软件系统当前对应的API依赖关系图,生成各个所述测试用例各自对应的API覆盖图;
其中,所述单元测试用例对应的API覆盖图用于存储该单元测试用例覆盖的单一子系统或应用中的API,若覆盖单一子系统或应用中的API有多个,则所述单元测试用例对应的API覆盖图还用于存储该单元测试用例覆盖的单一子系统或应用中的各个API之间的依赖关系;
所述集成测试用例对应的API覆盖图用于存储该集成测试用例覆盖的多个子系统或应用之间的各个API及各个API之间的依赖关系。
6.根据权利要求4或5所述的软件系统测试方法,其特征在于,所述根据所述API依赖关系子图及所述API覆盖图,选取所述目标测试对象对应的测试用例集,包括:
根据所述API依赖关系子图和所述API覆盖图,确定所述API依赖关系子图中的各个所述API各自对应的测试用例的标识及总数;
若所述API依赖关系子图中存在测试用例总数为1的API,则将测试用例总数为1的API对应的测试用例的标识加入测试用例集中;
若所述API依赖关系子图中存在测试用例总数多于1的API,且该API对应的测试用例中覆盖预设的热点子系统和/或热点API,则将覆盖预设的热点子系统和/或热点API的测试用例的标识加入所述测试用例集中。
7.根据权利要求6所述的软件系统测试方法,其特征在于,所述API覆盖图还用于存储对应的测试用例的测试成本;
相对应的,所述根据所述API依赖关系子图及所述API覆盖图,选取所述目标测试对象对应的测试用例集,还包括:
若所述API依赖关系子图中存在测试用例总数多于1的API,且该API对应的测试用例中未覆盖所述热点子系统和/或热点API,则根据该API对应的各个所述测试用例各自对应的测试成本及API覆盖率选取对应的测试用例的标识加入所述测试用例集中。
8.根据权利要求2所述的软件系统测试方法,其特征在于,还包括:
接收针对所述软件系统的API新增消息,其中,该API新增消息中包含有待新增API对应的API元数据;
根据所述待新增API对应的API元数据,在所述API依赖关系图增加所述待新增API对应的节点以及与所述待新增API之间存在的依赖关系的其他节点之间的有向边。
9.根据权利要求2所述的软件系统测试方法,其特征在于,还包括:
接收针对所述软件系统的API删除消息,其中,该API删除消息中包含有待删除API对应的API元数据;
根据所述待删除API对应的API元数据,在所述API依赖关系图删除所述待删除API对应的节点以及与所述待删除API之间存在的依赖关系的其他节点之间的有向边。
10.根据权利要求2所述的软件系统测试方法,其特征在于,还包括:
接收针对所述软件系统的API修改消息,其中,所述API修改消息中包含有待修改API的API修改元数据;
根据所述待修改API对应在所述API依赖关系图中的原API元数据与所述API修改元数据,确定受到所述待修改API的修改影响的待修改内容,其中,所述待修改内容包括所述待修改API的依赖API、待删除的所述目标API与其他API之间的依赖关系及待新增的所述目标API与其他API之间的依赖关系中的至少一项;
基于所述待修改内容在所述API依赖关系图中修改与所述待修改API之间存在的依赖关系的其他节点之间的有向边。
11.根据权利要求2所述的软件系统测试方法,其特征在于,还包括:
接收API隐式调用关系记录,其中,该API隐式调用关系记录预先基于所述软件系统的生产事故日志对应的回溯事故原因数据中获取;
根据所述API隐式调用关系记录在所述API依赖关系图中增加对应的API隐式调用关系。
12.根据权利要求3所述的软件系统测试方法,其特征在于,还包括:
自所述软件系统的生产环境产生的日志中,提取热点对象,所述热点对象包括热点子系统和/或热点API;
根据所述热点对象更新所述API依赖关系子图。
13.一种软件系统测试装置,其特征在于,包括:
查图模块,用于在软件系统对应的API依赖关系图中查找当前在所述软件系统中发生变更的目标API对应的目标测试对象,其中,所述目标测试对象包括:所述目标API和该目标API对应的全部依赖API,以及所述目标API和依赖API各自所属的应用或子系统;
测试模块,用于获取所述目标测试对象对应的测试用例集并生成目标测试方案,以基于该目标测试方案在所述软件系统中对所述目标测试对象进行测试。
14.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至12任一项所述的软件系统测试方法。
15.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至12任一项所述的软件系统测试方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111032331.XA CN113722228A (zh) | 2021-09-03 | 2021-09-03 | 软件系统测试方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111032331.XA CN113722228A (zh) | 2021-09-03 | 2021-09-03 | 软件系统测试方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113722228A true CN113722228A (zh) | 2021-11-30 |
Family
ID=78681448
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111032331.XA Pending CN113722228A (zh) | 2021-09-03 | 2021-09-03 | 软件系统测试方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113722228A (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070214391A1 (en) * | 2006-03-10 | 2007-09-13 | International Business Machines Corporation | Method and apparatus for testing software |
CN112380130A (zh) * | 2020-11-19 | 2021-02-19 | 康键信息技术(深圳)有限公司 | 基于调用依赖关系的应用测试方法和装置 |
CN112433944A (zh) * | 2020-11-25 | 2021-03-02 | 平安普惠企业管理有限公司 | 业务测试方法、装置、计算机设备和存储介质 |
-
2021
- 2021-09-03 CN CN202111032331.XA patent/CN113722228A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070214391A1 (en) * | 2006-03-10 | 2007-09-13 | International Business Machines Corporation | Method and apparatus for testing software |
CN112380130A (zh) * | 2020-11-19 | 2021-02-19 | 康键信息技术(深圳)有限公司 | 基于调用依赖关系的应用测试方法和装置 |
CN112433944A (zh) * | 2020-11-25 | 2021-03-02 | 平安普惠企业管理有限公司 | 业务测试方法、装置、计算机设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2019028992A1 (zh) | 多模块版本依赖关系构建方法、装置、服务器和存储介质 | |
CN109829287A (zh) | Api接口权限访问方法、设备、存储介质及装置 | |
CN104503780A (zh) | 一种提供应用渠道包的方法和装置 | |
CN112636992B (zh) | 一种动态路由方法、装置、设备及存储介质 | |
CN110851359A (zh) | 应用程序测试方法、装置及服务器 | |
CN111158741A (zh) | 监控业务模块对第三方类库依赖关系变化的方法及装置 | |
CN111464352A (zh) | 调用链路数据处理方法及装置 | |
CN110781658A (zh) | 简历解析方法、装置、电子设备和存储介质 | |
CN110019444B (zh) | 一种操作请求处理方法、装置、设备及系统 | |
CN110046100B (zh) | 一种分组测试的方法、电子设备及介质 | |
CN114153856A (zh) | 主机数据双写方法及装置 | |
CN113760242A (zh) | 一种数据处理方法、装置、服务器和介质 | |
CN112559525A (zh) | 数据检查系统、方法、装置和服务器 | |
CN113791984B (zh) | 接口自动化测试方法及装置 | |
CN113722228A (zh) | 软件系统测试方法及装置 | |
CN113495723B (zh) | 一种调用功能组件的方法、装置及存储介质 | |
CN115328506A (zh) | 应用程序包生成方法、加载方法、装置、介质及设备 | |
CN115061785A (zh) | 信息下发方法、装置、存储介质及服务器 | |
CN110324425B (zh) | 混合云交易路由处理方法及装置 | |
CN114116480A (zh) | 应用程序测试覆盖率的确定方法、装置、介质及设备 | |
CN116107801A (zh) | 交易处理方法及相关产品 | |
CN113467823A (zh) | 一种配置信息的获取方法、装置、系统及存储介质 | |
CN112905464A (zh) | 应用运行环境数据处理方法及装置 | |
CN112182083A (zh) | 文件生成方法、装置、设备及存储介质 | |
WO2023005484A1 (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 |