首页 / 专利库 / 计算机网络 / 软件缺陷 / 一种软件缺陷预测方法、装置、设备及存储介质

一种软件缺陷预测方法、装置、设备及存储介质

阅读:242发布:2020-05-08

专利汇可以提供一种软件缺陷预测方法、装置、设备及存储介质专利检索,专利查询,专利分析的服务。并且本 申请 涉及一种 软件 缺陷 预测方法、装置、设备及存储介质,所述方法包括:接收 软件缺陷 预测 请求 ,所述软件缺陷预测请求中包括待预测软件的软件标识,以及当前版本的待预测软件;基于所述待预测软件的软件标识,获取上一版本的待预测软件;确定所述当前版本的待预测软件相对于所述上一版本的待预测软件的目标变更信息;基于所述目标变更信息,确定目标变更特征;基于软件缺陷 预测模型 以及所述目标变更特征对所述当前版本的待预测软件进行软件缺陷预测,得到与所述当前版本的待预测软件对应的软件缺陷预测信息。本申请能够将变更分析前置到提测时,为后续的软件测试提供缺陷基线参考,从而提高了软件版本的 迭代 质量 。,下面是一种软件缺陷预测方法、装置、设备及存储介质专利的具体信息内容。

1.一种软件缺陷预测方法,其特征在于,包括:
接收软件缺陷预测请求,所述软件缺陷预测请求中包括待预测软件的软件标识,以及当前版本的待预测软件;
基于所述待预测软件的软件标识,获取上一版本的待预测软件;
确定所述当前版本的待预测软件相对于所述上一版本的待预测软件的目标变更信息;
基于所述目标变更信息,确定目标变更特征;
基于软件缺陷预测模型以及所述目标变更特征对所述当前版本的待预测软件进行软件缺陷预测,得到与所述当前版本的待预测软件对应的软件缺陷预测信息;其中,所述软件缺陷预测模型是基于所述待预测软件的历史变更信息生成的。
2.根据权利要求1所述的一种软件缺陷预测方法,其特征在于,所述方法还包括:
从软件历史版本库中获取所述待预测软件的多项历史变更信息以及与每项历史变更信息对应的缺陷信息标签,其中任一项历史变更信息均是基于相邻版本的待预测软件生成的;
从每项历史变更信息中提取出历史变更特征,确定与每项历史变更特征对应的缺陷信息标签;
基于各项历史变更特征以及相应的缺陷信息标签,构建训练样本集;
基于所述训练样本集进行训练,生成所述软件缺陷预测模型。
3.根据权利要求2所述的一种软件缺陷预测方法,其特征在于,每项历史变更信息中包括历史软件新增信息以及所述历史软件新增信息在待预测软件中的位置信息,历史软件更新信息以及所述历史软件更新信息在待预测软件中的位置信息;所述历史变更特征包括:
历史软件新增量特征、历史软件更新量特征以及历史软件变更位置特征;
相应地,所述从每项历史变更信息中提取出历史变更特征包括:
基于每项历史变更信息中的历史软件新增信息确定所述历史软件新增量特征;
基于每项历史变更信息中的历史软件更新信息确定所述历史软件更新量特征;
基于每项历史变更信息中所述历史软件新增信息在待预测软件中的位置信息以及所述历史软件更新信息在待预测软件中的位置信息,确定所述历史软件变更位置特征。
4.根据权利要求1所述的一种软件缺陷预测方法,其特征在于,所述确定所述当前版本的待预测软件相对于所述上一版本的待预测软件的目标变更信息包括:
获取所述当前版本的待预测软件相对于所述上一版本的待预测软件的第一新增信息;
确定所述第一新增信息在所述当前版本的待预测软件对应代码中的第一位置信息;
获取所述当前版本的待预测软件相对于所述上一版本的待预测软件的第一更新信息;
确定所述第一更新信息在当前版本的待预测软件对应代码中的第二位置信息;
将所述第一新增信息、所述第一位置信息、所述第一更新信息以及所述第二位置信息作为所述目标变更信息。
5.根据权利要求4所述的一种软件缺陷预测方法,其特征在于,所述目标变更特征包括:当前版本的待预测软件新增量特征、当前版本的待预测软件更新量特征以及当前版本的待预测软件变更位置特征;
相应地,所述基于所述目标变更信息,确定目标变更特征包括:
基于所述第一新增信息确定所述当前版本的待预测软件新增量特征;
基于所述第一更新信息确定所述当前版本的待预测软件更新量特征;
基于所述第一位置信息以及所述第二位置信息,确定所述当前版本的待预测软件变更位置特征。
6.根据权利要求5所述的一种软件缺陷预测方法,其特征在于,所述当前版本的待预测软件新增量特征为当前版本的待预测软件中增加的代码行数,所述当前版本的待预测软件更新量特征为当前版本的待预测软件中更新的代码行数,所述当前版本的待预测软件变更位置特征为包含变更位置特征的数组;
相应地,所述基于软件缺陷预测模型以及所述目标变更特征对所述当前版本的待预测软件进行软件缺陷预测,得到与所述当前版本的待预测软件对应的软件缺陷预测信息包括:
将所述增加的代码行数、所述更新的代码行数以及所述包含变更位置特征的数组输入所述软件缺陷预测模型中,得到与所述当前版本的待预测软件对应的软件缺陷数量以及软件缺陷等级;
确定所述软件缺陷数量以及所述软件缺陷等级为所述软件缺陷预测信息。
7.根据权利要求6所述的一种软件缺陷预测方法,其特征在于,所述方法还包括:
初始化第一数组,所述第一数组中的每一个元素均对应待预测软件中的一个预设位置;
确定所述第一位置信息以及所述第二位置信息中包含的预设位置为目标位置;
将所述目标位置对应的数组元素置为预设值,得到所述包含变更位置特征的数组。
8.一种软件缺陷预测装置,其特征在于,包括:
软件缺陷预测请求接收模,用于接收软件缺陷预测请求,所述软件缺陷预测请求中包括待预测软件的软件标识,以及当前版本的待预测软件;
第一获取模块,用于基于所述待预测软件的软件标识,获取上一版本的待预测软件;
目标变更信息确定模块,用于确定所述当前版本的待预测软件相对于所述上一版本的待预测软件的目标变更信息;
目标变更特征确定模块,用于基于所述目标变更信息,确定目标变更特征;
软件缺陷预测预测模块,用于基于软件缺陷预测模型以及所述目标变更特征对所述当前版本的待预测软件进行软件缺陷预测,得到与所述当前版本的待预测软件对应的软件缺陷预测信息;其中,所述软件缺陷预测模型是基于所述待预测软件的历史变更信息生成的。
9.一种设备,其特征在于,所述设备包括处理器和存储器,所述存储器中存储有至少一条指令或至少一段程序,所述至少一条指令或所述至少一段程序由处理器加载并执行如权利要求1-7任一项所述的软件缺陷预测方法。
10.一种计算机存储介质,其特征在于,所述存储介质中存储有至少一条指令或至少一段程序,所述至少一条指令或所述至少一段程序由处理器加载并执行如权利要求1-7任一项所述的软件缺陷预测方法。

