本发明属于软件测试领域,涉及智能故障定位通用框架及其应用方法,具体为一种用于软件程序故障的自动定位的通用框架及其应用方法。
背景技术:
1、软件调试是保证软件可靠性的重要方式,也是软件开发过程中的一个关键环节,但它是昂贵的。在调试过程中,开发人员经常需要花费大量的时间和精力来发现导致故障的源代码。这个过程不仅浪费时间,还可能导致生产周期延误,增加成本,并对项目的成功产生负面影响。
2、在过去的几十年里,研究人员和开发人员一直在努力开发各种自动化技术和工具,以帮助减少软件调试的复杂性和成本。故障定位方法作为一种能够自动发现缺陷代码的技术,越来越多的研究人员开始关注并应用到实际生产环境中。这些方法利用各种程序信息,包括静态信息、动态信息、错误注入后的改变信息和错误报告信息等,来自动定位和标识潜在的问题代码。
3、虽然已经提出了很多故障定位方法,但这些方法在真实世界的故障场景上还未有行之有效的故障定位技术框架,开发人员常常需要花费大量的时间去了解故障定位方法以及场景特点,故障定位技术难以快速应用到开发人员需要的场景上。且现有的故障定位方法存在效率低下、信息获取难、精准度不高等问题。各种故障定位方法使用不同的数据进行计算,开发者很难在不同类型的故障定位方法之间快速转移开发,导致真实故障定位场景中定位故障往往效率低下;故障定位方法使用程序的静态和动态信息计算程序的可疑度,其中用到的获取信息的工具对大部分开发者来说较为陌生,上手难度以及各种信息获取工具导致开发维护场景中信息获取难;故障定位方法因为所用数据一般来源于单独的信息,以及被证明纯粹的覆盖信息等特征不足以面对故障定位的场景,导致故障定位方法精准度不高。
技术实现思路
1、为了解决上述问题,本发明提出了一种创新性的智能故障定位通用框架,在框架中,搭建了一个统一的通用的框架,开发者可以快速的使用不同的算法来解决故障定位问题。能够将多种故障定位方法整合并高效应用于不同系统的故障诊断中,如开源项目defects4j和sir数据集等;亦可根据特定软件的编译运行要求,自行制定运行规则,集成到特定的软件中。
2、本发明的技术方案:
3、智能故障定位通用框架,包括执行器、数据收集器、数据增强器、定位器、综合器和展示器六个组件,每个组件具体如下:
4、所述的执行器,是整个系统的起点,执行器使用指定的测试用例和程序源码对被测程序进行测试,为了满足测试的流程正确性,需要设置程序编译运行指令和测试预言,让执行器能够区分测试用例的失败和成功,以便执行器将失败的测试用例的相关信息输出,用于后续组件的输入。执行器支持扩展功能,允许用户添加更多的输出内容。这意味着用户可以在组件中编写额外的逻辑,让执行器在执行后输出对后续组件有用的结果。这些结果不仅包括故障类型和错误消息,还有失败测试用例的数量等程序的动态信息。
5、所述的数据收集器,在执行器每次执行完测试用例后,负责收集该测试用例的程序覆盖信息,另外数据收集器还会同步收集程序的语法结构信息、程序复杂性度量、文本信息等数据,处理为故障定位方法直接可用的数据形式。测试用例的程序覆盖信息是指测试用例运行过程中执行到的程序元素。程序的语法结构信息主要是程序的抽象语法树,程序的复杂性度量主要有运算符数量、圈复杂度、语句数量、halstead缺陷、嵌套深度总和、halstead难度、变量声明数量、halstead工作量、变量引用数量、halstead长度、halstead词汇量、halstead体积、循环数量、最大嵌套深度、操作数数量、表达式数量、代码行数、参数数量、注释数量、注释行数共21种特征。程序的文本信息是由程序本身的标识符组成的文档字典,以及测试用例输出信息的标识符形成的查询字典。数据收集器同样支持扩展,使用者可以增加后续定位器中故障定位方法需要的特征。在本框架中,数据收集器输出的特征即定位器中故障定位方法需要的特征种类数量,后续将不会对特征种类数量进行扩充,数据收集器的输出可直接作用于定位器。
6、所述的数据增强器,在定位器运行之前可选择是否开启,数据增强器的主要功能是对原始数据进行扩充,在失败的测试用例远少于成功的测试用例的情况下,在运行定位器之前执行数据增强器有利于提高故障定位方法的准确性。如真实故障场景中,触发bug的测试用例的数量往往只有一个,使用近些年流行的深度学习方法,可以从原始程序和失败测试用例中学习到故障的行为模式,生成一些失败的测试用例,从而缓解故障定位场景中正负样本不均衡的情况。数据增强器可根据需要进行关闭或开启。同样的,数据增强器也支持扩展,使用者可根据需要增加额外的数据增强逻辑,数据增强后数据的特征种类不变,仅在测试用例的维度上增加。
7、所述的定位器,是该故障定位框架最重要的部分,定位器使用数据收集器收集处理好的程序静态信息和动态信息以及数据增强器扩充的样本,使用不同的故障定位方法进行故障定位,生成可疑元素的排名列表,排名越前的程序元素越有可能是导致故障的根本原因。
8、所述的综合器,对定位器中不同故障定位方法生成的程序元素排名列表进行综合。综合器需要使用历史故障数据学习权重参数,从历史故障中学习不同故障定位方法与真实故障元素之间的联系。其使用深度学习方法,从已有故障元素和程序源码等信息中学习不同故障定位方法的置信度,并综合这些方法的定位结果,输出一个综合后的程序元素排名列表。因为不同类别的故障定位方法使用到的信息具有较大差异,综合不同特征信息有利于组件给出更准确的判断。该组件主要解决故障定位技术准确性不高的问题。
9、所述的展示器,对综合器输出的排名列表中的程序元素,在原始程序中高亮展示到可视化界面,方便使用者直接对程序进行观察确认,同时使用者在确认了故障位置后,还可以通过展示器进行反馈,更新历史故障数据库,定位器中的基于学习的故障定位方法和综合器将重新学习历史数据,以便之后对新到来的故障做出更准确的判断。
10、本发明的有益效果:本发明用于计算机软件的故障定位任务,该框架实现了高性能、高扩展性的计算组件,框架程序可以根据历史故障数据进行学习,调整权重综合多种类型的故障定位方法。本发明能够有效地对计算机软件进行自动化故障定位,帮助软件开发者在系统测试和维护阶段更好更快地揭示产品故障的根本原因,提高软件质量,降低软件开发成本。
1.智能故障定位通用框架,其特征在于,所述的智能故障定位通用框架包括执行器、数据收集器、数据增强器、定位器、综合器和展示器六个组件,每个组件具体如下:
2.权利要求1所述的智能故障定位通用框架的应用方法,其特征在于,包括如下步骤: