一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于软件网络的软件测试数据生成方法与流程

2022-02-22 20:11:09 来源:中国专利 TAG:


1.本发明涉及软件可信性、软件测试技术领域,尤其涉及一种基于软件网络的软件测试数据生成方法。


背景技术:

2.随着计算机技术的突飞猛进,软件规模日益扩大,软件功能也日趋复杂,软件故障就变得不可避免。软件测试是一种系统方法,用于识别软件中存在的错误,从而通过修复错误以提升软件的质量。在软件测试中,测试数据是为某个特殊目标而编制的一组测试输入,以便测试某个程序路径或核实是否满足某个特定需求。测试数据的质量决定了测试的质量,好的测试数据不仅能减少软件测试的工作量,降低测试成本,而且能在成本和时间的约束下,发现更多的软件错误。由于人工编制测试数据在成本以及效率等方面的限制,因而软件测试数据的自动生成一直是该领域的追求目标。
3.基于搜索的测试数据生成是当前最为流行的自动化测试方法之一,该类方法旨在使用如遗传算法一类的元启发式优化搜索技术来自动化或部分自动化测试任务。换言之,测试数据的生成被视为一个搜索问题,即在搜索空间中查找测试数据或测试用例的问题。在基于搜索的测试数据生成问题中,除了搜索算法本身外,另一个需要重点关注的问题就是设计合适的适应度函数。适应度函数用于评价生成的测试数据的质量并指导算法在测试输入空间内寻找满足测试目标的那些输入。构建良好的适应度函数不仅可以提高找到解决方案的可能性,而且还可以实现更好的整体代码覆盖率,并且消耗更少的系统资源。当前已有面向目标(goal-oriented)、面向链(chaining-oriented)、面向覆盖(coverage-oriented)以及面向距离的适应度函数(distance-oriented)等四大类适应度函数被提出并用于软件测试数据的生成。面向覆盖的适应度函数最为常见,比如语句覆盖、分支覆盖以及路径覆盖等等,但覆盖率本身并不意味着故障检测能力的有效性。事实上,满足一个“严格”的覆盖标准也不能很好地表明测试数据的有效性,即使覆盖导向测试产生了卓越的性能,测试仍然可能会遗漏大量潜在的严重故障。低故障检测率的原因不仅是覆盖率不高,更可能是覆盖率这一测试标准本身的不足,这需要更好的适应度函数来生成可以发现真正故障的测试,即寻求与故障检测概率增加相关的标准和相应的适应度函数。针对这一状况,我们提出一种基于软件网络的测试数据生成方法。
4.现有的如基于遗传算法、蚁群算法、粒子群算法与人工蜂群算法等基于搜索的测试数据生成方法,相比于随机输入测试等,已经具有较好的效果。但这些算法使用的适应度函数,却存在着适应度函数本身的值达到很高但故障检测能力却不足的缺陷。


技术实现要素:

