一种基于问答网站分析的程序崩溃缺陷自动修复方法

文档序号:9579148阅读:559来源:国知局
一种基于问答网站分析的程序崩溃缺陷自动修复方法
【技术领域】
[0001] 本发明涉及计算机软件技术领域,尤其涉及一种基于问答网站分析的程序崩溃缺 陷自动修复方法。
【背景技术】
[0002] 计算机系统在执行应用程序的进程的过程中,不可避免的会由于该应用程序的进 程自身的原因,比如除零错误、堆栈溢出、内存越界或空指针等原因,导致在执行应用程序 的进程时发生程序崩溃,一旦程序发生崩溃,人们将无法继续使用该应用程序,给用户的工 作和生活带来诸多不便。因此,某一应用程序崩溃后的自我修复能力对于该应用程序而言 也是一个非常重要的因素。
[0003] 目前,现有的程序崩溃缺陷相关的技术主要针对崩溃缺陷的定位、恢复以及修复 检查这几个方面,具体说明如下:第一方面:通过堆栈信息定位到程序崩溃出错语句,但是 这种方法仍然需要开发人员通过理解代码人工写出修复补丁;第二方面:令应用程序从崩 溃状态恢复到可继续执行的状态,使程序继续运行,但这种方法并未从根本上解决崩溃的 修复问题,并且存在额外的运行开销;第三方面:在开发人员修复崩溃缺陷后对程序崩溃 的修复进行检查,自动预测是否会有新的崩溃发生,然而这类方案并不涉及应用程序的自 动修复。
[0004] 综上所述,现有技术中修复应用程序崩溃的方法仍然依赖开发人员的操作,导致 开发人员的工作量增加。

【发明内容】

