CN111367798A - 一种持续集成及部署结果的优化预测方法 - Google Patents

一种持续集成及部署结果的优化预测方法 Download PDF

Info

Publication number
CN111367798A
CN111367798A CN202010129434.7A CN202010129434A CN111367798A CN 111367798 A CN111367798 A CN 111367798A CN 202010129434 A CN202010129434 A CN 202010129434A CN 111367798 A CN111367798 A CN 111367798A
Authority
CN
China
Prior art keywords
model
construction
project
deployment
array
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202010129434.7A
Other languages
English (en)
Other versions
CN111367798B (zh
Inventor
张贺
荣国平
刘博涵
杨岚心
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nanjing University
Original Assignee
Nanjing University
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nanjing University filed Critical Nanjing University
Priority to CN202010129434.7A priority Critical patent/CN111367798B/zh
Publication of CN111367798A publication Critical patent/CN111367798A/zh
Application granted granted Critical
Publication of CN111367798B publication Critical patent/CN111367798B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3608Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F18/00Pattern recognition
    • G06F18/20Analysing
    • G06F18/24Classification techniques

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Bioinformatics & Cheminformatics (AREA)
  • Evolutionary Biology (AREA)
  • Evolutionary Computation (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Bioinformatics & Computational Biology (AREA)
  • Artificial Intelligence (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

本发明公开了一种持续集成及部署结果的优化预测方法。本方法包括:专门用于预测持续集成及部署结果的特征集合;利用构建日志和代码提交日志度量集合中的特征的方法;包含备选采样器和备选分类器,以及结合采样器和分类器,利用根据特征集合所构建的样本集训练的用于预测集成及部署结果的模型池;根据自定义的构建频率阈值,利用优化算法从模型池中选择效率最优模型;利用效率最优模型预测持续集成及部署结果,若结果为通过则不执行脚本,若结果为失败则执行脚本。本发明实现了准确预测持续集成及部署结果,以满足软件开发团队对构建频率的具体要求,达到降低实施持续集成及部署的成本、提高生产效率的目的。

Description

一种持续集成及部署结果的优化预测方法
技术领域
本发明属于软件开发技术领域,具体涉及一种持续集成及部署结果的优化预测方法。
背景技术
持续集成及部署是一种软件开发实践,可在专用服务器上自动进行源代码的编译,构建,测试和部署。开发人员经常向主干提交代码,这些新提交最终要合并到主干分支之前,需要进行验证。持续集成及部署使集成能够尽早完成,以便可以及时检测并修复集成缺陷,这样既节省了团队沟通,生产力又提高了代码质量,节省了项目成本。但是,随着持续集成及部署的构建频率的增加和软件项目交付周期的缩短,单次需要花费长达15分钟至1小时的集成及部署逐渐成为软件开发的瓶颈。持续集成及部署有两个主要结果,即“通过”和“失败”。通常,“通过”的数量是“失败”的几倍。这意味着在大多数情况下,用于持续集成及部署的资源无法达到检测缺陷的目的。
为解决无效集成及部署,可以通过预测模型来减少结果可能为“通过”的集成及部署,从而降低构建频率,达到节省成本、提高效率的目的。现有的相关方法采用单一的传统的分类器,如C4.5,朴素贝叶斯等,存在三方面的缺陷,1)在不同项目中的表现不佳;2)在同一项目的不同迭代间表现不稳定;3)在使用分类器后的构建频率不可控,难以满足不同开发团队的主观需求。
发明内容
本发明的目的在于:提供一种持续集成及部署结果的优化预测方法,利用持续集成及部署的日志和代码提交日志,预测持续集成及部署的结果。
为实现上述目的,本发明的技术方案是:提供一种持续集成及部署结果的优化预测方法,包括以下步骤:
步骤100:提供一个专门用于预测持续集成及部署结果的特征集合,基于所述特征集合,确定收集项目的构建日志和代码提交日志;
步骤200:提供利用构建日志和代码提交日志度量集合中的特征的方法,对度量所获数据进行清洗和标准化得到预处理后数据集;
步骤300:将所述预处理后数据集拆分为训练集和测试集,利用备选采样器池中的采样器和备选分类器池中的分类器,两两组合,分别输入相同的训练集,训练出多个模型,形成模型池,利用相同的测试集评估模型池中的模型,输出混淆矩阵数组;
步骤400:输入自定义的构建频率阈值,输入所述混淆矩阵数组,输入所述模型池中模型构成的预测模型数组,利用优化算法选择出效率最优模型;
步骤500:利用步骤400中的效率最优模型预测结果,若所述最优模型预测结果为通过则不执行脚本,若所述最优模型预测结果为失败则执行脚本。
优选地,在所述步骤300中利用所述预处理后数据训练若干采样器和分类器的组合,构建出模型池前,提供专门用于预测持续集成及部署结果的特征集合,所述特征集合包括但不限于以下10个特征:
(1)project_recent,指在一个项目中,当前构建之前K次构建的失败率,K为大1的任意整数;
(2)last_build_result_branch,指在一个项目中,同一条分支下,当前构建的上一条构建结果;
(3)committer_history,指在一个项目中,当前构建的提交者在该项目内所提交的所有构建的失败率;
(4)project_history,指在一个项目中,当前构建之前所有构建的失败率;
(5)gaussian_threat,指通过为一个项目的失败构建进行高斯分布建模,实现对当前构建失败风险的衡量;
(6)committer_recent,指在一个项目中,当前构建的提交者在该项目内所提交的前K次构建的失败率,K为大1的任意整数;
(7)git_branch,指在一个项目中,当前构建所在的项目分支
(8)days_last_failed,指在一个项目的相同分支中,当前构建自其上一次失败构建所持续的天数;
(9)days_last,指在一个项目的相同分支中,当前构建自其上一次构建所持续的天数;
(10)last_gh_src_churn,指在一个项目中,当前构建的前一次构建改变的生产代码的行数;
提供获取所述特征集合的方法,即利用持续集成及部署工具中记录的构建日志和代码仓库中记录的代码提交日志获取对应数据;
对度量所获数据进行清洗和标准化得到预处理后数据集,其中,清洗指删除构建日志中构建结果为跳过和取消的构建记录,标准化指使每个特征的平均值变为0,标准差变为1。
优选地,所述步骤300中利用所述预处理后数据训练若干采样器和分类器的组合,构建出模型池的具体方法包括:
保持所述预处理后数据中每条记录的时间先后顺序,按照确定训练集和测试集的分配比例将数据集分为训练集和测试集,其中,测试集的第一条记录在时间上均发生在训练集中最后一条记录之后;
构建一个包含M个采样器的备选采样器池,和包含N个分类器的备选分类器池,M和N为任意正整数;
对所述训练集,分别采用备选采样器池中不同的采样器进行采样,生成M份采样后的训练集;
分别使用不同的采样后训练集,逐个训练采用备选分类器池中的分类器;
训练完成后,将得到包含M·N个预测模型的模型池,即每种采样器和分类器的组合将训练出一个不同的预测模型。
利用所述测试集,逐个评估所述模型池中的预测模型,对每一个模型的评估将得到一个混淆矩阵,将所有模型的混淆矩阵组成混淆矩阵数组。
优选地,所述步骤400中输入自定义的构建频率阈值Fmax,输入所述混淆矩阵数组Ac,输入所述模型池中模型构成的预测模型数组Am,利用优化算法选择出效率最优模型;
在所述步骤500中,利用效率最优模型预测持续集成及部署结果,若结果为通过则不执行持续集成及部署脚本,若结果为失败则执行持续集成及部署脚本。
优选地,在所述步骤400中利用优化算法选择出效率最优模型的具体方法包括:
剔除不满足构建频率阈值Fmax的模型,具体的,利用混淆矩阵数组计算出每个预测模型的查全率Rm=tp/(tp+fn),和每个预测模型的构建频率Fm=(tp+fp)/(tn+tp+fn+fp),判断查全率Rm和构建频率Fm是否满足Rm<Fmax或者Fm>Fmax,若是,则将该模型从数组Am和数组Ac中删除;数组Ac中某一项的真阳性为tp、真阴性为tn、假阳性为fp和假阴性为fn,i为模型混淆矩阵的数组Ac的第一指针;
对满足构建频率阈值Fmax的模型按效率进行排序,具体的,以相同的指针i遍历数组Am和数组Ac,第二指针j=i+1;分别计算模型i和模型j的查全率和构建频率,得到查全率Rmi,Rmj和频率Fmi,Fmj;比较模型i和模型j的效率,根据公式ΔR=Rmj-Rmi-(Fmj-Fmi)(1-Rmi),其中,数组Ac中第i项的真阳性为tpi、真阴性为tni、假阳性为fpi和假阴性为fni;数组Ac中第j项的真阳性为tpj、真阴性为tnj、假阳性为fpj和假阴性为fnj;若ΔR大于0则模型j效率更高,若ΔR小于0则模型i效率更高,若ΔR等于0,则两个模型效率相等;利用排序算法将模型池中的模型按模型效率进行排序。
本发明的有益效果在于:
1、克服了用于持续集成及部署的资源无法达到持续有效地目的问题。
2、为解决无效集成及部署,可以通过预测模型来减少结果可能为“通过”的集成及部署,从而降低构建频率,达到节省成本、提高效率的目的。
3、本方法可通过根据效率最优模型的混淆矩阵,查看该模型在历史数据上的性能表现,即为未来可预期的性能。
4、本方法适用于根据持续集成及部署的历史记录预测下一次持续集成及部署的结果,该方法可以由持续集成及部署装置执行,该装置可以由软件和/或硬件来实现,并可以集成在各种通用计算机设备中,适用范围广。
附图说明
图1是本发明实施例中的一种持续集成及部署结果的优化预测方法的流程图;
图2是本发明实施例中的一种“SQL”格式的构建日志示意图;
图3是本发明实施例中的一种“CSV”格式的代码提交日志示意图;
图4本发明实施例中的一种“CSV”格式的预处理后数据示意图;
图5是本发明实施例中的一种优化选择算法的流程图。
具体实施方式
下面结合具体实施方式和说明书附图,对本发明作进一步详细的描述,但本发明的实施方式不限于此。
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作(或步骤)描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
本文使用的术语“持续集成及部署”是在专用服务器上自动编译、构建、测试和部署源代码的软件开发实践,该实践通常由持续集成及部署工具支持实现。因为构建是持续集成及部署中的关键活动,所以在产业界和学术界,都使用“构建”泛指持续集成及部署,本文亦不作明确区分。
本文使用的术语“持续集成及部署的结果”是指由代码提交或合入等活动触发的一次集成及部署的脚本执行结果。具体的,在被触发后,持续集成及部署工具,将根据源代码及服务器上的配置文件,执行持续集成及部署脚本,脚本执行结果包含两种:“通过”,指运行成功,所有步骤的退出码为0;“失败”,指脚本返回一个非0的退出码。
本文使用的术语“构建记录”是指由持续集成及部署工具记录的构建日志中的一次构建的记录。一次持续集成及部署的结果亦被记录在构建记录中。
本文使用的术语“持续集成及部署频率”,又称为“构建频率”,是在相同的时间区间内,执行持续集成及部署脚本总次数除以代码提交的次数的比值。
本文使用的术语“特征集合”是用于训练机器学习模型的输入特征的集合,在本文中专指用于训练持续集成及部署的结果的预测模型的特征集合。
本文使用的术语“备选采样器池”是指包含若干个采样器的集合,每一个采样器都可以独立的完成对数据的采样,以使得样本集中通过和失败的样本数相等。
本文使用的术语“备选分类器池”是指包含若干个分类器的集合,每一个分类器都可以独立的根据输入的样本集进行训练,然后对待分类样本进行分类,例如,在本例中可以分类为“通过”或“失败”。
本文使用的术语“效率”是指对“失败”类的查全率和采用模型后的构建频率的比值。
本文使用的术语“效率最优模型”是指由本发明所提供的优化选择算法从模型池中选择出的效率表现最好的模型。
为了便于理解,将本发明实施例的主要发明构思进行简述。
通过采集一个软件项目的持续集成及部署的历史信息,即构建日志和代码提交日志,根据特征集合,生成相应数据集;对数据集进行预处理后,利用备选采样器池中的采样器,分别生成多种的采样数据;将采样数据输入备选分类器池中的分类器,分别训练出不同的预测模型;对所有预测模型进行评估生成混淆矩阵数组;将混淆矩阵数组输入一种优化选择算法,输出效率最优模型;利用效率最优模型预测新的代码提交所触发的持续集成及部署的结果,结果为“通过”则不执行脚本,为“失败”则执行脚本。
实施例
请参阅图1所示,本实施例的技术方案适用于根据持续集成及部署的历史记录预测下一次持续集成及部署的结果,该方法可以由持续集成及部署装置执行,该装置可以由软件和/或硬件来实现,并可以集成在各种通用计算机设备中,具体包括如下步骤:
步骤100、提供一个专门用于预测持续集成及部署结果的特征集合,基于所述特征集合,确定收集项目的构建日志和代码提交日志。
其中,特征集合由若干与持续集成及部署结果相关的特征组成。
本可选的实施例中,提供了一个包含10个特征的特征集合,如表1所示。
表1
Figure BDA0002395389600000081
Figure BDA0002395389600000091
Figure BDA0002395389600000101
在确定特征集合后,分别从持续集成及部署工具导出构建日志,从代码仓库导出代码提交日志。在本可选的实施例中,持续集成及部署工具为Travis-CI,代码仓库为Git,均为第三方开源软件,导出的“SQL”格式的构建日志如图2所示,导出的“CSV”格式的代码提交日志如图3所示。
步骤200、提供利用构建日志和代码提交日志度量集合中的特征的方法,对度量所获数据进行清洗和标准化得到预处理后数据集。
本实施例中,提供一种度量所述特征集合中每一个特征的方式。具体包括:
步骤201、度量特征project_recent。该特征是指一个项目中本次持续集成及部署之前五次构建的失败率。其度量基于一个项目中的构建日志中的历史记录,获取一次构建具体包括:
为项目建立一个列表用来存储每一次构建的构建结果。构建结果可以表示为1和0。1表示本次构建的结果是成功的,0表示本次构建的结果是失败的。建立的列表具体如下所示:
listbuild_result=[r1,r2,……rn-1]
列表中的rn-1表示本次构建之前所有构建的结果。根据此列表,该特征值的计算公式如下:
Figure BDA0002395389600000102
其中
Figure BDA0002395389600000103
表示本次构建前五次构建成功结果的数量之和,
Figure BDA0002395389600000104
表示前五次构建结果的成功率,
Figure BDA0002395389600000105
表示前五次构建结果的失败率。
步骤202、度量特征last_build_result_branch。该特征是指在一个项目的同一条分支下,本次构建的上一条构建结果。其度量基于一个项目中的构建日志中的历史记录,获取一次构建具体包括:
为项目维护一个数据字典用于记录分支以及该分支下的构建记录的结果。
字典结构如下所示:
dictbranch_result={<id>:<[r1,r2,……rn-1]>}
其中该字典的键为该条分支的编号,值为该条分支下所有构建的结果列表。rn-1表示每一个构建的结果,用0(构建失败)和1(构建成功)来表示。每遍历一个新的构建,先得到该构建所属的项目分支编号,再在字典中通过比对找到该分支下所有构建的列表,取出最后一次构建的结果返回即可。
步骤203、度量特征committer_history。该特征是指当前构建的提交者在该项目内所提交的所有构建的失败率。其度量基于一个项目中的构建日志和提交日志中的历史记录,获取一次构建具体包括:
为项目维护一个字典用于记录提交者和由该提交者提交的所有构建的结果列表,该字典结构如下所示:
dictcommitter_result={<committer>:<[r1,r2,……rn-1]>}
字典中的键为提交者的姓名,值为该由该提交者提交的所有构建的结果列表,其中rn-1表示提交的构建结果,用0(构建失败)和1(构建成功)表示。由于提交者姓名等信息是存储在项目的提交日志中的,所以需要把项目构建日志中的提交编号与项目提交日志的提交记录相比对。从项目提交日志中取出提交者姓名,再将其放入字典中检查,找到对应的提交者条目,计算失败率的公式如下所示:
Figure BDA0002395389600000121
其中
Figure BDA0002395389600000122
表示该提交者之前所有成功构建的数量和,
Figure BDA0002395389600000123
表示该提交者之前所有构建的成功率,
Figure BDA0002395389600000124
表示该提交者之前所有构建的失败率。
步骤204、度量特征project_history。该特征是指本项目中本次构建之前所有构建的失败率。其度量基于一个项目的构建日志中的历史记录,获取一次构建具体包括:
为项目维护一个列表用于记录项目中所有构建的构建结果。列表结构如下所示:
listbuild_result=[r1,r2,……rn-1]
列表中的项rn-1表示每次构建的构建结果,用0(构建失败)和1(构建成功)表示。根据此列表,该特征值的计算公式如下:
Figure BDA0002395389600000125
其中
Figure BDA0002395389600000126
表示之前所有成功构建的数量和,
Figure BDA0002395389600000127
表示之前所有构建的成功率,
Figure BDA0002395389600000128
表示项目中之前所有构建的失败率。
步骤205、度量特征gaussian_threat。该特征是指通过为项目的失败构建进行高斯分布建模,实现对本次构建失败风险的衡量。其度量基于一个项目的构建日志中的历史记录,获取一次构建具体包括:
为项目维护一个列表用于记录项目中所有构建的构建结果。列表结构如下所示:
listbuild_result=[r1,r2,……rn-1]
其中rn-1表示每次构建的构建结果,用0(构建失败)和1(构建成功)表示。然后根据构建历史列表进行高斯分布建模,根据风险衡量公式得出对本次构建的风险评估,评估风险的公式如下所示:
Figure BDA0002395389600000131
其中F是失败构建所组成的集合,ft表示在f失败后到现在为止的构建次数,σf表示一次失败构建f所能够影响的构建范围,本项目中将其设置为统一值。
步骤206、度量特征committer_recent。该特征是指当前构建的提交者在该项目内所提交的前五次构建的失败率。其度量基于一个项目的构建日志和提交日志中的历史记录,获取一次构建具体包括:
为项目维护一个字典用于记录提交者和由该提交者提交的所有构建的结果列表,该字典结构如下所示:
dictcommitter_result={<committer>:<r1,r2,……rn-1]>}
字典中的键为提交者的姓名,值为该由该提交者提交的所有构建的结果列表,其中rn-1表示提交的构建结果,用0(构建失败)和1(构建成功)表示。由于提交者姓名等信息是存储在项目的提交日志中的,所以需要把项目构建日志中的提交编号与项目提交日志的提交记录相比对。从项目提交日志中取出提交者姓名,再将其放入字典中检查,找到对应的提交者条目,计算失败率的公式如下所示:
Figure BDA0002395389600000132
其中
Figure BDA0002395389600000133
表示该提交者之前五次成功构建的数量和,
Figure BDA0002395389600000134
表示该提交者之前五次构建的成功率,
Figure BDA0002395389600000135
则表示该特征值,即该提交者之前五次构建的失败率。
步骤207、度量特征git_branch。该特征是指该构建所在的项目分支。其度量基于一个项目的构建日志中的历史记录,获取一次构建具体包括:
为项目维护一个字典用于记录分支的名称与编号。该字典的结构如下所示:
dictbranch_id={<branch_name>:<id>}
字典中的键为分支的名称,值为分支分配的编号,用阿拉伯数字(1,2,3,……往后排列)表示。而该特征值即取分支的编号作为值。
步骤208、度量特征days_last_failed,该特征是指在项目同一分支下本次构建距离上一次失败构建间隔的天数。其度量基于一个项目的构建日志中的历史记录,获取一次构建具体包括:
为项目维护一个字典用于记录每个分支上一次失败构建的时间,该字典结构如下所示:
dictbranch_failtime={<branch_id>:<last_fail_time>}
字典的键为该构建所属分支的分支编号,值为该构建下上一次失败构建的开始时间。每次遍历一个构建,检查该构建所属的分支,将该分支与字典中的分支编号进行比对,找到对应分支,取出上一次失败构建的时间,与本次构建时间取差值,得到该特征值的结果。
步骤209、度量特征days_last。该特征是指在项目同一分支下本次构建距离上一次构建间隔的天数。其度量基于一个项目的构建日志中的历史记录,获取一次构建具体包括:
为项目维护一个字典用于记录每个分支上一次构建的时间,该字典结构如下所示:
dictbranch_lasttime={<branch_id>:<last_time>}
字典的键为该构建所属分支的分支编号,值为该构建下上一次构建的开始时间。每次遍历一个构建,检查该构建所属的分支,将该分支与字典中的分支编号进行比对,找到对应分支,取出上一次失构建的时间,与本次构建时间取差值,得到该特征值的结果。
步骤210、度量特征last_gh_src_churn。该特征是指项目中本次构建的前一次构建改变的生产代码的行数。其度量基于一个项目的构建日志中的历史记录,获取一次构建具体包括:
从该项目的构建日志的历史记录中取出git_diff_src_churn数据项,以此作为该特征值的取值。
步骤211、清洗数据。在本实施例中,删除构建日志中构建结果为跳过和取消的构建记录,这是因为跳过和取消意味着持续集成及部署脚本未被执行,实际执行后会通过还是失败是未知的,不删除将成为影响训练预测模型的噪声数据。
步骤212、标准化数据。可选的,将所有特征进行标准化,使每个特征的平均值变为0,标准差变为1。
上述步骤201—212为步骤200的具体阐述。
最终形成的预处理后的数据,如图4所示,可选的,数据在实施例中为“CSV”格式,亦可以其他格式存储。数据包含一个项目的所有历史的结果为“通过”和“失败”的构建的特征信息,每条数据,即每个样本,包含一次构建的对于特征集合中10个特征的对应数据,以及构建结果。数据集中的记录,自上而下,按构建发生的时间从先到后排列。
步骤300、将所述预处理后数据拆分为训练集和测试集,利用备选采样器池中的采样器和备选分类器池中的分类器,两两组合,分别输入相同的训练集训练出多个模型形成模型池,利用相同的测试集评估模型池中的模型,输出混淆矩阵数组。具体步骤如下:
步骤301、保持数据集中每条记录的时间先后顺序,按照确定训练集和测试集的分配比例将数据集分为训练集和测试集,其中,测试集的第一条记录在时间上均发生在训练集中最后一条记录之后。
在可选的本实施例中,训练集和测试集按样本比例按5比1分配。
步骤302、确定采样器池。
表2
Figure BDA0002395389600000161
在可选的本实施例中,采样器池共包含4种策略的7种采样器,如表2所示,2种过采样策略采样器,2种欠采样策略采样器、及2种组合采样策略采样器,1种和不采用任何采样算法的全采样。其中,全采用是指直接使用完整的数据集。
所述采样器的实现基于第三方开源软件Imbalanced-learn,不在本专利保护范围内,其使用亦不作详细说明,详见其官方文档如下:
Imbalanced-learn:https://imbalanced-learn.org/。
步骤303、确定分类器池。
表3
Figure BDA0002395389600000171
在可选的本实施例中,分类器池共包含基于4种不同策略的11种分类器,如表3所示,其中,代价敏感策略的4种分类器由第三方开源软件Costcla实现,1种单类学习分类器和4种平衡分类器由第三方开源软件Scikit-Learn实现,2种集成学习分类器由第三方开源软件Imbalanced-learn实现。
所述分类器的实现均基于第三方开源软件,不在本专利保护范围内,其使用亦不作详细说明,详见其官方文档如下:
Costcla:https://github.com/albahnsen/CostSensitiveClassification
Scikit-Learn:https://scikit-learn.org/
Imbalanced-learn:https://imbalanced-learn.org/
步骤304、对训练集分别采用采样器池中的采样器生成不同的采样后训练集。
在本实施例中,对步骤301生成的所述训练集,分别采用步骤302所述7种不同的采样器进行采样,生成7份采样后的训练集,每份采样后训练集均为采用一种采样器所得结果。
步骤305、分别使用不同的采样后训练集,逐个训练采用分类器池中的分类器。
在本实施例中,分别使用步骤304生成的所述7份采样后的训练集,逐个训练步骤303中所述采用分类器池中的11种分类器。
训练完成后,将得到共77个预测模型,即每种采样器和分类器的组合将训练出一个不同的预测模型。
步骤306、使用测试集评估所有的预测模型。
在本实施例中,使用步骤301生成的所述测试集,逐个评估步骤305训练的所述77个预测模型。以评估1个预测模型为例,将测试集中的数据逐条输入到被评估预测模型中,每次输入一个样本的10个特征数据,预测模型将输出预测结果;比较模型对每个样本的预测结果和样本的实际结果,将得到一个混淆矩阵,如表4所示,真阳性(tp)表示模型预测为“失败”且实际为“失败”的样本数;假阴性(fn)表示模型预测为“通过”但实际为“失败”的样本数;真阴性(tn)表示预测为“通过”且实际为“通过”的样本数;假阳性(fp)表示预测为“失败”但实际为“通过”的样本数。
上述步骤301—306为步骤300的具体阐述。
将所有模型的混合矩阵组成混淆矩阵数组。
表4
Figure BDA0002395389600000191
步骤400、输入自定义的构建频率阈值,输入所述混淆矩阵数组,输入所述模型池中模型构成的预测模型数组,利用优化算法选择出效率最优模型。
具体如图5所示,包括如下步骤:
步骤401、将预测模型数组Am=[m1,m2,...,mn]、混淆矩阵数组Ac=[c1,c2,...,cn]和构建频率阈值Fmax输入优化选择算法。
其中,mi表示第i个模型;ci表示第i个模型的混淆矩阵。混淆矩阵包含真阳性tp、真阴性tn、假阳性fp和假阴性fn;这两个数组遵循相同的抽样算法与学习算法的组合顺序;阈值Fmax是用户根据需求或资源限制设置的最大构建频率阈值,取值范围为大于0小于1。
步骤402、反向遍历包含每个预测模型混淆矩阵的数组Ac,指针为i,提取数组Ac中第i项的真阳性tp、真阴性tn、假阳性fp和假阴性fn,计算该项的查全率Rm和构建频率Fm,其中Rm和Fm的计算公式如下所示:
Figure BDA0002395389600000192
Figure BDA0002395389600000201
步骤403、判断查全率Rm和构建频率Fm是否满足Rm<Fmax或者Fm>Fmax,若是,则分别删除数组Am和数组Ac中的第i项,进入步骤404;若否,则直接执行步骤404;
步骤404、判断指针i是否满足i>-1,若是,则返回执行步骤402;若否,则进入步骤405。最终将循环结束时的预测模型数组Am和包含每个预测模型混淆矩阵的数组Ac作为待排序的模型数组。
步骤405、遍历混淆矩阵数组Ac,数组长度为n,指针为k。
步骤406、对于每一个k,遍历混淆矩阵数组Ac的前n-k项,指针为i。
步骤407、初始化j=i+1,提取数组Ac中第i项和第j项的真阳性tp、真阴性tn、假阳性fp和假阴性fn,计算查全率Rmi,Rmj和频率Fmi,Fmj,其中,
Figure BDA0002395389600000202
Figure BDA0002395389600000203
Figure BDA0002395389600000204
Figure BDA0002395389600000205
判断频率Fmi和Fmj是否满足Fmi>Fmj,若是,则执行步骤408;若否,则执行步骤409。
步骤408、判断查全率Rmi,Rmj和频率Fmi,Fmj是否满足以下不等式:
(Fmi-Fmj)·(1-Rmj)<(Rmi-Rmj)
若是,则分别交换数组Am和Ac中的第i项与第j项,然后执行步骤410,若否,则返回执行步骤406。
步骤409、判断查全率Rmi,Rmj和频率Fmi,Fmj是否满足以下不等式:
(Fmj-Fmi)·(1-Rmi)<(Rmj-Rmi)
若是,则分别交换数组Am和Ac中的第i项与第j项,然后执行步骤410;若否,则返回执行步骤406。
步骤410、判断指针i是否满足i<n-k-1,若是,则返回执行步骤406;若否,则继续执行步骤411。
步骤411、判断指针k是否满足k<n,若是,则返回执行步骤405,若否,则返回已排序的预测模型数组Am和包含每个预测模型混淆矩阵的数组Ac
步骤412、根据已排序的预测模型数组Am,得到满足构建频率阈值Fmax,查全率最高的模型,即效率最优模型。根据效率最优模型的混淆矩阵,可以查看该模型在历史数据上的性能表现,即为未来可预期的性能。
上述步骤401—412为步骤400的具体阐述。
步骤500、使用步骤400中确定的效率最优模型,可以预测当前待触发的持续集成及部署结果,若结果为“通过”,则不执行持续集成及部署脚本;若结果为“失败”,则执行持续集成及部署脚本,进一步确认结果并定位缺陷。
在构建频率阈值分别设置为0.25,0.50和0.75的三种场景中,在A,B,C三个开源项目上,使用本发明后,一个软件开发迭代周期内的平均效果如表5所示,其中,不采用本发明的持续集成及部署的效率Em为1,结果显示,仅有1例(C项目设置Fmax=0.25时)的实际构建频率超出了阈值,即Fm>Fmax,在所有案例中,效率均有所提升,提升比例为18%至148%。
表5
Figure BDA0002395389600000221
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

Claims (5)

1.一种持续集成及部署结果的优化预测方法,其特征在于,包括以下步骤;
步骤100:提供一个专门用于预测持续集成及部署结果的特征集合,基于所述特征集合,确定收集项目的构建日志和代码提交日志;
步骤200:提供利用构建日志和代码提交日志度量集合中的特征的方法,对度量所获数据进行清洗和标准化得到预处理后数据集;
步骤300:将所述预处理后数据集拆分为训练集和测试集,利用备选采样器池中的采样器和备选分类器池中的分类器,两两组合,分别输入相同的训练集,训练出多个模型,形成模型池,利用相同的测试集评估模型池中的模型,输出混淆矩阵数组;
步骤400:输入自定义的构建频率阈值,输入所述混淆矩阵数组,输入所述模型池中模型构成的预测模型数组,利用优化算法选择出效率最优模型;
步骤500:利用步骤400中的效率最优模型预测结果,若所述最优模型预测结果为通过则不执行脚本,若所述最优模型预测结果为失败则执行脚本。
2.根据权利要求1所述的持续集成及部署结果的优化预测方法,其特征在于,在所述步骤300中利用所述预处理后数据训练若干采样器和分类器的组合,构建出模型池前,提供专门用于预测持续集成及部署结果的特征集合,所述特征集合包括但不限于以下10个特征:
(1)project_recent,指在一个项目中,当前构建之前K次构建的失败率,K为大1的任意整数;
(2)last_build_result_branch,指在一个项目中,同一条分支下,当前构建的上一条构建结果;
(3)committer_history,指在一个项目中,当前构建的提交者在该项目内所提交的所有构建的失败率;
(4)project_history,指在一个项目中,当前构建之前所有构建的失败率;
(5)gaussian_threat,指通过为一个项目的失败构建进行高斯分布建模,实现对当前构建失败风险的衡量;
(6)committer_recent,指在一个项目中,当前构建的提交者在该项目内所提交的前K次构建的失败率,K为大1的任意整数;
(7)git_branch,指在一个项目中,当前构建所在的项目分支;
(8)days_last_failed,指在一个项目的相同分支中,当前构建自其上一次失败构建所持续的天数;
(9)days_last,指在一个项目的相同分支中,当前构建自其上一次构建所持续的天数;
(10)last_gh_src_churn,指在一个项目中,当前构建的前一次构建改变的生产代码的行数;
提供获取所述特征集合的方法,即利用持续集成及部署工具中记录的构建日志和代码仓库中记录的代码提交日志获取对应数据;
对度量所获数据进行清洗和标准化得到预处理后数据集,其中,清洗指删除构建日志中构建结果为跳过和取消的构建记录,标准化指使每个特征的平均值变为0,标准差变为1。
3.根据权利要求1所述的持续集成及部署结果的优化预测方法,其特征在于,所述步骤300中利用所述预处理后数据训练若干采样器和分类器的组合,构建出模型池的具体方法包括:
保持所述预处理后数据中每条记录的时间先后顺序,按照确定训练集和测试集的分配比例将数据集分为训练集和测试集,其中,测试集的第一条记录在时间上均发生在训练集中最后一条记录之后;
构建一个包含M个采样器的备选采样器池,和包含N个分类器的备选分类器池,M和N为任意正整数;
对所述训练集,分别采用备选采样器池中不同的采样器进行采样,生成M份采样后的训练集;
分别使用不同的采样后训练集,逐个训练采用备选分类器池中的分类器;
训练完成后,将得到包含M·N个预测模型的模型池,即每种采样器和分类器的组合将训练出一个不同的预测模型;
利用所述测试集,逐个评估所述模型池中的预测模型,对每一个模型的评估将得到一个混淆矩阵,将所有模型的混淆矩阵组成混淆矩阵数组。
4.根据权利要求1所述的持续集成及部署结果的优化预测方法,其特征在于,所述步骤400中输入自定义的构建频率阈值为Fmax,输入所述混淆矩阵数组为Ac,输入所述模型池中模型构成的预测模型数组为Am,利用优化算法选择出效率最优模型;
在所述步骤500中,利用效率最优模型预测持续集成及部署结果,若结果为通过则不执行持续集成及部署脚本,若结果为失败则执行持续集成及部署脚本。
5.根据权利要求4所述的持续集成及部署结果的优化预测方法,其特征在于,在所述步骤400中利用优化算法选择出效率最优模型的具体方法包括:
剔除不满足构建频率阈值Fmax的模型,具体的,利用混淆矩阵数组计算出每个预测模型的查全率Rm=tp/(tp+fn),和每个预测模型的构建频率Fm=(tp+fp)/(tn+tp+fn+fp),判断查全率Rm和构建频率Fm是否满足Rm<Fmax或者Fm>Fmax,若是,则将该模型从数组Am和数组Ac中删除,数组Ac中某一项的真阳性为tp、真阴性为tn、假阳性fp和假阴性fn,i为模型混淆矩阵的数组Ac的第一指针;
对满足构建频率阈值Fmax的模型按效率进行排序,具体的,以相同的第一指针i遍历数组Am和数组Ac,第二指针为j=i+1;分别计算模型i和模型j的查全率和构建频率,分别得到查全率Rmi,Rmj和频率Fmi,Fmj;比较模型i和模型j的效率,根据公式
ΔR=Rmj-Rmi-(Fmj-Fmi)(1-Rmi),
Figure FDA0002395389590000041
Figure FDA0002395389590000051
Figure FDA0002395389590000052
Figure FDA0002395389590000053
其中,数组Ac中第i项的真阳性为tpi、真阴性为tni、假阳性为fpi和假阴性为fni;数组Ac中第j项的真阳性为tpj、真阴性为tnj、假阳性为fpj和假阴性为fnj
若ΔR大于0则模型j效率更高,若ΔR小于0则模型i效率更高,若ΔR等于0,则两个模型效率相等;利用排序算法将模型池中的模型按模型效率进行排序。
CN202010129434.7A 2020-02-28 2020-02-28 一种持续集成及部署结果的优化预测方法 Active CN111367798B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010129434.7A CN111367798B (zh) 2020-02-28 2020-02-28 一种持续集成及部署结果的优化预测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010129434.7A CN111367798B (zh) 2020-02-28 2020-02-28 一种持续集成及部署结果的优化预测方法

