一種缺陷檢測工具更新方法及裝置的制造方法
【專利摘要】本發(fā)明實施例公開了一種缺陷檢測工具更新方法及裝置,方法包括:根據(jù)待測試工程中異常出現(xiàn)的位置和時機,將異常劃分為至少一種異常類型;針對每一種異常類型的異常,確定所述異常類型對應的異常解決方案;根據(jù)每一種異常解決方案,更新所述缺陷檢測工具中的語言分析器,其中所述語言分析器至少包括詞法分析器和語法分析器。應用本發(fā)明實施例,能規(guī)避缺陷檢測工具因待檢測工程的開發(fā)環(huán)境及編譯器的多樣性帶來的非預期語法和/或詞法的影響而產(chǎn)生的異常,使得后續(xù)分析工作順利進行。
【專利說明】
一種缺陷檢測工具更新方法及裝置
技術領域
[0001]本發(fā)明涉及軟件測試技術領域,特別涉及一種缺陷檢測工具更新方法及裝置。
【背景技術】
[0002]眾所周知,軟件測試是軟件開發(fā)中一個非常重要的環(huán)節(jié),它主要被用來鑒別開發(fā)的軟件程序的正確性、完整性以及質量,確保軟件系統(tǒng)在投入使用前是沒有缺陷的。實際應用中,為節(jié)省人力、時間或硬件資源,提高測試效率,引入了基于自動化測試概念的各種缺陷檢測工具,且應用廣泛。
[0003]而對于C或C++語言,不同的操作系統(tǒng)或者不同平臺的編譯器下,語言標準會有著或多或少的區(qū)別,導致現(xiàn)有的缺陷檢測工具可能會由于不識別某種非預期的詞法和/或語法而產(chǎn)生異常,進而使得后續(xù)分析工作難以順利進行。當前,很多缺陷檢測工具在測試之前會進行一些替換來預防由于用戶開發(fā)平臺與其預期不一致而導致的預處理無法正常展開的情況,但在后續(xù)分析過程中,仍會因為缺陷檢測工具的語言分析器不識別關鍵字、自定義數(shù)據(jù)類型或者邏輯結構而拋出一些詞法或者語法的異常,從而影響一些或者整個工程的分析,只能得到很少的分析結果,無法完整地描述整個工程的缺陷,嚴重的情況下,甚至會得不到任何分析結果。
【發(fā)明內容】
[0004]本發(fā)明實施例的目的在于提供一種缺陷檢測工具更新方法及裝置,以規(guī)避所述缺陷檢測工具因待檢測工程的開發(fā)環(huán)境及編譯器的多樣性帶來的非預期語法和/或詞法的影響而產(chǎn)生的異常,使得后續(xù)分析工作順利進行。
[0005]為達到上述目的,本發(fā)明實施例公開了一種缺陷檢測工具更新方法,所述方法包括:
[0006]根據(jù)待測試工程中異常出現(xiàn)的位置和時機,將異常劃分為至少一種異常類型;
[0007]針對每一種異常類型的異常,確定所述異常類型對應的異常解決方案;
[0008]根據(jù)每一種異常解決方案,更新所述缺陷檢測工具中的語言分析器,其中所述語言分析器至少包括詞法分析器和語法分析器。
[0009]具體地,所述異常類型包括:
[0010]類型關鍵字和未知自定義類型引起的詞法異常、非類型關鍵字引起的詞法異常和未知邏輯結構引起的語法異常。
[0011]具體地,在所述異常類型為類型關鍵字和未知自定義類型引起的詞法異常的情況下,針對類型關鍵字和未知自定義類型引起的詞法異常,確定的異常解決方案為:
[0012]針對類型關鍵字和未知自定義類型引起的詞法異常,在聲明語句的推導關系中添加針對所述詞法分析器不能識別的字符串的聲明,其中,聲明的所述字符串的類型名稱與類型符號相同。
[0013]具體地,在所述異常類型為非類型關鍵字引起的詞法異常的情況下,針對非類型關鍵字引起的詞法異常,確定的異常解決方案為:
[0014]針對非類型關鍵字引起的詞法異常,在詞法分析過程中,忽略所述詞法分析器不能識別的字符串的詞法分析。
[0015]具體地,在所述異常類型為未知邏輯結構引起的語法異常的情況下,針對未知邏輯結構引起的語法異常,確定的異常解決方案為:
[0016]針對所述語法分析器不能識別的每一條語句,判斷刪除當前語句的第一個詞后,所述語法分析器是否能識別當前語句;
[0017]如果否,繼續(xù)執(zhí)行判斷刪除當前語句的第一個詞后,所述語法分析器是否能識別當前語句的操作步驟。
[0018]為達到上述目的,本發(fā)明實施例公開了一種缺陷檢測工具更新裝置,所述裝置包括:
[0019]劃分模塊,用于根據(jù)待測試工程中異常出現(xiàn)的位置和時機,將異常劃分為至少一種異常類型;
[0020]確定模塊,用于針對每一種異常類型的異常,確定所述異常類型對應的異常解決方案;
[0021]更新模塊,用于根據(jù)每一種異常解決方案,更新所述缺陷檢測工具中的語言分析器,其中所述語言分析器至少包括詞法分析器和語法分析器。
[0022]具體地,所述異常類型包括:
[0023]類型關鍵字和未知自定義類型引起的詞法異常、非類型關鍵字引起的詞法異常和未知邏輯結構引起的語法異常。
[0024]具體地,在所述異常類型為類型關鍵字和未知自定義類型引起的詞法異常的情況下,所述確定模塊,具體用于:
[0025]將在聲明語句的推導關系中添加針對所述詞法分析器不能識別的字符串的聲明,確定為與類型關鍵字和未知自定義類型引起的詞法異常對應的異常解決方案;其中,聲明的所述字符串的類型名稱與類型符號相同。
[0026]具體地,在所述異常類型為非類型關鍵字引起的詞法異常的情況下,所述確定模塊,具體用于:
[0027]將在詞法分析過程中,忽略所述詞法分析器不能識別的字符串的詞法分析,確定為與非類型關鍵字引起的詞法異常對應的異常解決方案。
[0028]具體地,在所述異常類型為未知邏輯結構引起的語法異常的情況下,所述確定模塊,具體用于:
[0029]將針對所述語法分析器不能識別的每一條語句,判斷刪除當前語句的第一個詞后,所述語法分析器是否能識別當前語句;如果否,繼續(xù)執(zhí)行判斷刪除當前語句的第一個詞后,所述語法分析器是否能識別當前語句,確定為與未知邏輯結構引起的語法異常對應的異常解決方案。
[0030]應用本發(fā)明實施例所提供的技術方案,根據(jù)待測試工程中異常出現(xiàn)的位置和時機,將異常劃分為至少一種異常類型,然后針對每一種異常類型的異常,確定所述異常類型對應的異常解決方案,再根據(jù)每一種異常解決方案,更新所述缺陷檢測工具中的語言分析器,其中所述語言分析器至少包括詞法分析器和語法分析器。可以看出,本發(fā)明實施例提供的方案能夠規(guī)避缺陷檢測工具在進行缺陷檢測時,因C和/或C++語言在不同開發(fā)環(huán)境及編譯器下語言標準不同導致分析器不識別關鍵字、自定義數(shù)據(jù)類型或者邏輯結構而拋出的一些詞法或者語法的異常,從而確保抽象語法樹的生成及其后續(xù)分析工作得以順利進行,得到所述待測試工程的分析結果。
[0031]當然,實施本發(fā)明的任一產(chǎn)品或方法必不一定需要同時達到以上所述的所有優(yōu)點。
【附圖說明】
[0032]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例或現(xiàn)有技術描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0033]圖1為本發(fā)明實施例提供的缺陷檢測工具更新方法的一種流程示意圖;
[0034]圖2為本發(fā)明實施例提供的缺陷檢測工具更新裝置的一種結構示意圖。
【具體實施方式】
[0035]下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0036]本發(fā)明實施例公開了一種缺陷檢測工具更新方法及裝置,以下分別進行詳細說明。
[0037]參見圖1,圖1為本發(fā)明實施例提供的缺陷檢測工具更新方法的一種流程示意圖,可以包括如下步驟:
[0038]SlOl,根據(jù)待測試工程中異常出現(xiàn)的位置和時機,將異常劃分為至少一種異常類型。
[0039]具體地,異常類型可以包括:類型關鍵字和未知自定義類型引起的詞法異常、非類型關鍵字引起的詞法異常和未知邏輯結構引起的語法異常。
[0040]實際應用中,通常缺陷檢測涉及到的是待測試工程的源文件、中間文件及工程文件,對這些文件通過語言分析器進行處理,看是否有異常,如果有異常,可以按照異常出現(xiàn)的位置和時機劃分異常類型。具體地,將在詞法分析過程中,處于語句聲明部分的異常劃分為類型關鍵字和未知自定義類型引起的詞法異常,處于其他部分的異常劃分為非類型關鍵字引起的詞法異常;將在語法分析過程中出現(xiàn)的異常劃分為由未知邏輯結構引起的語法異常。其中,類型關鍵字即是編程語言的關鍵字,又表示一種數(shù)據(jù)類型;未知自定義類型是指用戶自定義的數(shù)據(jù)類型,可以是結構體或類等數(shù)據(jù)類型。
[0041]S102,針對每一種異常類型的異常,確定所述異常類型對應的異常解決方案。
[0042]具體地,在所述異常類型為類型關鍵字和未知自定義類型引起的詞法異常的情況下,針對類型關鍵字和未知自定義類型引起的詞法異常,確定的異常解決方案為:
[0043]針對類型關鍵字和未知自定義類型引起的詞法異常,在聲明語句的推導關系中添加針對所述詞法分析器不能識別的字符串的聲明,其中,聲明的所述字符串的類型名稱與類型符號相同。
[0044]以下將以C語言中的未知自定義類型引起的詞法異常為例來進行詳細說明。
[0045]假設,缺陷檢測工具在對待測試工程進行測試時,在對語句“f00_f00進行詞法分析的過程中,由于詞法分析器不識別處于聲明符位置的字符串“foo”而報出異常,其中“foo”是一個未知自定義類型,由SlOl可以得知,此異常應劃分為類型關鍵字和未知自定義類型引起的詞法異常,針對這種異常,可以通過自定義一個數(shù)據(jù)類型來識別字符串“foo”,即,在聲明語句的推導關系中添加針對字符串“foo”的聲明,實際應用中,所述自定義的數(shù)據(jù)類型的名稱和類型符號可以是相同的。
[0046]比如:添加的針對字符串“foo”的聲明為“abcabc f00;”,其中第一個abc為數(shù)據(jù)類型的符號,第二個abc為數(shù)據(jù)類型的名稱。
[0047]具體地,在所述異常類型為非類型關鍵字引起的詞法異常的情況下,針對非類型關鍵字引起的詞法異常,確定的異常解決方案為:
[0048]針對非類型關鍵字引起的詞法異常,在詞法分析過程中,忽略所述詞法分析器不能識別的字符串的詞法分析。
[0049]實際應用中,對于構建抽象語法樹來說,非類型關鍵字在之后的語法分析中沒有特別重要的作用,通常情況下不涉及具體的功能實現(xiàn),因此,可以當作語句中的一個普通字符串,甚至可以忽略對它的詞法分析。
[°°50] 假設,缺陷檢測工具在對待測試工程進行測試時,對語句“something inta = 5;”進行詞法分析的過程中,由于詞法分析器不識別字符串“something”而報出異常,本領域技術人員可以理解的是,“ something ”不處于聲明位置,通過SlOl得知,此異常應劃分為非類型關鍵字引起的詞法異常,它只是一個修飾詞,不涉及具體的功能實現(xiàn),因此,在詞法分析過程中,可以直接將其忽略。
[0051]具體地,在所述異常類型為未知邏輯結構引起的語法異常的情況下,針對未知邏輯結構引起的語法異常,確定的異常解決方案為:
[0052]針對所述語法分析器不能識別的每一條語句,判斷刪除當前語句的第一個詞后,所述語法分析器是否能識別當前語句;
[0053]如果否,繼續(xù)執(zhí)行判斷刪除當前語句的第一個詞后,所述語法分析器是否能識別當前語句的操作步驟。
[0054]假設,缺陷檢測工具在對待測試工程進行檢測時,由于語法分析器不能識別語句“Socket&operator= (const Socket&) =delete的邏輯結構而報出異常,通過SlOl得知,此異常為未知邏輯結構引起的語法異常,針對這種異常,首先刪除第一個詞“Socket”,判斷當前語句“&operator = (const Socket&) = delete能否被語法分析器識別,如果不能,則刪除當前語句的第一個詞“&”,然后判斷語句“operator = (const Socket&) = delete能否被語法分析器識別,如果仍然不能,則繼續(xù)刪除當前語句的第一個詞“operator”,并判斷當前語句“=(const Socket&) =delete;”能否被語法分析器識別,以此類推,如果刪除直到最后一個詞仍不能被語法分析器識別,即語句“delete;”仍不能被識別,則刪除“delete”,將“;”識別為空語句。
[0055]S103,根據(jù)每一種異常解決方案,更新所述缺陷檢測工具中的語言分析器,其中所述語言分析器至少包括詞法分析器和語法分析器。
[0056]實際應用中,針對每一種異常類型的異常,可以根據(jù)由S102所確定的異常解決方案,更新缺陷檢測工具中的語言分析器,更具體地,分別更新缺陷檢測工具中的詞法分析器和語法分析器,即,將與類型關鍵字和未知自定義類型引起的詞法異常對應的異常解決方案、與非類型關鍵字引起的詞法異常對應的異常解決方案添加到詞法分析器中,將與未知邏輯結構引起的語法異常對應的異常解決方案添加到語法分析器中,以使得缺陷檢測工具中的語言分析器能夠規(guī)避所述異常的出現(xiàn),從而保障抽象語法樹的生成及后續(xù)分析過程的順利進行。
[0057]應用本發(fā)明圖1所示實施例,根據(jù)待測試工程中異常出現(xiàn)的位置和時機,將異常劃分為至少一種異常類型,然后針對每一種異常類型的異常,確定所述異常類型對應的異常解決方案,再根據(jù)每一種異常解決方案,更新所述缺陷檢測工具中的語言分析器,其中所述語言分析器至少包括詞法分析器和語法分析器??梢钥闯?,本發(fā)明實施例提供的方案能夠規(guī)避缺陷檢測工具在進行缺陷檢測時,因C和/或C++語言在不同開發(fā)環(huán)境及編譯器下語言標準不同導致分析器不識別關鍵字、自定義數(shù)據(jù)類型或者邏輯結構而拋出的一些詞法或者語法的異常,從而使抽象語法樹的生成及其后續(xù)分析工作得以順利進行,得到所述待測試工程的分析結果。
[0058]與上述的方法實施例相對應,本發(fā)明實施例還提供一種缺陷檢測工具更新裝置。
[0059]參見圖2,圖2為本發(fā)明實施例提供的缺陷檢測工具更新裝置的一種結構示意圖,與圖1所示的流程相對應,包括:
[0060]劃分模塊201,用于根據(jù)待測試工程中異常出現(xiàn)的位置和時機,將異常劃分為至少一種異常類型。
[0061]具體地,異常類型可以包括:類型關鍵字和未知自定義類型引起的詞法異常、非類型關鍵字引起的詞法異常和未知邏輯結構引起的語法異常。
[0062]確定模塊202,用于針對每一種異常類型的異常,確定所述異常類型對應的異常解決方案。
[0063]具體地,在所述異常類型為類型關鍵字和未知自定義類型引起的詞法異常的情況下,所述確定模塊,具體用于:
[0064]將在聲明語句的推導關系中添加針對所述詞法分析器不能識別的字符串的聲明,確定為與類型關鍵字和未知自定義類型引起的詞法異常對應的異常解決方案;其中,聲明的所述字符串的類型名稱與類型符號相同。
[0065]具體地,在所述異常類型為非類型關鍵字引起的詞法異常的情況下,所述確定模塊,具體用于:
[0066]將在詞法分析過程中,忽略所述詞法分析器不能識別的字符串的詞法分析,確定為與非類型關鍵字引起的詞法異常對應的異常解決方案。
[0067]具體地,在所述異常類型為未知邏輯結構引起的語法異常的情況下,所述確定模塊,具體用于:
[0068]將針對所述語法分析器不能識別的每一條語句,判斷刪除當前語句的第一個詞后,所述語法分析器是否能識別當前語句;如果否,繼續(xù)執(zhí)行判斷刪除當前語句的第一個詞后,所述語法分析器是否能識別當前語句,確定為與未知邏輯結構引起的語法異常對應的異常解決方案。
[0069]更新模塊203,用于根據(jù)每一種異常解決方案,更新所述缺陷檢測工具中的語言分析器,其中所述語言分析器至少包括詞法分析器和語法分析器。
[0070]應用本發(fā)明圖2所示實施例,根據(jù)待測試工程中異常出現(xiàn)的位置和時機,將異常劃分為至少一種異常類型,然后針對每一種異常類型的異常,確定所述異常類型對應的異常解決方案,再根據(jù)每一種異常解決方案,更新所述缺陷檢測工具中的語言分析器,其中所述語言分析器至少包括詞法分析器和語法分析器。可以看出,本發(fā)明實施例提供的方案能夠規(guī)避缺陷檢測工具在進行缺陷檢測時,因C和/或C++語言在不同開發(fā)環(huán)境及編譯器下語言標準不同導致分析器不識別關鍵字、自定義數(shù)據(jù)類型或者邏輯結構而拋出的一些詞法或者語法的異常,從而使抽象語法樹的生成及其后續(xù)分析工作得以順利進行,得到所述待測試工程的分析結果。
[0071]需要說明的是,在本文中,諸如第一和第二等之類的關系術語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關系或者順序。而且,術語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設備中還存在另外的相同要素。
[0072]本說明書中的各個實施例均采用相關的方式描述,各個實施例之間相同相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。尤其,對于裝置實施例而言,由于其基本相似于方法實施例,所以描述的比較簡單,相關之處參見方法實施例的部分說明即可。
[0073]本領域普通技術人員可以理解實現(xiàn)上述方法實施方式中的全部或部分步驟是可以通過程序來指令相關的硬件來完成,所述的程序可以存儲于計算機可讀取存儲介質中,這里所稱得的存儲介質,如:R0M/RAM、磁碟、光盤等。
[0074]以上所述僅為本發(fā)明的較佳實施例而已,并非用于限定本發(fā)明的保護范圍。凡在本發(fā)明的精神和原則之內所作的任何修改、等同替換、改進等,均包含在本發(fā)明的保護范圍內。
【主權項】
1.一種缺陷檢測工具更新方法,其特征在于,所述方法包括: 根據(jù)待測試工程中異常出現(xiàn)的位置和時機,將異常劃分為至少一種異常類型; 針對每一種異常類型的異常,確定所述異常類型對應的異常解決方案; 根據(jù)每一種異常解決方案,更新所述缺陷檢測工具中的語言分析器,其中所述語言分析器至少包括詞法分析器和語法分析器。2.根據(jù)權利要求1所述的方法,其特征在于,所述異常類型包括: 類型關鍵字和未知自定義類型引起的詞法異常、非類型關鍵字引起的詞法異常和未知邏輯結構引起的語法異常。3.根據(jù)權利要求2所述的方法,其特征在于,在所述異常類型為類型關鍵字和未知自定義類型引起的詞法異常的情況下,針對類型關鍵字和未知自定義類型引起的詞法異常,確定的異常解決方案為: 針對類型關鍵字和未知自定義類型引起的詞法異常,在聲明語句的推導關系中添加針對所述詞法分析器不能識別的字符串的聲明,其中,聲明的所述字符串的類型名稱與類型符號相同。4.根據(jù)權利要求2所述的方法,其特征在于,在所述異常類型為非類型關鍵字引起的詞法異常的情況下,針對非類型關鍵字引起的詞法異常,確定的異常解決方案為: 針對非類型關鍵字引起的詞法異常,在詞法分析過程中,忽略所述詞法分析器不能識別的字符串的詞法分析。5.根據(jù)權利要求2所述的方法,其特征在于,在所述異常類型為未知邏輯結構引起的語法異常的情況下,針對未知邏輯結構引起的語法異常,確定的異常解決方案為: 針對所述語法分析器不能識別的每一條語句,判斷刪除當前語句的第一個詞后,所述語法分析器是否能識別當前語句; 如果否,繼續(xù)執(zhí)行判斷刪除當前語句的第一個詞后,所述語法分析器是否能識別當前語句的操作步驟。6.一種缺陷檢測工具更新裝置,其特征在于,所述裝置包括: 劃分模塊,用于根據(jù)待測試工程中異常出現(xiàn)的位置和時機,將異常劃分為至少一種異常類型; 確定模塊,用于針對每一種異常類型的異常,確定所述異常類型對應的異常解決方案; 更新模塊,用于根據(jù)每一種異常解決方案,更新所述缺陷檢測工具中的語言分析器,其中所述語言分析器至少包括詞法分析器和語法分析器。7.根據(jù)權利要求6所述的裝置,其特征在于,所述異常類型包括: 類型關鍵字和未知自定義類型引起的詞法異常、非類型關鍵字引起的詞法異常和未知邏輯結構引起的語法異常。8.根據(jù)權利要求7所述的裝置,其特征在于,在所述異常類型為類型關鍵字和未知自定義類型引起的詞法異常的情況下,所述確定模塊,具體用于: 將在聲明語句的推導關系中添加針對所述詞法分析器不能識別的字符串的聲明,確定為與類型關鍵字和未知自定義類型引起的詞法異常對應的異常解決方案;其中,聲明的所述字符串的類型名稱與類型符號相同。9.根據(jù)權利要求7所述的裝置,其特征在于,在所述異常類型為非類型關鍵字引起的詞法異常的情況下,所述確定模塊,具體用于: 將在詞法分析過程中,忽略所述詞法分析器不能識別的字符串的詞法分析,確定為與非類型關鍵字引起的詞法異常對應的異常解決方案。10.根據(jù)權利要求7所述的裝置,其特征在于,在所述異常類型為未知邏輯結構引起的語法異常的情況下,所述確定模塊,具體用于: 將針對所述語法分析器不能識別的每一條語句,判斷刪除當前語句的第一個詞后,所述語法分析器是否能識別當前語句;如果否,繼續(xù)執(zhí)行判斷刪除當前語句的第一個詞后,所述語法分析器是否能識別當前語句,確定為與未知邏輯結構引起的語法異常對應的異常解決方案。
【文檔編號】G06F9/445GK106020913SQ201610390646
【公開日】2016年10月12日
【申請日】2016年6月6日
【發(fā)明人】金大海, 肖飛, 肖一飛, 宮云戰(zhàn), 王雅文, 黃俊飛
【申請人】北京郵電大學