CN107678971A - 代码味道驱动的基于克隆和耦合检测的代码缺陷预测方法 - Google Patents

代码味道驱动的基于克隆和耦合检测的代码缺陷预测方法 Download PDF

Info

Publication number
CN107678971A
CN107678971A CN201711005610.0A CN201711005610A CN107678971A CN 107678971 A CN107678971 A CN 107678971A CN 201711005610 A CN201711005610 A CN 201711005610A CN 107678971 A CN107678971 A CN 107678971A
Authority
CN
China
Prior art keywords
code
defect
probability
clone
codes
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
CN201711005610.0A
Other languages
English (en)
Other versions
CN107678971B (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.)
Yangzhou University
Original Assignee
Yangzhou 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 Yangzhou University filed Critical Yangzhou University
Priority to CN201711005610.0A priority Critical patent/CN107678971B/zh
Publication of CN107678971A publication Critical patent/CN107678971A/zh
Application granted granted Critical
Publication of CN107678971B publication Critical patent/CN107678971B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/362Software debugging
    • G06F11/366Software debugging using diagnostics
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Stored Programmes (AREA)

Abstract

本发明涉及代码味道驱动的基于克隆和耦合检测的代码缺陷预测方法。本发明对所有代码利用代码味道识别技术进行代码味道检测,并计算代码片段中坏味道的数目;检测坏味道代码与所有代码之间的联系及数目;检测坏味道代码和所有代码之间的关联及数目;计算上述代码缺陷的概率;加权处理代码缺陷概率;按照缺陷概率将代码进行降序排序,并将缺陷代码和缺陷语义信息推荐给开发者。本发明克服了过去存在的测试成本高和可读性差的缺陷。本发明从代码味道角度,结合克隆、耦合检测技术,提供有效的代码检查推荐,帮助开发者找到代码缺陷,理解预测出来的代码缺陷所在和优先处理严重等级较高的代码缺陷,大大缩短软件开发周期。

Description