Publications (2)

Publication Number Publication Date
CN111367798A true CN111367798A (zh) 2020-07-03
CN111367798B CN111367798B (zh) 2021-05-28

Family

ID=71210292

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010129434.7A Active CN111367798B (zh) 2020-02-28 2020-02-28 一种持续集成及部署结果的优化预测方法

Country Status (1)

Country Link
CN (1) CN111367798B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112732565A (zh) * 2020-12-31 2021-04-30 星环信息科技(上海)股份有限公司 一种软件持续集成的评估方法、计算机设备及介质
CN113378907A (zh) * 2021-06-04 2021-09-10 南京大学 增强数据预处理过程的自动化软件可追踪性恢复方法

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106371427A (zh) * 2016-10-28 2017-02-01 浙江大学 基于层次分析法和模糊融合的工业过程故障分类方法
US20180096439A1 (en) * 2016-08-31 2018-04-05 Green Running Limited Utility consumption signal processing system and a method of processing a utility consumption signal
CN108540330A (zh) * 2018-04-24 2018-09-14 南京邮电大学 一种异构网络环境下的基于深度学习的网络故障诊断方法
JP2018173969A (ja) * 2015-03-03 2018-11-08 ナントミクス,エルエルシー アンサンブルに基づいたリサーチ・レコメンデーションシステムおよび方法
CN109416719A (zh) * 2016-04-22 2019-03-01 谭琳 用于确定软件代码中的缺陷和漏洞的方法
CN109934341A (zh) * 2017-11-13 2019-06-25 埃森哲环球解决方案有限公司 训练、验证以及监测人工智能和机器学习的模型
CN110070116A (zh) * 2019-04-08 2019-07-30 云南大学 基于深度树状训练策略的分段式选择集成图像分类方法
CN110245088A (zh) * 2019-06-21 2019-09-17 四川长虹电器股份有限公司 一种基于Jenkins的缺陷自动验证系统及验证方法

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2018173969A (ja) * 2015-03-03 2018-11-08 ナントミクス,エルエルシー アンサンブルに基づいたリサーチ・レコメンデーションシステムおよび方法
CN109416719A (zh) * 2016-04-22 2019-03-01 谭琳 用于确定软件代码中的缺陷和漏洞的方法
US20180096439A1 (en) * 2016-08-31 2018-04-05 Green Running Limited Utility consumption signal processing system and a method of processing a utility consumption signal
CN106371427A (zh) * 2016-10-28 2017-02-01 浙江大学 基于层次分析法和模糊融合的工业过程故障分类方法
CN109934341A (zh) * 2017-11-13 2019-06-25 埃森哲环球解决方案有限公司 训练、验证以及监测人工智能和机器学习的模型
CN108540330A (zh) * 2018-04-24 2018-09-14 南京邮电大学 一种异构网络环境下的基于深度学习的网络故障诊断方法
CN110070116A (zh) * 2019-04-08 2019-07-30 云南大学 基于深度树状训练策略的分段式选择集成图像分类方法
CN110245088A (zh) * 2019-06-21 2019-09-17 四川长虹电器股份有限公司 一种基于Jenkins的缺陷自动验证系统及验证方法

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
BOHAN LIU: "An Incremental V-Model Process for", 《IEEE 2016 23RD ASIA-PACIFIC SOFTWARE ENGINEERING CONFERENCE》 *
荣国平 等: "软件过程与管理方法综述", 《软件学报》 *
郭雪: "基于神经网络的过程自调节持续集成工具设计与实现", 《CNKI优秀硕士学位论文全文库》 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112732565A (zh) * 2020-12-31 2021-04-30 星环信息科技(上海)股份有限公司 一种软件持续集成的评估方法、计算机设备及介质
CN112732565B (zh) * 2020-12-31 2023-07-18 星环信息科技(上海)股份有限公司 一种软件持续集成的评估方法、计算机设备及介质
CN113378907A (zh) * 2021-06-04 2021-09-10 南京大学 增强数据预处理过程的自动化软件可追踪性恢复方法
CN113378907B (zh) * 2021-06-04 2024-01-09 南京大学 增强数据预处理过程的自动化软件可追踪性恢复方法

