程序路径中确定函数调用的上下文环境影响的方法技术

技术编号:7843153 阅读:291 留言:0更新日期:2012-10-13 01:33
本发明专利技术公开了一种程序路径中确定函数调用的上下文环境影响的方法,该方法将返回值、被调用函数重定义的全局变量、指针或引用类型参数作为被调用函数的输出型变量,并采用路径敏感和上下文敏感的符号化区间运算技术,计算被调用函数在路径上各调用点输出型变量必需满足的上下文条件,最后根据该条件生成模拟替换函数,模拟替换函数根据各调用点的条件动态调整输出型变量的取值,保证程序按照目标路径执行。该方法可以用于自动化单元测试中面向路径的测试,包括面向全路径测试、面向子路径测试和面向目标测试等,实验证明,采用本发明专利技术所述方法,能够保证被测程序按照目标路径执行,并提高单元测试效率。

【技术实现步骤摘要】

本专利技术涉及软件单元自动测试技术,尤其涉及一种。
技术介绍
在对软件进行单元测试时,对于被测函数中的被调用的函数,通常不直接调用原函数,而是生成逻辑简单的替换函数,用替换函数模拟原函数的行为,主要原因有1)可以将被测程序与执行代价较大的实际程序隔离,提高单元测试的效率;2)将被测函数与不可控制的执行环境隔离,让测试过程顺利进行;3)单元测试中,被调用函数可能尚未实现。自动化单元测试中,替换函数的生成会遇到新问题。传统的替换函数生成方法中,替换函数的输出值为随机值。自动化单元测试通常选择一条目标覆盖路径,然后生成满足该路径的测试用例,最后动态执行被测函数,判断沿该路径执行时,程序的行为是否正确。由于路径上 被调用函数会修改调用点各变量的取值,被调用函数的随机输出值可能导致各变量的取值不能满足路径条件,导致被测函数不能按照目标覆盖路径执行,影响测试的覆盖率。因此,需要计算被调用函数在路径上每个调用点必须满足的路径上下文条件,替换函数根据各调用点必须满足的上下文条件修改输出型变量的取值,让被测函数按照目标覆盖路径执行。
技术实现思路
有鉴于此,本专利技术的主要目的在于提供一种,以计算给定路径中各函数调用点对上下文环境所产生的影响,通过采用路径敏感的符号化区间运算技术确定被调用函数在路径上各调用点必须满足的上下文条件,最后根据该条件生成被调用函数的模拟替换函数,保证被测程序按照目标覆盖路径执行,从而提高单元测试的效率和覆盖率。为达到上述目的,本专利技术的技术方案是这样实现的 一种,该方法包括 A、获取被测函数的目标覆盖路径和满足该路径的测试用例; B、提取被测函数使用的全局变量; C、采用路径敏感的符号化区间运算技术,计算被调用函数在路径上各调用点必需满足的路径上下文条件; D、基于上下文条件,生成模拟替换代码;对于同一函数可能在路径上被多次调用,使用F表示被调用函数、L为被调用函数在路径上的一个调用点。其中所述步骤A包括 Al、获取目标覆盖路径和让待测函数沿该路径执行的测试用例; A2、对于控制流图G = (Node, Edge, start, ,路径/7表示待测函数的一条执行序列<start, U1,…其中所述 Wart E Abofe 为函数入口,n E Abofe,如果/ —== end, P为一条完整路径,否则产为一条子路径;A3、如果同一控制流图节点在路径上出现多次,视为不同的路径节点。其中所述步骤B包括 BI、将路径的首节点设置为当前节点,沿路径进行数据流迭代; B2、判断当前节点是否存在全局变量,如果是,执行步骤B3,如果否,执行步骤B4 ; B3、将当前节点使用的全局变量添加到被测函数的全局变量集合中; B4、判断当前节点是否为路径的尾节点,如果是,退出计算;如果否,将当前节点的后继节点设置为当前节点,然后返回步骤B2。其中所述步骤C包括 Cl、为待测函数的输入变量生成对应的符号,符号对应的初始取值区间的上限和下限都设置为测试用例中该变量的取值; C2、将路径的头节点设置为当前节点,沿路径进行数据流迭代; C3、根据当前节点对应的语句更新数据流信息; C4、判定当前节点是否为尾节点,如果是,退出计算;如果否,执行步骤C5 ; C5、将当前节点的后继节点设置为当前节点,然后返回步骤C3。其中所述步骤C3包括 C31、将当前所有符号以及符号对应的取值区间备份为前置信息/Tre-i/7/b; C32、如果当前节点存在函数调用点八为函数调用点生成对应的ID,所述ID包括该调用点对应的抽象语法树节点信息和控制流图节点信息;为有效输出型变量生成对应的符号,有效输出型变量包括返回值、指针或引用类型的参数、被测函数使用、且被/重定义的全局变量,将各有效输出型变量及初始符号< var,symbol}记录到f的初始符号集合中,将符号对应的初始取值区间下限设置为负无穷,将初始取值区间的上限设置为正无穷; C33、如果当前节点存在尚未符号化的变量,为该变量生成对应的符号; C34、如果当前节点对应的语句是赋值语句,计算赋值表达式的右端表达式对应的符号表达式,将赋值表达式的左端变量对应的符号表达式替换为计算结果; C35、如果当前结点为分支结点,根据分支结点中的条件表达式计算各符号的分支限定区间; C36、清除无效符号。其中所述步骤C36包括 C361、获取当前所有的符号放入集合中; C362、如果符号集合不为空,从集合中选择一个符号将符号从集合中移除,执行步骤C363,否则退出当前步骤; C363、查找是否有变量对应的符号表达式中包含人如果是,执行步骤C362 ;如果否,则步骤C364 ; C364、判断是否为某函数调用点/的输出型变量rar的初始符号,如果是,执行步骤C365 ;如果否,执行步骤C366 ; C365、从中取出symbol对应的取值区间domain,、将<Cvar,domain}保存到函数调用点/的必需满足的上下文条件中; C366、清除及对应的取值区间。其中所述步骤D包括D1、将路径上所有被调用函数放入被调用函数集合; D2、判断被调用函数的集合是否为空,如果是,退出当前步骤;如果否,从集合中选择一个被调用函数Z7,将Z7从集合中移除,执行步骤D3 ; D3、将A在路径上所有调用点的ID及各调用点必需满足的上下文条件放入集合中,将该中的上下文条件根据ID进行排序,形成被调用函数的路径条件链表; D4、根据路径条件链表,生成模拟替换函数代码,然后返回步骤D2。其中所述步骤D3进一步包括 D31、初始路径条件链表判断是否为空,如果是,将保存为A的路径条件,退出计算;如果否,执行步骤D32 ; D32、新建链表节点/ ,从中选取尚未处理的上下文条件存入链表节点中,并将该条件从中移除,判定当前链表是否为空,如果是,执行步骤D33,如果否,执行步骤D34 ;D33、将设置为链表头节点,执行步骤D32 ; D34、将链表头节点设置为当前节点; D35、将与当前节点的ID进行比较,判定其ID是否比当前节点的ID小,如果是,执行步骤D36 ;如果否,执行步骤D37 ; D36、将插入到当前节点之前,执行步骤D32 ; D37、将当前节点的后继节点设置为当前节点,执行步骤D35 ;其中,所述步骤D35对ID进行比较排序时,对于对应的控制流图节点不同的调用点,按照节点在路径上的顺序进行 排序;对于控制流图节点相同的调用点,根据其抽象语法树节点上保存的位置信息进行排序,起始行号交小的排在前面,起始行号相同的起始列号较小的排在前面。其中所述步骤D4进一步包括 D41、生成模拟替换函数,所述模拟替换函数包含链表生成代码和变量处理代码; D42、链表生成代码根据步骤D3计算的结果创建链表,其中链表的头节点代表模拟替 换函数在路径上第一次被调用时必须满足的路径上下文条件,链表的尾节点代表模拟替换函数在目标路径上最后一次被调用时必须满足的路径上下文条件; D43、变量处理代码根据D42创建的链表,调整有效输出型变量的取值区间,当目标覆盖路径为子路径时,由于被测程序动态执行时会执行一条完整路径,对于不在子路径上的调用点,模拟替换函数本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.ー种程序路径中确定函数调用的上下文环境影响的方法,其特征在于,该方法包括 A、获取被测函数的目标覆盖路径和满足该路径的测试用例; B、提取被测函数使用的全局变量; C、采用路径敏感的符号化区间运算技术,计算被调用函数在路径上各调用点必需满足的路径上下文条件; D、基于上下文条件,生成模拟替换代码;对于同一函数可能在路径上被多次调用,使用F表示被调用函数、为被调用函数在路径上的一个调用点。2.根据权利要求I所述的程序路径中确定函数调用的上下文环境影响的方法,其特征在于,所述步骤A包括 Al、获取目标覆盖路径和让待测函数沿该路径执行的测试用例; A2、对于控制流图G ニ (Node, Edge, start, 6 必,路径/7表示待测函数的一条执行序列<start, U1,…/ 6ジ,其中所述 siari E Abofe 为函数入口,n E Abofe,如果/ —== end, P为一条完整路径,否则/7为一条子路径; A3、如果同一控制流图节点在路径上出现多次,视为不同的路径节点。3.根据权利要求I所述的程序路径中确定函数调用的上下文环境影响的方法,其特征在于,所述步骤B包括 BI、将路径的首节点设置为当前节点,沿路径进行数据流迭代; B2、判断当前节点是否存在全局变量,如果是,执行步骤B3,如果否,执行步骤B4 ; B3、将当前节点使用的全局变量添加到被测函数的全局变量集合中; B4、判断当前节点是否为路径的尾节点,如果是,退出计算;如果否,将当前节点的后继节点设置为当前节点,然后返回步骤B2。4.根据权利要求I所述的程序路径中确定函数调用的上下文环境影响的方法,其特征在于,所述步骤C包括 Cl、为待测函数的输入变量生成对应的符号,符号对应的初始取值区间的上限和下限都设置为测试用例中该变量的取值; C2、将路径的头节点设置为当前节点,沿路径进行数据流迭代; C3、根据当前节点对应的语句更新数据流信息; C4、判定当前节点是否为尾节点,如果是,退出计算;如果否,执行步骤C5 ; C5、将当前节点的后继节点设置为当前节点,然后返回步骤C3。5.根据权利要求4所述的程序路径中确定函数调用的上下文环境影响的方法,其特征在于,所述步骤C3包括 C31、将当前所有符号以及符号对应的取值区间备份为前置信息/Tre-i/7/b; C32、如果当前节点存在函数调用点八为函数调用点生成对应的ID,所述ID包括该调用点对应的抽象语法树节点信息和控制流图节点信息;为有效输出型变量生成对应的符号,有效输出型变量包括返回值、指针或引用类型的參数、被测函数使用、且被/重定义的全局变量,将各有效输出型变量及初始符号く var,symbol}记录到f的初始符号集合中,将符号对应的初始取值区间下限设置为负无穷,将初始取值区间的上限设置为正无穷; C33、如果当前节点存在尚未符号化的变量,为该变量生成对应的符号;C34、如果当前节点对应的语句是赋值语句,计算赋值表达式的右端表达式对应的符号表达式,将赋值表达式的左端变量对应的符号表达式替换为计算结果; C35、如果当前结点为分支结点,根据分支结点中的条件表达式计算各符号的分支限定区间; C36、清除无效符号。6.根据权利要求5所述的程序路径中确定函数调用的上下文环境影响的方法,其特征在于,所述步骤C36包括 C361、获取当前所有的符号放入集合中; C362、如果符号集合不为空,从集合中选择...

【专利技术属性】
技术研发人员:王雅文宫云战周傲黄俊飞金大海唐容孙华衿
申请(专利权)人:北京邮电大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1