一種基于問答網(wǎng)站分析的程序崩潰缺陷自動修復(fù)方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及計算機軟件技術(shù)領(lǐng)域,尤其涉及一種基于問答網(wǎng)站分析的程序崩潰缺 陷自動修復(fù)方法。
【背景技術(shù)】
[0002] 計算機系統(tǒng)在執(zhí)行應(yīng)用程序的進(jìn)程的過程中,不可避免的會由于該應(yīng)用程序的進(jìn) 程自身的原因,比如除零錯誤、堆棧溢出、內(nèi)存越界或空指針等原因,導(dǎo)致在執(zhí)行應(yīng)用程序 的進(jìn)程時發(fā)生程序崩潰,一旦程序發(fā)生崩潰,人們將無法繼續(xù)使用該應(yīng)用程序,給用戶的工 作和生活帶來諸多不便。因此,某一應(yīng)用程序崩潰后的自我修復(fù)能力對于該應(yīng)用程序而言 也是一個非常重要的因素。
[0003] 目前,現(xiàn)有的程序崩潰缺陷相關(guān)的技術(shù)主要針對崩潰缺陷的定位、恢復(fù)以及修復(fù) 檢查這幾個方面,具體說明如下:第一方面:通過堆棧信息定位到程序崩潰出錯語句,但是 這種方法仍然需要開發(fā)人員通過理解代碼人工寫出修復(fù)補??;第二方面:令應(yīng)用程序從崩 潰狀態(tài)恢復(fù)到可繼續(xù)執(zhí)行的狀態(tài),使程序繼續(xù)運行,但這種方法并未從根本上解決崩潰的 修復(fù)問題,并且存在額外的運行開銷;第三方面:在開發(fā)人員修復(fù)崩潰缺陷后對程序崩潰 的修復(fù)進(jìn)行檢查,自動預(yù)測是否會有新的崩潰發(fā)生,然而這類方案并不涉及應(yīng)用程序的自 動修復(fù)。
[0004] 綜上所述,現(xiàn)有技術(shù)中修復(fù)應(yīng)用程序崩潰的方法仍然依賴開發(fā)人員的操作,導(dǎo)致 開發(fā)人員的工作量增加。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明要解決的技術(shù)問題是:應(yīng)用程序在發(fā)生崩潰時如何不依賴人員操作自我修 復(fù)的問題。
[0006] 為實現(xiàn)上述的發(fā)明目的,本發(fā)明提供了一種基于問答網(wǎng)站分析的程序崩潰缺陷自 動修復(fù)方法,包括:
[0007] 根據(jù)程序發(fā)生崩潰時生成的崩潰蹤跡,獲取多個相關(guān)網(wǎng)頁;
[0008] 其中,所述相關(guān)網(wǎng)頁中包含描述所述崩潰的缺陷代碼以及修復(fù)所述崩潰的修復(fù)代 碼;
[0009] 在每個所述相關(guān)網(wǎng)頁中,提取所述缺陷代碼的片段以及修復(fù)代碼的片段;根據(jù)所 述缺陷代碼片段以及修復(fù)代碼片段生成用于修復(fù)所述崩潰的編輯腳本;
[0010] 根據(jù)所述崩潰蹤跡以及缺陷代碼,確定所述程序源代碼中有錯誤代碼的位置,應(yīng) 用所述編輯腳本修復(fù)所述錯誤代碼。
[0011] 其中較優(yōu)地,所述獲取多個相關(guān)網(wǎng)頁,是獲取多個問答網(wǎng)站中的相關(guān)網(wǎng)頁。
[0012] 其中較優(yōu)地,
[0013] 所述問答網(wǎng)站相關(guān)網(wǎng)頁中的提問貼包含所述缺陷代碼;
[0014] 所述問答網(wǎng)站相關(guān)網(wǎng)頁中的答案貼包含所述缺陷代碼和修復(fù)代碼。
[0015] 其中較優(yōu)地,所述在每個所述相關(guān)網(wǎng)頁中,提取所述缺陷代碼的片段以及修復(fù)代 碼的片段為:
[0016] 在所述答案貼中提取缺陷代碼片段以及修復(fù)代碼片段。
[0017] 其中較優(yōu)地,所述在每個所述相關(guān)網(wǎng)頁中,提取所述缺陷代碼的片段以及修復(fù)代 碼的片段為:
[0018] 在所述提問帖中提取所述缺陷代碼的片段;
[0019] 在所述答案貼中提取所述修復(fù)代碼片段。
[0020] 其中較優(yōu)地,所述根據(jù)所述缺陷代碼片段以及修復(fù)代碼片段生成用于修復(fù)所述崩 潰的編輯腳本,包括:
[0021] 將所述缺陷代碼的片段與修復(fù)代碼片段組成代碼片段對;
[0022] 在所述代碼片段對中,計算所述缺陷代碼片段的語句相似度和修復(fù)代碼片段語句 相似度,過濾掉相似度小于預(yù)設(shè)閾值的所述語句;
[0023] 構(gòu)建過濾后的所述代碼片段對中所述缺陷代碼的片段和修復(fù)代碼片段之間的映 射,根據(jù)所述映射生成所述缺陷代碼的片段和修復(fù)代碼片段之間的所述編輯腳本。
[0024] 其中較優(yōu)地,所述根據(jù)所述崩潰蹤跡以及缺陷代碼,確定所述程序源代碼中有錯 誤代碼的位置,應(yīng)用所述編輯腳本修復(fù)所述錯誤代碼,具體包括:
[0025] 提取所述崩潰蹤跡中發(fā)生崩潰的文件的文件名,形成文件集合;
[0026] 根據(jù)所述崩潰蹤跡中包含的所述文件的行號,確定所述文件在源代碼中的位置, 并提取所述文件的源代碼片段;
[0027] 計算所述源代碼片段中語句的相似度,過濾所述相似度小于預(yù)設(shè)閾值的所述源代 碼片段語句;
[0028] 構(gòu)建所述缺陷代碼片段與所述程序源代碼片段的映射關(guān)系;
[0029] 將所述編輯腳本中所述缺陷代碼片段的元素,按所述缺陷代碼片段與程序源代碼 片段的映射關(guān)系,替換為所述程序源代碼中的相應(yīng)元素;
[0030] 將編輯腳本中的所述替換的所述程序源代碼元素,按所述缺陷代碼的片段和修復(fù) 代碼片段之間的映射關(guān)系,替換為相應(yīng)的修復(fù)代碼片段中的元素,生成替換代碼補丁;
[0031] 將所述替換代碼補丁帶回所述程序源代碼中。
[0032] 其中較優(yōu)地,所述缺陷代碼片段以及修復(fù)代碼片段為多個,相應(yīng)地,根據(jù)缺陷代碼 的片段和修復(fù)代碼片段生成的替換代碼補丁也為多個。
[0033] 其中較優(yōu)地,還包括:
[0034] 將多個所述替換代碼補丁中相同的補丁合并;
[0035] 過濾掉多個所述替換代碼補丁中出現(xiàn)編譯錯誤的補??;
[0036] 根據(jù)所述過濾后的替換代碼補丁判斷修復(fù)結(jié)果。
[0037] 本發(fā)明提供了一種基于問答網(wǎng)站分析的程序崩潰缺陷自動修復(fù)方法。該方法通過 根據(jù)崩潰蹤跡在問答網(wǎng)頁上自動搜索修復(fù)方案,并生成相應(yīng)的編輯腳本對崩潰進(jìn)行修復(fù), 擺脫了在修復(fù)過程中對操作人員的依賴,實現(xiàn)自動修復(fù),且修復(fù)精度較高。
[0038] 本發(fā)明提供了一種基于問答網(wǎng)站分析的程序崩潰缺陷自動修復(fù)方法。該方法通過 根據(jù)崩潰蹤跡在問答網(wǎng)頁上自動搜索修復(fù)方案,并生成相應(yīng)的編輯腳本對崩潰進(jìn)行修復(fù), 擺脫了在修復(fù)過程中對操作人員的依賴,實現(xiàn)自動修復(fù),且修復(fù)精度較高。
【附圖說明】
[0039] 通過閱讀下文優(yōu)選實施方式的詳細(xì)描述,各種其他的優(yōu)點和益處對于本領(lǐng)域普通 技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認(rèn)為是對本發(fā)明 的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
[0040]圖1是本發(fā)明第一實施例提供的基于問答網(wǎng)站分析的程序崩潰缺陷自動修復(fù)方 法流程圖;
[0041] 圖2是本發(fā)明第一實施例提供的缺陷代碼片段與修復(fù)代碼片段映射示意圖;
[0042] 圖3是本發(fā)明第一實施例提供的缺陷代碼片段與程序源代碼片段映射示意圖。
【具體實施方式】
[0043] 下面結(jié)合附圖和實施例,對本發(fā)明的【具體實施方式】作進(jìn)一步詳細(xì)描述。以下實施 例用于說明本發(fā)明,但不用來限制本發(fā)明的范圍。
[0044] 如圖1所示,本發(fā)明提供了一種基于問答網(wǎng)站分析的程序崩潰缺陷自動修復(fù)方 法。該方法具體包括:S101、根據(jù)程序發(fā)生崩潰時的崩潰蹤跡,獲取多個相關(guān)網(wǎng)頁;其中,相 關(guān)網(wǎng)頁中包含描述崩潰的缺陷代碼以及修復(fù)崩潰的修復(fù)代碼;S102、在每個相關(guān)網(wǎng)頁中,提 取缺陷代碼的片段以及修復(fù)代碼的片段;根據(jù)缺陷代碼片段以及修復(fù)代碼片段生成用于修 復(fù)崩潰的編輯腳本;S103、根據(jù)崩潰蹤跡以及缺陷代碼,確定程序源代碼中有錯誤代碼的位 置,應(yīng)用編輯腳本修復(fù)錯誤代碼。優(yōu)選地,還包括S104、判斷修復(fù)結(jié)果。下面對本發(fā)明提供 的基于問答網(wǎng)站分析的程序崩潰缺陷自動修復(fù)方法展開詳細(xì)的說明。
[0045] 實施例一
[0046] 本實施例提供了一種基于問答網(wǎng)站分析的程序崩潰缺陷自動修復(fù)方法。下面將對 該方法進(jìn)行具體說明:
[0047]S101、根據(jù)程序發(fā)生崩潰時的崩潰蹤跡,獲取多個相關(guān)網(wǎng)頁;其中,所述相關(guān)網(wǎng)頁 中包含描述所述崩潰的缺陷代碼以及修復(fù)所述崩潰的修復(fù)代碼。下面將對S101步驟中包 含的子步驟進(jìn)行展開說明。
[0048] S1011、提取程序發(fā)生崩潰時生成的崩潰蹤跡中的信息。
[0049] 當(dāng)一個程序崩潰時,會生成崩潰信息。發(fā)生崩潰的程序可以以以下方式實現(xiàn): [00501
[0051] 下段程序中的31行發(fā)生崩潰,其崩潰蹤跡可以按以下方式實現(xiàn):
[0052]
[0053] 其中,第1行和第13行是崩潰的描述信息。第2-12行、第14-18行表示兩個堆棧 蹤跡。提取上述崩潰蹤跡的第一行,刪除該行中所有包含項目名的單詞。
[0054]S1012、將提取的崩潰蹤跡結(jié)果作為搜索請求,使用搜索引擎進(jìn)行搜索,優(yōu)選地在 問答網(wǎng)站中搜索,得到排好序的問答網(wǎng)頁。其中,根據(jù)S1011中的示例,搜索請求為:
[0055] java.lang.RuntimeException:UnabletostartreceiverIntentReceiver componentsarenotallowedtoregistertoreceiveintents
[0056]S102、在每個相關(guān)的問答網(wǎng)頁中,提取描述崩潰缺陷情況的缺陷代碼的片段以及 修復(fù)代碼的片段;根據(jù)缺陷代碼片段以及修復(fù)代碼片段生成用于修復(fù)崩潰的編輯腳本。下 面將對S102步驟中包含的子步驟進(jìn)行展開說明。
[0057]S1021、按照問答網(wǎng)頁的次序一次分析S101步驟得到的每個問答網(wǎng)頁。在每個網(wǎng) 頁中,使用HTMLParser(HTML解析和分析的工具,包括信息提取和信息轉(zhuǎn)換兩大功能)把 包含在〈code>〈/code>標(biāo)簽中(HTML中的一種標(biāo)簽,標(biāo)簽中包含的為代碼)的片段提取出 來。以這種方式提取出的基本都是代碼片段。
[0058] 在每個問答網(wǎng)頁中包括提問貼和答案貼。其中,提問貼包含描述崩潰缺陷情況的 缺陷代碼;答案貼包含缺陷代碼和修復(fù)相應(yīng)崩潰缺陷的修復(fù)代碼。
[0059] 例如,提問貼可以按以下方式實現(xiàn):
[0060]
[0061] 答案貼可以按以下方式實現(xiàn):
[0062]
[0063] 在提問貼和答案貼中提取缺陷代碼的片段以及修復(fù)代碼的片段為,具體包括兩種 提取方式:
[0064] 第一種方式:將答案貼中的不同代碼片段按照關(guān)鍵字"BInsteadofA"或者 "ChangeAtoB"篩選出來,并組合成缺陷-修復(fù)代碼對A-B。其中A為缺陷代碼片段,B為 修復(fù)代碼片段。
[0065] 從答案貼中提取的缺陷-修復(fù)代碼對的數(shù)量為多個,從上述答案貼中提取出的多 個代碼對的其中一個可以按以下方式實現(xiàn):
[0066]
[0067] 其中,上方為缺陷代碼片段A,下方為修復(fù)代碼片段B。
[0068] 第二種方式:按同樣的提取方式提取問題貼中的多個缺陷代碼片段A和以及答案 貼中的多個修復(fù)代碼片段B,分別組成缺陷-修復(fù)代碼對A-B。
[0069] 同樣地,從問題貼以及答案貼中