本发明专利技术涉及计算机信息处理技术领域,具体涉及一种嵌入式基础软件代码分支覆盖测试数据遗传搜索方法,该方法将测试数据寻找过程转化为基于遗传算法的搜索和优化过程,适应度函数以被测软件的分支谓词为基础,测试数据能够遍历被测软件的所有分支,而且测试数据非常靠近输入子空间的边界。而交叉变异是从一个点的群体而不是从一个单一点进行搜索,因而落入假峰的概率比点到点的转移搜索大大减少了,数据遗传搜索效率高。
【技术实现步骤摘要】
本专利技术涉及计算机信息处理
,具体涉及。
技术介绍
遗传算法(Genetic Algorithm)是美国的Holland在1975年首先提出来的,它是一种基于自然选择原理和自然遗传机制的搜索寻优算法,它模拟自然界中的生命进化机制,在人工系统中实现特定目标的优化。它的操作对象是一群染色体(称为个体),即种群(Population)。这里每个染色体都对应于问题的一个解。遗传算法从初始种群出发,采用基于适应度比例的选择策略在当前种群中选择个体,使用交叉和变异来产生下一代种群。如 此一代一代地演化下去,直到满足期望的终止条件。遗传算法在问题解空间的表示上,是用单一的染色体表示问题的一个潜在的可能解,运行在一个染色体群体上的进化过程和通过一个潜在解空间的搜索相对应。嵌入式基础软件是一种安全关键软件,为保证其质量和可靠性,一般需要进行软件代码逻辑覆盖测试。逻辑覆盖又可分为语句覆盖、分支覆盖、路径覆盖等。按分支覆盖准则进行测试是指设计若干组测试数据,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断的真假值均曾被满足。根据域测试(Domain Testing)原理,被测软件的输入空间(即域)可分为不同的子空间,而子空间的划分是由被测软件中的分支谓词决定的。靠近子空间边界的测试数据能够更有效地发现被测软件的路径错误和计算错误。因此,分支覆盖测试数据选择的目标是,以少量测试数据使被测软件的所有分支都被执行到,并且这些测试数据尽可能地接近子空间的边界。由于嵌入式基础软件的规模较大,复杂程度较高,开发分支覆盖测试数据需要花费大量的人力、物力,采用自动化的手段可以有效地提高测试数据搜索的效率和质量。许多传统自动化方法处理搜索空间的一个单点。例如爬山法,它使用迭代改进法,每次迭代从现时点的领域选择一个新的点。显然,在多峰搜索空间中,它易于陷入假的局部峰值。
技术实现思路
针对现有技术的不足,本专利技术提供,本专利技术测试数据遗传搜索方法可以方便地加以扩展,以支持不同的输入数据类型、复杂的分支谓词、各种分支和循环程序结构。本专利技术的目的是采用下述技术方案实现的,其改进之处在于,所述方法包括下述步骤(I)生成随机数;(2)选择初始种群;(3)按照参数编码方式对所述初始种群的个体串映射成实际参数值,并传递给被测软件;(4)确定适应度函数;(5)交叉变异对测试数据进行改进,形成新一代更优种群;(6)循环进行步骤(I) - (5),直至找到覆盖所有嵌入式基础软件分支的目标参数值,测试数据遍历被测软件的所有分支,结束该搜索过程。其中,所述步骤(2)中,按照嵌入式基础软件参数要求选择初始种群。其中,所述步骤(3)中,当初始种群的个体串映射成实际参数值,并传递给被测软件时,驱动被测软件运行;所述被测软件是指嵌入式基础软件。 其中,所述步骤(4)中,根据被测嵌入式基础软件代码确定适应度函数,所述适应度函数以嵌入式基础软件代码的分支谓词为基础。其中,为获取嵌入式基础软件代码分支覆盖测试数据对被测软件进行插装。其中,所述步骤(5)中,所述交叉变异是从一个点的群体开始进行。其中,所述方法为自适应的测试数据搜索方法。与现有技术比,本专利技术达到的有益效果是嵌入式基础软件代码分支覆盖测试数据遗传搜索方法比其它方法具有更高的搜索效率。本专利技术的测试数据搜索方法以分支谓词为基础,测试数据能够遍历被测软件的所有分支,而且测试数据非常靠近输入子空间的边界。为了优化适应度函数,通过遗传算法一代一代地不断修改测试数据,形成了一种自适应的测试数据搜索方法。本方法是从一个点的群体而不是从一个单一点进行搜索,而许多传统方法处理搜索空间的一个单点,因而本方法落入假峰的概率比点到点的转移搜索大大减少了,具有更好的收敛性和更高的搜索效率。本测试数据搜索方法可以方便地加以扩展,以支持不同的输入数据类型、复杂的分支谓词、各种分支和循环程序结构。附图说明图I是本专利技术提供的嵌入式基础软件代码分支覆盖测试数据遗传搜索方法流程图;图2是本专利技术提供的IF-THEN-ELSE控制流树及原被测软件示意图;图3是本专利技术提供的被测软件插装举例示意图;图4是本专利技术提供的被测软件控制流树。具体实施例方式下面结合附图对本专利技术的具体实施方式作进一步的详细说明。本专利技术提供的嵌入式基础软件代码分支覆盖测试数据遗传搜索方法流程如图I所示,该方法包括下述步骤(I)生成随机数;(2)选择初始种群;(3)按照参数编码方式对所述初始种群的个体串映射成实际参数值,并传递给被测软件;(4)确定适应度函数;(5)交叉变异对测试数据进行改进,形成新一代更优种群;( 6 )循环进行步骤(I) - ( 5 ),直至找到覆盖所有嵌入式基础软件分支的目标参数值,测试数据遍历被测软件的所有分支,结束该搜索过程。适应度函数以嵌入式基础软件代码的分支谓词为基础,整个搜索过程从生成初始种群开始,然后按照参数编码方式将种群中的个体位串映射成实际参数值,并传递给被测软件,驱动被测软件的运行。根据被测嵌 入式基础软件代码的特点确定适应度函数,被测软件运行时计算出适应度函数值,评估每组测试数据的适应度,适应度越高说明测试数据与预期效果越接近,之后利用交叉、变异等基本算子对测试数据进行改进,形成新一代更优种群,如此往复,直至找到覆盖所有分支的目标参数值,测试数据能够遍历被测软件的所有分支,就可以结束该搜索过程。下面结合IF条件语句,说明基于遗传算法的分支覆盖测试数据搜索策略。图2显示了一个简单的IF-THEN-ELSE条件的例子。Cn代表分支谓词,SN+i (对应于节点(N+1))和SN+2 (对应于节点(N+2))分别为待执行的语句序列。如果Cn为真,执行SN+1,否则执行SN+2。假设CnSA=B, A和B为整数(也可能是输入参数的复杂函数)。为了执行节点(N+1)中的SN+1,A必须取值B。为执行节点(N+2)中的SN+2,A可以取不等于B的任何值(A幸B)。但是A的优先取值为(B+1)和(B-1),因为这两个值紧邻子空间边界,更有利于发现程序错误。从遗传算法角度来说,对于节点(N+1),A值与B越接近,适应度(Fitness)就越高。为了获取分支覆盖测试数据需要对被测软件进行插装,具体如下if Cn thenCHECK_BRANCH(NODE_NUMBER); L00KING_BRANCH (N0DE_NUMBER sib, DATAl SIB, DATA2 SIB);SN+1elseCHECK_BRANCH(NODE_NUMBER SIB);L00KING_BRANCH(N0DE_NUMBER, DATAI, DATA2);SN+2end if ;CHECK_BRANCH只有一个整数类型的输入参数,即节点号N0DE_NUMBER。CHECK_BRANCH记录了该节点是否执行过。如果已经被执行,保存有关的测试数据。这样,可以开始为下一个未遍历的节点生成测试数据。L00KING_BRANCH的输入参数有3个,包括兄弟节点号N0DE_NUMBER SIB。如果兄弟节点尚未被遍历,L00KING_BRANCH计算兄弟节点的适应度。looking变量保存下一个未遍历节点的节点号,L00KING_BRANCH根据变量looking 了本文档来自技高网...
【技术保护点】
一种嵌入式基础软件代码分支覆盖测试数据遗传搜索方法,其特征在于,所述方法包括下述步骤:(1)生成随机数;(2)选择初始种群;(3)按照参数编码方式对所述初始种群的个体串映射成实际参数值,并传递给被测软件;(4)确定适应度函数;(5)交叉变异对测试数据进行改进,形成新一代更优种群;(6)循环进行步骤(1)?(5),直至找到覆盖所有嵌入式基础软件分支的目标参数值,测试数据遍历被测软件的所有分支,结束该搜索过程。
【技术特征摘要】
【专利技术属性】
技术研发人员:邓世伟,苏晓艳,齐超,郑彦兴,房友园,杨广华,李冬红,施寅生,
申请(专利权)人:中国人民解放军六三九二八部队,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。