首页> 中国专利> 一种智能手机应用开发中的代码缺陷预测方法

一种智能手机应用开发中的代码缺陷预测方法

摘要

本发明公开了一种智能手机应用开发中的代码缺陷预测方法,其步骤是:1)整理代码单元,区分标注集和目标集,定义特征指标,提取特征向量;2)基于特征向量对标注集代码单元赋予权重;3)训练带权重分类器,计算目标集代码单元有缺陷概率和无缺陷概率;4)采用自学习策略校准预测结果,重复上述步骤,直到前后两次计算的预测结果近似或达到给定的迭代次数;5)输出目标集中高怀疑率的代码单元。本发明方法使用了其他智能手机应用和目标智能手机应用历史版本的数据,在代码单元层面定义特征指标,应用机器学习技术,预测可能包含缺陷的代码单元,快速准确定位智能手机应用的缺陷代码单元。本发明计算简单,能快速有效地定位缺陷代码,适用于智能手机应用的开发和维护。

著录项

  • 公开/公告号CN106502909A

    专利类型发明专利

  • 公开/公告日2017-03-15

    原文格式PDF

  • 申请/专利权人 南京大学;

    申请/专利号CN201610975788.7

  • 发明设计人 李政亮;顾庆;陈道蓄;

    申请日2016-11-07

  • 分类号G06F11/36(20060101);

  • 代理机构32237 江苏圣典律师事务所;

  • 代理人贺翔

  • 地址 210023 江苏省南京市栖霞区仙林大道163号南京大学

  • 入库时间 2023-06-19 01:46:55

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-04-23

    授权

    授权

  • 2017-04-12

    实质审查的生效 IPC(主分类):G06F11/36 申请日:20161107

    实质审查的生效

  • 2017-03-15

    公开

    公开

说明书

技术领域

本发明涉及智能手机的应用程序开发领域,具体为一种智能手机应用开发中的代码缺陷预测方法,该方法基于海量的开源代码和缺陷信息预测智能手机应用代码单元是否包含缺陷,从而快速定位缺陷代码单元,有效提高智能手机应用缺陷修复效率和代码质量。

背景技术

随着科技的发展,智能手机已经成为人们互相联系、娱乐、了解时事的重要工具,对现代人来说是必不可少的。随之而来的,智能手机应用的数量也飞快增加,功能逐渐多样化。至2016年为止,智能手机应用数量已超300万,每年还有大量的智能手机应用登陆应用商店,智能手机应用的开发者总数已超38.8万。智能手机应用已经与社会生活的方方面面关联起来。

当前智能手机系统的主流是android和ios,智能手机应用主要是基于android和ios平台开发的,一般用面向对象语言(如Java、C++和Objective-C等)开发。不同于传统软件,像Firefox,eclipse等,大多数智能手机应用本身代码量不大,并且一般由比较小的团队及开发经验不充足的人员开发。同时,相对于传统软件应用来说,智能手机应用通常具有更多版本。为了增强竞争性,吸引更多用户,开发者持续更新应用并发布新版本,增加新功能。有些智能手机应用版本更新超过200次。当前智能手机应用竞争很激烈,许多智能手机应用有相似的功能,例如在google play上光天气预报的智能手机应用就有超过250个,在app sotre上与天气相关的智能手机应用也超过150个。因此,智能手机用户对质量问题更加缺少容忍性。智能手机应用代码质量和缺陷修复效率至关重要。

智能手机应用在开发和维护过程中不可避免地产生软件缺陷。代码审查是开发调试过程中一件耗时耗力的工作。目前,缺陷代码查找以经验判定为主,多利用交互式的调试工具,需要大量人工干预,人工定位,耗费大量时间和成本,依赖个人经验且不可重复。

发明内容

本发明所要解决的技术问题是提供一种智能手机应用开发中的代码缺陷预测方法,该方法计算简单,通用性和扩展性强,可以有效定位缺陷代码,提高缺陷修复效率。

为实现上述目的,本发明采用如下的步骤:

1)整理代码单元,区分标注集和目标集,定义特征指标;