代码味道驱动的基于克隆和耦合检测的代码缺陷预测方法
技术领域
本发明属于软件分析与测试领域,特别涉及代码味道驱动的基于克隆和耦合检测的代码缺陷预测方法。
背景技术
软件缺陷(software defect)产生于开发人员的编码过程中,需求理解不正确、软件开发过程不合理或开发人员的经验不足,均有可能产生软件缺陷.而含有缺陷的软件在运行时可能会产生意料之外的结果或行为,严重的时候会给企业造成巨大的经济损失,甚至会威胁到人们的生命安全.在软件项目的开发生命周期中,检测出内在缺陷的时间越晚,修复该缺陷的代价也越高.尤其在软件发布后,检测和修复缺陷的代价将大幅度增加.因此,项目主管借助软件测试或代码审查等软件质量保障手段,希望能够在软件部署前尽可能多地检测出内在缺陷.但是,若关注所有的程序模块会消耗大量的人力物力,因此,项目主管希望能够预先识别出可能含有缺陷的程序模块,并对其分配足够的测试资源。
在本发明作出之前,为了帮助软件开发人员尽可能的节省发现缺陷的成本,有些学者利用先进的机器学习算法构建出精度优秀的分类器。但是,这些分类器往往关注的是软件缺陷预测的精度,其基本的操作流程是输入一些待测试的代码,经过分类器预先定义的度量进行预处理,然后将预处理得出的信息利用构建好的分类器进行分类,将代码分类为有缺陷的和无缺陷的。虽然目前缺陷预测的精度有的达到90%的精确度,但往往由于真实项目数据量巨大,目前的精度下投入的测试成本仍然较高,这使得很多优秀的分类器往往无法为真实世界的开发者提供帮助,而其返回的有缺陷的代码也仅仅是一些抽象的标记,对于代码开发者和维护者没有较好的可读性。此外目前的缺陷预测技术还需要一些人工标注,这样才能为机器学习技术提供训练集,这样就使得缺陷预测过程无法自动化地完成。
发明内容
本发明的目的就是要克服上述缺陷,研发出代码味道驱动的基于克隆和耦合检测的代码缺陷预测方法。
本发明技术方法是:
代码味道驱动的基于克隆和耦合检测的代码缺陷预测方法,其主要技术特征在于如下步骤:
(1)对所有代码利用代码味道识别技术进行代码味道检测,并计算代码片段中坏味道的数目;
(2)根据克隆关系检测步骤(1)中坏味道代码与所有代码之间的联系,统计每个坏味道代码与其他代码关联的数目;
(3)根据语义耦合、语法耦合检测步骤(1)中坏味道代码和所有代码之间的关联,统计每个坏味道代码与其他代码关联的数目;
(4)利用定义好的概率计算公式计算步骤(1)中代码缺陷的概率;
(5)利用定义好的计算公式计算步骤(2)和步骤(3)的代码缺陷概率;
(6)加权处理步骤(4)和步骤(5)的代码缺陷概率;
(7)按照缺陷概率将代码进行降序排序,并将缺陷代码和步骤(1)、(2)、(3)得到的缺陷语义信息推荐给开发者。
本发明克服代码味道即代码中的任何可能导致深层次问题的症状。基于这些暴露的问题,人们会进一步的检查设计和代码中是否还存在别的代码异味,然后再做进一步的重构。从负责重构的开发者的角度来看,代码异味可以启发何时重构,如何重构。因此,可以说代码异味推动着重构的进行。而模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差。代码克隆是非常相似的独立代码片段,克隆代码之间往往存在者即为相似的联系,所以在代码味道的基础上加入代码之间的克隆、耦合检测能提升缺陷预测的精度。在软件开发者对软件代码进行缺陷预测时,先利用代码味道检测工具检测所有的代码并统计代码片段中坏味道代码个数,之后再针对克隆和耦合关系对坏味道代码和全部代码进行联系检测。利用设计好的概率公式计算含有坏味道的代码缺陷概率。再利用概率公式计算存在耦合和克隆代码的缺陷概率,接着将两者加权计算,对概率进行降序排序,将代码排序和缺陷文本描述信息推荐给开发者。帮助软件开发人员理解预测出来的代码缺陷所在和优先处理严重等级较高的代码缺陷。
本发明的优点和效果在于从代码味道角度,结合克隆、耦合检测技术,提供有效的代码检查推荐,帮助开发者找到代码缺陷,大大缩短了软件开发周期。具体说,主要有如下一些优点:
(1)目前软件预测方法只能得出缺陷代码和非缺陷代码,缺乏有益的推荐,即如何指导开发人员从哪些缺陷开始进行测试。我们的方法结合缺陷概率来排序,有效地将测试资源投入到最需要测试的代码上。
(2)本方法在代码味道的基础上,结合克隆检测和耦合检测的技术,克隆和耦合都是代码经常出错的特征,本文技术结合这二个代码内部关联的特征,可以有效的提高预测的精度。
(3)本方法将预测的原始缺陷信息返回给开发者,使得开发者可以快速地理解缺陷信息,从而可以进行针对性的测试,寻找相应的修复模式,更快地解决代码缺陷。
(4)传统的监督式机器学习需要获取大量的标记且需要人工干预,而本方法可以自动完成代码缺陷的预测。
(5)本方法的推荐出精度较高的缺陷代码可以作为机器学习的标记,帮助其他基于机器学习的缺陷预测技术进一步提高机器学习分类器的精度。
附图说明
图1——本发明流程示意图。
图2——本发明中克隆检测的流程图。
图3——本发明中耦合检测的流程图。
具体实施方式
本发明的技术思路是:
本发明主要帮助软件开发者和维护者更有效地检测软件的缺陷,从而提高软件的质量。具体流程如下(如图1):首先选取真实世界的java项目,利用代码味道检测技术对于这些文件进行处理,接着利用克隆检测技术对存在所有的代码进行检测,找出坏味道代码与坏味道代码和其他代码之间的联系,随后利用语义耦合、语法耦合检测找出坏味道代码和其他代码之间的关联,之后对这些缺陷代码按照定义好的度量进行排序,并将排序的结果推荐给维护者或者开发者,并返回标记代码的最原始缺陷信息,引导开发者进行代码缺陷的判断和维护。
下面具体说明本发明。
如图1所示,其步骤如下:
步骤(1).对全部代码数据在eclipse中利用代码味道检测技术进行代码味道检测,部分数据处理如下:
表1代码味道检测结果
可以得到具体的bug描述、bug所在的文件路径以及具体的行数和创建时间。从表1中我们可以看出例如TransferManagerView.java文件中的第1466行存在方法的代码坏味道。
步骤(2).对分类的坏味道代码利用克隆检测工具检测与其他代码的联系,其主要流程(如图2)是先将代码预处理之后进行代码转换,之后进行代码之间的匹配检测,找出转化后代码之间的克隆关系,再将找到的代码格式化生成克隆对或克隆类信息,然后通过过滤、有限元分析等手段得到过滤后的克隆对和克隆类,再将其聚合,最后得到过滤后的克隆组。
以下是部分的克隆关系的片段:
表2代码片段克隆检测结果
我们可以得到出现克隆关系的代码片段以及出现二者之间的关系类别。例如TransferManagerView.java文件中的代码片段(1-87行)与SupplierManagerView.java文件中的代码片段(1-120行)存在类型二的克隆关系。
步骤(3).对全部坏味道代码数据利用耦合工具进行检测与其他代码之间的联系,耦合检测的主要流程(如图3)将源代码文件进行代码分析,得到抽象语法树以及语义信息,之后通过自然语言处理和依赖关系抽取得到结果文件,最后生成层次依赖图。得到与步骤(2)相似的耦合结果。
步骤(4).利用定义好的概率计算公式:
计算步骤(1)坏味道代码的缺陷概率如下表:
表3坏味道预测的缺陷概率
如表3,我们可以得到代码坏味道预测的缺陷概率。
步骤(5).利用定义好的概率计算公式
注:其中a为坏味道代码与无味道代码的克隆耦合个数,b为坏味道代码与坏味道代码的克隆耦合个数。
计算步骤(2)和步骤(3)的代码缺陷概率:
表4克隆、耦合预测的缺陷概率
如表4,我们可以得到每个代码片段的缺陷概率。
步骤(6).按照如下公式
Pdefect=α*Psmell+β*Pclone_couple
注:α和β为推荐权重。
加权处理步骤(4)和步骤(5)的代码缺陷概率,得到的数据如下表所示:
表5加权后的缺陷概率
步骤(7).按照缺陷概率降序排序后,将代码片段和缺陷信息推荐给开发者。
表6排序后的代码缺陷概率及描述
通过表6,开发者可以详细的看到具体文件中具体代码片段可能出现缺陷的概率以及出现缺陷的详细描述信息,方便开发者有针对性地投入测试资源。