5.本发明目的是提供了一种基于软件网络的软件测试数据生成方法,以解决上述问题。
6.本发明解决技术问题采用如下技术方案:
7.一种基于软件网络的软件测试数据生成方法,包括如下步骤:
8.步骤1,收集待测软件源代码;
9.步骤2,基于源码建立软件网络;
10.步骤3,计算软件网络的重要节点;
11.步骤4,设计基于重要节点的适应度函数;
12.步骤5,基于多目标智能算法生成测试数据;
13.步骤6,测试数据生成过程停止后,输出测试数据集。
14.进一步的,步骤1中收集待测软件源代码,其构建方法为:
15.获取需要进行测试的软件的源程序文件。
16.进一步的,步骤2中基于源码建立软件网络,其构建方法为:
17.从软件源码出发,基于逆向工程思想,解析软件源码获取软件模块集合v={v1,v2,

,vn}及其逻辑关系集合e={e1,e2,

,em},以此建立软件网络g,软件模块为函数、类、方法不同层次的软件实体。
18.进一步的,依据选择的模块的不同,g采用函数调用网络、类依赖网络或方法调用网络不同粒度的网络。
19.进一步的,步骤3中计算软件网络的重要节点,其构建方法为:
20.借鉴复杂网络理论中的重要节点计算方法,从网络的角度采用度中心性cd(vi)、介数中心性cb(vi)、接近中心性cc(vi)和特征向量中心性ce(vi)最为常见的节点重要度指标,计算软件网络每个节点的重要度,获取重要节点,以此探索新的测试覆盖准则用于指导软件测试数据的生成。
21.进一步的,步骤4中设计基于重要节点的适应度函数,其构建方法为:
22.通过重要度计算获得节点重要度后,确定软件的重要节点序列,对应重要节点的计算方式,重要节点序列iv细分为四种:度中心性重要节点序列i
dv
,介数中心性重要节点序列i
bv
,接近中心性重要节点序列i
cv
和特征向量中心性重要节点序列i
ev
;在迭代生成测试数据的过程中,测试数据覆盖的节点集为covv,则适应度函数为对应重要节点序列,适应度函数也包括四类:度中心性重要节点覆盖率f
dfit
,介数中心性重要节点覆盖率f
bfit
,接近中心性重要节点覆盖率f
cfit
和特征向量中心性重要节点覆盖f
efit
;在该测试覆盖标准下,测试数据的生成朝着使适应度函数不断增大的方向前进,寻找帕累托最优解。
23.进一步的,步骤5中基于多目标智能算法生成测试数据,其构建方法为:
24.(1)设定多目标适应度函数f
dfit
,f
bfit
,f
cfit
和f
efit
;各终止节点覆盖率stop
dc
,stop
bc
,stop
cc
和stop
ec
;以及终止进化代数max
iteration

25.(2)种群初始化,随机生成初始种群;
26.(3)计算种群的各重要节点覆盖率;
27.(4)判断覆盖率是否满足各终止节点覆盖率或者终止进化代数max
iteration
,若满足,则输出所有的测试数据,程序终止,若不满足,则转到步骤5;
28.(5)计算当前种群中个体的快速非支配排序和拥挤距离;
29.(6)根据快速非支配排序和拥挤距离计算的结果,将当前种群的所有非劣解个体保存至外部集中,并进行个体选择、变异操作等操作产生新种群;
30.(7)转到(3)。
31.进一步的,步骤6中测试数据生成过程停止后,输出测试数据集,其构建方法为:在进化结束后,将外部集中的最终非劣解个体作为最优解输出,作为最终生成的测试数据。
32.有益效果:
33.本发明与现有技术相比的优点在于:现有的软件测试数据生成方法中,适应度函数在某种程度上决定了生成的测试数据的质量,但现有的如面向目标、面向链、面向覆盖以及面向距离等适应度函数普遍存在着故障检测效率不高的问题,即适应度函数本身的值能在进化过程中达到很高,但生成的测试数据可以发现的软件故障并不多。因此本发明将克服现有技术的不足,给出一种新的测试覆盖准则,即面向网络重要节点的适应度函数,结合多目标智能算法提供一种切实有效的软件测试数据的生成方法。
附图说明
34.图1为本发明的总体步骤流程图;
35.图2为本发明的基于多目标智能算法的测试数据生成示意图。
具体实施方式
36.为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
37.参考附图1,本发明公开了一种基于软件网络的软件测试数据生成方法,包括如下步骤:
38.步骤1,收集待测软件源代码;其构建方法为:
39.获取需要进行测试的软件的源程序文件。
40.步骤2,基于源码建立软件网络;其构建方法为:
41.从软件源码出发,基于逆向工程思想,采用understand、doxygen、codeviz等静态分析工具解析软件源码,获取软件模块集合v={v1,v2,

,vn}及其逻辑关系集合e={e1,e2,

,em}的文本数据,这里所说的软件模块可以是函数、类、方法等不同层次的软件实体,通常依据软件类型确定。如c语言软件的功能实体为函数,依赖于函数调用实现预期功能,因此其主要软件模块为函数。在得到包含软件模块及其逻辑关系的数据后,解析数据并使用networkx、pajeck等建模工具或软件建立软件网络g,依据选择的模块的不同,g可以是函数调用网络、类依赖网络、方法调用网络等不同粒度的网络。
42.步骤3,计算软件网络的重要节点;其构建方法为:
43.借鉴复杂网络理论中的重要节点计算方法,从网络的角度采用度中心性cd(vi)、介数中心性cb(vi)、接近中心性cc(vi)和特征向量中心性ce(vi)等4种最为常见的节点重要度指标,计算软件网络每个节点的重要度,获取重要节点,以此探索新的测试覆盖准则用于指导软件测试数据的生成。
44.①
度中心性(degree centrality)
45.度中心性是在网络分析中刻画节点中心性最直接也最常见的度量,它衡量网络中
一个节点与所有其它节点相联系的程度,一个节点的节点度越大就意味着这个节点的度中心性越高,该节点在网络中就越重要。对于一个无向网络g(v,e),节点vi的度中心性为节点vi与其他n-1个节点的直接连边总数,令节点vi的度中心性为cd(vi),则有:
[0046][0047]
其中,a
ij
表示从节点i指向节点j的边。
[0048]

