一种软件调试方法和电子设备与流程

文档序号:29205378发布日期:2022-03-11 23:57阅读:126来源:国知局
一种软件调试方法和电子设备与流程

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.调用机器学习模型库中的一个未调用过的机器学习模型:
26.基于所述训练数据集训练所述机器学习模型,以拟合备选测试用回归模型;
27.将所述测试数据集中的自变量的值作为输入项输入所述备选测试用回归模型,以获取所述备选测试用回归模型的输出;
28.计算所述备选测试用回归模型的输出,与所述测试数据集中的因变量的值之间的相似度;
29.当所述备选测试用回归模型的输出,与所述测试数据集中的因变量的值之间的相似度大于等于预设相似度阈值时,将所述备选测试用回归模型作为所述测试用回归模型。
30.在上述第一方面的一种实现方式中,所述模型训练,包括:
31.调用机器学习模型库中的机器学习模型:
32.基于所述训练数据集,分别训练所述机器学习模型库中的每一个机器学习模型,以拟合多个备选测试用回归模型;
33.将所述测试数据集中的自变量的值作为输入项分别输入每一个所述备选测试用回归模型,以获取每一个所述备选测试用回归模型的输出;
34.计算每一个所述备选测试用回归模型的输出,与所述测试数据集中的因变量的值之间的相似度,获取相似度数组;
35.当所述相似度数组中的最大相似度值大于等于预设相似度阈值时,将所述最大相似度值对应的所述备选测试用回归模型作为所述测试用回归模型。
36.在上述第一方面的一种实现方式中,所述模型训练,包括:
37.基于所述训练数据集训练所述计算机学习模型,拟合备选测试用回归模型;
38.将所述训练数据集中所述自变量的值输入到所述备选测试用回归模型,对比所述备选测试用回归模型的输出以及所述训练数据集中所述因变量的值,确定所述训练数据集中的数据异常点;
39.从所述训练数据集中移除数据异常点;
40.基于移除数据异常点后的训练数据集训练所述计算机学习模型,拟合所述测试用回归模型。
41.在上述第一方面的一种实现方式中,所述方法还包括:
42.根据所述记录数据集绘制变量图形,所述变量图形用于图像化描述所述自变量以及所述因变量的值的连续变化。
43.在上述第一方面的一种实现方式中,所述方法还包括:
44.在所述变量图形上标记所述数据异常点。
45.在上述第一方面的一种实现方式中,所述方法还包括:
46.确认回退节点所对应的所述自变量和/或所述因变量的值;
47.以所述自变量的初始值为起点,运行所述待测试程序;
48.当所述待测试程序的运行,导致所述自变量和/或所述因变量的值达到所述回退节点所对应的所述自变量和/或所述因变量的值时,停止运行所述待测试程序;
49.展示所述待测试程序的当前状态。
50.在上述第一方面的一种实现方式中,以用户选定的数据异常点为所述回退节点。
51.在上述第一方面的一种实现方式中,所述方法还包括:
52.当所述自变量和/或所述因变量为包含多个子量的组变量时,针对组变量展示节点绘制变量图形,其中,所述变量图形用于图像化描述所述组变量中每一个子量在所述组变量展示节点的值;
53.在所述变量图形上,标记作为所述组变量展示节点的操作焦点的子量。
54.在上述第一方面的一种实现方式中,以用户选定的数据异常点为所述组变量展示节点。
55.第二方面,本技术提供了一种电子设备,所述电子设备包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发所述电子设备执行如本技术实施例所述的方法步骤。
56.第三方面,本技术提供了一种计算机可读存储介质,计算机可读存储介质中存储有计算机程序,当其在计算机上运行时,使得计算机执行本技术实施例的方法。
57.根据本技术实施例所提出的上述技术方案,至少可以实现下述技术效果:
58.根据本技术一实施例的方法,,通过计算机智能学习的方式拟合待测试程序中存在关联关系的变量之间的变化关系,检测待测试程序运行过程中变量变化状态与拟合出的变量之间的变化关系是否匹配,从而确定待测试程序运行过程中变量变化的数据异常点,进而自动定位待测试程序可能存在的软件漏洞,辅助软件调试人员进行软件调试;根据本技术一实施例的方法,可以大大提高软件漏洞定位的准确率,减少软件漏洞定位的耗时,避免遗漏软件漏洞。
附图说明
59.图1所示为根据本技术一实施例的软件调试方法流程图;
60.图2所示为根据本技术一实施待测试变量的设定界面图;
61.图3所示为根据本技术一实施例的软件调试方法流程图;
62.图4所示为根据本技术一实施例的软件调试方法流程图;
63.图5所示为根据本技术一实施例的软件调试装置结构图;
64.图6所示为根据本技术一实施例的软件调试方法流程图;
65.图7所示为根据本技术一实施例的软件调试方法流程图;
66.图8所示为根据本技术一实施例的软件调试方法流程图;
67.图9所示为根据本技术一实施例的软件调试方法部分流程图;
68.图10所示为根据本技术一实施例的软件调试方法流程图;
69.图11所示为根据本技术一实施例的软件调试方法流程图;
70.图12所示为根据本技术一实施例图形化展示变量连续变化的展示界面图;
71.图13所示为根据本技术一实施例的软件调试方法部分流程图;
72.图14所示为根据本技术一实施例图形化展示数组变量的展示界面图。
具体实施方式
73.为使本技术的目的、技术方案和优点更加清楚,下面将结合本技术具体实施例及相应的附图对本技术技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
74.本技术的实施方式部分使用的术语仅用于对本技术的具体实施例进行解释,而非旨在限定本技术。
75.针对现有技术下软件调试的时间过长,在某些应用场景中无法定位到软件漏洞的问题。在通常的应用场景中,软件调试是由软件调试人员使用调试软件运行待调试代码,根据待调试代码运行过程中在调试软件上的反馈来辨别该待调试代码是否存在软件漏洞,并进一步定位软件漏洞的根源。在上述流程中,软件漏洞的定位主要由软件调试人员根据调试软件的输出结果进行分析判断所获取,由于人工分析通常是依靠软件调试人员自身的经验来执行的,其存在速度慢、错误率高的问题,因此,软件漏洞的定位不仅耗时过长、准确率低,而且很容易遗漏软件漏洞。
76.针对上述问题,本技术一实施例提供了一种软件调试方法。具体的,图1所示为根据本技术一实施例的软件调试方法流程图。在本技术一实施例中,如图1所示:
77.步骤110,确定待测试程序的待测试变量,待测试变量包含具备关联关系的自变量以及因变量;
78.步骤120,运行待测试程序,记录待测试变量中的自变量以及因变量的值的连续变化,获取记录数据集,根据记录数据集获取训练数据集;
79.步骤130,调用计算机学习模型,基于训练数据集训练计算机学习模型,拟合体现待测试变量中自变量与因变量间关联关系的测试用回归模型,在模型训练过程中,模型输入项为训练数据集中的自变量,模型输出项为训练数据集中的因变量;
80.步骤140,使用测试用回归模型,检测测试数据集中,不匹配测试用回归模型的数据异常点,具体的,将待测试程序运行过程中自变量的值输入到测试用回归模型,对比测试用回归模型的输出以及待测试程序运行过程中因变量的值,确定待测试程序运行过程中的数据异常点;
81.步骤150,将数据异常点的提示信息输出给软件调试人员,例如,输出声音提示或在屏幕上输出弹窗提示。
82.根据图1所示实施例的方法,通过计算机智能学习的方式拟合待测试程序中存在关联关系的变量之间的变化关系,检测待测试程序运行过程中变量变化状态与拟合出的变量之间的变化关系是否匹配,从而确定待测试程序运行过程中变量变化的数据异常点,进而自动定位待测试程序可能存在的软件漏洞,辅助软件调试人员进行软件调试。根据本技术一实施例的方法,可以大大提高软件漏洞定位的准确率,减少软件漏洞定位的耗时,避免遗漏软件漏洞。
83.进一步的,在实际应用场景中,待测试程序中的变量间的关联关系通常并不是简单的一对一的关系,即,待测试程序中的变量关系通常并不是一个自变量对应一个因变量的简单对应关系。针对这一问题,在步骤110的一种实现方式中,根据待测试程序确定待测试变量的具体内容。针对不同的待测试程序,待测试变量可以包含一个自变量以及一个因变量;待测试变量也可以包含一个自变量以及多个因变量;待测试变量也可以包含多个自变量以及一个因变量;待测试变量也可以包含多个自变量以及多个因变量。
84.例如,在一应用场景中,待测试变量的设定界面如图2所示。虚线框200中即是待测试变量所包含的变量,每行代表一个变量。可以在201中选择变量的类型,在202中输入变量的名称。搜索按钮203用于在当前待测试程序中所有的变量中搜索变量。204中加号按钮用于在待测试变量中增加一个变量,减号按钮用于将当前行的变量移出待测试变量。
85.进一步的,在实际应用场景中,可以采用多种不同的实施方式检测待测试程序运行过程中,不匹配测试用回归模型的数据异常点。
86.具体的,在步骤140的一种实现方式中,在测试用回归模型训练完成后,运行待测试程序,在待测试程序运行过程中,检测不匹配测试用回归模型的数据异常点。
87.进一步的,为了降低方案实施难度,在步骤140的一种实现方式中,将检测过程与待测试程序的运行过程分离。具体的,在测试用回归模型训练完成后,运行待测试程序,记录待测试变量中的自变量以及因变量的值的连续变化,获取测试数据集;使用测试用回归模型,检测测试数据集中,不匹配测试用回归模型的数据异常点。
88.图3所示为根据本技术一实施例的软件调试方法流程图。在本技术一实施例中,如图3所示:
89.步骤310,确定待测试程序的待测试变量,待测试变量包含具备关联关系的自变量以及因变量;
90.步骤320,运行待测试程序,记录待测试变量中的自变量以及因变量的值的连续变化,获取训练数据集;
91.步骤330,调用计算机学习模型,基于训练数据集训练计算机学习模型,拟合体现待测试变量中自变量与因变量间关联关系的测试用回归模型,在模型训练过程中,模型输入项为训练数据集中的自变量,模型输出项为训练数据集中的因变量;
92.步骤341,运行待测试程序,记录待测试变量中的自变量以及因变量的值的连续变化,获取测试数据集;
93.步骤342,将测试数据集中自变量的值输入到测试用回归模型,对比测试用回归模型的输出以及测试数据集中因变量的值,确定测试数据集中的数据异常点;
94.步骤350,将数据异常点的提示信息输出给软件调试人员。
95.进一步的,在实际应用场景中,每次运行待测试程序之前,通常都需要经历环境参数初始化,运行参数初始化,运行参数设定等一系列操作。如果多次反复进行待测试程序的运行-停止-重新运行的操作,必然会造成大量不必要的处理资源消耗。因此,为了降低资源消耗,并降低方案实施难度,在同一数据采集执行环节中,统一获取用于训练测试用回归模型的训练数据集以及用于检测数据异常点的测试用数据集。
96.具体的,图4所示为根据本技术一实施例的软件调试方法流程图。在本技术一实施例中,如图4所示:
97.步骤410,确定待测试程序的待测试变量,待测试变量包含具备关联关系的自变量以及因变量;
98.步骤420,运行待测试程序,记录待测试变量中的自变量以及因变量的值的连续变化,获取记录数据集;
99.步骤421,根据记录数据集生成训练数据集以及测试数据集;
100.步骤430,调用计算机学习模型,基于训练数据集训练计算机学习模型,获取体现待测试变量中自变量与因变量间关联关系的测试用回归模型,在模型训练过程中,模型输入项为训练数据集中的自变量,模型输出项为训练数据集中的因变量;
101.步骤440,将测试数据集中自变量的值输入到测试用回归模型,对比测试用回归模型的输出以及测试数据集中因变量的值,确定测试数据集中的数据异常点;
102.步骤450,将数据异常点的提示信息输出给软件调试人员。
103.具体的,在步骤421的一种实现方式中,复用记录数据集中的数据。将记录数据集中的全部数据作为训练数据集,将记录数据集中的全部数据作为测试数据集;或者,将记录数据集中的全部数据作为训练数据集,将记录数据集中的一部分数据作为测试数据集;或者,将记录数据集中的一部分数据作为训练数据集,将记录数据集中的全部数据作为测试数据集。
104.进一步的,在步骤421的一种实现方式中,分离训练数据集以及测试数据集。具体的,将记录数据集分割成两部分,一部分为训练数据集,一部分为测试数据集。例如,采用8:2的比例随机分配数据,将记录数据集划分为训练数据集以及测试数据集。
105.具体的,图5所示为根据本技术一实施例的软件调试装置结构图。如图5所示,待测试程序输入模块501获取待测试程序,例如,通过通讯接口接收传输过来的待测试程序包,或者,读取指定存储位置存储的待测试程序代码。
106.监测目标设定模块502确认需要监测的待测试变量,确定待测试变量中的自变量以及因变量,例如,直接由软件调试人员手动设定需要监测的待测试变量以及待测试变量中的自变量以及因变量。
107.程序运行模块510执行待测试程序输入模块501所获取的待测试程序。数据记录模块511基于监测目标设定模块502所确认的自变量以及因变量,在程序运行模块510执行待
测试程序的过程中,记录自变量以及因变量的变化,生成记录数据集。
108.数据集分割模块520根据预设的数据分割策略将数据记录模块511生成的记录数据集分割成训练数据集以及测试数据集,分别保存到训练集数据库521以及测试集数据库522。
109.模型训练模块530使用训练集数据库521中的训练数据集训练测试用回归模型。
110.测试模块540使用模型训练模块530训练出的测试用回归模型,测试测试集数据库522中的测试数据集,确认测试数据集中的数据异常点。
111.输出模块550向软件测试人员输出测试模块540所检测出的数据异常点,以供软件测试人员进一步判断该异常点是否为软件漏洞,以及,确定软件漏洞的源头。
112.进一步的,在实际应用场景中,模型训练需要有足够的训练数据支持,因此,在步骤130的一种实现方式中,多次重复执行待测试程序,以获取具有足够数据量的训练数据集。具体的,在一实施例中,根据待测试程序的结构决定待测试程序的重复执行方式,例如,采用循环或递归的方式重复执行待测试程序。
113.进一步的,为确保在训练测试用回归模型时,训练数据集中的数据量足够,在步骤120的一种实现方式中,根据训练测试用回归模型所需的数据量,确定训练数据集和/或记录数据集的最小数据量,根据训练数据集和/或记录数据集的最小数据量设定重复运行待测试程序的轮次(例如,重复执行待测试程序10次),或者,设定训练数据集中的最小记录数(例如,100组数据)。
114.在多次重复执行待测试程序获取训练数据集时,只有待测试程序重复执行的轮次大于等于预设轮次,或者,训练数据集中的记录数大于等于预设记录数之后,才可以开始训练测试用回归模型。
115.具体的,在步骤120的一种实现方式中,多次重复执行待测试程序,当待测试程序重复执行的轮次大于等于预设轮次,或者,训练数据集中的记录数大于等于预设记录数时,停止执行待测试程序,输出数据采集完成提示,等待软件调试人员启动训练测试用回归模型。
116.具体的,图6所示为根据本技术一实施例的软件调试方法流程图。在本技术一实施例中,如图6所示:
117.步骤610,确定待测试程序的待测试变量;
118.步骤620,重复运行待测试程序,记录待测试变量中的自变量以及因变量的值的连续变化,将记录结果加入记录数据集;
119.步骤621,判断待测试程序的重复执行次数是否达到预设次数;
120.如果待测试程序的重复执行次数未达到预设次数,返回步骤620,继续重复运行待测试程序;
121.如果待测试程序的重复执行次数达到预设次数,执行步骤630;
122.步骤630,停止运行待测试程序,输出数据采集完成提示;
123.步骤631,判断软件调试人员是否指示开始调试;
124.如果软件调试人员没有指示开始调试,返回步骤631;
125.如果软件调试人员指示开始调试,执行步骤640;
126.步骤640,根据记录数据集生成训练数据集以及测试数据集;
127.步骤650,调用计算机学习模型,基于训练数据集训练计算机学习模型,拟合测试用回归模型;
128.步骤660,使用测试用回归模型,检测测试数据集中,不匹配测试用回归模型的数据异常点;
129.步骤670,将数据异常点的提示信息输出给软件调试人员。
130.进一步,为加快软件调试节奏,避免由于软件调试人员忘记开启测试而造成时间浪费,在步骤120的一种实现方式中,多次重复执行待测试程序,当待测试程序重复执行的轮次大于等于预设轮次,或者,训练数据集中的记录数大于等于预设记录数时,停止执行待测试程序,不输出数据采集完成提示,而是自动执行步骤130,开始训练测试用回归模型并在测试用回归模型训练完成后自动执行后续的检测步骤。
131.具体的,图7所示为根据本技术一实施例的软件调试方法流程图。在本技术一实施例中,如图7所示:
132.步骤710,确定待测试程序的待测试变量;
133.步骤720,重复运行待测试程序,记录待测试变量中的自变量以及因变量的值的连续变化,将记录结果加入记录数据集;
134.步骤721,判断待测试程序的重复执行次数是否达到预设次数;
135.如果待测试程序的重复执行次数未达到预设次数,返回步骤720,继续重复运行待测试程序;
136.如果待测试程序的重复执行次数达到预设次数,执行步骤730;
137.步骤730,停止运行待测试程序;
138.步骤740,根据记录数据集生成训练数据集以及测试数据集;
139.步骤750,调用计算机学习模型,基于训练数据集训练计算机学习模型,获取体现待测试变量中自变量与因变量间关联关系的测试用回归模型;
140.步骤760,使用测试用回归模型,检测测试数据集中,不匹配测试用回归模型的数据异常点;
141.步骤770,将数据异常点的提示信息输出给软件调试人员。
142.或者,在步骤120的一种实现方式中,多次重复执行待测试程序,当待测试程序重复执行的轮次大于等于预设轮次,或者,训练数据集中的记录数大于等于预设记录数时,停止执行待测试程序,不输出数据采集完成提示,而是自动执行步骤130,开始训练测试用回归模型。在测试用回归模型训练完成后向软件调试人员输出可以检测软件的提示信息,等待软件调试人员启动检测。
143.进一步的,在实际应用场景中,在训练模型时,通常,训练数据越多,训练获得的模型越精确。因此,在步骤120的一种实现方式中,多次重复执行待测试程序,当待测试程序重复执行的轮次满足预设轮次,或者,训练数据集中的记录数满足预设记录数时,并不停止执行待测试程序,而是输出数据采集完成提示,并且,继续重复执行待测试程序,不断扩充训练数据集的数据量,直到软件调试人员停止训练数据集的数据采集操作。这样,就可以为训练测试用回归模型提供尽可能多的训练数据支持。
144.具体的,图8所示为根据本技术一实施例的软件调试方法流程图。在本技术一实施例中,如图8所示:
145.步骤810,确定待测试程序的待测试变量;
146.步骤820,重复运行待测试程序,记录待测试变量中的自变量以及因变量的值的连续变化,将记录结果加入记录数据集;
147.步骤821,判断待测试程序的重复执行次数是否达到预设次数;
148.如果待测试程序的重复执行次数未达到预设次数,返回步骤820,继续重复运行待测试程序;
149.如果待测试程序的重复执行次数达到预设次数,执行步骤830;
150.步骤830,输出数据采集完成提示;
151.步骤831,判断软件调试人员是否指示开始调试;
152.如果软件调试人员没有指示开始调试,执行步骤841;
153.如果软件调试人员指示开始调试,执行步骤842;
154.步骤841,运行待测试程序,记录待测试变量中的自变量以及因变量的值的连续变化,将记录结果加入记录数据集,返回步骤831;
155.步骤842,停止运行待测试程序,根据记录数据集生成训练数据集以及测试数据集;
156.步骤850,调用计算机学习模型,基于训练数据集训练计算机学习模型,拟合测试用回归模型;
157.步骤860,使用测试用回归模型,检测测试数据集中,不匹配测试用回归模型的数据异常点;
158.步骤870,将数据异常点的提示信息输出给软件调试人员。
159.进一步的,在本技术一实施例中,为提高测试用回归模型的准确度,采用多轮训练的方式训练测试用回归模型。具体的,图9所示为根据本技术一实施例的软件调试方法部分流程图。在本技术一实施例中,如图9所示:
160.步骤900,调用计算机学习模型,基于训练数据集训练计算机学习模型,拟合备选测试用回归模型;
161.步骤910,使用备选测试用回归模型,检测训练数据集中,不匹配备选测试用回归模型的数据异常点;
162.步骤920,从训练数据集中移除数据异常点;
163.步骤930,调用计算机学习模型,基于移除数据异常点后的训练数据集训练计算机学习模型,拟合测试用回归模型。
164.进一步的,在实际应用场景中,可以根据实际需要,执行多轮的步骤900~930,以获取满足精度需求的测试用回归模型。
165.进一步的,在本技术一实施例中,在获取到测试用回归模型后,还对测试用回归模型执行导出以及封装操作,以将测试用回归模型保存为固定测试工具。从而可以在后续的应用场景中直接调用以作为监控模块或保护模块,以大大降低软件调试人员的工作量,提高工作效率。
166.进一步的,在实际应用场景中,较为常用的计算机学习模型包含深度学习模型,例如,卷积神经网络模型、递归神经网络模型等。虽然深度学习模型具有拟合准确率高的优势,但是,由于深度学习模型的训练不仅需要消耗大量的训练时间,并且需要大量的训练数
据支持。如果在步骤130中调用深度学习模型,训练测试用回归模型,会消耗大量的训练数据采集时间以及模型训练时间。因此,在步骤130的一种实现方式中,调用的计算机学习模型不是深度学习模型,是结构相对较为简单的机器学习模型。具体的,在一实际应用场景中,步骤130中所调用的计算机学习模型包括但不限于线性回归、决策树、逻辑回归、boosting模型。
167.进一步的,在实际应用场景中,在执行步骤130时,存在同时有多个机器学习模型可供调用的情况,因此,在执行步骤130时,需要首先确认要调用的机器学习模型。具体的,在步骤130的一种实现方式中,根据待测试程序的结构确定适应当前应用场景的计算机学习模型。
168.进一步的,在步骤130的一种实现方式中,不直接判断机器学习模型是否适应当前的应用场景,而是首先训练测试用回归模型,之后再判断训练出的测试用回归模型是否适应当前的应用场景。
169.具体的,在步骤130的一种实现方式中,根据测试用回归模型与测试数据集的匹配程度来确定测试用回归模型。在训练获得测试用回归模型后,将测试数据集中的自变量作为输入项输入测试用回归模型,以获取测试用回归模型的输出,计算测试用回归模型的输出与测试数据集中的因变量的相似度(测试用回归模型的输出与测试数据集中的因变量的相似度越高,说明测试用回归模型越适应当前的应用场景)。
170.具体的,图10所示为根据本技术一实施例的软件调试方法流程图。在步骤130的一种实现方式中,如图10所示:
171.步骤1000,调用机器学习模型库中的一个未调用过的机器学习模型;
172.步骤1010,使用训练数据集训练步骤1000所调用的机器学习模型,以拟合备选测试用回归模型;
173.步骤1020,将测试数据集中的自变量的值作为输入项输入备选测试用回归模型,以获取备选测试用回归模型的输出,计算备选测试用回归模型的输出与测试数据集中的因变量的值之间的相似度;
174.步骤1040,判断备选测试用回归模型的输出与测试数据集中的因变量的相似度是否大于等于预设相似度阈值;
175.如果备选测试用回归模型的输出与测试数据集中的因变量的相似度小于预设相似度阈值,执行步骤1050;
176.如果备选测试用回归模型的输出与测试数据集中的因变量的相似度大于等于预设相似度阈值,执行步骤1060;
177.步骤1050,判断机器学习模型库中是否还存在未被调用过的机器学习模型;
178.如果机器学习模型库中还存在未被调用过的机器学习模型,返回步骤1000;
179.如果机器学习模型库中不存在未被调用过的机器学习模型,执行步骤1001;
180.步骤1001,输出测试用回归模型训练失败提醒;
181.步骤1060,以备选测试用回归模型为测试用回归模型。
182.具体的,图11所示为根据本技术一实施例的软件调试方法流程图。在步骤130的一种实现方式中,如图11所示:
183.步骤1110,使用训练数据集分别训练机器学习模型库中的每一个机器学习模型,
以拟合多个备选测试用回归模型;
184.步骤1120,将测试数据集中的自变量作为输入项输入每一个备选测试用回归模型,以获取每一个备选测试用回归模型的输出;
185.步骤1130,分别计算每一个备选测试用回归模型的输出与测试数据集中的因变量的相似度,生成包含多个相似度值的相似度集合;
186.步骤1140,判断相似度集合中的最大相似度值是否大于等于预设相似度阈值;
187.如果备选测试用回归模型的输出与测试数据集中的因变量的相似度小于预设相似度阈值,执行步骤1150;
188.如果备选测试用回归模型的输出与测试数据集中的因变量的相似度大于等于预设相似度阈值,执行步骤1160;
189.步骤1150,输出测试用回归模型训练失败提醒;
190.步骤1160,以最大相似度值对应的备选测试用回归模型为测试用回归模型。
191.进一步的,在实际应用场景中,为了便于软件调试人员监控待调试程序中的变量,一种可行的方案是显示变量的图形化表达。例如查看一个类型是图形的变量,可以直接把对应的图形显示出来。
192.图形化的表达方式虽然可以直观的展示变量内容,但是,在待调试程序运行的过程中,很多变量的值是不断发生变化的,不同的变量之间也往往存在关联,而软件漏洞也往往存在与相互关联的、可变的变量中。因此,图形化展示特定变量的内容,对软件调试人员检查软件漏洞的帮助有限。
193.针对上述问题,在本技术一实施例中,通过图形化展示待调试程序中自变量应变量的连续变化,来为软件调试人员检查软件漏洞提供图形化帮助,从而降低软件调试人员定位软件漏洞的难度。具体的,在一实施例中,在待测试程序运行过程中,记录自变量以及因变量的值的连续变化,获取记录数据集,根据记录数据集绘制变量图形,变量图形用于图像化描述自变量以及因变量的值的连续变化。
194.具体的,以一应用场景为例,如图12所示,在1300中设定需要展示的自变量为i、因变量为data1、data2以及datatotal。图12中坐标图的横轴为自变量,纵轴为应变量。在运行待调试程序的过程中,在坐标图中展示自变量i连续变化时,对应的data1、data2以及datatotal三个因变量的连续变化(曲线1301、1302以及1303)。这样,软件调试人员就可以直接从图像上观察到自变量为i、因变量为data1、data2以及datatotal间的变化关系,从而通过自变量为i、因变量为data1、data2以及datatotal的变化定位软件漏洞。
195.进一步的,在实际应用场景中,可以根据变量类型采用多种不同的图像化界面形式,如折线图,柱状图,时间轴等等,或混合图形格式。例如,当一个双精度(float)类型的自变量x表示一个图形压缩比值时候,类型为图片的因变量y为一个图片显示。随着开发者拖动x的值坐标,y图像内容(清晰度质量)跟随变化。
196.进一步的,在本技术一实施例中,为了向软件调试人员形象的展示数据异常点,在图形化显示界面上叠加数据异常点提醒。具体的,以图形化方式(例如图12所示的坐标轴)显示连续变化的自变量以及因变量,在自变量以及因变量的连续变化图形上标记数据异常点。
197.图13所示为根据本技术一实施例的软件调试方法部分流程图。在本技术一实施例
中,如图13所示:
198.步骤1410,确定待测试程序的待测试变量;
199.步骤1420,运行待测试程序,记录待测试变量中的自变量以及因变量的值的连续变化,获取训练数据集;
200.步骤1430,调用计算机学习模型,基于训练数据集训练计算机学习模型,获取体现待测试变量中自变量与因变量间关联关系的测试用回归模型,在模型训练过程中,模型输入项为训练数据集中的自变量,模型输出项为训练数据集中的因变量;
201.步骤1441,运行待测试程序,记录待测试变量中的自变量以及因变量的值的连续变化,获取测试数据集;
202.步骤1442,使用测试用回归模型,检测测试数据集中,不匹配测试用回归模型的数据异常点;
203.步骤1450,根据测试数据集,绘制显示自变量以及因变量连续变化的变量图形,在变量图形上标记数据异常点。
204.进一步的,在实际应用场景中,在待测试程序运行过程中,或者,在待测试程序停止运行后,如果软件测试人员需要查看待测试程序运行在之前某一运行节点(例如,时刻t,或者,变量i的值达到数值a)的运行状态,可行的方案之一是基于断点快照的状态回退方案。具体的,在待测试程序运行过程中按照预设的策略设定若干个断点(例如,每5秒设定一个断点),保存断点位置处待测试程序运行状态快照。当软件测试人员需要查看待测试程序运行在之前某一时刻时的运行状态时,确定该时刻对应的断点,调用该断点对应的快照。采用基于断点快照的状态回退方案,虽然可以快速将待测试程序回退到特定的断点,但是由于该方案是基于断点的回退,并不是基于变量值的回退,因而无法做到精确回退。例如,当软件测试人员需要查看待测试程序运行在时间节点t时的运行状态时,假如在待测试程序运行在时间节点t时并未设置断点,则只能回退到距离时间节点t最近的断点,无法实现精确回退。
205.针对上述问题,在本技术一实施例中,采用重执行的回退方案,当软件测试人员需要查看待测试程序运行在运行节点a时的运行状态时,重新运行待测试程序,当待测试程序的运行状态达到运行节点a时,停止运行待测试程序,展示待测试程序当前的运行状态。
206.具体的,在本技术一实施例中,方法还包括:
207.确认回退节点所对应的自变量和/或因变量的值;
208.以自变量的初始值为起点,运行待测试程序;
209.当待测试程序的运行,导致自变量和/或所述因变量的值达到回退节点所对应的自变量和/或因变量的值时,停止运行待测试程序;
210.展示待测试程序的当前状态。
211.进一步的,在一实施例中,以用户选定的数据异常点为回退节点。
212.以一应用场景为例,如图12所示,假设在一图形化观测过程中,图形化展示自变量i从1到14连续变化时对应的因变量data1、data2以及datatotal的连续变化(曲线1301、1302以及1303)。假设i=5处被标记为数据异常点,软件测试人员需要查看待测试程序运行在i=5处时的运行状态。
213.点击横轴的上的历史值,点击i=5,调试程序提示,是否回退到i=5。当软件测试
人员选择回退到i==5时,重新执行待测试程序(从i=1开始执行),直到i=5时停止执行(相当于整个系统堆栈都会回退到i=5时的状态(包括所有的上下文值))。
214.进一步的,在实际应用场景中,待测试程序中的变量a可能是包含多个变量值的变量组,例如,一个数组。在待测试程序运行的过程中,在某个流程中,变量a可能是作为一个整体参与流程,但是在代码的实际执行过程中,针对变量a的操作是按照特定逻辑顺序,分别针对变量a中的每个变量值来执行的。在某一时刻,程序操作所针对的对象可能只是变量a中的某一个变量值。例如,在采用最小值法对数组变量{55,38,65,97,76,13,27,87}进行排序,流程如下:
215.1,取{55,38,65,97,76,13,27,87}中所有参数值的最小值,为13;
216.2,将13排在最前位,得到{13,55,38,65,97,76,27,87};
217.3,取{13,55,38,65,97,76,27,87}中后7位参数值的最小值,为27;
218.4,将27排在第二位,得到{13,27,55,38,65,97,76,87};
219.5,取{13,27,55,38,65,97,76,87}中后6位参数值的最小值,为38;
220.6,将38排在第三位,得到{13,27,38,55,65,97,76,87};
221.7,取{13,27,38,55,65,97,76,87}中后5位参数值的最小值,为55;
222.8,将55排在第四位,得到{13,27,38,55,65,97,76,87};
223.9,取{13,27,38,55,65,97,76,87}中后4位参数值的最小值,为65;
224.10,将65排在第五位,得到{13,27,38,55,65,97,76,87};
225.11,取{13,27,38,55,65,97,76,87}中后3位参数值的最小值,为76;
226.12,将76排在第六位,得到{13,27,38,55,65,76,97,87};
227.13,取{13,27,38,55,65,76,97,87}中后2位参数值的最小值,为87;
228.14,将87排在第七位,得到{13,27,38,55,65,76,87,97};
229.上述流程虽然是对数组变量{55,38,65,97,76,13,27,87}进行排序操作,但是在代码执行过程中,实际上是分多个步骤,每个步骤中针对数组变量{55,38,65,97,76,13,27,87}中的一个值进行操作。如果仅对数组变量{55,38,65,97,76,13,27,87}的值进行图形化展示,很难体现代码运行的过程细节,也就无法帮助软件调试人员定位代码运行过程中存在的软件漏洞。
230.针对上述问题,在本技术一实施例中,针对包含多个变量值的变量组,不仅图形化展示变量组中的每个变量值,还标记变量组中作为当前操作焦点的变量值,例如,采用不同的颜色以实现标记。这样,就可以向软件调试人员形象的展示操作焦点变化,从而有助于软件调试人员根据操作焦点变化定位代码运行过程中存在的软件漏洞。
231.具体的,在本技术一实施例中,方法还包括:
232.当自变量和/或因变量为包含多个子量的组变量时,针对组变量展示节点绘制变量图形,其中,变量图形用于图像化描述组变量中每一个子量在组变量展示节点的值;
233.在变量图形上,标记作为组变量展示节点的操作焦点的子量。
234.进一步的,在一实施例中,以用户选定的数据异常点为组变量展示节点。
235.图14展示的是在为数组变量{55,38,65,97,76,13,27,87}进行排序的过程中,执行到步骤11时,数组变量的图像化表示。如图14所示,在执行到步骤11时,13,27,38,55,65已经排好了序,当前正在从97、76、87中确定最小值,操作焦点为最小值的76。
236.可以理解的是,上述实施例中的部分或全部步骤骤或操作仅是示例,本技术实施例还可以执行其它操作或者各种操作的变形。此外,各个步骤可以按照上述实施例呈现的不同的顺序来执行,并且有可能并非要执行上述实施例中的全部操作。
237.进一步的,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(programmable logic device,pld),其逻辑功能由访问方对器件编程来确定。由设计人员自行编程来把一个数字装置“集成”在一片pld上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(hardware description language,hdl)。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
238.在本技术实施例的描述中,为了描述的方便,描述装置时以功能分为各种模块分别描述,各个模块的划分仅仅是一种逻辑功能的划分,在实施本技术实施例时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
239.具体的,本技术实施例所提出的装置在实际实现时可以全部或部分集成到一个物理实体上,也可以物理上分开。且这些模块可以全部以软件通过处理元件调用的形式实现;也可以全部以硬件的形式实现;还可以部分模块以软件通过处理元件调用的形式实现,部分模块通过硬件的形式实现。例如,检测模块可以为单独设立的处理元件,也可以集成在电子设备的某一个芯片中实现。其它模块的实现与之类似。此外这些模块全部或部分可以集成在一起,也可以独立实现。在实现过程中,上述方法的各步骤或以上各个模块可以通过处理器元件中的硬件的集成逻辑电路或者软件形式的指令完成。
240.本领域普通技术人员可以意识到,本技术实施例中描述的装置和模块的具体工作过程,可以参考前述方法实施例中的对应过程。
241.本技术一实施例还提出了一种电子设备,电子设备包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发电子设备执行如本技术实施例所述的方法步骤。
242.具体的,在本技术一实施例中,上述一个或多个计算机程序被存储在上述存储器中,上述一个或多个计算机程序包括指令,当上述指令被上述设备执行时,使得上述设备执行本技术实施例所述的方法步骤。
243.具体的,在本技术一实施例中,电子设备的处理器可以是片上装置soc,该处理器中可以包括中央处理器(central processing unit,cpu),还可以进一步包括其他类型的处理器。具体的,在本技术一实施例中,电子设备的处理器可以是pwm控制芯片。
244.具体的,在本技术一实施例中,涉及的处理器可以例如包括cpu、dsp、微控制器或数字信号处理器,还可包括gpu、嵌入式神经网络处理器(neural-network process units,npu)和图像信号处理器(image signal processing,isp),该处理器还可包括必要的硬件加速器或逻辑处理硬件电路,如asic,或一个或多个用于控制本技术技术方案程序执行的
集成电路等。此外,处理器可以具有操作一个或多个软件程序的功能,软件程序可以存储在存储介质中。
245.具体的,在本技术一实施例中,电子设备的存储器可以是只读存储器(read-only memory,rom)、可存储静态信息和指令的其它类型的静态存储设备、随机存取存储器(random access memory,ram)或可存储信息和指令的其它类型的动态存储设备,也可以是电可擦可编程只读存储器(electrically erasable programmable read-only memory,eeprom)、只读光盘(compact disc read-only memory,cd-rom)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其它磁存储设备,或者还可以是能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何计算机可读介质。
246.具体的,在本技术一实施例中,处理器可以和存储器可以合成一个处理装置,更常见的是彼此独立的部件,处理器用于执行存储器中存储的程序代码来实现本技术实施例所述方法。具体实现时,该存储器也可以集成在处理器中,或者,独立于处理器。
247.进一步的,本技术实施例阐明的设备、装置或模块,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。
248.本领域内的技术人员应明白,本技术实施例可提供为方法、装置、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质上实施的计算机程序产品的形式。
249.在本技术所提供的几个实施例中,任一功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。
250.具体的,本技术一实施例中还提供一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,当其在计算机上运行时,使得计算机执行本技术实施例提供的方法。
251.本技术一实施例还提供一种计算机程序产品,该计算机程序产品包括计算机程序,当其在计算机上运行时,使得计算机执行本技术实施例提供的方法。
252.本技术中的实施例描述是参照根据本技术实施例的方法、设备(装置)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
253.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指
令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
254.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
255.还需要说明的是,本技术实施例中,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示单独存在a、同时存在a和b、单独存在b的情况。其中a,b可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项”及其类似表达,是指的这些项中的任意组合,包括单项或复数项的任意组合。例如,a,b和c中的至少一项可以表示:a,b,c,a和b,a和c,b和c或a和b和c,其中a,b,c可以是单个,也可以是多个。
256.本技术实施例中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
257.本技术可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本技术,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
258.本技术中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
259.以上所述,仅为本技术的具体实施方式,任何熟悉本技术领域的技术人员在本技术揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本技术的保护范围之内。本技术的保护范围应以所述权利要求的保护范围为准。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1