Claims (1)

1.代码味道驱动的基于克隆和耦合检测的代码缺陷预测方法,其特征在于如下步骤:
(1)对所有代码利用代码味道识别技术进行代码味道检测,并计算代码片段中坏味道的数目;
(2)根据克隆关系检测步骤(1)中坏味道代码与所有代码之间的联系,统计每个坏味道代码与其他代码关联的数目;
(3)根据语义耦合、语法耦合检测步骤(1)中坏味道代码和所有代码之间的关联,统计每个坏味道代码与其他代码关联的数目;
(4)利用定义好的概率计算公式计算步骤(1)中代码缺陷的概率;
(5)利用定义好的计算公式计算步骤(2)和步骤(3)的代码缺陷概率;
(6)加权处理步骤(4)和步骤(5)的代码缺陷概率;
(7)按照缺陷概率将代码进行降序排序,并将缺陷代码和步骤(1)、(2)、(3)得到的缺陷语义信息推荐给开发者。
CN201711005610.0A 2017-10-19 2017-10-19 代码味道驱动的基于克隆和耦合检测的代码缺陷预测方法 Active CN107678971B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711005610.0A CN107678971B (zh) 2017-10-19 2017-10-19 代码味道驱动的基于克隆和耦合检测的代码缺陷预测方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711005610.0A CN107678971B (zh) 2017-10-19 2017-10-19 代码味道驱动的基于克隆和耦合检测的代码缺陷预测方法

Publications (2)

Publication Number Publication Date
CN107678971A true CN107678971A (zh) 2018-02-09
CN107678971B CN107678971B (zh) 2021-05-04

Family

ID=61141743

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711005610.0A Active CN107678971B (zh) 2017-10-19 2017-10-19 代码味道驱动的基于克隆和耦合检测的代码缺陷预测方法

Country Status (1)

