一种缺陷检测工具更新方法及装置的制造方法
【专利摘要】本发明实施例公开了一种缺陷检测工具更新方法及装置,方法包括:根据待测试工程中异常出现的位置和时机,将异常划分为至少一种异常类型;针对每一种异常类型的异常,确定所述异常类型对应的异常解决方案;根据每一种异常解决方案,更新所述缺陷检测工具中的语言分析器,其中所述语言分析器至少包括词法分析器和语法分析器。应用本发明实施例,能规避缺陷检测工具因待检测工程的开发环境及编译器的多样性带来的非预期语法和/或词法的影响而产生的异常,使得后续分析工作顺利进行。
【专利说明】
一种缺陷检测工具更新方法及装置
技术领域
[0001]本发明涉及软件测试技术领域,特别涉及一种缺陷检测工具更新方法及装置。
【背景技术】
[0002]众所周知,软件测试是软件开发中一个非常重要的环节,它主要被用来鉴别开发的软件程序的正确性、完整性以及质量,确保软件系统在投入使用前是没有缺陷的。实际应用中,为节省人力、时间或硬件资源,提高测试效率,引入了基于自动化测试概念的各种缺陷检测工具,且应用广泛。
[0003]而对于C或C++语言,不同的操作系统或者不同平台的编译器下,语言标准会有着或多或少的区别,导致现有的缺陷检测工具可能会由于不识别某种非预期的词法和/或语法而产生异常,进而使得后续分析工作难以顺利进行。当前,很多缺陷检测工具在测试之前会进行一些替换来预防由于用户开发平台与其预期不一致而导致的预处理无法正常展开的情况,但在后续分析过程中,仍会因为缺陷检测工具的语言分析器不识别关键字、自定义数据类型或者逻辑结构而抛出一些词法或者语法的异常,从而影响一些或者整个工程的分析,只能得到很少的分析结果,无法完整地描述整个工程的缺陷,严重的情况下,甚至会得不到任何分析结果。
【发明内容】
[0004]本发明实施例的目的在于提供一种缺陷检测工具更新方法及装置,以规避所述缺陷检测工具因待检测工程的开发环境及编译器的多样性带来的非预期语法和/或词法的影响而产生的异常,使得后续分析工作顺利进行。
[0005]为达到上述目的,本发明实施例公开了一种缺陷检测工具更新方法,所述方法包括:
[0006]根据待测试工程中异常出现的位置和时机,将异常划分为至少一种异常类型;
[0007]针对每一种异常类型的异常,确定所述异常类型对应的异常解决方案;
[0008]根据每一种异常解决方案,更新所述缺陷检测工具中的语言分析器,其中所述语言分析器至少包括词法分析器和语法分析器。
[0009]具体地,所述异常类型包括:
[0010]类型关键字和未知自定义类型引起的词法异常、非类型关键字引起的词法异常和未知逻辑结构引起的语法异常。
[0011]具体地,在所述异常类型为类型关键字和未知自定义类型引起的词法异常的情况下,针对类型关键字和未知自定义类型引起的词法异常,确定的异常解决方案为:
[0012]针对类型关键字和未知自定义类型引起的词法异常,在声明语句的推导关系中添加针对所述词法分析器不能识别的字符串的声明,其中,声明的所述字符串的类型名称与类型符号相同。
[0013]具体地,在所述异常类型为非类型关键字引起的词法异常的情况下,针对非类型关键字引起的词法异常,确定的异常解决方案为:
[0014]针对非类型关键字引起的词法异常,在词法分析过程中,忽略所述词法分析器不能识别的字符串的词法分析。
[0015]具体地,在所述异常类型为未知逻辑结构引起的语法异常的情况下,针对未知逻辑结构引起的语法异常,确定的异常解决方案为:
[0016]针对所述语法分析器不能识别的每一条语句,判断删除当前语句的第一个词后,所述语法分析器是否能识别当前语句;
[0017]如果否,继续执行判断删除当前语句的第一个词后,所述语法分析器是否能识别当前语句的操作步骤。
[0018]为达到上述目的,本发明实施例公开了一种缺陷检测工具更新装置,所述装置包括:
[0019]划分模块,用于根据待测试工程中异常出现的位置和时机,将异常划分为至少一种异常类型;
[0020]确定模块,用于针对每一种异常类型的异常,确定所述异常类型对应的异常解决方案;
[0021]更新模块,用于根据每一种异常解决方案,更新所述缺陷检测工具中的语言分析器,其中所述语言分析器至少包括词法分析器和语法分析器。
[0022]具体地,所述异常类型包括:
[0023]类型关键字和未知自定义类型引起的词法异常、非类型关键字引起的词法异常和未知逻辑结构引起的语法异常。
[0024]具体地,在所述异常类型为类型关键字和未知自定义类型引起的词法异常的情况下,所述确定模块,具体用于:
[0025]将在声明语句的推导关系中添加针对所述词法分析器不能识别的字符串的声明,确定为与类型关键字和未知自定义类型引起的词法异常对应的异常解决方案;其中,声明的所述字符串的类型名称与类型符号相同。
[0026]具体地,在所述异常类型为非类型关键字引起的词法异常的情况下,所述确定模块,具体用于:
[0027]将在词法分析过程中,忽略所述词法分析器不能识别的字符串的词法分析,确定为与非类型关键字引起的词法异常对应的异常解决方案。
[0028]具体地,在所述异常类型为未知逻辑结构引起的语法异常的情况下,所述确定模块,具体用于:
[0029]将针对所述语法分析器不能识别的每一条语句,判断删除当前语句的第一个词后,所述语法分析器是否能识别当前语句;如果否,继续执行判断删除当前语句的第一个词后,所述语法分析器是否能识别当前语句,确定为与未知逻辑结构引起的语法异常对应的异常解决方案。
[0030]应用本发明实施例所提供的技术方案,根据待测试工程中异常出现的位置和时机,将异常划分为至少一种异常类型,然后针对每一种异常类型的异常,确定所述异常类型对应的异常解决方案,再根据每一种异常解决方案,更新所述缺陷检测工具中的语言分析器,其中所述语言分析器至少包括词法分析器和语法分析器。可以看出,本发明实施例提供的方案能够规避缺陷检测工具在进行缺陷检测时,因C和/或C++语言在不同开发环境及编译器下语言标准不同导致分析器不识别关键字、自定义数据类型或者逻辑结构而抛出的一些词法或者语法的异常,从而确保抽象语法树的生成及其后续分析工作得以顺利进行,得到所述待测试工程的分析结果。
[0031]当然,实施本发明的任一产品或方法必不一定需要同时达到以上所述的所有优点。
【附图说明】
[0032]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0033]图1为本发明实施例提供的缺陷检测工具更新方法的一种流程示意图;
[0034]图2为本发明实施例提供的缺陷检测工具更新装置的一种结构示意图。
【具体实施方式】
[0035]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0036]本发明实施例公开了一种缺陷检测工具更新方法及装置,以下分别进行详细说明。
[0037]参见图1,图1为本发明实施例提供的缺陷检测工具更新方法的一种流程示意图,可以包括如下步骤:
[0038]SlOl,根据待测试工程中异常出现的位置和时机,将异常划分为至少一种异常类型。
[0039]具体地,异常类型可以包括:类型关键字和未知自定义类型引起的词法异常、非类型关键字引起的词法异常和未知逻辑结构引起的语法异常。
[0040]实际应用中,通常缺陷检测涉及到的是待测试工程的源文件、中间文件及工程文件,对这些文件通过语言分析器进行处理,看是否有异常,如果有异常,可以按照异常出现的位置和时机划分异常类型。具体地,将在词法分析过程中,处于语句声明部分的异常划分为类型关键字和未知自定义类型引起的词法异常,处于其他部分的异常划分为非类型关键字引起的词法异常;将在语法分析过程中出现的异常划分为由未知逻辑结构引起的语法异常。其中,类型关键字即是编程语言的关键字,又表示一种数据类型;未知自定义类型是指用户自定义的数据类型,可以是结构体或类等数据类型。
[0041]S102,针对每一种异常类型的异常,确定所述异常类型对应的异常解决方案。
[0042]具体地,在所述异常类型为类型关键字和未知自定义类型引起的词法异常的情况下,针对类型关键字和未知自定义类型引起的词法异常,确定的异常解决方案为:
[0043]针对类型关键字和未知自定义类型引起的词法异常,在声明语句的推导关系中添加针对所述词法分析器不能识别的字符串的声明,其中,声明的所述字符串的类型名称与类型符号相同。
[0044]以下将以C语言中的未知自定义类型引起的词法异常为例来进行详细说明。
[0045]假设,缺陷检测工具在对待测试工程进行测试时,在对语句“f00_f00进行词法分析的过程中,由于词法分析器不识别处于声明符位置的字符串“foo”而报出异常,其中“foo”是一个未知自定义类型,由SlOl可以得知,此异常应划分为类型关键字和未知自定义类型引起的词法异常,针对这种异常,可以通过自定义一个数据类型来识别字符串“foo”,即,在声明语句的推导关系中添加针对字符串“foo”的声明,实际应用中,所述自定义的数据类型的名称和类型符号可以是相同的。
[0046]比如:添加的针对字符串“foo”的声明为“abcabc f00;”,其中第一个abc为数据类型的符号,第二个abc为数据类型的名称。
[0047]具体地,在所述异常类型为非类型关键字引起的词法异常的情况下,针对非类型关键字引起的词法异常,确定的异常解决方案为:
[0048]针对非类型关键字引起的词法异常,在词法分析过程中,忽略所述词法分析器不能识别的字符串的词法分析。
[0049]实际应用中,对于构建抽象语法树来说,非类型关键字在之后的语法分析中没有特别重要的作用,通常情况下不涉及具体的功能实现,因此,可以当作语句中的一个普通字符串,甚至可以忽略对它的词法分析。
[°°50] 假设,缺陷检测工具在对待测试工程进行测试时,对语句“something inta = 5;”进行词法分析的过程中,由于词法分析器不识别字符串“something”而报出异常,本领域技术人员可以理解的是,“ something ”不处于声明位置,通过SlOl得知,此异常应划分为非类型关键字引起的词法异常,它只是一个修饰词,不涉及具体的功能实现,因此,在词法分析过程中,可以直接将其忽略。
[0051]具体地,在所述异常类型为未知逻辑结构引起的语法异常的情况下,针对未知逻辑结构引起的语法异常,确定的异常解决方案为:
[0052]针对所述语法分析器不能识别的每一条语句,判断删除当前语句的第一个词后,所述语法分析器是否能识别当前语句;
[0053]如果否,继续执行判断删除当前语句的第一个词后,所述语法分析器是否能识别当前语句的操作步骤。
[0054]假设,缺陷检测工具在对待测试工程进行检测时,由于语法分析器不能识别语句“Socket&operator= (const Socket&) =delete的逻辑结构而报出异常,通过SlOl得知,此异常为未知逻辑结构引起的语法异常,针对这种异常,首先删除第一个词“Socket”,判断当前语句“&operator = (const Socket&) = delete能否被语法分析器识别,如果不能,则删除当前语句的第一个词“&”,然后判断语句“operator = (const Socket&) = delete能否被语法分析器识别,如果仍然不能,则继续删除当前语句的第一个词“operator”,并判断当前语句“=(const Socket&) =delete;”能否被语法分析器识别,以此类推,如果删除直到最后一个词仍不能被语法分析器识别,即语句“delete;”仍不能被识别,则删除“delete”,将“;”识别为空语句。
[0055]S103,根据每一种异常解决方案,更新所述缺陷检测工具中的语言分析器,其中所述语言分析器至少包括词法分析器和语法分析器。
[0056]实际应用中,针对每一种异常类型的异常,可以根据由S102所确定的异常解决方案,更新缺陷检测工具中的语言分析器,更具体地,分别更新缺陷检测工具中的词法分析器和语法分析器,即,将与类型关键字和未知自定义类型引起的词法异常对应的异常解决方案、与非类型关键字引起的词法异常对应的异常解决方案添加到词法分析器中,将与未知逻辑结构引起的语法异常对应的异常解决方案添加到语法分析器中,以使得缺陷检测工具中的语言分析器能够规避所述异常的出现,从而保障抽象语法树的生成及后续分析过程的顺利进行。
[0057]应用本发明图1所示实施例,根据待测试工程中异常出现的位置和时机,将异常划分为至少一种异常类型,然后针对每一种异常类型的异常,确定所述异常类型对应的异常解决方案,再根据每一种异常解决方案,更新所述缺陷检测工具中的语言分析器,其中所述语言分析器至少包括词法分析器和语法分析器。可以看出,本发明实施例提供的方案能够规避缺陷检测工具在进行缺陷检测时,因C和/或C++语言在不同开发环境及编译器下语言标准不同导致分析器不识别关键字、自定义数据类型或者逻辑结构而抛出的一些词法或者语法的异常,从而使抽象语法树的生成及其后续分析工作得以顺利进行,得到所述待测试工程的分析结果。
[0058]与上述的方法实施例相对应,本发明实施例还提供一种缺陷检测工具更新装置。
[0059]参见图2,图2为本发明实施例提供的缺陷检测工具更新装置的一种结构示意图,与图1所示的流程相对应,包括:
[0060]划分模块201,用于根据待测试工程中异常出现的位置和时机,将异常划分为至少一种异常类型。
[0061]具体地,异常类型可以包括:类型关键字和未知自定义类型引起的词法异常、非类型关键字引起的词法异常和未知逻辑结构引起的语法异常。
[0062]确定模块202,用于针对每一种异常类型的异常,确定所述异常类型对应的异常解决方案。
[0063]具体地,在所述异常类型为类型关键字和未知自定义类型引起的词法异常的情况下,所述确定模块,具体用于:
[0064]将在声明语句的推导关系中添加针对所述词法分析器不能识别的字符串的声明,确定为与类型关键字和未知自定义类型引起的词法异常对应的异常解决方案;其中,声明的所述字符串的类型名称与类型符号相同。
[0065]具体地,在所述异常类型为非类型关键字引起的词法异常的情况下,所述确定模块,具体用于:
[0066]将在词法分析过程中,忽略所述词法分析器不能识别的字符串的词法分析,确定为与非类型关键字引起的词法异常对应的异常解决方案。
[0067]具体地,在所述异常类型为未知逻辑结构引起的语法异常的情况下,所述确定模块,具体用于:
[0068]将针对所述语法分析器不能识别的每一条语句,判断删除当前语句的第一个词后,所述语法分析器是否能识别当前语句;如果否,继续执行判断删除当前语句的第一个词后,所述语法分析器是否能识别当前语句,确定为与未知逻辑结构引起的语法异常对应的异常解决方案。
[0069]更新模块203,用于根据每一种异常解决方案,更新所述缺陷检测工具中的语言分析器,其中所述语言分析器至少包括词法分析器和语法分析器。
[0070]应用本发明图2所示实施例,根据待测试工程中异常出现的位置和时机,将异常划分为至少一种异常类型,然后针对每一种异常类型的异常,确定所述异常类型对应的异常解决方案,再根据每一种异常解决方案,更新所述缺陷检测工具中的语言分析器,其中所述语言分析器至少包括词法分析器和语法分析器。可以看出,本发明实施例提供的方案能够规避缺陷检测工具在进行缺陷检测时,因C和/或C++语言在不同开发环境及编译器下语言标准不同导致分析器不识别关键字、自定义数据类型或者逻辑结构而抛出的一些词法或者语法的异常,从而使抽象语法树的生成及其后续分析工作得以顺利进行,得到所述待测试工程的分析结果。
[0071]需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
[0072]本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0073]本领域普通技术人员可以理解实现上述方法实施方式中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机可读取存储介质中,这里所称得的存储介质,如:R0M/RAM、磁碟、光盘等。
[0074]以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
【主权项】
1.一种缺陷检测工具更新方法,其特征在于,所述方法包括: 根据待测试工程中异常出现的位置和时机,将异常划分为至少一种异常类型; 针对每一种异常类型的异常,确定所述异常类型对应的异常解决方案; 根据每一种异常解决方案,更新所述缺陷检测工具中的语言分析器,其中所述语言分析器至少包括词法分析器和语法分析器。2.根据权利要求1所述的方法,其特征在于,所述异常类型包括: 类型关键字和未知自定义类型引起的词法异常、非类型关键字引起的词法异常和未知逻辑结构引起的语法异常。3.根据权利要求2所述的方法,其特征在于,在所述异常类型为类型关键字和未知自定义类型引起的词法异常的情况下,针对类型关键字和未知自定义类型引起的词法异常,确定的异常解决方案为: 针对类型关键字和未知自定义类型引起的词法异常,在声明语句的推导关系中添加针对所述词法分析器不能识别的字符串的声明,其中,声明的所述字符串的类型名称与类型符号相同。4.根据权利要求2所述的方法,其特征在于,在所述异常类型为非类型关键字引起的词法异常的情况下,针对非类型关键字引起的词法异常,确定的异常解决方案为: 针对非类型关键字引起的词法异常,在词法分析过程中,忽略所述词法分析器不能识别的字符串的词法分析。5.根据权利要求2所述的方法,其特征在于,在所述异常类型为未知逻辑结构引起的语法异常的情况下,针对未知逻辑结构引起的语法异常,确定的异常解决方案为: 针对所述语法分析器不能识别的每一条语句,判断删除当前语句的第一个词后,所述语法分析器是否能识别当前语句; 如果否,继续执行判断删除当前语句的第一个词后,所述语法分析器是否能识别当前语句的操作步骤。6.一种缺陷检测工具更新装置,其特征在于,所述装置包括: 划分模块,用于根据待测试工程中异常出现的位置和时机,将异常划分为至少一种异常类型; 确定模块,用于针对每一种异常类型的异常,确定所述异常类型对应的异常解决方案; 更新模块,用于根据每一种异常解决方案,更新所述缺陷检测工具中的语言分析器,其中所述语言分析器至少包括词法分析器和语法分析器。7.根据权利要求6所述的装置,其特征在于,所述异常类型包括: 类型关键字和未知自定义类型引起的词法异常、非类型关键字引起的词法异常和未知逻辑结构引起的语法异常。8.根据权利要求7所述的装置,其特征在于,在所述异常类型为类型关键字和未知自定义类型引起的词法异常的情况下,所述确定模块,具体用于: 将在声明语句的推导关系中添加针对所述词法分析器不能识别的字符串的声明,确定为与类型关键字和未知自定义类型引起的词法异常对应的异常解决方案;其中,声明的所述字符串的类型名称与类型符号相同。9.根据权利要求7所述的装置,其特征在于,在所述异常类型为非类型关键字引起的词法异常的情况下,所述确定模块,具体用于: 将在词法分析过程中,忽略所述词法分析器不能识别的字符串的词法分析,确定为与非类型关键字引起的词法异常对应的异常解决方案。10.根据权利要求7所述的装置,其特征在于,在所述异常类型为未知逻辑结构引起的语法异常的情况下,所述确定模块,具体用于: 将针对所述语法分析器不能识别的每一条语句,判断删除当前语句的第一个词后,所述语法分析器是否能识别当前语句;如果否,继续执行判断删除当前语句的第一个词后,所述语法分析器是否能识别当前语句,确定为与未知逻辑结构引起的语法异常对应的异常解决方案。
【文档编号】G06F9/445GK106020913SQ201610390646
【公开日】2016年10月12日
【申请日】2016年6月6日
【发明人】金大海, 肖飞, 肖一飞, 宫云战, 王雅文, 黄俊飞
【申请人】北京邮电大学