2)基于特征指标提取特征向量,并对标注集代码单元赋予权重;

3)训练带权重分类器,计算目标集代码单元有缺陷概率和无缺陷概率;

4)采用自学习策略校准预测结果,重复上述步骤,直到前后两次计算的预测结果近似或达到给定的迭代次数;

5)输出目标集中高怀疑率的代码单元。

上述步骤1)中整理代码单元,定义特征指标,提取特征向量的处理流程是:首先整理目标智能手机应用的代码单元作为目标集,目标集为目标智能手机应用中未标注的代码单元,所述代码单元对于面向对象语言是指面向对象的类文件,对于面向过程语言则指单个代码文件;

整理其他智能手机应用的代码单元和目标智能手机应用历史版本的代码单元形成标注集接着选择其他智能手机应用;其他智能手机应用的选取一般优先考虑目标智能手机应用开发团队人员之前开发过的应用,以及与目标智能手机应用功能类似的其他智能手机应用,其次可以考虑相同分类目录下(例如游戏、社交通讯、便捷生活等)的智能手机应用,对于代码单元类标的获取,代码单元类标是指代码单元是否包含缺陷,是从历史修复记录和缺陷报告中识别有缺陷代码单元,有缺陷类标为1,其余的为无缺陷代码单元,无缺陷类标为0;由这些代码单元形成标注集。

然后定义代码单元的特征指标,主要从智能手机应用的代码和开发过程两方面来考虑。共有21个特征指标,定义如下:

表1代码单元特征指标

上述步骤2)中对标注集代码单元赋予权重的处理流程是:首先,对其他智能手机应用的代码单元赋予权重,具体分为两步:

1)计算代码单元适应度

对于目标智能手机应用,每一个代码单元可表示为特征向量xi={ai1,ai2,…ai21},其中i表示代码单元的序号。目标智能手机应用单个特征指标的分布可以用指标的均值和标准差来表示:

其中,i表示代码单元的序号,j表示特征指标的序号,m表示目标智能手机应用的代码单元个数。

对于其他智能手机应用,其代码单元的适应度计算规则如下:

其中,i表示代码单元的序号,j表示特征指标的序号,h(aij)为1,如果|aij-uij|<3δi,否则h(aij)为0,aij表示代码单元i的第j个属性,k表示特征指标个数(即k=21)。

2)计算代码单元权重

基于代码单元的适应度,其权重计算公式如下:

wi=Si/k(k-Si+1)(4)

其中,i表示代码单元序号,k表示特征指标个数(即k=21),Si表示代码单元i的适应度。wi取值范围在0到1之间。

然后,对目标智能手机应用历史版本的代码单元进行权重赋值,如果没有历史版本数据,则不考虑。

历史版本代码单元的权重计算方法如下:

wi=e1-d(5)

其中,i表示代码单元序号,d表示目标智能手机应用历史版本距当前开发版本的版本距离。目标智能手机应用历史版本距离当前开发版本距离越大,权重越小。wi范围在0到1之间。若只相隔1个版本,则wi值为1。

上述步骤3)训练带权重分类器的处理流程是:输入带权重的所有已标注类标的其他智能手机应用代码单元和目标智能手机应用代码单元的特征向量,训练带权重分类器,优选transfer bayse分类器,对于目标集代码单元,将特征向量提交给训练好的分类器,计算目标集代码单元有缺陷的概率P(y=1)以及无缺陷的概率P(y=0)

对目标集代码单元打上标签,如果P(y=1)>P(y=0),则预测代码单元有缺陷,类标为1,反之,预测代码单元无缺陷,类标为0。

上述步骤4)采用自学习策略校准预测结果的处理流程是:计算目标集代码单元的置信度η=|P(y=1)-P(y=0)|,选取置信度最高的10%代码单元,将其加入到标注集。

新加入标注集的目标智能手机应用代码单元的权重设置如下(设为最高权重):

wi=1(6)

其中,i表示代码单元的序号。