Country Link
CN (1) CN107678971B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108664269A (zh) * 2018-05-14 2018-10-16 北京理工大学 一种基于深度学习的特征依恋代码异味检测方法
CN110502277A (zh) * 2019-08-30 2019-11-26 西安邮电大学 一种基于bp神经网络的代码坏味检测方法
CN110659063A (zh) * 2019-08-08 2020-01-07 平安科技(深圳)有限公司 软件项目重构方法、装置、计算机装置及存储介质
CN111813442A (zh) * 2020-06-30 2020-10-23 北京航空航天大学 一种基于机器学习的软件味道检测方法
CN113190450A (zh) * 2021-05-08 2021-07-30 航天中认软件测评科技(北京)有限责任公司 一种自动化软件测试系统及其测试方法

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120060142A1 (en) * 2010-09-02 2012-03-08 Code Value Ltd. System and method of cost oriented software profiling
CN103309811A (zh) * 2013-06-27 2013-09-18 南京大学 一种基于测试执行记录快速定位软件代码缺陷的方法
CN104699614A (zh) * 2015-03-27 2015-06-10 重庆大学 一种软件缺陷组件预测的方法
US20150178075A1 (en) * 2013-12-20 2015-06-25 Infosys Limited Enhancing understandability of code using code clones
CN106294156A (zh) * 2016-08-11 2017-01-04 北京邮电大学 一种静态代码缺陷检测分析方法及装置
US9563541B2 (en) * 2015-04-27 2017-02-07 Sap Se Software defect detection identifying location of diverging paths

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120060142A1 (en) * 2010-09-02 2012-03-08 Code Value Ltd. System and method of cost oriented software profiling
CN103309811A (zh) * 2013-06-27 2013-09-18 南京大学 一种基于测试执行记录快速定位软件代码缺陷的方法
US20150178075A1 (en) * 2013-12-20 2015-06-25 Infosys Limited Enhancing understandability of code using code clones
CN104699614A (zh) * 2015-03-27 2015-06-10 重庆大学 一种软件缺陷组件预测的方法
US9563541B2 (en) * 2015-04-27 2017-02-07 Sap Se Software defect detection identifying location of diverging paths
CN106294156A (zh) * 2016-08-11 2017-01-04 北京邮电大学 一种静态代码缺陷检测分析方法及装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
张重逢 等: "基于切片度量的重构对象识别", 《东南大学学报》 *
高原 等: "代码坏味的处理顺序", 《软件学报》 *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108664269A (zh) * 2018-05-14 2018-10-16 北京理工大学 一种基于深度学习的特征依恋代码异味检测方法
CN108664269B (zh) * 2018-05-14 2019-02-26 北京理工大学 一种基于深度学习的特征依恋代码异味检测方法
CN110659063A (zh) * 2019-08-08 2020-01-07 平安科技(深圳)有限公司 软件项目重构方法、装置、计算机装置及存储介质
CN110502277A (zh) * 2019-08-30 2019-11-26 西安邮电大学 一种基于bp神经网络的代码坏味检测方法
CN111813442A (zh) * 2020-06-30 2020-10-23 北京航空航天大学 一种基于机器学习的软件味道检测方法
CN113190450A (zh) * 2021-05-08 2021-07-30 航天中认软件测评科技(北京)有限责任公司 一种自动化软件测试系统及其测试方法

Also Published As

Publication number Publication date
CN107678971B (zh) 2021-05-04

Similar Documents

Publication Publication Date Title
CN107678971A (zh) 代码味道驱动的基于克隆和耦合检测的代码缺陷预测方法
CN108932192A (zh) 一种基于抽象语法树的Python程序类型缺陷检测方法
CN107861942A (zh) 一种基于深度学习的电力疑似投诉工单识别方法
CN109408389A (zh) 一种基于深度学习的代码缺陷检测方法及装置
CN106201871A (zh) 基于代价敏感半监督的软件缺陷预测方法
CN108173708A (zh) 基于增量学习的异常流量检测方法、装置及存储介质
CN110175434A (zh) 一种基于卷积神经网络的铁路扣件系统损伤检测方法
CN105930503A (zh) 基于组合特征向量和深度学习的情感分类方法及装置
CN109241383B (zh) 一种基于深度学习的网页类型智能识别方法及系统
Pascarella et al. Re-evaluating method-level bug prediction
CN110381079A (zh) 结合gru和svdd进行网络日志异常检测方法
CN104965787A (zh) 一种基于三支决策的两阶段软件缺陷预测方法
CN112364352B (zh) 可解释性的软件漏洞检测与推荐方法及系统
CN112288079A (zh) 图神经网络模型训练方法、软件缺陷检测方法及系统
CN109376247A (zh) 一种基于关联规则的软件缺陷自动分类方法
WO2014207644A2 (en) Method and system for grading a computer program
CN105701013A (zh) 基于互信息的软件缺陷数据特征选择方法
CN109976990A (zh) 一种用于确认软件测试用例优先级的方法及系统
CN104317707A (zh) 一种基于程序结构影响感知的软件错误定位方法
CN113515402A (zh) 用于工程设备的故障信息分类方法、装置及工程设备
CN106933572B (zh) 一种基于llvm中间表示程序切片的度量模型
Vanderdonckt et al. Automated evaluation of web usability and accessibility by guideline review
CN104021180A (zh) 一种组合式软件缺陷报告分类方法
CN107102909A (zh) 一种面向复杂软件密集型系统的故障分类方法
CN112685320B (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
GR01 Patent grant
GR01 Patent grant