说明书全文

一种软件缺陷预测方法、装置、设备及存储介质

技术领域

[0001] 本申请涉及软件测试技术领域,尤其涉及一种软件缺陷预测方法、装置、设备及存储介质。

背景技术

[0002] 软件测试,是一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程,具体为在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
[0003] 传统的软件测试过程中,在软件中的代码发生变更并提交测试后,通常是基于测试人员对业务的熟悉程度和经验的积累,采用测试用例对发生代码变更的软件进行回归测试,这种方法容易受到人为经验和测试用例设计可靠性的影响,属于后置测试,并且只能对代码发生变更的软件质量有一个基本的保障,而没有及时在提交软件测试的源头对软件质量进行评估和把控。发明内容
[0004] 本申请所要解决的技术问题在于,提供一种软件缺陷预测方法、装置、设备及存储介质,能够在提交软件测试时,对由于软件中代码变更可能引发的软件缺陷进行预测,将变更分析前置到提测时,为后续的软件测试提供缺陷基线参考,从而提高了软件版本的迭代质量。
[0005] 为了解决上述技术问题,一方面,本申请提供了一种软件缺陷预测方法,所述方法包括:
[0006] 接收软件缺陷预测请求,所述软件缺陷预测请求中包括待预测软件的软件标识,以及当前版本的待预测软件;
[0007] 基于所述待预测软件的软件标识,获取上一版本的待预测软件;
[0008] 确定所述当前版本的待预测软件相对于所述上一版本的待预测软件的目标变更信息;
[0009] 基于所述目标变更信息,确定目标变更特征;
[0010] 基于软件缺陷预测模型以及所述目标变更特征对所述当前版本的待预测软件进行软件缺陷预测,得到与所述当前版本的待预测软件对应的软件缺陷预测信息;其中,所述软件缺陷预测模型是基于所述待预测软件的历史变更信息生成的。
[0011] 另一方面,本申请提供了一种软件缺陷预测装置,所述装置包括:
[0012] 软件缺陷预测请求接收模,用于接收软件缺陷预测请求,所述软件缺陷预测请求中包括待预测软件的软件标识,以及当前版本的待预测软件;
[0013] 第一获取模块,用于基于所述待预测软件的软件标识,获取上一版本的待预测软件;
[0014] 目标变更信息确定模块,用于确定所述当前版本的待预测软件相对于所述上一版本的待预测软件的目标变更信息;
[0015] 目标变更特征确定模块,用于基于所述目标变更信息,确定目标变更特征;
[0016] 软件缺陷预测预测模块,用于基于软件缺陷预测模型以及所述目标变更特征对所述当前版本的待预测软件进行软件缺陷预测,得到与所述当前版本的待预测软件对应的软件缺陷预测信息;其中,所述软件缺陷预测模型是基于所述待预测软件的历史变更信息生成的。
[0017] 另一方面,本申请提供了一种设备,所述设备包括处理器和存储器,所述存储器中存储有至少一条指令或至少一段程序,所述至少一条指令或所述至少一段程序由处理器加载并执行如上述的软件缺陷预测方法。
[0018] 另一方面,本申请提供了一种计算机存储介质,所述存储介质中存储有至少一条指令或至少一段程序,所述至少一条指令或所述至少一段程序由处理器加载并执行如上述的软件缺陷预测方法。
[0019] 实施本申请实施例,具有如下有益效果:
[0020] 本申请在接收到软件缺陷预测请求时,确定当前版本的待预测软件相对于上一版本的待预测软件的目标变更信息;基于所述目标变更信息,确定目标变更特征;基于软件缺陷预测模型以及所述目标变更特征对所述当前版本的待预测软件进行软件缺陷预测,得到与所述当前版本的待预测软件对应的软件缺陷预测信息。本申请采用基于机器学习的软件缺陷预测方法,能够在提交软件测试时,对由于软件中代码变更可能引发的软件缺陷进行预测,将变更分析前置到提测时,为后续的软件测试提供缺陷基线参考,从而能够有效地预测当前版本的软件可能存在的缺陷,提高软件版本的迭代质量。附图说明
[0021] 为了更清楚地说明本发明实施例或现有技术中的技术方案和优点,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它附图。
[0022] 图1是本申请实施例提供的实施环境示意图;
[0023] 图2是本申请实施例提供的一种软件缺陷预测方法流程图
[0024] 图3是本申请实施例提供的一种目标变更信息确定方法流程图;
[0025] 图4是本申请实施例提供的一种目标变更特征确定方法流程图;
[0026] 图5是本申请实施例提供的包含变更位置特征的数组确定方法流程图;
[0027] 图6是本申请实施例提供的软件缺陷预测的预测过程流程图;
[0028] 图7是本申请实施例提供的一种软件缺陷预测模型生成方法流程图;
[0029] 图8是本申请实施例提供的历史变更特征的提取方法流程图;
[0030] 图9是本申请实施例提供的迭代过程中误差变化示意图;
[0031] 图10是本申请实施例提供的预测缺陷数与真实缺陷数的对比示意图;
[0032] 图11是本申请实施例提供的模型的训练、评测以及应用示意图;
[0033] 图12是本申请实施例提供的一种软件缺陷预测装置示意图;
[0034] 图13是本申请实施例提供的一种设备结构示意图。