[0005] 本发明要解决的技术问题是:应用程序在发生崩溃时如何不依赖人员操作自我修 复的问题。
[0006] 为实现上述的发明目的,本发明提供了一种基于问答网站分析的程序崩溃缺陷自 动修复方法,包括:
[0007] 根据程序发生崩溃时生成的崩溃踪迹,获取多个相关网页;
[0008] 其中,所述相关网页中包含描述所述崩溃的缺陷代码以及修复所述崩溃的修复代 码;
[0009] 在每个所述相关网页中,提取所述缺陷代码的片段以及修复代码的片段;根据所 述缺陷代码片段以及修复代码片段生成用于修复所述崩溃的编辑脚本;
[0010] 根据所述崩溃踪迹以及缺陷代码,确定所述程序源代码中有错误代码的位置,应 用所述编辑脚本修复所述错误代码。
[0011] 其中较优地,所述获取多个相关网页,是获取多个问答网站中的相关网页。
[0012] 其中较优地,
[0013] 所述问答网站相关网页中的提问贴包含所述缺陷代码;
[0014] 所述问答网站相关网页中的答案贴包含所述缺陷代码和修复代码。
[0015] 其中较优地,所述在每个所述相关网页中,提取所述缺陷代码的片段以及修复代 码的片段为:
[0016] 在所述答案贴中提取缺陷代码片段以及修复代码片段。
[0017] 其中较优地,所述在每个所述相关网页中,提取所述缺陷代码的片段以及修复代 码的片段为:
[0018] 在所述提问帖中提取所述缺陷代码的片段;
[0019] 在所述答案贴中提取所述修复代码片段。
[0020] 其中较优地,所述根据所述缺陷代码片段以及修复代码片段生成用于修复所述崩 溃的编辑脚本,包括:
[0021] 将所述缺陷代码的片段与修复代码片段组成代码片段对;
[0022] 在所述代码片段对中,计算所述缺陷代码片段的语句相似度和修复代码片段语句 相似度,过滤掉相似度小于预设阈值的所述语句;
[0023] 构建过滤后的所述代码片段对中所述缺陷代码的片段和修复代码片段之间的映 射,根据所述映射生成所述缺陷代码的片段和修复代码片段之间的所述编辑脚本。
[0024] 其中较优地,所述根据所述崩溃踪迹以及缺陷代码,确定所述程序源代码中有错 误代码的位置,应用所述编辑脚本修复所述错误代码,具体包括:
[0025] 提取所述崩溃踪迹中发生崩溃的文件的文件名,形成文件集合;
[0026] 根据所述崩溃踪迹中包含的所述文件的行号,确定所述文件在源代码中的位置, 并提取所述文件的源代码片段;
[0027] 计算所述源代码片段中语句的相似度,过滤所述相似度小于预设阈值的所述源代 码片段语句;
[0028] 构建所述缺陷代码片段与所述程序源代码片段的映射关系;
[0029] 将所述编辑脚本中所述缺陷代码片段的元素,按所述缺陷代码片段与程序源代码 片段的映射关系,替换为所述程序源代码中的相应元素;
[0030] 将编辑脚本中的所述替换的所述程序源代码元素,按所述缺陷代码的片段和修复 代码片段之间的映射关系,替换为相应的修复代码片段中的元素,生成替换代码补丁;
[0031] 将所述替换代码补丁带回所述程序源代码中。
[0032] 其中较优地,所述缺陷代码片段以及修复代码片段为多个,相应地,根据缺陷代码 的片段和修复代码片段生成的替换代码补丁也为多个。
[0033] 其中较优地,还包括:
[0034] 将多个所述替换代码补丁中相同的补丁合并;
[0035] 过滤掉多个所述替换代码补丁中出现编译错误的补丁;
[0036] 根据所述过滤后的替换代码补丁判断修复结果。
[0037] 本发明提供了一种基于问答网站分析的程序崩溃缺陷自动修复方法。该方法通过 根据崩溃踪迹在问答网页上自动搜索修复方案,并生成相应的编辑脚本对崩溃进行修复, 摆脱了在修复过程中对操作人员的依赖,实现自动修复,且修复精度较高。
[0038] 本发明提供了一种基于问答网站分析的程序崩溃缺陷自动修复方法。该方法通过 根据崩溃踪迹在问答网页上自动搜索修复方案,并生成相应的编辑脚本对崩溃进行修复, 摆脱了在修复过程中对操作人员的依赖,实现自动修复,且修复精度较高。
【附图说明】
[0039] 通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通 技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明 的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
[0040]图1是本发明第一实施例提供的基于问答网站分析的程序崩溃缺陷自动修复方 法流程图;
[0041] 图2是本发明第一实施例提供的缺陷代码片段与修复代码片段映射示意图;
[0042] 图3是本发明第一实施例提供的缺陷代码片段与程序源代码片段映射示意图。
【具体实施方式】
[0043] 下面结合附图和实施例,对本发明的【具体实施方式】作进一步详细描述。以下实施 例用于说明本发明,但不用来限制本发明的范围。
[0044] 如图1所示,本发明提供了一种基于问答网站分析的程序崩溃缺陷自动修复方 法。该方法具体包括:S101、根据程序发生崩溃时的崩溃踪迹,获取多个相关网页;其中,相 关网页中包含描述崩溃的缺陷代码以及修复崩溃的修复代码;S102、在每个相关网页中,提 取缺陷代码的片段以及修复代码的片段;根据缺陷代码片段以及修复代码片段生成用于修 复崩溃的编辑脚本;S103、根据崩溃踪迹以及缺陷代码,确定程序源代码中有错误代码的位 置,应用编辑脚本修复错误代码。优选地,还包括S104、判断修复结果。下面对本发明提供 的基于问答网站分析的程序崩溃缺陷自动修复方法展开详细的说明。
[0045] 实施例一
[0046] 本实施例提供了一种基于问答网站分析的程序崩溃缺陷自动修复方法。下面将对 该方法进行具体说明:
[0047]S101、根据程序发生崩溃时的崩溃踪迹,获取多个相关网页;其中,所述相关网页 中包含描述所述崩溃的缺陷代码以及修复所述崩溃的修复代码。下面将对S101步骤中包 含的子步骤进行展开说明。
[0048] S1011、提取程序发生崩溃时生成的崩溃踪迹中的信息。
[0049] 当一个程序崩溃时,会生成崩溃信息。发生崩溃的程序可以以以下方式实现: [00501
[0051] 下段程序中的31行发生崩溃,其崩溃踪迹可以按以下方式实现:
[0052]
[0053] 其中,第1行和第13行是崩溃的描述信息。第2-12行、第14-18行表示两个堆栈 踪迹。提取上述崩溃踪迹的第一行,删除该行中所有包含项目名的单词。
[0054]S1012、将提取的崩溃踪迹结果作为搜索请求,使用搜索引擎进行搜索,优选地在 问答网站中搜索,得到排好序的问答网页。其中,根据S1011中的示例,搜索请求为:
[0055] java.lang.RuntimeException:UnabletostartreceiverIntentReceiver componentsarenotallowedtoregistertoreceiveintents
[0056]S102、在每个相关的问答网页中,提取描述崩溃缺陷情况的缺陷代码的片段以及 修复代码的片段;根据缺陷代码片段以及修复代码片段生成用于修复崩溃的编辑脚本。下 面将对S102步骤中包含的子步骤进行展开说明。
[0057]S1021、按照问答网页的次序一次分析S101步骤得到的每个问答网页。在每个网 页中,使用HTMLParser(HTML解析和分析的工具,包括信息提取和信息转换两大功能)把 包含在〈code>〈/code>标签中(HTML中的一种标签,标签中包含的为代码)的片段提取出 来。以这种方式提取出的基本都是代码片段。
[0058] 在每个问答网页中包括提问贴和答案贴。其中,提问贴包含描述崩溃缺陷情况的 缺陷代码;答案贴包含缺陷代码和修复相应崩溃缺陷的修复代码。
[0059] 例如,提问贴可以按以下方式实现:
[0060]
[0061] 答案贴可以按以下方式实现:
[0062]
[0063] 在提问贴和答案贴中提取缺陷代码的片段以及修复代码的片段为,具体包括两种 提取方式:
[0064] 第一种方式:将答案贴中的不同代码片段按照关键字"BInsteadofA"或者 "ChangeAtoB"筛选出来,并组合成缺陷-修复代码对A-B。其中A为缺陷代码片段,B为 修复代码片段。
[0065] 从答案贴中提取的缺陷-修复代码对的数量为多个,从上述答案贴中提取出的多 个代码对的其中一个可以按以下方式实现:
[0066]
[0067] 其中,上方为缺陷代码片段A,下方为修复代码片段B。
[0068] 第二种方式:按同样的提取方式提取问题贴中的多个缺陷代码片段A和以及答案 贴中的多个修复代码片段B,分别组成缺陷-修复代码对A-B。
[0069] 同样地,从问题贴以及答案贴中
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1