Also Published As

Publication number Publication date
CN111367798B (zh) 2021-05-28

Similar Documents

Publication Publication Date Title
US5500941A (en) Optimum functional test method to determine the quality of a software system embedded in a large electronic system
US6269479B1 (en) Method and computer program product for evaluating the performance of an object-oriented application program
CN111427802B (zh) 利用集成学习进行测试用例优先级排序的测试方法和系统
US20090327208A1 (en) Discovering transformations applied to a source table to generate a target table
CN111367798B (zh) 一种持续集成及部署结果的优化预测方法
CN114579380A (zh) 一种计算机系统故障的人工智能检测系统及方法
Yang et al. Vuldigger: A just-in-time and cost-aware tool for digging vulnerability-contributing changes
CN114490404A (zh) 一种测试用例确定方法、装置、电子设备及存储介质
CN115328784A (zh) 一种面向敏捷接口的自动化测试方法及系统
Kim et al. A diagnostic framework for imbalanced classification in business process predictive monitoring
CN113672506A (zh) 基于机器学习的动态比例测试用例排序选择方法及系统
CN116909910A (zh) 一种基于机器学习的研发效能度量方法和系统
JP7190246B2 (ja) ソフトウェア不具合予測装置
CN114741284B (zh) 任务可靠性评估方法、装置、计算机设备和存储介质
Savchuk et al. Improved method of searching the associative rules while developing the software
CN113127342B (zh) 基于电网信息系统特征选择的缺陷预测方法及装置
Restat et al. Towards a Holistic Data Preparation Tool.
CN114511039A (zh) 一种软件开发行为监控系统
CN114860542A (zh) 趋势预测模型的优化方法、优化装置、电子设备和介质
Klindee et al. Test cases prioritization for software regression testing using analytic hierarchy process
Ouyang et al. Explainable ai enabled inspection of business process prediction models
CN111160715A (zh) 基于bp神经网络新旧动能转换绩效评价方法和装置
US20230359449A1 (en) Learning-augmented application deployment pipeline
Siddique et al. Hybrid Framework To Exclude Similar and Faulty Test Cases In Regression Testing
CN111240652A (zh) 数据处理方法及装置、计算机存储介质、电子设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
CB03 Change of inventor or designer information
CB03 Change of inventor or designer information

Inventor after: Zhang He

Inventor after: Liu Bohan

Inventor after: Rong Guoping

Inventor after: Yang Lanxin

Inventor before: Zhang He

Inventor before: Rong Guoping

Inventor before: Liu Bohan

Inventor before: Yang Lanxin

GR01 Patent grant
GR01 Patent grant