最后,采用新的标注集和目标集,重新训练带权重分类器,直到前后两次预测结果近似,即预测标签出现偏差的代码单元比例不超过ε(优选值3%),或者迭代次数达到T次(优选值30)为止。

上述步骤5)输出高怀疑率的代码单元的处理流程是:将预测结果以r=P(y=1)-P(y=0)值为标准,从大到小排列。排在前列的代码单元将视为可能存在缺陷的代码单元,由开发者重点关注和检查。

本发明方法借鉴其他智能手机应用和目标智能手机应用历史版本数据,在代码单元层面定义特征指标,采用带权重分类器训练学习,同时采用自学习策略校准预测结果,在目标智能手机应用历史数据较少时,也可以有效训练分类器,快速准确定位缺陷代码;适用于智能手机应用的开发和维护。带权重的分类器在具有不同权重的实例训练集上训练,使权重较大的实例有更大的概率分类准确或者具有更大的训练权重。自学习策略采用半监督迭代式训练方法,将前一轮迭代的结果应用到下一轮训练中,从而提高分类准确率。本发明方法计算简单,通用性和扩展性强,适用于不同类型的编程语言;对不同规模智能手机应用,能快速查找缺陷代码单元,有效提高智能手机应用缺陷修复效率和代码质量。因此,本发明的目标是设计一种用于智能手机应用开发的缺陷预测方法,基于智能手机应用的开发过程和代码特征,来辅助缺陷查找和修正。

附图说明

图1是智能手机应用开发中代码缺陷预测方法的总体框架。

图2是训练带权重分类器的流程图。

图3是应用自学习策略完成预测结果校准的流程图。

具体实施方式

图1所示是智能手机应用开发中代码缺陷预测方法的总体框架。方法的输入是其他智能手机应用的源代码文件,历史修复记录和缺陷报告,目标智能手机应用的源代码文件,目标智能手机应用的历史修复记录和缺陷报告。方法的输出是按照缺陷概率从大到小排序的代码单元。本发明方法包含以下五个步骤:1)整理代码单元,区分标注集和目标集,定义特征指标,提取特征向量;2)基于特征向量对标注集代码单元赋予权重;3)训练带权重分类器,计算目标集代码单元有缺陷概率和无缺陷概率;4)采用自学习策略校准预测结果,重复上述步骤,直到前后两次计算的预测结果近似或达到给定的迭代次数;5)输出目标集中高怀疑率的代码单元。

本发明方法的第一个步骤是整理代码单元,定义特征指标,提取特征向量。目前,智能手机应用主要由面向对象语言(例如Java、C++和Objective-C等)开发,代码单元一般指面向对象的类文件,如果用面向过程语言(例如C等)开发,则指单个代码文件。

首先整理目标智能手机应用的代码单元作为目标集,其中代码单元指单个代码文件,通常对应一个类的定义;接着选择其他智能手机应用:为了使其他智能手机应用的代码单元分布特征与目标智能手机应用的分布近似。其他智能手机应用的选取一般优先考虑目标智能手机应用开发团队人员之前开发过的应用,以及与目标智能手机应用功能类似的其他智能手机应用,其次可以考虑相同分类目录下(例如游戏、社交通讯、便捷生活等)的智能手机应用。

然后定义代码单元的特征指标,指标将用于其他智能手机应用代码单元的权重设置以及训练预测模型。下表1所示为定义的代码单元特征指标:

表1代码单元特征指标

以上21个指标组成代码单元的特征指标,主要从智能手机应用的代码和开发过程两方面来考虑。

对于代码单元类标的获取,可以从历史修复记录和缺陷报告中识别有缺陷代码单元,其余的为无缺陷代码单元(有缺陷类标为1,无缺陷类标为0)。这些代码单元形成标注集。标注集包含其他智能手机应用的代码单元和目标智能手机应用历史版本的代码单元,目标集为目标智能手机应用未标注的代码单元。

本发明方法的第二个步骤是基于特征向量对标注集代码单元赋予权重,包含对其他智能手机应用的代码单元以及目标智能手机应用历史版本代码单元赋予权重。

首先,对其他智能手机应用的代码单元赋予权重,具体分为两步:

1)计算代码单元适应度

对于目标智能手机应用,每一个代码单元可表示为特征向量xi={ai1,ai2,…ai21},其中i表示代码单元的序号。目标智能手机应用单个特征指标的分布可以用指标的均值和标准差来表示:

其中,i表示代码单元的序号,j表示特征指标的序号,m表示目标智能手机应用的代码单元个数,aij表示代码单元i的第j个属性。

对于其他智能手机应用,其代码单元的适应度计算规则如下:

其中,i表示代码单元的序号,j表示特征指标的序号,h(aij)为1,如果|aij-uij|<3δi,否则h(aij)为0,aij表示代码单元i的第j个属性,k表示特征指标个数(即k=21)。

2)计算代码单元权重

基于代码单元的适应度,其权重计算公式如下:

wi=Si/k(k-Si+1)(4)

其中,i表示代码单元序号,k表示特征指标个数(即k=21),Si表示代码单元i的适应度。wi取值范围在0到1之间。

然后,对目标智能手机应用历史版本的代码单元进行权重赋值,如果没有历史版本数据,则不考虑。

历史版本代码单元的权重计算方法如下:

wi=e1-d(5)

其中,i表示代码单元序号,d表示目标智能手机应用历史版本距当前开发版本的版本距离。目标智能手机应用历史版本距离当前开发版本距离越大,权重越小。wi范围在0到1之间。若只相隔1个版本,则wi值为1。

本方明方法的第三个步骤是基于带权重的标注集训练带权重分类器,计算目标集代码单元有缺陷概率和无缺陷概率。处理流程如图2所示。

输入带权重的所有已标注类标的其他智能手机应用代码单元和目标智能手机应用代码单元的特征向量,训练带权重分类器,优选transfer bayse分类器,对于目标集代码单元,将特征向量提交给训练好的分类器,计算目标集代码单元有缺陷的概率P(y=1)以及无缺陷的概率P(y=0)

对目标集代码单元打上标签,如果P(y=1)>P(y=0),则预测代码单元有缺陷,类标为1,反之,预测代码单元无缺陷,类标为0。

本方明方法的第四个步骤是采用自学习策略,迭代一定次数,实现对目标集代码单元的缺陷预测。处理流程如图3所示。

计算目标集代码单元的置信度η=|P(y=1)-P(y=0)|,选取置信度最高的10%代码单元,将其加入到标注集。

新加入标注集的目标智能手机应用代码单元的权重设置如下(设为最高权重):

wi=1(6)

其中,i表示代码单元的序号。

最后,采用新的标注集和目标集,重复步骤3),直到前后两次预测结果近似,即预测标签出现偏差的代码单元比例不超过ε(优选值3%),或者迭代次数达到T次(优选值30)为止。

本方明方法的第五个步骤是输出目标集中高怀疑率的代码单元,将代码单元按有缺陷概率大小从大到小排列。

将预测结果以r=P(y=1)-P(y=0)值为标准,从大到小排列。排在前列的代码单元将视为可能存在缺陷的代码单元,由开发者重点关注和检查。

本发明方法有效利用了其他智能手机应用和目标智能手机应用历史版本数据,在代码单元层面定义特征指标,并根据其他智能手机应用对目标智能手机应用的适应度,对其他智能手机应用代码单元实例赋予不同的权重,使其他智能手机应用的代码单元和目标智能手机应用代码单元分布相似,在目标智能手机应用历史数据较少时,也可以有效训练分类器,快速准确定位缺陷代码。本发明方法能够对有缺陷的代码单元进行有效预测,适用于智能手机应用的开发和维护。本发明方法计算简单,通用性和扩展性强,适用于不同类型的编程语言;对不同规模智能手机应用,能快速查找缺陷代码单元,有效提高智能手机应用缺陷修复效率和代码质量。

本发明方法的具体应用途径很多,以上所述仅是本发明的优选实施方式。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进,这些改进也应视为本发明的保护范围。本发明具体应用途径很多,以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以作出若干改进,这些改进也应视为本发明的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号