本技术涉及软件测试,特别涉及一种根因定位方法及装置。
背景技术:
1、在应用的生命周期中,在正式发布用于实现应用的可执行代码之前,需要对该可执行代码进行多阶段测试(如alpha测试、beta测试和gamma测试等)。测试是为了验证该可执行代码是否满足应用需求。一个应用的可执行代码的测试过程可以通过运行多个测试用例实现,不同的测试用例用于测试该可执行代码中不同的代码块的功能。这样一来,在经过多阶段测试过程后,测试用例的数量会逐步累计。然而,大量的测试用例导致对测试用例的分析和定位会耗费大量的人力成本和时间成本。
2、目前,开发人员会统一收集测试用例执行过程中的日志,特别是异常日志。开发人员在定位导致测试用例执行失败的根因时,会参考在测试用例执行前后产生的日志,并根据这些日志定位根因。
3、但是,由于日志无法准确反映测试用例的执行情况,导致根据日志定位根因的准确性较低。
技术实现思路
1、本技术提供了一种根因定位方法及装置。本技术将导致当前版本运行失败的根因与可执行代码的变更关联起来,保证了对测试用例进行根因定位的准确性。本技术提供的技术方案如下:
2、第一方面,本技术提供了一种根因定位方法。该方法包括:获取运行失败的测试用例,测试用例用于测试应用的可执行代码是否满足应用需求,应用用于实现用户的业务;获取测试用例的当前版本和测试用例之前成功运行的成功版本;获取当前版本相较于成功版本发生变更的变更项目集合,变更项目集合包括一个或多个变更项目;获取当前版本的程序执行路径,程序执行路径用于指示测试用例包括的多个项目及不同项目之间的关系;基于变更项目集合和程序执行路径,得到导致当前版本运行失败的根因项目。
3、这样一来,基于变更项目集合和程序执行路径确定根因项目,实际是结合变更项目与测试用例的项目之间的关系进行分析,在被执行的项目中确定变更的项目,从而得到导致当前版本运行失败的根因。在测试用例存在之前成功运行的成功版本的情况下,当前版本相较于成功用例发生变更的项目通常是导致当前版本运行失败的原因,因此,通过基于变更项目集合和程序执行路径确定根因项目,能够将导致当前版本运行失败的根因与可执行代码的变更关联起来,从而保证对测试用例进行根因定位的准确性。
4、可选地,基于变更项目集合和程序执行路径,得到导致当前版本运行失败的根因项目,包括:基于变更项目集合和程序执行路径,得到导致当前版本运行失败的多个候选根因项目;获取多个候选根因项目的打分;基于多个候选根因项目的打分,得到根因项目。
5、在一种实现方式中,在测试用例存在之前成功运行的成功版本的情况下,当前版本相较于成功用例发生变更的项目通常是导致当前版本运行失败的原因。由于程序执行路径用于指示当前版本包括的多个项目以及项目之间的关系,可知变更项目集合包括的变更项目和程序执行路径指示的多个项目的交集,必然包括导致当前版本运行失败的根因。因此,基于变更项目集合和程序执行路径,得到导致当前版本运行失败的多个候选根因项目,包括:将变更项目集合包括的变更项目和程序执行路径指示的多个项目的交集,确定为候选根因项目。
6、候选根因项目的打分用于指示候选根因项目为根因项目的概率。当候选根因项目的打分越高时,该候选根因项目为根因项目的概率越大。可选地,打分基于以下一种或多种特征得到:候选根因项目的程序复杂度、改动程度和改动深度,打分与程序复杂度、改动程度和改动深度均正相关。
7、其中,程序复杂度基于以下一种或多种得到:候选根因项目包括的可执行代码的总行数和圈复杂度;和/或,改动程度基于候选根因项目包括的可执行代码中变更的代码的行数与候选根因项目包括的可执行代码的总行数的占比得到;和/或,改动深度基于候选根因项目到交叉点的距离得到,交叉点指示当前版本的程序执行路径相对于成功版本的程序执行路径发生变化的项目。
8、在获取测试用例的当前版本和成功版本后,可以对比成功版本对当前版本进行分析,得到当前版本相较于成功版本发生变更的变更项目集合。在一种实现方式中,获取当前版本相较于成功版本发生变更的变更项目集合,包括:基于当前版本和成功版本,获取当前版本相较于成功版本发生变更的可执行代码;获取发生变更的可执行代码涉及的项目,得到变更项目集合。
9、其中,当多个测试用例运行失败时,该方法还包括:基于多个测试用例的根因项目,获取多个测试用例的根因项目之间的关联性,并输出指示信息,指示信息用于指示多个测试用例的根因项目之间的关联性。
10、可选地,根因定位设备输出指示多个测试用例的根因项目的关联性的指示信息后,程序开发人员可以根据指示信息触发指示对对应根因进行修正的修正指示。此时,该方法还包括:接收基于指示信息触发的修正指示;基于修正指示对多个测试用例的根因项目进行修正。
11、通过获取多个测试用例的根因项目之间的关联性,并输出指示该关联性的指示信息,能够便于开发人员根据该关联性,对相同或具有较大相似性的根因按类别对根因项目进行修正,避免重复分析和修正运行失败的测试用例,提高了对根因进行修正的效率。
12、在一种实现方式中,项目为测试用例中实现程序功能的方法。
13、第二方面,本技术提供了一种根因定位装置。该装置包括:获取模块,用于获取运行失败的测试用例,测试用例用于测试应用的可执行代码是否满足应用需求,应用用于实现用户的业务;获取模块,还用于获取测试用例的当前版本和测试用例之前成功运行的成功版本;获取模块,还用于获取当前版本相较于成功版本发生变更的变更项目集合,变更项目集合包括一个或多个变更项目;获取模块,还用于获取当前版本的程序执行路径,程序执行路径用于指示测试用例包括的多个项目及不同项目之间的关系;处理模块,用于基于变更项目集合和程序执行路径,得到导致当前版本运行失败的根因项目。
14、可选地,处理模块,具体用于:基于变更项目集合和程序执行路径,得到导致当前版本运行失败的多个候选根因项目;获取多个候选根因项目的打分;基于多个候选根因项目的打分,得到根因项目。
15、可选地,处理模块,具体用于:将变更项目集合包括的变更项目和程序执行路径指示的多个项目的交集,确定为候选根因项目。
16、可选地,打分基于以下一种或多种特征得到:候选根因项目的程序复杂度、改动程度和改动深度,打分与程序复杂度、改动程度和改动深度均正相关。
17、可选地,程序复杂度基于以下一种或多种得到:候选根因项目包括的可执行代码的总行数和圈复杂度;和/或,改动程度基于候选根因项目包括的可执行代码中变更的代码的行数与候选根因项目包括的可执行代码的总行数的占比得到;和/或,改动深度基于候选根因项目到交叉点的距离得到,交叉点指示当前版本的程序执行路径相对于成功版本的程序执行路径发生变化的项目。
18、可选地,获取模块,具体用于:基于当前版本和成功版本,获取当前版本相较于成功版本发生变更的可执行代码;获取发生变更的可执行代码涉及的项目,得到变更项目集合。
19、可选地,当多个测试用例运行失败时,获取模块还用于:基于多个测试用例的根因项目,获取多个测试用例的根因项目之间的关联性。该装置还包括:交互模块,用于输出指示信息,指示信息用于指示多个测试用例的根因项目之间的关联性。
20、可选地,该交互模块,还用于接收基于指示信息触发的修正指示;处理模块,还用于基于修正指示对多个测试用例的根因项目进行修正。
21、可选地,项目为测试用例中实现程序功能的装置。
22、第三方面,本技术提供了一种计算设备,包括存储器和处理器,存储器存储有程序指令,处理器运行程序指令以执行本技术第一方面以及其任一种可能的实现方式中提供的方法。
23、第四方面,本技术提供了一种计算设备集群,包括多个计算设备,多个计算设备包括多个处理器和多个存储器,多个存储器中存储有程序指令,多个处理器运行程序指令,使得计算设备集群执行本技术第一方面以及其任一种可能的实现方式中提供的方法。
24、第五方面,本技术提供了一种计算机可读存储介质,该计算机可读存储介质为非易失性计算机可读存储介质,该计算机可读存储介质包括程序指令,当程序指令在计算设备上运行时,使得计算设备执行本技术第一方面以及其任一种可能的实现方式中提供的方法。
25、第六方面,本技术提供了一种包含指令的计算机程序产品,当计算机程序产品在计算机上运行时,使得计算机执行本技术第一方面以及其任一种可能的实现方式中提供的方法。