本发明涉及计算机软件领域,具体地,涉及一种测试覆盖分析方法及系统。
背景技术:
软件测试定义是:为了发现软件程序中的错误而执行软件程序的过程,软件测试的主要工作内容是验证(verification)和确认(validation),验证是保证软件正确地实现既定功能的一系列活动,即保证软件做了你所期望的事情。确认是一系列的活动和过程,目的是证实在一个给定的外部环境中软件的运行正确性。即保证软件以正确的方式来处理既定的事件。
随着软件开发的技术的发展,对于大型软件系统,迭代开发成为主流的开发模式,通过迭代开发不断优化升级软件系统。可持续性的不断循环迭代开发,给软件测试带来新的挑战:测试时间短,相对本版修改的内容,有大量存量功能需要例行化质量守护,需要更多的投入来保证软件系统的整体可靠性。
传统的迭代测试通常采用改什么就测试什么,没改动的部分只例行化测试其中部分重要功能。例行化测试内容的筛选就显得尤其重要,通常基于软件系统存量功能凭借测试人员的经验来选择或单纯依靠程序的调用测试来选择,且选定后还需要人为组织实施测试案例执行,导致效率低,成本高,存在很大的人为不确定因素。
技术实现要素:
本发明实施例的主要目的在于提供一种测试覆盖分析方法及系统,以大幅提高大型软件系统的测试效率,降低测试成本。
为了实现上述目的,本发明实施例提供一种测试覆盖分析方法,包括:
将每个程序节点的综合权重按由大到小的顺序进行排序,选择排序在预设位置之前的多个综合权重一一对应的多个程序节点作为核心程序节点;
根据已测试的程序节点,从核心程序节点中选择未测试的核心程序节点;
根据未测试的核心程序节点以及未测试的核心程序节点之间的访问方向,生成程序节点的有向图;
从程序节点的有向图中选择覆盖未测试的核心程序节点最多的路径作为测试链路;
选择与测试链路对应的测试脚本对未测试的核心程序节点进行测试。
在其中一种实施例中,将每个程序节点的综合权重按由大到小的顺序进行排序,选择排序在预设位置之前的多个综合权重一一对应的多个程序节点作为核心程序节点之前,还包括:
根据每个程序节点的调用次数和全部程序节点的总调用次数,计算每个程序节点的第一权重;
根据每个程序节点的价值参数和全部程序节点的总价值参数,计算每个程序节点的第二权重;
根据每个程序节点的第一权重、第一权重加权系数、第二权重和第二权重加权系数,计算每个程序节点的综合权重。
在其中一种实施例中,通过如下公式计算每个程序节点的综合权重:
zi=axi+byi;
其中,zi为第i个程序节点的综合权重,a为第一权重加权系数,xi为第i个程序节点的第一权重,b为第二权重加权系数,yi为第i个程序节点的第二权重。
在其中一种实施例中,第一权重加权系数和第二权重加权系数之和为1。
本发明实施例还提供一种测试覆盖分析系统,包括:
核心程序节点单元,用于将每个程序节点的综合权重按由大到小的顺序进行排序,选择排序在预设位置之前的多个综合权重一一对应的多个程序节点作为核心程序节点;
程序节点选择单元,用于根据已测试的程序节点,从所述核心程序节点中选择未测试的核心程序节点;
有向图单元,用于根据未测试的核心程序节点以及未测试的核心程序节点之间的访问方向,生成程序节点的有向图;
测试链路单元,用于从程序节点的有向图中选择覆盖未测试的核心程序节点最多的路径作为测试链路;
测试单元,用于选择与测试链路对应的测试脚本对未测试的核心程序节点进行测试。
在其中一种实施例中,还包括:综合权重计算单元,用于:
根据每个程序节点的调用次数和全部程序节点的总调用次数,计算每个程序节点的第一权重;
根据每个程序节点的价值参数和全部程序节点的总价值参数,计算每个程序节点的第二权重;
根据每个程序节点的第一权重、第一权重加权系数、第二权重和第二权重加权系数,计算每个程序节点的综合权重。
在其中一种实施例中,综合权重计算单元具体通过如下公式计算每个程序节点的综合权重:
zi=axi+byi;
其中,zi为第i个程序节点的综合权重,a为第一权重加权系数,xi为第i个程序节点的第一权重,b为第二权重加权系数,yi为第i个程序节点的第二权重。
在其中一种实施例中,第一权重加权系数和第二权重加权系数之和为1。
本发明实施例还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:
将每个程序节点的综合权重按由大到小的顺序进行排序,选择排序在预设位置之前的多个综合权重一一对应的多个程序节点作为核心程序节点;
根据已测试的程序节点,从核心程序节点中选择未测试的核心程序节点;
根据未测试的核心程序节点以及未测试的核心程序节点之间的访问方向,生成程序节点的有向图;
从程序节点的有向图中选择覆盖未测试的核心程序节点最多的路径作为测试链路;
选择与测试链路对应的测试脚本对未测试的核心程序节点进行测试。
本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
将每个程序节点的综合权重按由大到小的顺序进行排序,选择排序在预设位置之前的多个综合权重一一对应的多个程序节点作为核心程序节点;
根据已测试的程序节点,从核心程序节点中选择未测试的核心程序节点;
根据未测试的核心程序节点以及未测试的核心程序节点之间的访问方向,生成程序节点的有向图;
从程序节点的有向图中选择覆盖未测试的核心程序节点最多的路径作为测试链路;
选择与测试链路对应的测试脚本对未测试的核心程序节点进行测试。
本发明实施例的测试覆盖分析方法及系统,先将每个程序节点的综合权重按由大到小的顺序进行排序,选择排序在预设位置之前的多个综合权重一一对应的多个程序节点作为核心程序节点,再筛选出未测试的核心程序节点;然后根据未测试的核心程序节点及其访问方向生成有向图;最后从程序节点的有向图中选择覆盖未测试的核心程序节点最多的路径作为测试链路,进而可以选择与测试链路对应的测试脚本以对未测试的核心程序节点进行测试,可大幅提高大型软件系统的测试效率,降低测试成本,极大减少软件自动化测试及质量守护方面的人为投入。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例中测试覆盖分析方法的流程图;
图2是本发明实施例中测试覆盖分析方法其中一种实施例的程序节点图;
图3是本发明实施例中测试覆盖分析方法其中一种实施例的权重表;
图4是本发明实施例中测试覆盖分析系统的结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
鉴于传统的迭代测试效率低,成本高,存在很大的人为不确定因素,本发明实施例提供一种测试覆盖分析方法,可以大幅提高大型软件系统的测试效率,降低测试成本,极大减少软件自动化测试及质量守护方面的人为投入。以下结合附图对本发明进行详细说明。
图1是本发明实施例中测试覆盖分析方法的流程图。如图1所示,测试覆盖分析方法包括:
s101:将每个程序节点的综合权重按由大到小的顺序进行排序,选择排序在预设位置之前的多个综合权重一一对应的多个程序节点作为核心程序节点;
s102:根据已测试的程序节点,从核心程序节点中选择未测试的核心程序节点;
s103:根据未测试的核心程序节点以及未测试的核心程序节点之间的访问方向,生成程序节点的有向图;
s104:从程序节点的有向图中选择覆盖未测试的核心程序节点最多的路径作为测试链路;
s105:选择与测试链路对应的测试脚本对未测试的核心程序节点进行测试。
由图1所示的流程可知,本发明先将每个程序节点的综合权重按由大到小的顺序进行排序,选择排序在预设位置之前的多个综合权重一一对应的多个程序节点作为核心程序节点,再筛选出未测试的核心程序节点;然后根据未测试的核心程序节点及其访问方向生成有向图;最后从程序节点的有向图中选择覆盖未测试的核心程序节点最多的路径作为测试链路,进而可以选择与测试链路对应的测试脚本以对未测试的核心程序节点进行测试,可大幅提高大型软件系统的测试效率,降低测试成本,极大减少软件自动化测试及质量守护方面的人为投入。
其中,s102具体包括:通过分析系统测试环境中系统日志所记录的程序节点调用次数,统计一个迭代周期内所有已测试的程序节点,将核心程序节点中已经执行过的核心程序节点滤除,以筛选出测试尚未覆盖的核心程序节点,为后续有针对性地开展测试覆盖提供依据,然后执行s103。
执行s103时,可以将未测试的核心程序节点作为有向图中的节点,将未测试的核心程序节点之间的访问方向(调用关系)作为有向图节点之间的有向边,从而生成有向图。
实施例中,在s101之前还包括:
s201:根据每个程序节点的调用次数和全部程序节点的总调用次数,计算每个程序节点的第一权重。
s202:根据每个程序节点的价值参数和全部程序节点的总价值参数,计算每个程序节点的第二权重。
s203:根据每个程序节点的第一权重、第一权重加权系数、第二权重和第二权重加权系数,计算每个程序节点的综合权重。
具体实施时,可以统计出当前软件系统在本次迭代开发完成前生产环境的程序使用情况,即通过跟踪软件系统的运行情况统计出软件系统内程序节点的调用次数和价值参数,分别计算出每个程序节点的第一权重和第二权重。第一权重为调用次数与总调用次数之比,第二权重为价值参数与总价值参数之比。
其中,每个程序节点的价值参数可以在程序设计时进行标定,每次程序迭代升级时可根据生产上业务开展情况对价值参数进行必要调整。
一实施例中,可以通过如下公式计算每个程序节点的综合权重:
zi=axi+byi;
其中,zi为第i个程序节点的综合权重,a为第一权重加权系数,xi为第i个程序节点的第一权重,b为第二权重加权系数,yi为第i个程序节点的第二权重。
一实施例中,第一权重加权系数和第二权重加权系数之和为1。
下面以某存贷款系统的测试覆盖分析作为本发明的其中一种实施例。
图2是本发明实施例中测试覆盖分析方法其中一种实施例的程序节点图。如图2所示,为方便说明,某存贷款软件系统简化结构中有五个程序节点组成:系统登录节点400,利率查询节点401,余额查询节点402,存款节点403和取款节点404。
1、统计该软件系统中所有程序节点的被触发次数。图3是本发明实施例中测试覆盖分析方法其中一种实施例的权重表。如图3所示,假设某次迭代开发周期中,生产在线环境各程序节点的被触发次数如下:系统登录节点400为300万次;利率查询节点401为50万次;余额查询节点402为400万次;存款节点403为101万次;取款节点404为200万次。
2、计算每个程序节点的调用次数占所有程序节点的调用总次数的比重,从而得出程序节点的第一权重,如图3所示:系统登录节点400的第一权重为0.29;利率查询节点401的第一权重为0.05;余额查询节点402的第一权重为0.38;存款节点403的第一权重为0.10;取款节点404的第一权重为0.19。
3、统计程序节点的价值参数:每个程序节点的价值参数可以在程序设计时进行标定,每次程序迭代升级时可根据生产上业务开展情况对价值参数进行必要调整。如图3所示,从业务价值的角度设定系统登录节点400的价值参数为3.0;从业务价值的角度设定利率查询节点401的价值参数为1.0;从业务价值的角度设定余额查询节点402的价值参数为4.0;从业务价值的角度设定存款节点403的价值参数为7.0;从业务价值的角度设定取款节点404的价值参数为8.0。
4、计算出程序节点的第二权重,第二权重等于本程序节点的价值参数与总价值参数之比。如图3所示:系统登录节点400的第二权重为0.13;利率查询节点401的第二权重为0.04;余额查询节点402的第二权重为0.17;存款节点403的第二权重为0.30;取款节点404的第二权重为0.35。
5、根据每个程序节点第一权重与第二权重,通过公式计算出每个程序节点的综合权重。本实施例中第一权重的加权系数a为0.4,业务价值权重的加权系数b为0.6,加权系数可根据不同的被测软件系统的特点进行调节,但a+b=1的恒等式一定要满足。本实施例中计算出来的程序节点综合权重如图3所示:系统登录节点400的综合权重为0.19;利率查询节点401的综合权重为0.05;余额查询节点402的综合权重为0.26;存款节点403的综合权重为0.22;取款节点404的综合权重为0.28。
6、根据程序节点的综合权重,可以对程序节点的重要性进行排序,筛选出排名前三位的程序节点作为核心程序节点,分别是取款节点404,余额查询节点402和存款节点403。
7、统计一个迭代周期内所有已测试的程序节点,将核心程序节点中已经执行过的核心程序节点滤除,以筛选出未测试的核心程序节点。例如,本次迭代开发只修改了利率查询程序,项目测试也只测试了利率查询节点,其它所有节点都未做测试覆盖,则未测试的核心程序节点为:余额查询节点402、存款节点403和取款节点404。
8、找出核心程序的最佳测试链路:也就是将未测试的核心程序节点作为有向图中的节点,将未测试的核心程序节点之间的访问方向(调用关系)作为有向图节点之间的有向边,从而生成有向图。挑选覆盖未测试的核心程序节点个数最多的路径作为核心程序最佳测试链路。例如,本实施例中,根据程序节点间的访问方向,可以使用402-403-402-404-402的测试链路对该被测软件系统实施全覆盖的例行化测试。
9、根据测试链路匹配对应的自动化测试脚本,为测试覆盖分析系统提供参数,对未测试的核心程序节点进行测试,从而实现未测试的核心程序节点及其关联链路的自动化测试覆盖。
综上,本发明实施例的测试覆盖分析方法不依赖于测试人员的经验和软件系统自身的特殊性,可普适性地适用于所有迭代开发的软件系统的测试,大幅提高大型软件系统的测试效率,降低测试成本,极大减少软件自动化测试及质量守护方面的人为投入。
基于同一发明构思,本发明实施例还提供了一种测试覆盖分析系统,由于该系统解决问题的原理与测试覆盖分析方法相似,因此该系统的实施可以参见方法的实施,重复之处不再赘述。
图4是本发明实施例中测试覆盖分析系统的结构框图。如图4所示,测试覆盖分析系统包括:
核心程序节点单元,用于将每个程序节点的综合权重按由大到小的顺序进行排序,选择排序在预设位置之前的多个综合权重一一对应的多个程序节点作为核心程序节点;
程序节点选择单元,用于根据已测试的程序节点,从核心程序节点中选择未测试的核心程序节点;
有向图单元,用于根据未测试的核心程序节点以及未测试的核心程序节点之间的访问方向,生成程序节点的有向图;
测试链路单元,用于从程序节点的有向图中选择覆盖未测试的核心程序节点最多的路径作为测试链路;
测试单元,用于选择与测试链路对应的测试脚本对未测试的核心程序节点进行测试。
在其中一种实施例中,还包括:综合权重计算单元,用于:
根据每个程序节点的调用次数和全部程序节点的总调用次数,计算每个程序节点的第一权重;
根据每个程序节点的价值参数和全部程序节点的总价值参数,计算每个程序节点的第二权重;
根据每个程序节点的第一权重、第一权重加权系数、第二权重和第二权重加权系数,计算每个程序节点的综合权重。
在其中一种实施例中,综合权重计算单元具体通过如下公式计算每个程序节点的综合权重:
zi=axi+byi;
其中,zi为第i个程序节点的综合权重,a为第一权重加权系数,xi为第i个程序节点的第一权重,b为第二权重加权系数,yi为第i个程序节点的第二权重。
在其中一种实施例中,第一权重加权系数和第二权重加权系数之和为1。
综上,本发明实施例的测试覆盖分析系统不依赖于测试人员的经验和软件系统自身的特殊性,可普适性地适用于所有迭代开发的软件系统的测试,大幅提高大型软件系统的测试效率,降低测试成本,极大减少软件自动化测试及质量守护方面的人为投入。
本发明实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现以下步骤:
将每个程序节点的综合权重按由大到小的顺序进行排序,选择排序在预设位置之前的多个综合权重一一对应的多个程序节点作为核心程序节点;
根据已测试的程序节点,从核心程序节点中选择未测试的核心程序节点;
根据未测试的核心程序节点以及未测试的核心程序节点之间的访问方向,生成程序节点的有向图;
从程序节点的有向图中选择覆盖未测试的核心程序节点最多的路径作为测试链路;
选择与测试链路对应的测试脚本对未测试的核心程序节点进行测试。
综上,本发明实施例的计算机设备不依赖于测试人员的经验和软件系统自身的特殊性,可普适性地适用于所有迭代开发的软件系统的测试,大幅提高大型软件系统的测试效率,降低测试成本,极大减少软件自动化测试及质量守护方面的人为投入。
本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
将每个程序节点的综合权重按由大到小的顺序进行排序,选择排序在预设位置之前的多个综合权重一一对应的多个程序节点作为核心程序节点;
根据已测试的程序节点,从核心程序节点中选择未测试的核心程序节点;
根据未测试的核心程序节点以及未测试的核心程序节点之间的访问方向,生成程序节点的有向图;
从程序节点的有向图中选择覆盖未测试的核心程序节点最多的路径作为测试链路;
选择与测试链路对应的测试脚本对未测试的核心程序节点进行测试。
综上,本发明实施例的计算机可读存储介质不依赖于测试人员的经验和软件系统自身的特殊性,可普适性地适用于所有迭代开发的软件系统的测试,大幅提高大型软件系统的测试效率,降低测试成本,极大减少软件自动化测试及质量守护方面的人为投入。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。