介数中心性(betweenness centrality)
[0049]
介数中心性被定义为网络经过某节点的最短路径数量占所有最短路径的比例,经过一个点的最短路径的数量越多,就说明它越重要,令节点vi的介数中心性为cb(vi),则有:
[0050][0051]
其中,表示节点vs到节点v
t
的所有最短路径的数量,表示从节点vs到节点v
t
的最短路径中经过节点vi的数量,求和则表示对除了节点vi以外的节点所有可能的两组合求和。
[0052]

接近中心性(closeness centrality)
[0053]
接近中心性被定义为某个节点与网络中其他所有节点最短距离的平均值,用于衡量网络中某一节点与其他节点之间的接近程度,接近中心性的值越大说明节点更容易到达其它节点,令节点vi的接近中心性为cc(vi),则有:
[0054][0055]
其中,d
ij
表示节点vi到vj的最短距离,求和则表示vi到除本身外的任意一个节点的最短距离之和。
[0056]

特征向量中心性(eigenvector centrality)
[0057]
特征向量中心性认为一个节点的重要性既取决于其邻居节点的数量,也取决于每个邻居节点的重要性,即衡量网络中某一节点的相邻节点的重要性之和。对于特征向量中心性的计算,首先获取邻接矩阵an×n,然后计算邻接矩阵的特征向量:
[0058]
ax=λx
ꢀꢀꢀꢀꢀꢀꢀꢀ
(4)
[0059]
其中,λ为网络g的特征值,x=[x1,x2,

,xn]
t
为其特征向量,节点vi的特征向量中心性ce(vi)即为特征向量x的第i个元素。
[0060]
步骤4,设计基于重要节点的适应度函数;其构建方法为:
[0061]
通过上述重要度计算获得节点重要度后,即可确定软件的重要节点序列,对应重要节点的计算方式,重要节点序列iv也可以细分为四种,包括度中心性重要节点序列i
dv
,介数中心性重要节点序列i
bv
,接近中心性重要节点序列i
cv
和特征向量中心性重要节点序列i
ev

[0062]
在迭代生成测试数据的过程中,测试数据覆盖的节点集为covv,则适应度函数为对应重要节点序列,适应度函数也包括度中心性重要节点覆盖率f
dfit
,介数中
心性重要节点覆盖率f
bfit
,接近中心性重要节点覆盖率f
cfit
和特征向量中心性重要节点覆盖f
efit
。在该测试覆盖标准下,测试数据的生成朝着使适应度函数不断增大的方向前进,寻找帕累托最优解,即使得f
dfit
,f
bfit
,f
cfit
和f
efit
都尽可能大的测试数据。
[0063]
步骤5,基于多目标智能算法生成测试数据;
[0064]
由于本专利的适应度函数不止一个,因此当使用基于搜索的方法生成测试数据时,该问题为一个多目标优化问题。优化目标包括f
dfit
,f
bfit
,f
cfit
和f
efit
等四个适应度函数,如图2所示,基于多目标智能算法生成测试数据方法基本流程如下:
[0065]
(1)设定多目标适应度函数f
dfit
,f
bfit
,f
cfit
和f
efit
;各终止节点覆盖率stop
dc
,stop
bc
,stop
cc
和stop
ec
;以及终止进化代数max
iteration

