CN107729258B - 一种面向软件版本问题的程序故障定位方法 - Google Patents
一种面向软件版本问题的程序故障定位方法 Download PDFInfo
- Publication number
- CN107729258B CN107729258B CN201711263642.0A CN201711263642A CN107729258B CN 107729258 B CN107729258 B CN 107729258B CN 201711263642 A CN201711263642 A CN 201711263642A CN 107729258 B CN107729258 B CN 107729258B
- Authority
- CN
- China
- Prior art keywords
- code
- bug
- description
- codes
- bugs
- 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.)
- Active
Links
Images
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/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- 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/362—Software debugging
- G06F11/366—Software debugging using diagnostics
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)
- Stored Programmes (AREA)
Abstract
本发明涉及一种面向软件版本问题的程序故障定位方法。本发明建立一个与版本相关的库,对提交的bug描述先在建立的库中查找历史相似bug,再在当前软件的源代码中通过规则进行模式匹配,识别相关的源代码,将历史相似bug与识别后的代码并集,基于信息检索技术向量空间模型VSM公式进行相似度计算,推荐相似度高的代码进行定位。本发明克服了以往版本不一致问题以及对版本问题的定位大多由开发人员手动修改与更新,耗时又耗力等缺陷。本发明更有助于软件bug定位的分类,增加了bug定位解决的有效性,根据当前的软件代码和bug描述能直接进行定位。
Description
技术领域
本发明涉及一种面向软件版本问题的程序故障定位方法,属于软件测试与调试领域。
背景技术
随着软件应用领域的不断扩大,软件规模变得越来越大,软件产品结构也变得越来越复杂。复杂软件中隐藏的软件故障难以定位,从而导致软件的可靠性得不到保证。软件故障严重影响软件的生产和质量,并且影响在日益加剧。美国国家标准与技术研究所的一项研究表示“软件故障如此普遍并且危害巨大,每年损失美国经济的595亿美元或国民生产总值的0.6%。”试图减少软件中存在的错误的工作在软件开发和维护过程中往往会消耗大量的人力和物力,几乎占了软件开发维护成本的50%-80%。程序调试是一个找出程序代码中存在的错误并纠正错误的过程,它是一项既耗时又耗力的工作,准确地定位出错误代码或是找出出错代码存在的范围是调试人员的目的。为了降低定位过程中的时间和人力成本,自动程序定位方法应运而生。
软件故障定位目的是快速准确定位软件中出现的错误,人工智能领域和软件工程自动化领域出现了各种技术诊断程序故障,比如基于静态分析的故障定位技术,基于测试的故障定位技术,基于距离度量的故障定位技术等,这些技术能够在计算机的辅助下自动找到故障的位置,即定位有问题的语句。
在本发明作出之前,目前主要通过测试用例对软件进行故障定位,但是版本不一致问题无法通过测试用例进行定位,虽然软件产品不断的更新换代,对软件的配置版本的要求不断提高,但对于软件产品版本问题的定位大多由开发人员手动修改与更新,耗时又耗力,而随着软件产品的不断更新,软件版本问题越来越突出。
发明内容
本发明的目的就在于克服上述缺陷,提供一种面向软件版本问题的程序故障定位方法。
本发明的技术方法是:
一种面向软件版本问题的程序故障定位方法,针对与版本相关的bug进行定位,其主要技术特征在于如下步骤:
(1)建立一个与软件版本相关的库,该库中的bug都是与版本相关的,并且都是已修复的bug,包括bug ID,描述,评论,对应的修复源代码;
(2)对于当前提交的bug描述,判断该描述是否是配置的版本出错,若是,则在BV库中查找相似的历史bug,包括相似bug的描述,评论与源代码;
(3)对于当前软件代码,通过规则“version”,“1.1.1”,“dependency”,包括搜索关键字“version”,形如1.1.1格式的数字以及配置的依赖关系,对源代码进行模式匹配,识别相关的源代码;
(4)对历史bug对应的代码与模式匹配识别的代码求并集,基于信息检索的技术,处理并集后的代码;若该代码属于相似历史bug对应的代码,则对该代码所对应的描述,评论以及代码本身进行预处理;若该代码属于模式匹配识别的代码,则对该代码本身进行预处理,也对当前bug的描述进行预处理;所述预处理包括文本正常化,删除停用词,词干处理,其中文本正常化包括删除标点符号,标记术语,拆分标识符;所述删除停用词包括在停用词列表中过滤外来术语,所述词干处理包括将变形或衍生词变成根形式的词
(5)计算上一步骤中处理后的并集代码和当前bug描述的术语出现次数,结合信息检索工具向量空间模型VSM公式计算每段代码与当前bug描述的相似度;若该代码是相似历史bug对应的代码,则1.计算该代码对应的描述与评论和当前bug描述的相似度;2.计算该代码本身与当前bug描述的相似度,设置参数α,β作为两个相似度的系数,这里设置α为0.5,β为0.5,计算α cos1+βcos2的值;若该代码是模式匹配识别的代码,则计算代码本身与当前bug描述的相似度,同时设置参数β即与前文的β值相同的作为cos2的系数,这里设置β为0.5,计算β cos2的值;对并集后的代码计算得到的相似度值进行排列,推荐前10个相似度值对应的代码作为故障定位结果,供开发人员参考和故障修复。
本发明的优点和效果在于从bug的版本问题出发,分析当前bug的历史相似bug与当前软件的源代码,基于信息检索技术向量空间模型VSM公式计算相似度,推荐相似度高的代码进行定位。该方法可有效地提高软件测试与调试的效率,减少了成本与人力。
主要有如下一些优点:
(1)目前的软件自动定位方法很多,如基于静态分析的故障定位技术,基于测试的故障定位技术,基于距离度量的故障定位技术,而本发明提出分析bug描述,历史相似bug,当前软件源代码,从而更有助于软件bug定位的分类。
(2)该发明将与版本相关的bug建立成一个库,对软件bug的多个关键信息进行分析,增加了bug定位解决的有效性。
(3)该定位技术不需要测试用例,而是根据当前的软件代码和bug描述能直接进行定位。
附图说明
图1——本发明的流程示意图。
图2——本发明决策树ID3算法流程示意图。
图3——本发明向量空间模型VSM图,其中有如下术语:
ti:Bug描述,历史相似bug描述与评论中出现的所有术语,
n:Bug描述与历史相似bug描述与评论中出现的所有术语总个数,
Wti:Bug描述中术语ti的权重,
Pti:历史相似bug的描述与评论中术语ti的权重,
Ti:Bug描述,历史相似bug对应的代码或当前软件模式匹配的代码中出现的所有术语,
m:Bug描述,历史相似bug对应的代码或当前软件模式匹配的代码中出现的所有术语的总数,
WTi:Bug描述中术语Ti的权重.
QTi:历史相似bug对应的代码或当前软件模式匹配的代码中术语Ti的权重。
具体实施方式
本发明的技术思路是:
本发明定位程序时,建立一个与版本相关的库,对于当前提交的bug描述,首先在建立的库中查找历史相似bug,然后在当前软件的源代码中通过规则进行模式匹配,识别相关的源代码。将历史相似bug与识别后的代码并集,基于信息检索技术向量空间模型VSM公式进行相似度计算,推荐相似度高的代码进行定位。
本发明具体有如下步骤:
步骤1).建立一个与软件版本相关的库(简称BV库),该库中的bug都是与版本相关的,并且都是已修复的bug,包括bug ID,描述,评论,对应的修复源代码。比如,该库中的一条bug和其对应的代码如下:
步骤2).对于当前提交的bug描述,判断该描述是否是配置的版本出错,若是,则在BV库中查找相似的历史bug,包括相似bug的描述,评论与源代码。比如:Bug 1048270的描述是:“Blobber exception:″UnboundLocalError:local vari able′blob_url′referencedbefore assignment″”,该描述中描述了配置Blobber出错,则在BV库中查找相似的历史bug。
步骤3).对于当前软件代码,通过规则((“version”,“1.1.1”,“dependency”)包括搜索关键字“version”,形如1.1.1格式的数字以及配置的依赖关系)对源代码进行模式匹配,识别相关的源代码。比如:通过规则:形如1.1.1格式的数字来匹配软件ReleaseEngineering。的源代码得到的代码片段是:′blobuploader==1.2.1′。
步骤4).对历史bug对应的代码与模式匹配识别的代码求并集,基于信息检索的技术,处理并集后的代码。若该代码属于相似历史bug对应的代码,则对该代码所对应的描述,评论以及代码本身进行预处理;若该代码属于模式匹配识别的代码,则对该代码本身进行预处理。同时也对当前bug的描述进行预处理。预处理包括文本正常化,删除停用词,词干处理。其中文本正常化包括删除标点符号,标记术语,拆分标识符。删除停用词包括在停用词列表中过滤外来术语。词干处理包括将变形或衍生词变成根形式的词。比如,删除Bug1355015中Comment2:Benjamin,f?for this version bump.This serve two purposes:-We know that a number of popular linux distribution are enabling telemetry intheir binaries,and that a number of firefox packagers are compiling with Alsasupport in.中的标点符号:“?”,“:”,“,”,“-”,“.”。删除Comment2中的停用词:“for”,“a”,“of”,“and”。过滤外来术语“Alsa”。词干处理,比如将“going”与“goes”变成根形式的词“go”。
步骤5).计算上一步骤中处理后的并集代码(包括对应的描述与评论)和当前bug描述的术语出现次数,结合信息检索工具向量空间模型VSM公式计算每段代码与当前bug描述的相似度。若该代码是相似历史bug对应的代码,则1.计算该代码对应的描述与评论和当前bug描述的相似度(作为cos1);2.计算该代码本身与当前bug描述的相似度(作为cos2),同时设置参数α,β作为两个相似度的系数,这里设置α为0.5,β为0.5,计算α cos1+β cos2的值。若该代码是模式匹配识别的代码,则计算代码本身与当前bug描述的相似度(作为cos2),同时设置参数β(与前文的β值相同)作为cos2的系数,这里设置β为0.5,计算β cos2的值。对并集后的代码计算得到的相似度值进行排列,推荐前10个相似度值对应的代码作为故障定位结果,供开发人员参考和故障修复。比如,Bug 1048270的描述中术语blob出现的次数是2,blob_url出现的次数是1,利用向量空间模型VSM公式计算当前bug描述与当前软件源代码和相似历史bug的相似度并排序。定位的前10个结果如下:
向量空间模型VSM公式如下:
Wt∈d=tftd×idft
tf(t.d)=log(ftd)+1
Wt:第i的术语的权重
tf:bug描述或历史相似bug或当前软件代码术语出现的个数
idf:bug描述与历史相似bug或bug描述与当前软件代码集合中术语出现的次数
t:术语
d:bug描述或历史相似bug或当前软件代码作为一个特定的文档
ftd:bug描述或历史相似bug或当前软件代码中t出现的次数
N:bug描述与历史相似bug分别作为文档的总数或bug描述与当前软件代码分别作为文档的总数
nt:包含t的文档的数量。
Claims (1)
1.一种面向软件版本问题的程序故障定位方法,针对与版本相关的bug进行定位,其特征在于如下步骤:
(1)建立一个与软件版本相关的库,该库中的bug都是与版本相关的,并且都是已修复的bug,包括bug ID,描述,评论,对应的修复源代码;
(2)对于当前提交的bug描述,判断该描述是否是配置的版本出错,若是,则在BV库中查找相似的历史bug,包括相似bug的描述,评论与源代码;
(3)对于当前软件代码,通过规则“version”,“1.1.1”,“dependency”,包括搜索关键字“version”,形如1.1.1格式的数字以及配置的依赖关系,对源代码进行模式匹配,识别相关的源代码;
(4)对历史bug对应的代码与模式匹配识别的代码求并集,基于信息检索的技术,处理并集后的代码;若该代码属于相似历史bug对应的代码,则对该代码所对应的描述,评论以及代码本身进行预处理;若该代码属于模式匹配识别的代码,则对该代码本身进行预处理,也对当前bug的描述进行预处理;所述预处理包括文本正常化,删除停用词,词干处理,其中文本正常化包括删除标点符号,标记术语,拆分标识符;所述删除停用词包括在停用词列表中过滤外来术语,所述词干处理包括将变形或衍生词变成根形式的词;
(5)计算上一步骤中处理后的并集代码和当前bug描述的术语出现次数,结合信息检索工具向量空间模型VSM公式计算每段代码与当前bug描述的相似度;若该代码是相似历史bug对应的代码,则1.计算该代码对应的描述与评论和当前bug描述的相似度;2.计算该代码本身与当前bug描述的相似度,设置参数α,β作为两个相似度的系数,这里设置α为0.5,β为0.5,计算αcos1+βcos2的值;若该代码是模式匹配识别的代码,则计算代码本身与当前bug描述的相似度,同时设置参数β即与前文的β值相同的作为cos2的系数,这里设置β为0.5,计算βcos2的值;对并集后的代码计算得到的相似度值进行排列,推荐前10个相似度值对应的代码作为故障定位结果,供开发人员参考和故障修复。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711263642.0A CN107729258B (zh) | 2017-11-30 | 2017-11-30 | 一种面向软件版本问题的程序故障定位方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711263642.0A CN107729258B (zh) | 2017-11-30 | 2017-11-30 | 一种面向软件版本问题的程序故障定位方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107729258A CN107729258A (zh) | 2018-02-23 |
CN107729258B true CN107729258B (zh) | 2021-07-23 |
Family
ID=61220820
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711263642.0A Active CN107729258B (zh) | 2017-11-30 | 2017-11-30 | 一种面向软件版本问题的程序故障定位方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107729258B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108717459B (zh) * | 2018-05-24 | 2019-05-21 | 哈尔滨工程大学 | 一种面向用户评论信息的移动应用缺陷定位方法 |
CN111045916B (zh) * | 2018-10-12 | 2023-08-04 | 伊姆西Ip控股有限责任公司 | 自动化软件缺陷验证 |
CN111104306A (zh) * | 2018-10-26 | 2020-05-05 | 伊姆西Ip控股有限责任公司 | 用于应用中的错误诊断的方法、装置和计算机存储介质 |
CN109542785B (zh) * | 2018-11-19 | 2021-07-27 | 北京云测网络科技有限公司 | 一种无效bug确定方法和装置 |
CN109918100B (zh) * | 2019-01-25 | 2022-05-17 | 扬州大学 | 一种面向版本缺陷的基于修复模式的修复推荐方法 |
CN110221933B (zh) * | 2019-05-05 | 2023-07-21 | 北京百度网讯科技有限公司 | 代码缺陷辅助修复方法及系统 |
CN112115046B (zh) * | 2020-08-25 | 2023-12-29 | 深圳市优必选科技股份有限公司 | 一种软件故障定位方法、装置及终端 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106407113A (zh) * | 2016-09-09 | 2017-02-15 | 扬州大学 | 一种基于Stack Overflow和commit库的bug定位方法 |
CN107315831A (zh) * | 2017-07-10 | 2017-11-03 | 北京神州泰岳软件股份有限公司 | 一种挖掘规则关联模型未知关联关系的方法及装置 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110106807A1 (en) * | 2009-10-30 | 2011-05-05 | Janya, Inc | Systems and methods for information integration through context-based entity disambiguation |
CN103473409B (zh) * | 2013-08-25 | 2016-06-01 | 浙江大学 | 一种基于知识库的fpga故障自动诊断方法 |
CN105159822B (zh) * | 2015-08-12 | 2017-08-29 | 南京航空航天大学 | 一种基于文本词性和程序调用关系的软件缺陷定位方法 |
CN106202203A (zh) * | 2016-06-23 | 2016-12-07 | 扬州大学 | 基于终身主题模型的bug知识库的建立方法 |
-
2017
- 2017-11-30 CN CN201711263642.0A patent/CN107729258B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106407113A (zh) * | 2016-09-09 | 2017-02-15 | 扬州大学 | 一种基于Stack Overflow和commit库的bug定位方法 |
CN107315831A (zh) * | 2017-07-10 | 2017-11-03 | 北京神州泰岳软件股份有限公司 | 一种挖掘规则关联模型未知关联关系的方法及装置 |
Non-Patent Citations (2)
Title |
---|
基于LDA的软件缺陷组件预测研究与实现;刘海林;《中国优秀硕士学位论文全文数据库 信息科技辑》;20160615(第06期);I138-555 * |
文本相似度算法;liangxiaxu;《https://www.cnblogs.com/liangxiaxu/archive/2012/05/05/2484972.html》;20120505;1-9 * |
Also Published As
Publication number | Publication date |
---|---|
CN107729258A (zh) | 2018-02-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107729258B (zh) | 一种面向软件版本问题的程序故障定位方法 | |
CN110888849B (zh) | 一种在线日志解析方法、系统及其电子终端设备 | |
CN111459799B (zh) | 一种基于Github的软件缺陷检测模型建立、检测方法及系统 | |
CN107608732B (zh) | 一种基于bug知识图谱的bug搜索定位方法 | |
CN110134613B (zh) | 一种基于代码语义及背景信息的软件缺陷数据采集系统 | |
CN109492106B (zh) | 一种文本代码相结合的缺陷原因自动分类方法 | |
CN109558166B (zh) | 一种面向缺陷定位的代码搜索方法 | |
CN111127068B (zh) | 一种工程量清单自动组价方法和装置 | |
CN113254751B (zh) | 一种复杂网页结构化信息精确提取方法、设备及存储介质 | |
CN106649557B (zh) | 一种缺陷报告与邮件列表语义关联挖掘方法 | |
CN111460401B (zh) | 结合软件制品过程信息和文本相似度的制品自动追踪方法 | |
CN107844414A (zh) | 一种基于缺陷报告分析的跨项目、并行化缺陷定位方法 | |
CN109918100B (zh) | 一种面向版本缺陷的基于修复模式的修复推荐方法 | |
Stephan et al. | Using mutation analysis for a model-clone detector comparison framework | |
CN113487211A (zh) | 核电装备质量追溯方法、系统、计算机设备及介质 | |
Richter et al. | Tssb-3m: Mining single statement bugs at massive scale | |
CN114329482A (zh) | 基于排序的c/c++漏洞及其补丁间链接恢复系统及方法 | |
Cheng et al. | A similarity integration method based information retrieval and word embedding in bug localization | |
CN106126736A (zh) | 面向软件安全性bug修复的软件开发者个性化推荐方法 | |
CN114153496B (zh) | 一种基于区块链的高速可并行代码相似度对比方法和系统 | |
Wang et al. | Smart contract vulnerability detection using code representation fusion | |
CN114398394A (zh) | 数据血缘解析方法、装置、设备及存储介质 | |
CN108228232B (zh) | 一种针对程序中循环问题的自动修复方法 | |
CN112699018B (zh) | 基于软件缺陷关联分析的软件缺陷定位方法 | |
Mondal et al. | Investigating near-miss micro-clones in evolving software |
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 |