书签 分享 收藏 举报 版权申诉 / 9

一种基于混合策略的测试数据生成方法.pdf

  • 上传人:b***
  • 文档编号:4045274
  • 上传时间:2018-08-12
  • 格式:PDF
  • 页数:9
  • 大小:615.62KB
  • 摘要
    申请专利号:

    CN201410709716.9

    申请日:

    2014.11.28

    公开号:

    CN104536877A

    公开日:

    2015.04.22

    当前法律状态:

    实审

    有效性:

    审中

    法律详情:

    授权|||实质审查的生效IPC(主分类):G06F 11/36申请日:20141128|||公开

    IPC分类号:

    G06F11/36

    主分类号:

    G06F11/36

    申请人:

    江苏苏测软件检测技术有限公司; 南京大学

    发明人:

    周骏贵; 徐宝文; 刘子聪; 陈振宇; 张驰; 濮力; 程秀才; 谢佩章; 王婧宇

    地址:

    210000江苏省南京市雨花台区宁双路28号汇智大厦7楼

    优先权:

    专利代理机构:

    南京天翼专利代理有限责任公司32112

    代理人:

    奚铭

    PDF完整版下载: PDF下载
    内容摘要

    一种基于混合策略的测试数据生成方法,综合利用多种技术的特点融合为测试数据的生成方法。虽然近来各种各样的测试数据生成机制层出不穷,每种技术还是有自己的局限性,例如囿于本身特点每种技术只对有限的几种数据结构适用性与精确性较强。以上的特点导致了单一测试数据生成技术不能广泛而精确地得到试用。我们的方法结合了随机策略,动态符号执行和搜索策略建立数据生成流程,构成了一个可以利用多种技术的优点而进行的高可靠性高拓展性的测试数据生成方法。

    权利要求书

    权利要求书
    1.  一种基于混合策略的测试数据生成方法,其特征是利用混合测试数据生成技术 制定生成流程:利用随机策略生成测试的基础数据,利用动态符号执行完成对于满足路 径约束条件的整型数据的计算,利用基于搜索的策略完成对于其他类型数值型数据的精 化以及对于字符串或用户自定义类型数据的获取,实现自动化的测试数据生成,包括以 下步骤:
    1)随机策略生成初始数据,利用初始数据进行程序的动态执行,并记录路径约束;
    2)将步骤1)记录的路径约束的最后一个谓词进行反转,使其程序逻辑转向最后一 个分支的另一边,生成一个新的路径约束,如果新生成的路径约束可解,则将新生成的 路径约束对应的测试数据作为引导数据,进入步骤3),之后迭代进行步骤2)-5)直至 到达极优解或使定时器超时而至死锁,进而保留结果并重启步骤1);如果新生成的路径 约束不可解则直接重启步骤1),重新生成初始引导数据;
    3)将步骤2)生成的路径约束基于不同的数据类型进行解析与拆解,分别提取出不 同类型的数据结构,包括pcf、pcs和pco,其中pcf是路径约束中包含浮点类型数据的 部分,pcs和pco分别是包含字符串类型和其他类型的约束片段;
    4)对于不同数据类型基于搜索的策略有不同的处理方法:
    对于浮点类型的数据结构,使用交替变量法来精化浮点数的精度;
    对于字符串类型的数据结构,利用基因算法来解决对于字符串类型的处理问题;
    对于其他类型的数据结构,提供自定义的精化算法接口,用于用户针对数据类型自 定义匹配函数,如果用户并没有定义对应数据结构的精化规则,默认对数据结构利用搜 索的策略进行精化;
    5)将步骤2)得到的路径约束中的变量替换为经步骤4)精化后的具体数值,简化 路径约束,使之更容易被约束求解器计算而得到可行解,再利用约束求解器对简化后的 路径约束进行求解,生成的测试数据作为下一次迭代的输入数据,进行下一轮的生成和 精化。

    说明书

    说明书一种基于混合策略的测试数据生成方法
    技术领域
    本发明属于计算机技术领域,涉及软件测试技术,尤其是软件测试测试数据生成领 域,是一种基于混合策略的测试数据生成方法。
    背景技术
    测试是软件开发周期中保障软件质量的一个极其重要的阶段,而测试本身正囿于测 试数据规模的庞大和人工成本的繁多。其中,测试数据的生成是造成人工成本高昂的罪 魁祸首之一。于是,为了减少测试数据生成的代价,人们提出了许多自动化的技术。这 些技术大体上可以被归类为三种类型:随机策略(RS),动态符号执行(DSE)和基于 搜索的策略(SBS)。然而,所有这些技术都有一个本质上的局限性,便是只在某些特征 合适的数据结构上能产生优良和精确的效果。这个局限性很大程度上阻碍了这些测试数 据生成技术被应用于真实世界的工业生产中。
    由此提出了混合策略,总的说来,混合策略在各种领域被成功的应用的本质原因就 是因为单一技术的不完备性。
    本发明提出的混合策略方案可以融合最新技术优点,首先我们总结了本发明在基于 混合策略方法所涉及到的一些技术的特点和局限性,如表1所示。
    表1
    技术 随机策略 动态符号执行 基于搜索的策略 特征 随机 利用路径的约束 面向目标的 优点 快速,成本低 利用了结构化信息 可拓展性强 缺点 散乱 复杂约束或路径爆炸 局部最优和搜索瓶颈 适合的数据类型 * 整型,枚举类型 浮点类型,字符串类型
    在表格中,我们展示了随机策略、动态符号执行和基于搜索的策略各自的优点和缺 点。随机测试是一个高性价比的方法,可以快速而低成本地生成大量地数据,但是生成 的数据状态不稳定而且容易有很多冗余。至于动态符号执行,目前大多存在的相关技术 对于整型及相关类型处理较好,可以准确而有效地计算满足约束的整型数,但是对于其 他类型的数据类型支持相对一般。虽然有一些特定的技术旨在解决某一或某些特定类 型,主流的约束求解器实践中并不能精确和低成本地得到使用。
    为了阐述得更加精确,我们列举以下几种典型类型作为例子:
    1.大多数约束求解器利用与有理数处理方法相同的方法处理浮点类型数值,换句话 说就是利用了与浮点类型数值存储格式不同的数据结构的处理方法,因此我们利用该类 约束求解器求出的浮点类型解就会有一定的精度损失,进而会导致我们遗失对于一些程 序缺陷的检测或者获得高覆盖率。即使已经有人提出较好的能够处理浮点类型数的方 法,这些方法仍存在自身的局限性,比如在处理整型数和浮点数结合的约束时会显得捉 襟见肘。
    2.对于字符串类型的数据,约束求解器会利用类似数组形式数据的处理方法或者是 利用自动机进行处理。利用数组型处理方法比如利用位向量,如果和目前的字符串长度 相同的字符串都不能满足约束,我们就需要调整字符串的长度,利用不同长度的字符串 来满足约束,于是我们的约束就需要被重新求解,这无疑大大增加了动态符号执行的成 本。另一方面,若选择自动机方法,在借助自动机方法的同时会受制于自动机方法本质 上的缺点,如对于否定约束处理的不完善(例如在Java中的不等于notEquals方法等)。
    鉴于约束求解器本身在面对多种多样不同的数据类型的时候存在缺点,更好的方法 需要被提出及使用来更为妥善地处理这些数据类型。对于一些典型的数据类型如浮点数 或者字符串类型,本发明选择利用基于搜索的策略去增加方案的稳定性和精度。本质上 来讲,基于搜索的策略本身并不会和符号执行技术有什么冲突,反而能够很好地补充约 束求解器的不足,有能力以更低的成本获取精度更高的浮点型、字符串乃至其他类型的 数据。
    总的说来,任何一种单一的技术都远远不能满足一个相对可用的数据生成的要求。 因此,混合策略成为了越来越多人选择的方向。尽管很多人提出了基于混合策略的技术, 他们往往局限于两者之间,只利用一种技术去增进另一种技术。本发明想提出的是一个 融合了多种技术的优点的一个有效而可用的方法。
    发明内容
    本发明要解决的问题是:现有的单一的自动化测试数据生成技术由于各自算法以及 实现方法的局限性,对于不同类型的数据类型的生成所需的成本和提供的可用性差距很 大,对于含有各种类型数据的真实世界中的软件的生成效果较差,所需成本却过高,因 而需要提高测试用例生成技术的可用性并在同时削减成本。现有的混合策略方法只利用 一种技术去增进另一种技术,达到的效果有限。
    本发明的技术方案为:一种基于混合策略的测试数据生成方法,利用混合测试数据 生成技术制定生成流程:利用随机策略生成测试的基础数据,利用动态符号执行完成对 于满足路径约束条件的整型数据的计算,利用基于搜索的策略完成对于其他类型数值型 数据的精化以及对于字符串或用户自定义类型数据的获取,实现自动化的测试数据生 成,包括以下步骤:
    1)随机策略生成初始数据,利用初始数据进行程序的动态执行,并记录路径约束;
    2)将步骤1)记录的路径约束的最后一个谓词进行反转,使其程序逻辑转向最后一 个分支的另一边,生成一个新的路径约束,如果新生成的路径约束可解,则将新生成的 路径约束对应的测试数据作为引导数据,进入步骤3),之后迭代进行步骤2)-5)直至 到达极优解或使定时器超时而至死锁,进而保留结果并重启步骤1);如果新生成的路径 约束不可解则直接重启步骤1),重新生成初始引导数据;
    3)将步骤2)生成的路径约束基于不同的数据类型进行解析与拆解,分别提取出不 同类型的数据结构,包括pcf、pcs和pco,其中pcf是路径约束中包含浮点类型数据的 部分,pcs和pco分别是包含字符串类型和其他类型的约束片段;
    4)对于不同数据类型基于搜索的策略有不同的处理方法:
    对于浮点类型的数据结构,使用交替变量法来精化浮点数的精度;
    对于字符串类型的数据结构,利用基因算法来解决对于字符串类型的处理问题;
    对于其他类型的数据结构,提供自定义的精化算法接口,用于用户针对数据类型自 定义匹配函数,如果用户并没有定义对应数据结构的精化规则,默认对数据结构利用搜 索的策略进行精化;
    5)将步骤2)得到的路径约束中的变量替换为经步骤4)精化后的具体数值,简化 路径约束,使之更容易被约束求解器计算而得到可行解,再利用约束求解器对简化后的 路径约束进行求解,生成的测试数据作为下一次迭代的输入数据,进行下一轮的生成和 精化。
    其中,利用随机策略生成测试的基础数据对应步骤1),利用动态符号执行完成对于 满足路径约束条件的整型数据的计算对应步骤2)与步骤5)前半部,利用基于搜索的 策略完成对于其他类型数值型数据的精化以及对于字符串或用户自定义类型数据的获 取对应步骤5)的后半部。
    本发明利用随机测试快速地获取初始输入,利用动态符号执行获取可以指导程序控 制流的数据,利用搜索策略针对不同的数据类型获取更高的精度和匹配度。这个方法为 自动化测试提供了更高的坚固性和拓展性。
    本发明提出了一个初步的基于混合策略的测试数据生成技术,即融合了现有技术的 优点而构成一个旨在解决单一测试数据生成技术产生的局限性的问题。鉴于随机策略、 动态符号执行和基于搜索的策略彼此本质上的很大的相异点和异构性,本发明提出的方 法能够在提升数据质量的同时减少成本。
    本发明的特点在于:1、综合了自动化测试数据生成领域的多种技术的优点;2、利 用随机策略生成初始数据,保证高效率与低成本;3、根据记录的路径约束信息,对谓 词中的子句进行反转,通过改变程序谓词的方法引导程序控制流至未覆盖区域,达到更 高覆盖;4、利用基于搜索的策略进行对于多种数据类型,包括浮点型数据、字符串型 数据以及其他用户自定义类型数据等的数据进行精化,找到最优解,提高数据质量。将 这4点结合,本发明可以在提高自动化生成的测试数据质量的同时削减所需的生成成本, 使得依靠生成的数据构建的单元测试用例集具有更高的质量,能够达到更高覆盖率,进 而能够发现更多程序缺陷。
    附图说明
    图1为本发明的实施流程图。
    具体实施方式
    在本发明方法中,首先利用随机策略随机生成测试数据作为初始的引导数据,接下 来利用动态符号执行和基于搜索的策略来对于不同数据类型进行处理和精化,利用了一 些最新的解决方案来保证本发明方法的健壮性和拓展性。
    如图1,本发明利用混合测试数据生成技术的优点制定生成流程,利用随机策略生 成测试的基础数据,利用动态符号执行完成对于满足路径约束条件的整型数据的计算, 利用基于搜索的策略完成对于其他类型数值型数据的精化以及对于字符串或用户自定 义类型数据的获取,以期达到自动化的测试生成,并且拥有尽可能小的成本以及尽可能 高的可用性,步骤如下:
    1)构建引导数据:由随机策略生成初始数据,初始化的情况是输入是随机产生的, 借助随机产生的数据,程序得以被执行并且在执行的过程中记录一些信息,例如路径约 束。利用初始数据进行动态执行并记录路径约束,记录下来的路径约束等信息会被用于 接下来的阶段用来通过改变控制信息内容引导测试数据的生成。
    2)导向性逻辑反转:路径约束(Path Constraint,PC)将输入域分割成不同的区域。 为了使程序所覆盖的代码区域尽可能的远离已经被之前的测试数据执行并覆盖过的代 码段,更准确地说,尽可能控制程序的逻辑流向至已覆盖程序逻辑的反向,需要将控制 条件反转,使其流向程序未被覆盖到的一条分支。如上所述,本发明将在构建初始引导 数据阶段运行并记录的路径约束的最后一个谓词进行反转,使其程序逻辑转向最后一个 分支的另一边,生成一个新的路径约束。如果新生成的路径约束可解,便将该约束对应 的测试数据作为新的候选数据,即作为引导数据,然后进入步骤3)进一步处理。如果 新生成的路径约束不可解则直接重启步骤1),重新生成初始引导数据。
    3)路径约束信息提取:生成的路径约束会基于不同的数据类型被解析与拆解。包含 浮点数或字符串等典型的数据结构的部分会被分别地从路径约束中提取出来。假设pc= pcf∧pcs∧pco,其中pc指得到的全部谓词,pcf是路径约束中包含浮点类型数据的 部分,pcs和pco分别是包含字符串类型和其他类型的约束片段。
    4)数据精化:对于每个数据类型,符号化地表示为上一阶段所提取的pcf,pcs和 pco,本发明中会施以不同的处理方法,利用基于搜索的策略针对不同类型的数据结构 进行测试数据生成。
    对于浮点类型(pcf),因为约束求解器对于浮点类型数据的计算的能力的不足,使 用交替变量法(Alternating Varaible Method,AVM)来精化浮点数的精度。AVM包含两 个主要阶段,首先AVM会开始于探索阶段(exploratory phase),在这个阶段中我们会 对输入数据进行微调,即对每个输入数据增加或者减少一个很小的数值。在使用AVM 的时候定义一个匹配函数,表明现有的数据与真实数据的差距。一旦进行微调后匹配函 数求值更小,也就是说现有的数据更加接近真实数据,那么算法就进入下一阶段,模式 阶段(pattern phase)。在这一阶段中,会对刚才确定的会对最终匹配函数值产生影响的 变量与变量变化的方向进行一次更大的调整,即增加或减少一个更大的数值,直至达到 一个最优情况。当对于一个变量已经无法找到更优情况时,对其他的变量都利用相似的 方法进行优化。
    对于字符串类型的约束片段(pcs),利用一个与字符串天然适配的算法,基因算法 (Genetic Algorithm,GA)来解决对于字符串类型的处理问题。GA的计算过程涉及一 系列的候选数据和一个可以用来指导测试生成的匹配函数。我们可以根据匹配函数的取 值(这个取值函数可能是覆盖率或者是成本等)好坏来评价候选的数据的质量,进而生 成并选择新的更好的候选者。在我们的算法中,我们维护了一个候选数据的集合,我们 会对这个集合中的候选数据进行迭代式重组和变异来接连获得新的候选者,匹配函数取 值更好的候选者会替代更坏的候选者,形成新的集合。我们选择的匹配函数是字符串序 数距离,变异操作符包括删除,增加和替换。更明确地说,删除操作符别定义为在字符 串中随机删除一个字符;增加操作符被定义为在字符串的随机位置中插入随机的字符; 而替换操作符被定义为替换字符串中的字符,使之拥有相似的序数值。
    而对于其他类型(pco),鉴于许多数据结构如java中的一些对象也同样是用户自己 定义的,于是我们为用户提供了可以自定义的精化算法接口。如果用户并没有定义对应 数据结构的精化规则,默认对数据结构利用搜索策略进行精化。
    5)测试数据生成:在利用以上几步获得结果后,将步骤2)得到的路径约束中的变 量替换为经步骤4)精化后的具体数值,简化路径约束,使之更容易被约束求解器计算 而得到可行解,再利用约束求解器对简化后的路径约束进行求解,生成的测试数据作为 下一次迭代的输入数据,进行下一轮的生成和精化。
    本发明中迭代进行步骤2)-5),直至到达极优解或使定时器超时而至死锁,保留结 果并重启步骤1),也就是不断利用分支的深度优先算法进行谓词的反转,直至所有可能 分支都被遍历过或者程序卡死才将步骤流程重置回第一步。步骤2)-5)利用迭代不断 精化提高生成的输入数据质量,在迭代执行到路径全收集或局部最优化的时候启动下一 次迭代,并在时限后结束步骤流程。
    本发明中涉及的几个主要策略别是随机策略、动态符号执行和基于搜索的策略,下 面具体说明其实施方式。
    1、随机策略
    随机策略最简单也是最普遍的应用是在一个固定的域中随机挑选生成的指定类型 的数据。本发明为了保证方法的可用性和计算效率,所利用的随机策略正是这种最普遍 的应用。对于整型数值和浮点型数值,我们在他们各自的取值域中随机抽取数值作为初 始执行数据,而对于字符串型数值,我们随机生成字符串长度,并根据对应长度生成字 符序列,构成字符串。
    2、动态符号执行
    动态符号执行是一个混合型的技术,融合了利用符号取值和真实数值对程序执行的 符号执行和真实执行两种方法。在本发明中,动态符号执行用来较快地获得整型数值以 及获取精度较低的浮点型数值,为下一步进化步骤准备粗制的数据。具体步骤如下:
    1)利用符号数据作为输入数据,不能被符号数据取代的变量会被利用随机策略生 成的数值取代。
    2)对程序进行插桩使得符号数值在程序中的变化和执行顺序能够得到记录。
    3)选定一组输入数据并且利用其对程序进行执行,利用符号数据进行执行的时候 记录并生成一组符号型的路径约束。
    4)对最后一个路径约束进行取反使得程序可能遍历到一条新的执行路径,直至全 路径都被覆盖或者程序出现错误。
    5)利用约束求解器进行求解,获得整型数值或粗化的浮点型数值。
    3、基于搜索的策略
    基于搜索的策略的主要思想是在程序对应的搜索域中进行取样并对数据进行调整, 同时策略维护一个用来评价数据质量的度量方法,一般被称为匹配函数或目标函数,函 数在取样点处的取值即代表数据在搜索域中的质量,为了达到更好的质量,利用搜索策 略对数据进行优化。
    本发明中主要利用了基于搜索的策略中的两个子策略。对于浮点型数据,选择利用 交替变量方法(AVM),而对于字符串型数据,选择利用基因算法(GA)。
    其中,AVM包含两个主要阶段,首先AVM会开始于探索阶段(exploratory phase), 在这个阶段中我们会对输入数据进行微调,即对每个输入数据增加或者减少一个很小的 数值。在使用AVM的时候我们会定义一个匹配函数,表明我们现有的数据与真实数据 的差距。一旦我们进行微调后匹配函数求值更小,也就是说我们现有的数据更加接近真 实数据,那么我们的算法就进入下一阶段,模式阶段(pattern phase)。在这一阶段中, 我们会对刚才确定的会对最终匹配函数值产生影响的变量与变量变化的方向进行一次 更大的调整,即增加或减少一个更大的数值,直至达到一个最优情况。当对于一个变量 我们已经无法找到更优情况时,我们对其他的变量都利用相似的方法进行优化。
    而GA,它的计算过程涉及一系列的候选数据和一个可以用来指导测试生成的匹配 函数。我们可以根据匹配函数的取值(这个取值函数可能是覆盖率或者是成本等)好坏 来评价候选的数据的质量,进而生成并选择新的更好的候选者。在我们的算法中,我们 维护了一个候选数据的集合,我们会对这个集合中的候选数据进行迭代式重组和变异来 接连获得新的候选者,匹配函数取值更好的候选者会替代更坏的候选者,形成新的集合。 本发明选择的匹配函数是字符串序数距离,变异操作符包括删除,增加和替换。更明确 地说,删除操作符别定义为在字符串中随机删除一个字符;增加操作符被定义为在字符 串的随机位置中插入随机的字符;而替换操作符被定义为替换字符串中的字符,使之拥 有相似的序数值。

    关 键  词:
    一种 基于 混合 策略 测试数据 生成 方法
      专利查询网所有文档均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    0条评论

    还可以输入200字符

    暂无评论,赶快抢占沙发吧。

    关于本文
    本文标题:一种基于混合策略的测试数据生成方法.pdf
    链接地址:https://www.zhuanlichaxun.net/p-4045274.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2017-2018 zhuanlichaxun.net网站版权所有
    经营许可证编号:粤ICP备2021068784号-1