CN106528428B - 一种软件易变性预测模型的构建方法 - Google Patents
一种软件易变性预测模型的构建方法 Download PDFInfo
- Publication number
- CN106528428B CN106528428B CN201611045460.1A CN201611045460A CN106528428B CN 106528428 B CN106528428 B CN 106528428B CN 201611045460 A CN201611045460 A CN 201611045460A CN 106528428 B CN106528428 B CN 106528428B
- Authority
- CN
- China
- Prior art keywords
- software
- class
- mutability
- prediction model
- measurement
- 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.)
- Expired - Fee Related
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
- G06F11/3608—Software analysis for verifying properties of programs using formal methods, e.g. model checking, abstract interpretation
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
本发明提供一种软件易变性预测模型的构建方法,该方法使用相似度来定义软件易变性,符合软件外部属性,如需求、功能变化时,体现在源代码上的变化,使用了目前所能定义的大部分度量,得到的度量信息更为全面,并对这些原始度量使用特征提取与选择的技术,提高了模型的计算性能,减少了因特征过多造成的信息冗余。即能够使用更多的度量信息,又能够避免过多的特征而影响模型性能。
Description
技术领域
本发明涉及软件度量领域,更具体地,涉及一种软件易变性预测模型的构建方法。
背景技术
软件易变性:在软件工程中,软件的一些外部质量特性,比如软件缺陷、软件可维护性等,在整个软件的生命周期中是十分重要的特性,有研究表明,一般情况下软件的维护成本占总成本的40-70%。软件易变性,也叫软件构件易变性,是指软件中的部件有较大的概率发生变化。对软件易变性的预测能够帮助我们重点关注软件的可能变化的区域,在很大程度上减少维护成本。
面向对象软件度量:度量,指的是将数值或符号赋给实体的属性的过程。进一步地,面向对象软件度量指的是对一个基于面向对象语言开发的软件系统,在面向对象特性上的度量。其中,比较有代表性的面向对象软件度量有C&K度量。Chidamber和Kemerer在1994年发表论文提出了一套面向对象度量,简称C&K度量,其中包括6个方面的度量指标,分别是:类加权方法个数(WMC)、继承树深度(DIT)、直接子类数(NOC)、类耦合程度(CBO)、类响应集合(RFC)、类内聚度缺乏度(LCOM)。除此之外,也有不少研究者在此基础上,提出新的一系列度量指标。目前这些度量指标大致可以划分为四类度量:规模类度量、耦合度度量、内聚度度量、继承类度量。
前馈多层感知算法:前馈多层感知器算法,又称前馈神经网络,是一种机器学习分类算法,能够解决线性不可分问题。一个神经网络由一个输入层、一个或多个隐藏层和一个输出层组成,其中各层中的节点是全连接的。训练一个神经网络用于分类,最重要的是确定神经网络的规模,以及使用合适的代价函数,通过训练数据学习神经网络中的各个突触的权重。
虽然面向对象软件度量本身是一种描述软件在某个方面上的特征,但是由于目前缺乏对所有度量的认知,直接使用若干种面向对象软件度量作为特征,可能会遗漏软件在某些方面的特性,但是如果把更多的度量加进特征集合内,却会因为某些特征的高度相关,导致信息冗余,反而影响预测模型的性能。
发明内容
本发明提供一种软件易变性预测模型的构建方法,该方法用于预测软件部件的变化,同时可得到软件系统的维护成本的评估意见。
为了达到上述技术效果,本发明的技术方案如下:
一种软件易变性预测模型的构建方法,包括以下步骤:
S1:以面向对象软件系统中的类为研究对象,提取软件源代码的结构信息;
S2:通过S1中提取到的源代码结构信息,计算面向对象软件度量,包括规模类度量、耦合度度量、内聚度度量、继承类度量;
S3:通过对比在软件演化中不同版本所对应的类的变化情况,通过类相似度来定义并解析出类的易变性信息,该易变性信息包括分类标签;
S4:对S2中计算得到的面向对象软件度量,对得到的度量进行分类,分别对各类度量做进一步的特征提取和选择,得到新的特征集合;
S5:使用S3中得到的分类标签与S4中得到的特征集合,生成软件易变性预测模型的训练集,使用前馈多层感知器算法训练出预测模型。
进一步地,所述的软件源代码的结构信息包括程序的抽象语法树、程序的符号表,以及类间方法属性调用关系。
进一步地,通过Eclipse JDT得到程序的抽象语法树,通过遍历抽象语法树得到符号表,进而得到相应类的方法属性间的调用关系。
进一步地,所述类的相似度是:相对于基线版本,在对比版本的对应的类中的字段、方法,以及继承关系等的相似情况;对于类中的字段,相似度考察的是该字段的类型,变量名是否相同;对于类中的方法,相似度考察的是该方法的方法名、参数类型、返回值类型,以及抛出异常类型是否相同。
进一步地,对S2中计算得到的面向对象软件度量进行特征提取和选择,分别分析规模类、内聚度、耦合度、继承类度量与软件易变性的相关性,选择相关度较高的度量组成度量集合,对该度量集合进行主成分分析进行数据降维,去除冗余信息,得到一组新的特征集合,以该组特征集合作为前馈多层感知器算法的输入即前馈神经网络的输入层,使用收集到的训练数据集,选择特定的参数,训练得到软件易变性预测模型。
与现有技术相比,本发明技术方案的有益效果是:
本发明方法使用相似度来定义软件易变性,符合软件外部属性,如需求、功能变化时,体现在源代码上的变化,使用了目前所能定义的大部分度量,得到的度量信息更为全面,并对这些原始度量使用特征提取与选择的技术,提高了模型的计算性能,减少了因特征过多造成的信息冗余。即能够使用更多的度量信息,又能够避免过多的特征而影响模型性能。
附图说明
图1为本发明流程图。
具体实施方式
附图仅用于示例性说明,不能理解为对本专利的限制;
为了更好说明本实施例,附图某些部件会有省略、放大或缩小,并不代表实际产品的尺寸;
对于本领域技术人员来说,附图中某些公知结构及其说明可能省略是可以理解的。
下面结合附图和实施例对本发明的技术方案做进一步的说明。
实施例1
本发明一种软件易变性预测模型的构建方法,包括以下步骤:
(1)提取面向对象软件源代码的结构信息
本方法提取软件源代码结构信息,为了支持一系列面向对象软件度量而设计。首先,使用Eclipse JDT得到Java程序的抽象语法树;然后通过遍历得到的抽象语法树节点,获得程序中的名字定义和名字引用,进而得到管理程序实体的符号表。进一步地,通过对符号表的访问,可以得到类的方法引用矩阵、方法属性引用矩阵等信息。
(2)计算面向对象软件度量
通过得到的符号表、方法引用矩阵和方法属性引用矩阵等软件结构信息,可以对目前提出的大部分度量值进行计算,其中大致可以分为以下四类度量:
1)规模类度量
规模类度量,指的是衡量对面向对象实体的在数量和规模上的大小。通常认为,规模越大,软件出现错误的可能性越大,维护的难度越大。其中比较有代表性的度量有:有效代码行数(ELOC)、类字段数(FLD)、类方法数(MTHD)、局部变量数(LOCV)等。
2)耦合度度量
耦合度度量用于衡量当前模块与其他模块的联系的紧密程度。通常认为耦合度较低的模块较易理解和维护。其中比较有代表性的度量有:耦合类个数(CBO)、类的响应集合(RFC)、类属性为类类型个数(DAC)、类中方法调用中,非该类实现方法的个数(MPC)等。
3)内聚度度量
内聚度度量主要关注类的方法之间,方法与属性之间的交互。主要有以下度量:类内聚缺乏度(LCOM)、方法对相似度之和与方法对数的比值(CC)、所有方法信息流之和(ICH)等。
4)继承类度量
继承类度量主要表示类的深度以及子类父类个数的度量。主要有:继承深度(DIT),也就是类到继承树的根节点的最长路径长度、类的子类个数(NOC)。类的祖先类个数(NOA)等。
(3)定义并收集软件易变性历史信息
本发明使用类的相似度(Similarity)的值定义软件易变性,具体地:
其中对于相似度的计算,具体地:
其中,NSST为classA在版本间相同超类的个数,NSF为相同字段数,NSM为相同方法数,NA为基线版本的属性个数,当classA在两个版本的类名相同时,Θ为1,否则为0。
假设当前软件有n(n>=5)个版本,根据当前软件的具体情况,一般地,随机抽样n/2个版本序号,按升序排列得到{Version_1,Version_2,……,Version_n/2}。接着,以步长为1依次选择基线版本和对比版本。
对于选定的基线版本Version_base和对比版本Version_contrast,分别构建相应版本的符号表NameTable_base和NameTable_contrase,通过对应版本的符号表的匹配操作,得到类的绑定关系,进一步计算类的相似度最后得到类的易变性信息。
(4)度量分类以及特征提取与选择
使用得到的四大类面向对象软件度量与软件易变性分别进行相关性分析,在每类度量集合中,依次选取与软件易变性最相关的前k个度量,组成新的度量集合M,|M|=4*k,接着对M中的度量使用主成分分析法(PCA)对特征集合进行降维,得到新的特征集合M’。
(5)软件易变性预测模型构建
使用Python语言、R语言等编程调用实现前馈多层感知器算法,或者使用Weka等机器学习工具包实现。根据(2)、(3)和(4)得到的特征值与类标签,构造用于模型构建的训练数据集。建立前馈神经网络,具体地:
1)以(4)得到的特征维数作为神经网络的输入层神经元个数;
2)定义神经网络隐藏层个数为:(attributes+classes)/2;
3)使用反向传播算法学习神经网络中各个突触的权重,其中用于加速收敛的动量系数为0.2,算法迭代500次。
通过上述操作,各个突触的权重将收敛到稳定的值,得到的神经网络将可以用于对软件易变性进行预测,不同的软件对应不同的数据集,所以突触的权重、神经网络的规模也会有所不同。
相同或相似的标号对应相同或相似的部件;
附图中描述位置关系的用于仅用于示例性说明,不能理解为对本专利的限制;
显然,本发明的上述实施例仅仅是为清楚地说明本发明所作的举例,而并非是对本发明的实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明权利要求的保护范围之内。
Claims (4)
1.一种软件易变性预测模型的构建方法,其特征在于,包括以下步骤:
S1:以面向对象软件系统中的类为研究对象,提取软件源代码的结构信息;
S2:通过S1中提取到的源代码结构信息,计算面向对象软件度量,包括规模类度量、耦合度度量、内聚度度量、继承类度量;
S3:通过对比在软件演化中不同版本所对应的类的变化情况,通过类相似度来定义并解析出类的易变性信息,该易变性信息包括分类标签;
S4:对S2中计算得到的面向对象软件度量进行特征提取和选择,分别分析规模类、内聚度、耦合度、继承类度量与软件易变性的相关性,选择相关度较高的度量组成度量集合,对该度量集合进行主成分分析进行数据降维,去除冗余信息,得到一组新的特征集合,以该组特征集合作为前馈多层感知器算法的输入即前馈神经网络的输入层,使用收集到的训练数据集,选择特定的参数,训练得到软件易变性预测模型;
S5:使用S3中得到的分类标签与S4中得到的特征集合,生成软件易变性预测模型的训练集,使用前馈多层感知器算法训练出预测模型。
2.根据权利要求1所述的软件易变性预测模型的构建方法,其特征在于,所述的软件源代码的结构信息包括程序的抽象语法树、程序的符号表,以及类间方法属性调用关系。
3.根据权利要求2所述的软件易变性预测模型的构建方法,其特征在于,通过EclipseJDT得到程序的抽象语法树,通过遍历抽象语法树得到符号表,进而得到相应类的方法属性间的调用关系。
4.根据权利要求1所述的软件易变性预测模型的构建方法,其特征在于,所述类的相似度是:相对于基线版本,在对比版本的对应的类中的字段、方法,以及继承关系的相似情况;对于类中的字段,相似度考察的是该字段的类型,变量名是否相同;对于类中的方法,相似度考察的是该方法的方法名、参数类型、返回值类型,以及抛出异常类型是否相同。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611045460.1A CN106528428B (zh) | 2016-11-24 | 2016-11-24 | 一种软件易变性预测模型的构建方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611045460.1A CN106528428B (zh) | 2016-11-24 | 2016-11-24 | 一种软件易变性预测模型的构建方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106528428A CN106528428A (zh) | 2017-03-22 |
CN106528428B true CN106528428B (zh) | 2019-06-25 |
Family
ID=58356866
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611045460.1A Expired - Fee Related CN106528428B (zh) | 2016-11-24 | 2016-11-24 | 一种软件易变性预测模型的构建方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106528428B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108268374B (zh) * | 2017-11-03 | 2019-03-05 | 平安科技(深圳)有限公司 | 软件版本测试方法、装置、终端设备及存储介质 |
CN108108168B (zh) * | 2017-12-18 | 2021-02-02 | 中山大学 | 结合代码演化信息构造代码坏味训练数据集的方法 |
CN109963072B (zh) * | 2017-12-26 | 2021-03-02 | Oppo广东移动通信有限公司 | 对焦方法、装置、存储介质及电子设备 |
CN108614778B (zh) * | 2018-05-10 | 2022-08-16 | 天津大学 | 基于高斯过程回归的安卓App程序演化变更预测方法 |
CN109240658A (zh) * | 2018-09-12 | 2019-01-18 | 郑州云海信息技术有限公司 | 一种基于神经网络的软件架构选择的方法及装置 |
CN110597735B (zh) * | 2019-09-25 | 2021-03-05 | 北京航空航天大学 | 一种面向开源软件缺陷特征深度学习的软件缺陷预测方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101261604A (zh) * | 2008-04-09 | 2008-09-10 | 中兴通讯股份有限公司 | 一种软件质量评价装置及软件质量评价的定量分析方法 |
CN105808435A (zh) * | 2016-03-08 | 2016-07-27 | 北京理工大学 | 一种基于复杂网络的软件缺陷评估模型的构建方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110061040A1 (en) * | 2009-09-06 | 2011-03-10 | Muhammad Shaheen | Association rule mining to predict co-varying software metrics |
-
2016
- 2016-11-24 CN CN201611045460.1A patent/CN106528428B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101261604A (zh) * | 2008-04-09 | 2008-09-10 | 中兴通讯股份有限公司 | 一种软件质量评价装置及软件质量评价的定量分析方法 |
CN105808435A (zh) * | 2016-03-08 | 2016-07-27 | 北京理工大学 | 一种基于复杂网络的软件缺陷评估模型的构建方法 |
Non-Patent Citations (4)
Title |
---|
"An Empirical Study on Object-Oriented Metrics and Software Evolution in Order to Reduce Testing Costs by Predicting Change-Prone Classes";Sinan Eski 等;《2011 IEEE Fourth International Conference on Software Testing, Verification and Validation Workshops》;20110714;第566-571页 |
"Concern-based cohesion: Unveiling a hidden dimension of cohesion measurement";Bruno Silva 等;《2012 20th IEEE International Conference on Program Comprehension (ICPC)》;20120716;第103-112页 |
"Using source code metrics to predict change-prone Java interfaces";Daniele Romano 等;《2011 27th IEEE International Conference on Software Maintenance(ICSM)》;20111118;第303-312页 |
"类规模对面向对象度量易变性预测能力的潜在混和效应:一个元分析";卢红敏 等;《计算机学报》;20141022;第38卷(第5期);第1069-1081页 |
Also Published As
Publication number | Publication date |
---|---|
CN106528428A (zh) | 2017-03-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106528428B (zh) | 一种软件易变性预测模型的构建方法 | |
Shukla et al. | Riotbench: An iot benchmark for distributed stream processing systems | |
CN106815492B (zh) | 一种用于16S rRNA基因的细菌群落组成和多样性分析的自动化方法 | |
Bockermann et al. | The streams framework | |
US20020111780A1 (en) | Probability model selection using information-theoretic optimization criterion | |
Tian et al. | Complexity measure evaluation and selection | |
CN107111527A (zh) | 用于分析仪器化软件的数据流处理语言 | |
CN103257921A (zh) | 一种基于改进随机森林算法的软件故障预测系统及其方法 | |
CN110909066B (zh) | 一种基于SparkSQL和RestAPI的流数据处理方法 | |
CN107102948B (zh) | 一种基于uml的软件架构复杂性度量方法 | |
US8510721B2 (en) | Dynamic calculation of sample profile reports | |
CN103262076A (zh) | 分析数据处理 | |
CN105404637B (zh) | 数据挖掘方法和装置 | |
Zanetti et al. | Automated software remodularization based on move refactoring: a complex systems approach | |
US9324041B2 (en) | Function stream based analysis | |
CN105867906A (zh) | 一种面向软件演化的代码可替换性评估方法 | |
Antonellis et al. | A data mining methodology for evaluating maintainability according to ISO/IEC-9126 software engineering–product quality standard | |
Park et al. | Code visualization for performance improvement of Java code for controlling smart traffic system in the smart city | |
Najadat et al. | Predicting software projects cost estimation based on mining historical data | |
M Alsmadi et al. | Evaluation of cost estimation metrics: Towards a unified terminology | |
CN106845110A (zh) | 一种医养信息大数据分析方法及管理系统 | |
CN103365900B (zh) | 线上素材投放方法及装置 | |
CN112380123A (zh) | 一种面向c/c++混源软件的自动化质量评估系统设计方法 | |
Kim | Characteristics of ICT‐Based Converging Technologies | |
CN107423222B (zh) | 一种确定测试覆盖率的方法及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20190625 Termination date: 20191124 |