[0066]
(2)种群初始化,随机生成初始种群;
[0067]
(3)计算种群的各重要节点覆盖率;
[0068]
(4)判断覆盖率是否满足各终止节点覆盖率或者终止进化代数max
iteration
,若满足,则输出所有的测试数据,程序终止,若不满足,则转到步骤5;
[0069]
(5)计算当前种群中个体的快速非支配排序和拥挤距离;
[0070]
(6)根据快速非支配排序和拥挤距离计算的结果,将当前种群的所有非劣解个体保存至外部集中,并进行个体选择、变异操作等操作产生新种群;
[0071]
(7)转到(3)。
[0072]
通过上述步骤,即可实现基于多目标智能算法生成测试数据。
[0073]
步骤6,测试数据生成过程停止后,输出测试数据集,其构建方法为:
[0074]
在进化过程中,外部集中的非劣解也在保持动态更新,因此,在结束后,直接将外部集中的最终非劣解个体作为最优解输出,作为最终生成的测试数据。
[0075]
通过上述步骤,可以完成对基于软件网络的软件测试数据生成方法的构建。在这项技术中,我们在软件网络化建模的基础上,从多个角度计算得到软件的重要节点,而后设计多个基于重要节点覆盖率的适应度函数,最后将测试数据的生成视作一个多目标优化问题,采用多目标智能算法生成测试数据,使得测试数据的生成不断朝着使覆盖更多重要节点的方向进行。本发明适用于解决实际软件测试问题中的测试数据生成问题,可以帮助软件测试人员设计满足要求的测试测数据,在降低成本和缩短时间的同时,设计出具有更高的软件缺陷检测能力的测试数据。
[0076]
该测试数据生成方法结合复杂网络理论和基于搜索的测试数据生成方法进行构建,形成较为实用的基于软件网络的软件测试数据生成方法。
[0077]
现有的软件测试数据生成方法中,适应度函数在某种程度上决定了生成的测试数据的质量,但现有的如面向目标、面向链、面向覆盖以及面向距离等适应度函数普遍存在着故障检测效率不高的问题,即适应度函数本身的值能在进化过程中达到很高,但生成的测试数据可以发现的软件故障并不多。因此本发明将克服现有技术的不足,给出一种新的测试覆盖准则,即面向网络重要节点的适应度函数,结合多目标智能算法提供一种切实有效的软件测试数据的生成方法。
[0078]
本着软件中越重要的节点就越应该被测试数据覆盖的思想,本发明旨在建立的软件网络模型的基础上,提出一种新的测试覆盖准则用于指导软件测试数据的生成。换言之,首先将软件建模为网络,而后借鉴复杂网络的节点重要度计算方法,从软件网络的角度确
定软件的重要节点及其排序,而后以重要节点序列的覆盖率作为测试数据生成的适应度函数,用于评价生成的测试数据的质量并指导多目标智能算法在测试输入空间内寻找满足测试目标的输入,指导测试数据的生成。使用这一技术可以保证生成的测试数据优先覆盖软件中那些重要的节点,从而避免测试数据虽多但检测效率却不高的问题,生成精简高效的测试数据。
[0079]
该测试数据生成技术在基于搜索的测试数据生成算法的基础之上结合软件网络,形成基于软件网络的软件测试数据生成技术,在提高测试数据缺陷检测能力的同时,达到提高软件可信性、可用性的目的。
[0080]
本发明将软件建模为网络,并从网络的角度发现软件的重要节点(即软件的功能实体,如函数、方法、类等),而后提出一种基于重要节点覆盖的测试覆盖准则,作为基于智能算法的自动测试数据生成的适应度函数,从重要节点的覆盖率来衡量测试数据的质量,同时使测试数据的生成朝着重要节点覆盖率高的方向进行。
[0081]
可以看出本发明的构建对现有的基于智能算法的测试数据生成方法进行了整合与创新,形成了基于软件网络的软件测试数据生成技术。
[0082]
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献