具体实施方式

[0035] 为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请作进一步地详细描述。显然,所描述的实施例仅仅是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0036] 需要说明的是,本申请的说明书权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或服务器不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0037] 首先对本申请实施例中的涉及的名词做以下解释:
[0038] REQ:研发提测流程管理平台,管理软件版本开发、提测、缺陷提交、回归测试、发布整个生命周期。
[0039] TensorFlow:是一个基于数据流编程的符号数学系统,可应用于各类机器学习算法的编程实现。
[0040] 机器学习(Machine Learning,ML)是一多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。机器学习是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。机器学习和深度学习通常包括人工神经网络、置信网络、强化学习、迁移学习、归纳学习、式教学习等技术。
[0041] 请参阅图1,其示出了一种实施环境示意图,该环境中可包括:至少一个用户终端110和服务器120,所述用户终端110和所述服务器120可通过网络进行数据通信。具体地,所述用户终端110向服务器120提交当前版本的待预测软件;服务器120接收当前版本的待预测软件后,获取上一版本的待预测软件,并确定当前版本的待预测软件的待预测软件相对于上一版本的待预测软件的变更信息;服务器120基于变更信息预测当前版本的待预测软件的缺陷信息。
[0042] 所述用户终端110可以基于浏览器/服务器模式(Browser/Server,B/S)或客户端/服务器模式(Client/Server,C/S)与服务器120进行通信。所述用户终端110可以包括:智能手机、平板电脑笔记本电脑、数字助理、智能可穿戴设备、车载终端、服务器等类型的实体设备,也可以包括运行于实体设备中的软体,例如应用程序等。本发明实施例中的用户终端110上运行的操作系统可以包括但不限于安卓系统、IOS系统、linux、windows等。
[0043] 所述服务器120与用户终端110可以通过有线或者无线建立通信连接,所述服务器120可以包括一个独立运行的服务器,或者分布式服务器,或者由多个服务器组成的服务器集群,其中服务器可以是端服务器。
[0044] 对于实施过程中所涉及到的相关数据可存储在区块链(Blockchain)中,区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层。
[0045] 区块链底层平台可以包括用户管理、基础服务、智能合约以及运营监控等处理模块。其中,用户管理模块负责所有区块链参与者的身份信息管理,包括维护公私钥生成(账户管理)、密钥管理以及用户真实身份和区块链地址对应关系维护(权限管理)等,并且在授权的情况下,监管和审计某些真实身份的交易情况,提供险控制的规则配置(风控审计);基础服务模块部署在所有区块链节点设备上,用来验证业务请求的有效性,并对有效请求完成共识后记录到存储上,对于一个新的业务请求,基础服务先对接口适配解析和鉴权处理(接口适配),然后通过共识算法将业务信息加密(共识管理),在加密之后完整一致的传输至共享账本上(网络通信),并进行记录存储;智能合约模块负责合约的注册发行以及合约触发和合约执行,开发人员可以通过某种编程语言定义合约逻辑,发布到区块链上(合约注册),根据合约条款的逻辑,调用密钥或者其它的事件触发执行,完成合约逻辑,同时还提供对合约升级注销的功能;运营监控模块主要负责产品发布过程中的部署、配置的修改、合约设置、云适配以及产品运行中的实时状态的可视化输出,例如:告警、监控网络情况、监控节点设备健康状态等。
[0046] 平台产品服务层提供典型应用的基本能和实现框架,开发人员可以基于这些基本能力,叠加业务的特性,完成业务逻辑的区块链实现。应用服务层提供基于区块链方案的应用服务给业务参与方进行使用。
[0047] 传统的软件测试过程中,在将软件提交测试后,对于代码变更没有明确的量化分析,通常是基于测试人员的经验以及测试用例对代码变更后的软件进行测试;其中对于代码变更的分析完全依赖于需求分析、经验以及测试用例的执行,无法做到前置量化和基线化;而精准测试和测试左移是软件质量管理的趋势,为此本申请实施例提供了一种软件缺陷预测方法,其执行主体可以为图1中的服务器,能够在软件提测的源头,对代码变更后的软件进行缺陷预测并基线化,具体地,请参阅图2,所述软件缺陷预测方法包括:
[0048] S210.接收软件缺陷预测请求,所述软件缺陷预测请求中包括待预测软件的软件标识,以及当前版本的待预测软件。
[0049] 本申请实施例中软件标识是用于唯一标识某一软件的信息,对于该软件的不同版本,其对应的软件标识是相同的。服务器在接收到用户提交的软件缺陷预测请求时,会从接收到的软件缺陷预测请求中获取到待预测软件的软件标识以及当前版本的待预测软件,其中当前版本的待预测软件可以为相关软件代码
[0050] 本申请实施例中的软件缺陷预测请求可以是用户基于软件缺陷预测单独向服务器发出的请求,也可以是用户在提交当前版本软件测试时自动触发的软件缺陷预测请求,即在提交测试时触发了软件缺陷预测请求,本申请实施例不做具体限定。
[0051] S220.基于所述待预测软件的软件标识,获取上一版本的待预测软件。
[0052] 根据本实施例上述可知,对于同一软件的不同版本所对应的软件标识相同,故基于所述软件标识可获取上一版本的待预测软件,这里的上一版本具体可以是指与当前版本修改时间最接近的版本,即相邻的修改版本。
[0053] S230.确定所述当前版本的待预测软件相对于所述上一版本的待预测软件的目标变更信息。
[0054] 本申请实施例中的目标变更信息是当前版本的待预测软件相对于上一版本的待预测软件的变更信息,具体可以包括新增的信息以及修改更新的信息;相应地,请参阅图3,其示出了一种目标变更信息确定方法,所述方法可包括:
[0055] S310.获取所述当前版本的待预测软件相对于所述上一版本的待预测软件的第一新增信息。
[0056] 这里的第一新增信息可包括多项新增信息,每一处所增加的信息可看成是一项新增信息,具体可以为代码信息的增加。
[0057] S320.确定所述第一新增信息在所述当前版本的待预测软件对应代码中的第一位置信息。
[0058] 对于上述的多项新增信息分别确定每一项新增信息在软件代码中的位置,具体地,本申请实施例中所述的位置可包括循环处、条件判断处、结构化查询处、头文件处、公共模块等等。
[0059] S330.获取所述当前版本的待预测软件相对于所述上一版本的待预测软件的第一更新信息。
[0060] S340.确定所述第一更新信息在当前版本的待预测软件对应代码中的第二位置信息。
[0061] 基于上述确定第一新增信息和第一位置信息相同的方法,确定所述第一更新信息和所述第二位置信息。
[0062] S350.将所述第一新增信息、所述第一位置信息、所述第一更新信息以及所述第二位置信息作为所述目标变更信息。
[0063] 所述目标变更信息可以包括但不限于上述的第一新增信息、第一位置信息、第一更新信息和第二位置信息。
[0064] S240.基于所述目标变更信息,确定目标变更特征。
[0065] 与所述目标变更信息相对应的,所述目标变更特征可包括:当前版本的待预测软件新增量特征、当前版本的待预测软件更新量特征以及当前版本的待预测软件变更位置特征,相应地,请参阅图4,其示出了一种目标变更特征确定方法,所述方法可包括:
[0066] S410.基于所述第一新增信息确定所述当前版本的待预测软件新增量特征。
[0067] 第一新增信息中可包括新增的软件代码信息,基于新增的软件代码信息确定出待预测软件中增加的代码行数,从而可将当前版本的待预测软件中增加的代码行数确定为当前版本的待预测软件新增量特征。
[0068] S420.基于所述第一更新信息确定所述当前版本的待预测软件更新量特征。
[0069] 第一更新信息中可包括修改更新的软件代码信息,基于修改更新的软件代码信息确定出待预测软件中更新的代码行数,从而可将当前版本的待预测软件中更新的代码行数确定为当前版本的待预测软件更新量特征。
[0070] S430.基于所述第一位置信息以及所述第二位置信息,确定所述当前版本的待预测软件变更位置特征。
[0071] 对于每项新增信息和每项更新信息所涉及到的位置,均可对其进行标记或记录,从而生成包含变更位置特征的数组,从而可将包含变更位置特征的数组确定为当前版本的待预测软件变更位置特征。
[0072] 对于包含变更位置特征的数组的具体确定方法可参阅图5,所述方法可包括:
[0073] S510.初始化第一数组,所述第一数组中的每一个元素均对应待预测软件中的一个预设位置。
[0074] 例如上述的所述位置可包括循环处、条件判断处、结构化查询处、头文件处、公共模块等等,具体地,循环处位置对应第一数组中的一个元素、条件判断处位置对应第一数组中的一个元素,以此类推;具体可通过元素值来表示是否在相应位置处发生了代码变更。
[0075] 可采用全0对所述第一数组进行初始化。
[0076] S520.确定所述第一位置信息以及所述第二位置信息中包含的预设位置为目标位置。
[0077] S530.将所述目标位置对应的数组元素置为预设值,得到所述包含变更位置特征的数组。
[0078] 对于所述第一新增信息和所述第一更新信息进行分析,确定其中所涉及的预设位置信息,并将涉及的预设位置信息通过数组元素的形式进行表示;对于第一新增信息和第一更新信息中涉及的预设位置信息可分别通过数组元素来进行表示,也可以交叉表示。
[0079] 例如在第一新增信息中涉及到在循环处以及头文件处新增了代码,在第一更新信息中涉及到条件判断处以及头文件处修改更新了代码,则:
[0080] 当分别进行表示时,将第一数组中与第一新增信息对应的元素区域中与循环处以及头文件处对应的数组元素置为1,其他元素值不变;将第一数组中与第一更新信息对应的元素区域中与条件判断处以及头文件处对应的数组元素置为1,其他元素值不变;
[0081] 当进行交叉表示时,将第一数组中与循环处对应的数组元素置为1,将第一数组中与条件判断处对应的数组元素置为1,将第一数组中与头文件处对应的数组元素置为2。
[0082] S250.基于软件缺陷预测模型以及所述目标变更特征对所述当前版本的待预测软件进行软件缺陷预测,得到与所述当前版本的待预测软件对应的软件缺陷预测信息;其中,所述软件缺陷预测模型是基于所述待预测软件的历史变更信息生成的。
[0083] 对于软件缺陷预测的具体预测过程,可参阅图6,具体可包括:
[0084] S610.将所述增加的代码行数、所述更新的代码行数以及所述包含变更位置特征的数组输入所述软件缺陷预测模型中,得到与所述当前版本的待预测软件对应的软件缺陷数量以及软件缺陷等级。
[0085] S620.确定所述软件缺陷数量以及所述软件缺陷等级为所述软件缺陷预测信息。
[0086] 这里的软件缺陷数量是指由于当前版本的软件发生代码变更所导致的当前版本的软件可能存在的缺陷数量,软件缺陷等级是按照软件缺陷数量进行的分级,例如缺陷数量0~5为一级,缺陷数量6~10为二级等。
[0087] 对于所述软件缺陷预测模型,本申请实施例提供了一种模型生成方法,在进行模型训练之前,基于白盒测试的历史经验和代码影响范围,定义了用于回归测试的特征项,从而确定了用于模型训练以及后续预测的特征项,具体请参阅图7,所述方法可包括:
[0088] S710.从软件历史版本库中获取所述待预测软件的多项历史变更信息以及与每项历史变更信息对应的缺陷信息标签,其中任一项历史变更信息均是基于相邻版本的待预测软件生成的。
[0089] 对历史版本库中的代码变更记录和版本测试的缺陷数进行数据清洗,提取出用于预测模型训练的数据源。
[0090] S720.从每项历史变更信息中提取出历史变更特征,确定与每项历史变更特征对应的缺陷信息标签。
[0091] 对于具体的历史变更特征的提取方法可参阅图8,所述方法可包括:
[0092] S810.基于每项历史变更信息中的历史软件新增信息确定所述历史软件新增量特征。
[0093] S820.基于每项历史变更信息中的历史软件更新信息确定所述历史软件更新量特征。
[0094] S830.基于每项历史变更信息中所述历史软件新增信息在待预测软件中的位置信息以及所述历史软件更新信息在待预测软件中的位置信息,确定所述历史软件变更位置特征。
[0095] 基于上述的特征提取方法,从历史变更信息中得到了用于预测模型训练的特征数据。
[0096] S730.基于各项历史变更特征以及相应的缺陷信息标签,构建训练样本集。
[0097] S740.基于所述训练样本集进行训练,生成所述软件缺陷预测模型。
[0098] 后台测试往往是基于白盒代码级别的接口、集成测试,在敏捷周期短,迭代快,需要对每次代码变更带来的影响以及可能触发的bug缺陷进行评估,以做到更好的精准测试和基线建设;后台代码版本变更可能触发缺陷,可通过提取特征:代码新增量、代码更新量、更新位置(循环处、条件判断处、SQL处、头文件、公共模块等)等进行预测,从而得到的评估预测项包括缺陷数、缺陷级别。本申请基于软件历史版本库中记录的代码变更细节和测试工程师发现的缺陷数等数据源,用多元线性回归/岭回归等机器学习算法来训练数据,生成一个可根据代码变更项预测版本缺陷的模型,用于版本提测后的缺陷基线建设。
[0099] 下面以一具体示例说明本申请的具体实施过程,可包括:
[0100] 1.训练软件缺陷预测模型
[0101] 从业务代码版本库中提取的特征项和REQ平台的软件缺陷数,经过数据清洗后,整理保存到CSV文件中。
[0102] 安装部署机器学习训练环境:
[0103] (1)安装tensorflow和sklearn机器学习库
[0104] pip install
[0105] pip install sklearn
[0106] (2)安装numpy、pandas和matplotlib数据分析库
[0107] pip install matplotlib
[0108] pip install pandas
[0109] pip install numpy
[0110] 编写训练程序,基于tensorflow,采用多元线性回归模型(或其他模型)训练数据。
[0111] 多元线性回归模型训练过程包括:
[0112] (1)读取训练数据文件,归一化并抽取特征项及标签
[0113] #读取训练数据文件
[0114] datafile=pd.read_csv("D:\\bug_test.csv",header=0)
[0115] #数据准备
[0116] datafile=datafile.values
[0117] #把df转换成np的数组格式
[0118] datafile=np.array(datafile)
[0119] #特征数据归一化
[0120] #对特征数据{0到11}列做(0-1)归一化
[0121] for i in range(12):
[0122] datafile[:,i]=(datafile[:,i]-datafile[:,i].min())/(datafile[:i].max()-datafile[:,i].min())
[0123] #x_data为归一化后的前12列特征数据
[0124] x_data=datafile[:,:12]
[0125] #y_data为最后1列标签数据
[0126] y_data=datafile[:,12]
[0127] 其中,csv文件中前12列为特征数据,最后一列为标签数据,即软件在当次版本提测后发现的缺陷数量。
[0128] (2)定义训练模型结构
[0129] #定义训练模型
[0130] x=tf.placeholder(tf.float32,[None,12],name="X")
[0131] #12个特征数据(12列)
[0132] y=tf.placeholder(tf.float32,[None,1],name="Y")#1个标签数据(1列)[0133] #定义模型函数
[0134] with tf.name_scope("Model"):
[0135] #w初始化值为shape=(12,1)的随机数
[0136] w=tf.Variable(tf.random_normal([12,1],stddev=0.01),name="w")[0137] #b初始化值为1.0
[0138] b=tf.Variable(1.0,name="b")
[0139] #w和x是矩阵相乘
[0140] def model(x,w,b):
[0141] return tf.matmul(x,w)+b
[0142] #预测计算操作,前向计算节点
[0143] pred=model(x,w,b)
[0144] (3)基于历史数据训练模型
[0145] #定义均方差损失函数
[0146] with tf.name_scope("LossFunction"):
[0147] loss_function=tf.reduce_mean(tf.pow(y-pred,2))#均方误差
[0148] #创建优化器
[0149] optimizer=tf.train.GradientDescentOptimizer(learning_rate).Minimize(loss_function)
[0150] #声明会话
[0151] sess=tf.Session()
[0152] #定义初始化变量的操作
[0153] init=tf.global_variables_initializer()
[0154] #启动会话
[0155] sess.run(init)
[0156] #迭代训练
[0157] loss_list=[]
[0158] for epoch in range(train_epochs):
[0159] loss sum=0.0
[0160] for xs,ys in zip(x_data,y_data):
[0161] xs=xs.reshape(1,12)
[0162] ys=ys.reshape(1,1)
[0163] #feed数据必须和Placeholder的shape一致
[0164] _,loss=sess.run([optimizer,loss_function],feed_dict={x:xs,y:ys})[0165] Loss_sum=loss_sum+loss
[0166] #打乱数据顺序,防止按原次序假性训练输出
[0167] x_data,y_data=shuffle(x_data,y_data)
[0168] b0temp=b.eval(session=sess)#训练中当前变量b值
[0169] w0temp=w.eval(session=sess)#训练中当前权重w值
[0170] loss_average=loss_sum/len(y_data)#当前训练中的平均损失
[0171] loss_list.append(loss average)#每轮添加一次
[0172] 首先定义迭代训练的轮次和学习率,然后创建优化器,这里采用机器学习中的经典GradientDescentOptimizer优化器,接着声明会话session,展开迭代训练,最后得到一个稳定的多元线性模型,用于预测缺陷数量。得到的多元线性模型为y=w1x1+w2x2+...+w12x12。
[0173] 请参阅图9,其示出了迭代过程中误差loss不断减小的过程,图9中横坐标标识迭代训练次数,纵坐标表示真实缺陷数和预测缺陷数的均方误差,可以看到,误差loss在不断减小,以趋于平衡。
[0174] 2.提测后抽取代码变更特征值,输入模型中,做出回归预测
[0175] 当在REQ平台提测软件版本后,会扫描当次版本较上次版本的更新项,从中提取特征项,包括新增代码行数、变更代码行数、变更循环处代码行数、变更条件判断处代码行数等;将当次迭代的特征值输入到模型中,得到预测的软件缺陷数。给出预测的版本缺陷数可以作为测试工程师的参考,在测试执行中,记录真实的版本bug数,并记录下来作为下次模型训练的样本,从而修正模型,使其泛化能力加强。请参阅图10,其示出了采用缺陷预测模型预测得到的预测缺陷数与测试人员实际测试得到的真实缺陷数的对比。
[0176] 具体地,图11示出了模型的训练、评测以及应用示意图,具体可包括:
[0177] 训练过程:
[0178] S1110.从版本代码库提取特征样本集。
[0179] 从SVN/Git或其他代码版本管理平台收集每次迭代的代码变更特征,作为训练的样本,特征包括新增代码行数、变更代码行数、变更循环处代码行数、变更条件判断处代码行数、距离上次变更相差时间、SQL代码变更行数、头文件变更行数等,经过数据清洗后存入CSV文件。
[0180] S1120.从流程管理平台提取对应版本缺陷数。
[0181] 从缺陷管理平台收集历史迭代的缺陷数量,作为标签存入之前的CSV文件中。
[0182] S1130.基于所述特征样本集以及对应版本缺陷数进行模型训练。
[0183] 基于tensorflow多元线性回归模型进行数据训练,配置tensorflow基础环境,定义好模型和会话session,用之前整理的数据文件进行迭代训练,经过本地交叉验证后,输出相对稳定的可用模型。
[0184] S1140.进行本地交叉验证。
[0185] 交叉验证的基本思想是把在某种意义下将原始数据(dataset)进行分组,一部分作为训练集(train set),另一部分作为验证集(validation set or test set),首先用训练集对分类器进行训练,再利用验证集来测试训练得到的模型(model),以此来作为评价分类器的性能指标。
[0186] 评测过程:
[0187] S1150.收集测试过程中的真实缺陷数。
[0188] S1160.收集测试过程中的真实特征项。
[0189] S1170.验收评测。
[0190] S1180.误差收集。
[0191] 开发人员提测,测试人员验收模型;开发人员在REQ平台提测版本,测试人员提取特征项输入到之前训练好的模型,输出预测缺陷数量,当测试人员在测试执行中发现的缺陷数与预测的缺陷数相差较大时,可以将本次误差数据作为样本反馈到训练模型中,再次迭代训练,直至模型稳定。
[0192] 应用:
[0193] S1190.模型上线。
[0194] 当模型通过验收评测后,可部署到真实的软件提测管理平台,正式投入使用。
[0195] 缺陷数是衡量软件版本质量的重要指标之一,软件版本变更提测后,需要对变更代码进行分析,基于历史测试数据和变更记录,可以有效预测当次软件的缺陷、从而评估软件质量,这对精准测试和缺陷基线建设至关重要。本申请基于软件历史版本库中记录的代码变更细节和测试工程师发现的缺陷数等数据源,用多元线性回归/岭回归等机器学习算法来训练数据,生成一个可根据代码变更项预测版本缺陷的模型,用于版本提测后的缺陷基线建设。
[0196] 针对传统软件代码变更提测后存在的缺点,采用基于机器学习算法对缺陷进行回归预测的方法可解决以下问题:
[0197] 1.传统代码变更提测后,测试人员分析影响度,用例回归测试,受人为影响大——采用基于机器学习的缺陷回归预测方法可以在变更后第一时间抽取特征项,输入到事先训练好的模型中,从而快速输出预测的缺陷数,对之后的测试执行起一定的参考作用;
[0198] 2.传统代码变更提测后,没有将触发缺陷的变更处记录下来,无法完成缺陷基线建设——采用基于机器学习的缺陷回归预测方法,可以将导致缺陷产生的原因(新增代码处、变更代码处等)和缺陷类型映射起来,完成数据收集和基线建设,有利于软件版本质量管理;
[0199] 3.传统代码变更提测后,依赖测试人员个体的测试能力,没有将测试经验积累下来——采用基于机器学习的缺陷回归预测方法正是将所有测试工程师经验很好地落地,采集版本库中的历史真实数据,建立开发人员软件缺陷基线,有利于保障软件的长期质量。
[0200] 本申请采用基于机器学习的软件缺陷预测方法,能够在提交软件测试时,对由于软件中代码变更可能引发的软件缺陷进行预测,将变更分析前置到提测时,为后续的软件测试提供缺陷基线参考,从而能够有效地预测当前版本的软件可能存在的缺陷,提高软件版本的迭代质量。具体地,使用基于机器学习的软件缺陷回归预测方案,可以在版本提测后,基于代码变更给测试人员一个缺陷数预测,作为测试执行后的参考,可有效保障版本的迭代质量,也可以作为开发人员的研发质量基线,用于评测和量化开发质量,提高开发人员的缺陷防范意识。
[0201] 本实施例还提供了一种软件缺陷预测装置,请参阅图12,所述装置可包括:
[0202] 软件缺陷预测请求接收模块1210,用于接收软件缺陷预测请求,所述软件缺陷预测请求中包括待预测软件的软件标识,以及当前版本的待预测软件;
[0203] 第一获取模块1220,用于基于所述待预测软件的软件标识,获取上一版本的待预测软件;
[0204] 目标变更信息确定模块1230,用于确定所述当前版本的待预测软件相对于所述上一版本的待预测软件的目标变更信息;
[0205] 目标变更特征确定模块1240,用于基于所述目标变更信息,确定目标变更特征;
[0206] 软件缺陷预测预测模块1250,用于基于软件缺陷预测模型以及所述目标变更特征对所述当前版本的待预测软件进行软件缺陷预测,得到与所述当前版本的待预测软件对应的软件缺陷预测信息;其中,所述软件缺陷预测模型是基于所述待预测软件的历史变更信息生成的。
[0207] 进一步地,所述装置还包括预测模型训练模块,所述预测模型训练模块包括:
[0208] 历史信息获取模块,用于从软件历史版本库中获取所述待预测软件的多项历史变更信息以及与每项历史变更信息对应的缺陷信息标签,其中任一项历史变更信息均是基于相邻版本的待预测软件生成的;
[0209] 训练数据确定模块,用于从每项历史变更信息中提取出历史变更特征,确定与每项历史变更特征对应的缺陷信息标签;
[0210] 训练样本集构建模块,用于基于各项历史变更特征以及相应的缺陷信息标签,构建训练样本集;
[0211] 软件缺陷预测模型生成模块,用于基于所述训练样本集进行训练,生成所述软件缺陷预测模型。
[0212] 其中,每项历史变更信息中包括历史软件新增信息以及所述历史软件新增信息在待预测软件中的位置信息,历史软件更新信息以及所述历史软件更新信息在待预测软件中的位置信息;所述历史变更特征包括:历史软件新增量特征、历史软件更新量特征以及历史软件变更位置特征;相应地,所述训练数据确定模块包括:
[0213] 历史软件新增量特征确定模块,用于基于每项历史变更信息中的历史软件新增信息确定所述历史软件新增量特征;
[0214] 历史软件更新量特征确定模块,用于基于每项历史变更信息中的历史软件更新信息确定所述历史软件更新量特征;
[0215] 历史软件变更位置特征确定模块,用于基于每项历史变更信息中所述历史软件新增信息在待预测软件中的位置信息以及所述历史软件更新信息在待预测软件中的位置信息,确定所述历史软件变更位置特征。
[0216] 进一步地,所述目标变更信息确定模块1230包括:
[0217] 第一新增信息获取模块,用于获取所述当前版本的待预测软件相对于所述上一版本的待预测软件的第一新增信息;
[0218] 第一位置信息确定模块,用于确定所述第一新增信息在所述当前版本的待预测软件对应代码中的第一位置信息;
[0219] 第一更新信息获取模块,用于获取所述当前版本的待预测软件相对于所述上一版本的待预测软件的第一更新信息;
[0220] 第二位置信息确定模块,用于确定所述第一更新信息在当前版本的待预测软件对应代码中的第二位置信息;
[0221] 目标变更信息生成模块,用于将所述第一新增信息、所述第一位置信息、所述第一更新信息以及所述第二位置信息作为所述目标变更信息。
[0222] 所述目标变更特征包括:当前版本的待预测软件新增量特征、当前版本的待预测软件更新量特征以及当前版本的待预测软件变更位置特征;相应地,所述目标变更特征确定模块1240包括:
[0223] 第一确定模块,用于基于所述第一新增信息确定所述当前版本的待预测软件新增量特征;
[0224] 第二确定模块,用于基于所述第一更新信息确定所述当前版本的待预测软件更新量特征;
[0225] 第三确定模块,用于基于所述第一位置信息以及所述第二位置信息,确定所述当前版本的待预测软件变更位置特征。
[0226] 进一步地,所述当前版本的待预测软件新增量特征为当前版本的待预测软件中增加的代码行数,所述当前版本的待预测软件更新量特征为当前版本的待预测软件中更新的代码行数,所述当前版本的待预测软件变更位置特征为包含变更位置特征的数组;相应地,所述软件缺陷预测预测模块1250包括:
[0227] 第一预测模块,用于将所述增加的代码行数、所述更新的代码行数以及所述包含变更位置特征的数组输入所述软件缺陷预测模型中,得到与所述当前版本的待预测软件对应的软件缺陷数量以及软件缺陷等级;
[0228] 缺陷预测信息确定模块,用于确定所述软件缺陷数量以及所述软件缺陷等级为所述软件缺陷预测信息。
[0229] 进一步地,所述装置还包括位置数组处理模块,所述位置数组处理模块包括:
[0230] 初始化模块,用于初始化第一数组,所述第一数组中的每一个元素均对应待预测软件中的一个预设位置;
[0231] 目标位置确定模块,用于确定所述第一位置信息以及所述第二位置信息中包含的预设位置为目标位置;
[0232] 赋值模块,用于将所述目标位置对应的数组元素置为预设值,得到所述包含变更位置特征的数组。
[0233] 上述实施例中提供的装置可执行本申请任意实施例所提供方法,具备执行该方法相应的功能模块和有益效果。未在上述实施例中详尽描述的技术细节,可参见本申请任意实施例所提供的方法。
[0234] 本实施例还提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、至少一段程序、代码集或指令集由处理器加载并执行如本实施例上述任一方法。
[0235] 本实施例还提供了一种设备,其结构图请参见图13,该设备1300可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(central processing units,CPU)1322(例如,一个或一个以上处理器)和存储器1332,一个或一个以上存储应用程序1342或数据1344的存储介质1330(例如一个或一个以上海量存储设备)。其中,存储器1332和存储介质1330可以是短暂存储或持久存储。存储在存储介质1330的程序可以包括一个或一个以上模块(图示未示出),每个模块可以包括对设备中的一系列指令操作。更进一步地,中央处理器1322可以设置为与存储介质1330通信,在设备1300上执行存储介质1330中的一系列指令操作。设备1300还可以包括一个或一个以上电源1326,一个或一个以上有线或无线网络接口1350,一个或一个以上输入输出接口1358,和/或,一个或一个以上操作系统1341,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。本实施例上述的任一方法均可基于图13所示的设备进行实施。
[0236] 本说明书提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤和顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的系统或中断产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境)。
[0237] 本实施例中所示出的结构,仅仅是与本申请方案相关的部分结构,并不构成对本申请方案所应用于其上的设备的限定,具体的设备可以包括比示出的更多或更少的部件,或者组合某些部件,或者具有不同的部件的布置。应当理解到,本实施例中所揭露的方法、装置等,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分仅仅为一种逻辑功能的划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元模块的间接耦合或通信连接。
[0238] 基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0239] 本领域技术人员还可以进一步意识到,结合本说明书所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但这种实现不应认为超出本申请的范围。
[0240] 以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