本發(fā)明涉及一種源代碼分析裝置、用于該裝置的計(jì)算機(jī)程序及其記錄介質(zhì),涉及一種在根據(jù)預(yù)先定義的分析規(guī)則分析的分析對(duì)象源代碼中發(fā)現(xiàn)缺陷的情況下,能夠提供缺陷修改方案的源代碼分析裝置、用于該裝置的計(jì)算機(jī)程序及其記錄介質(zhì)。
背景技術(shù):
:靜態(tài)程序分析(StaticCodeAnalysis)是分析計(jì)算機(jī)軟件的多種方法中的一種。該方法的特征在于,不直接運(yùn)行軟件,以開(kāi)發(fā)中的軟件源代碼為對(duì)象進(jìn)行分析。靜態(tài)分析工具(StaticAnalysisTool)是用于被開(kāi)發(fā)成實(shí)現(xiàn)利用軟件自動(dòng)進(jìn)行靜態(tài)程序分析而開(kāi)發(fā)的程序,而不是利用人手。一般情況下,源代碼的大小非常龐大,用人手一一進(jìn)行靜態(tài)程序分析幾乎不太可能。因此,可以說(shuō)使這種分析實(shí)現(xiàn)自動(dòng)化是靜態(tài)分析工具的作用。靜態(tài)分析工具根據(jù)種類(lèi)能夠從源代碼中檢測(cè)出多種缺陷或漏洞,并將通過(guò)分析檢測(cè)出的缺陷告知用戶(hù)?,F(xiàn)有技術(shù)中公開(kāi)過(guò)多種如上所述的靜態(tài)分析工具形式的源代碼分析裝置。但是,現(xiàn)有的公開(kāi)或使用的源代碼分析裝置僅提供缺陷檢測(cè)以及生成對(duì)其的檢測(cè)信息的有限的功能,因此存在對(duì)于檢測(cè)出的缺陷的修改工作需要依賴(lài)用戶(hù)(程序員)的個(gè)人知識(shí)和經(jīng)驗(yàn)的局限性。技術(shù)實(shí)現(xiàn)要素:(一)要解決的技術(shù)問(wèn)題本發(fā)明是考慮到如上所述的問(wèn)題而提出的,其目的在于提供一種在根據(jù)預(yù)先定義的分析規(guī)則分析的分析對(duì)象源代碼中發(fā)現(xiàn)缺陷的情況下,能夠提供缺陷修改方案的源代碼分析裝置、用于該裝置的計(jì)算機(jī)程序及其記錄介質(zhì)。(二)技術(shù)方案根據(jù)為實(shí)現(xiàn)上述目的的本發(fā)明的一個(gè)方面,公開(kāi)一種源代碼分析裝置,其包括:源代碼分析模塊,包括:語(yǔ)法分析部,從源代碼中提取并提煉分析所需的信息;缺陷檢測(cè)部,以在語(yǔ)法分析部提煉的分析所需的信息為基礎(chǔ),檢測(cè)源代碼中能夠成為問(wèn)題的缺陷;修改示例生成部,以在缺陷檢測(cè)部檢測(cè)出的缺陷信息以及在語(yǔ)法分析部提煉的分析所需的信息為基礎(chǔ),生成修改示例信息和注意事項(xiàng)信息中的至少一種;分析結(jié)果傳送部,將生成的缺陷信息、修改示例信息、注意事項(xiàng)信息中的至少一種構(gòu)成為綜合分析結(jié)果信息并傳送至分析結(jié)果輸出模塊;以及分析結(jié)果輸出模塊,包括:缺陷輸出部,在從源代碼分析模塊接收的綜合分析結(jié)果信息中提取并輸出缺陷信息;修改示例輸出部,在從源代碼分析模塊接收的綜合分析結(jié)果信息中提取并輸出修改示例信息和注意事項(xiàng)信息中至少一種。優(yōu)選地,所述修改示例生成部對(duì)于一個(gè)缺陷信息生成一個(gè)或一個(gè)以上的修改示例信息或者注意事項(xiàng)信息。優(yōu)選地,所述缺陷檢測(cè)部的缺陷信息檢測(cè)是通過(guò)執(zhí)行用于檢查各自是否存在缺陷的各檢查器的功能來(lái)實(shí)現(xiàn)的,所述各檢查器將綜合分析結(jié)果信息傳送至修改示例生成部,所述綜合分析結(jié)果信息包括針對(duì)檢測(cè)缺陷信息時(shí)檢測(cè)出的缺陷信息生成的修改示例信息和注意事項(xiàng)信息中的至少一種。優(yōu)選地,所述修改示例信息包括對(duì)檢測(cè)出缺陷信息的源代碼行‘添加’另一代碼行、‘變更’為另一代碼行、‘刪除’檢測(cè)出的代碼行中的至少一種。優(yōu)選地,包含于所述修改示例信息中的修改示例代碼,將檢測(cè)出缺陷信息的檢查器根據(jù)預(yù)先設(shè)定的模板分析并推測(cè)源代碼的結(jié)果作為輸入值來(lái)生成。根據(jù)本發(fā)明的另一個(gè)方面,公開(kāi)一種儲(chǔ)存在介質(zhì)中的計(jì)算機(jī)程序,其作為在源代碼分析裝置中用于執(zhí)行源代碼分析功能和分析結(jié)果輸出功能的計(jì)算機(jī)程序,所述源代碼分析功能包括:語(yǔ)法分析功能,從源代碼中提取并提煉分析所需的信息;缺陷檢測(cè)功能,以從語(yǔ)法分析功能中提煉的分析所需的信息為基礎(chǔ),在源代碼中檢測(cè)能夠成為問(wèn)題的缺陷信息;修改示例生成功能,以在缺陷檢測(cè)功能中檢測(cè)出的缺陷信息和在語(yǔ)法分析功能中提煉出的分析所需的信息為基礎(chǔ),生成修改示例信息以及注意事項(xiàng)信息中的至少一種;分析結(jié)果傳送功能,將生成的缺陷信息和修改示例信息、注意事項(xiàng)信息中的至少一種構(gòu)成為綜合分析結(jié)果信息,并傳送至分析結(jié)果輸出功能;所述分析結(jié)果輸出功能包括:缺陷輸出功能,在從源代碼分析功能接收的綜合分析結(jié)果信息中提取并輸出缺陷信息;修改示例輸出功能,在從源代碼分析功能接收的綜合分析結(jié)果信息中提取并輸出修改示例信息和注意事項(xiàng)信息中的至少一種。根據(jù)本發(fā)明的另一個(gè)方面,公開(kāi)一種記錄有計(jì)算機(jī)程序的計(jì)算機(jī)可讀記錄介質(zhì),其為記錄有在源代碼分析裝置中用于執(zhí)行源代碼分析功能和分析結(jié)果輸出功能的計(jì)算機(jī)程序的記錄介質(zhì),所述源代碼分析功能包括:語(yǔ)法分析功能,從源代碼中提取并提煉分析所需的信息;缺陷檢測(cè)功能,以從語(yǔ)法分析功能中提煉的分析所需的信息為基礎(chǔ),在源代碼中檢測(cè)能夠成為問(wèn)題的缺陷信息;修改示例生成功能,以在缺陷檢測(cè)功能中檢測(cè)出的缺陷信息和在語(yǔ)法分析功能中提煉出的分析所需的信息為基礎(chǔ),生成修改示例信息以及注意事項(xiàng)信息中的至少一種;分析結(jié)果傳送功能,將生成的缺陷信息和修改示例信息、注意事項(xiàng)信息中的至少一種構(gòu)成為綜合分析結(jié)果信息,并傳送至分析結(jié)果輸出功能;所述分析結(jié)果輸出功能包括:缺陷輸出功能,在從源代碼分析功能接收的綜合分析結(jié)果信息中提取并輸出缺陷信息;修改示例輸出功能,在從源代碼分析功能接收的綜合分析結(jié)果信息中提取并輸出修改示例信息和注意事項(xiàng)信息中的至少一種。(三)有益效果如上所述的本發(fā)明構(gòu)成為在根據(jù)預(yù)先定義的分析規(guī)則分析的分析對(duì)象源代碼中發(fā)現(xiàn)缺陷的情況下,能夠提供缺陷修改方案,因此,在對(duì)源代碼進(jìn)行缺陷修改時(shí),不依賴(lài)用戶(hù)(程序員)的個(gè)人知識(shí)和經(jīng)驗(yàn),能夠進(jìn)行較為客觀且提高的缺陷修改操作。附圖說(shuō)明圖1是示出本發(fā)明的一個(gè)實(shí)施例的源代碼分析裝置的結(jié)構(gòu)圖,圖2示出本發(fā)明的一個(gè)實(shí)施例的源代碼分析裝置的分析結(jié)果信息的構(gòu)成例,圖3示出通過(guò)本發(fā)明的一個(gè)實(shí)施例的源代碼分析裝置的缺陷檢測(cè)部的檢查器發(fā)現(xiàn)缺陷的源代碼的頁(yè)面例,圖4示出本發(fā)明的一個(gè)實(shí)施例的源代碼分析裝置的點(diǎn)擊修改示例按鈕后的綜合分析結(jié)果的輸出頁(yè)面例,圖5示出本發(fā)明的一個(gè)實(shí)施例的源代碼分析裝置的點(diǎn)擊修改示例按鈕后的綜合分析結(jié)果輸出頁(yè)面中示例菜單的顯示例,圖6示出本發(fā)明的一個(gè)實(shí)施例的源代碼分析裝置的點(diǎn)擊修改示例按鈕后的綜合分析結(jié)果輸出頁(yè)面中缺陷信息的顯示例,圖7示出本發(fā)明的一個(gè)實(shí)施例的源代碼分析裝置的點(diǎn)擊修改示例按鈕后的綜合分析結(jié)果輸出頁(yè)面中修改示例信息的顯示例,圖8示出本發(fā)明的一個(gè)實(shí)施例的源代碼分析裝置的點(diǎn)擊修改示例按鈕后的綜合分析結(jié)果輸出頁(yè)面中注意事項(xiàng)信息的顯示例,圖9示出用于本發(fā)明的一個(gè)實(shí)施例的源代碼分析裝置的體現(xiàn)檢查器類(lèi)別中XML輸出類(lèi)別的例子,圖10示出用于本發(fā)明的一個(gè)實(shí)施例的源代碼分析裝置的體現(xiàn)檢查器類(lèi)別中代碼生成類(lèi)別的例子。具體實(shí)施方式本發(fā)明在不脫離其技術(shù)思想或主要特征的情況下可以多種形式實(shí)施。因此,本發(fā)明的實(shí)施例的所有方面僅僅是單純的例,從而不能限定地進(jìn)行解釋。第一、第二等術(shù)語(yǔ)可用于說(shuō)明多種構(gòu)成要素,但是所述構(gòu)成要素不能限定于所述術(shù)語(yǔ)。所述術(shù)語(yǔ)僅用于將一個(gè)構(gòu)成要素區(qū)分于另一個(gè)構(gòu)成要素。例如,在不脫離本發(fā)明的權(quán)利范圍的情況下,第一構(gòu)成要素可命名為第二構(gòu)成要素,類(lèi)似地,第二構(gòu)成要素也可命名為第一構(gòu)成要素?!昂?或”術(shù)語(yǔ)包括多個(gè)相關(guān)記載的項(xiàng)目的組合或多個(gè)相關(guān)記載的項(xiàng)目中的任意項(xiàng)目。在提及某個(gè)構(gòu)成要素“連接”或“接入”另一個(gè)構(gòu)成要素時(shí),應(yīng)理解為,可以直接連接或接入所述另一個(gè)構(gòu)成要素,也可以是其中間存在其他構(gòu)成要素。與此相反,在提及某個(gè)構(gòu)成要素“直接連接”或“直接接入”另一個(gè)構(gòu)成要素時(shí),應(yīng)理解為其中間不存在其他構(gòu)成要素。在本申請(qǐng)中使用的術(shù)語(yǔ)僅用于說(shuō)明特定的實(shí)施例,并不是為了限定本發(fā)明。除非在上下文上有明確表示其他意思,則單數(shù)包括復(fù)數(shù)的表示。在本申請(qǐng)中,“包括”或“具備”、“具有”等術(shù)語(yǔ)是為了指定在說(shuō)明書(shū)中記載的特征、數(shù)字、步驟、動(dòng)作、構(gòu)成要素、部件或它們的組合的存在,應(yīng)理解為不排除一個(gè)或以上的其他特征或數(shù)字、步驟、動(dòng)作、構(gòu)成要素、部件或它們的組合的存在或附加可能性。除非有不同定義,包括技術(shù)性或科學(xué)性術(shù)語(yǔ)在內(nèi),在此使用的所有術(shù)語(yǔ)具有與本發(fā)明所屬
技術(shù)領(lǐng)域:
的普通技術(shù)人員普遍理解的含義相同的含義。與普遍使用的定義在詞典的術(shù)語(yǔ)相同的術(shù)語(yǔ)應(yīng)解釋為具有與相關(guān)技術(shù)的上下文所具有的含義一致的含義,除非本發(fā)明有明確定義,不得解釋為異常的含義或過(guò)度形式性的含義。下面,參照附圖對(duì)本發(fā)明的優(yōu)選實(shí)施例進(jìn)行詳細(xì)說(shuō)明,且與附圖編碼無(wú)關(guān)地、相同或?qū)?yīng)的構(gòu)成要素使用相同的附圖標(biāo)記,并省略對(duì)此的重復(fù)說(shuō)明。在對(duì)本發(fā)明進(jìn)行說(shuō)明時(shí),若認(rèn)為對(duì)相關(guān)的公知技術(shù)的具體說(shuō)明有可能混淆本發(fā)明的要旨,則省略對(duì)其的詳細(xì)說(shuō)明。圖1是本發(fā)明的一個(gè)實(shí)施例的源代碼分析裝置的結(jié)構(gòu)圖,圖2是本發(fā)明的一個(gè)實(shí)施例的源代碼分析裝置的分析結(jié)果信息的構(gòu)成例。本實(shí)施例的源代碼分析裝置A包括源代碼輸入模塊100、源代碼分析模塊200、分析結(jié)果輸出模塊300以及控制模塊400,例如,用于實(shí)現(xiàn)源代碼分析裝置的計(jì)算機(jī)程序可以在普通的計(jì)算機(jī)硬件上驅(qū)動(dòng)。例如,源代碼輸入模塊100以代碼文件的形式接收分析對(duì)象源代碼,以使后述的源代碼分析模塊200進(jìn)行分析處理。例如,代碼文件的輸入可通過(guò)用戶(hù)的文件輸入或開(kāi)放(open)操作實(shí)現(xiàn)。源代碼分析模塊200從為進(jìn)行分析而輸入并傳送的源代碼中生成綜合分析結(jié)果240A,其包括缺陷信息220A以及修改示例信息230A、修改時(shí)會(huì)發(fā)生的各種種類(lèi)的注意事項(xiàng)信息230B。分析結(jié)果輸出模塊300以從源代碼分析模塊200接收的綜合分析結(jié)果240A為基礎(chǔ),給用戶(hù)展示缺陷信息220A、修改示例信息230A、注意事項(xiàng)信息230B。根據(jù)實(shí)施例,源代碼分析模塊200和分析結(jié)果輸出模塊300可集成為一個(gè)模塊來(lái)實(shí)現(xiàn)。作為優(yōu)選實(shí)施例,源代碼分析模塊200包括:語(yǔ)法分析部210、缺陷檢測(cè)部220、修改示例生成部230、分析結(jié)果傳送部240。語(yǔ)法分析部210執(zhí)行從接收的源代碼中提取并提煉(refining)分析所需的各種信息的作用。例如,分析所需的信息可為抽象語(yǔ)法樹(shù)(AbstractSyntaxTree)或源代碼行數(shù)、位置信息等。缺陷檢測(cè)部220以在語(yǔ)法分析部210提煉的分析所需的信息為基礎(chǔ)從源代碼中檢測(cè)出可能成為問(wèn)題的缺陷信息220A。例如,所述缺陷檢測(cè)部220的缺陷信息220A的檢測(cè)可通過(guò)檢查是否有缺陷的檢查器的功能運(yùn)行來(lái)實(shí)現(xiàn)。例如,缺陷信息220A由實(shí)際發(fā)生缺陷的源代碼的文件名、行等位置信息和缺陷的種類(lèi)、實(shí)際成為缺陷原因的部分、如發(fā)生缺陷的源代碼流的實(shí)際缺陷信息等構(gòu)成。所述語(yǔ)法分析部210的語(yǔ)法分析功能以及缺陷檢測(cè)部220的缺陷信息檢測(cè)功能可通過(guò)與公知的多種靜態(tài)分析工具(StaticAnalysisTool)的語(yǔ)法分析功能以及缺陷信息檢測(cè)功能相同或類(lèi)似的構(gòu)成來(lái)實(shí)現(xiàn)。靜態(tài)分析工具有公知的基于語(yǔ)法(Syntactic)分析或基于語(yǔ)義(Semantic)分析方式的多種常用產(chǎn)品,因此省略其詳細(xì)說(shuō)明。所述缺陷檢測(cè)部220的缺陷信息220A檢測(cè)是通過(guò)用于檢查各自是否存在缺陷的各檢查器的功能運(yùn)行來(lái)實(shí)現(xiàn)的,所述各檢查器將包括針對(duì)檢測(cè)缺陷信息220A時(shí)檢測(cè)出的缺陷信息220A生成的修改示例信息230A和注意事項(xiàng)信息230B的綜合分析結(jié)果信息240A傳送至修改示例生成部230。例如,綜合分析結(jié)果信息240A可以以修改示例可擴(kuò)展標(biāo)記語(yǔ)言(XML)文件的形式構(gòu)成,但不是必須限定于此種形式。另外,在相同的一個(gè)檢查器的情況下,也可根據(jù)分析出的源代碼的結(jié)構(gòu),傳送不同的修改示例信息230A和注意事項(xiàng)信息230B。并且,當(dāng)檢查器根據(jù)缺陷的特點(diǎn)不需要非得對(duì)檢查出的缺陷提供修改示例信息230A和注意事項(xiàng)信息230B的情況下,可不提供這些信息,或者,只提供修改示例信息230A或只提供注意事項(xiàng)信息230B。并且,對(duì)于一個(gè)缺陷信息220A可生成多個(gè)修改示例信息230A和注意事項(xiàng)信息230B,以生產(chǎn)多個(gè)應(yīng)對(duì)方案,對(duì)此將在后面進(jìn)行說(shuō)明。在本實(shí)施例的說(shuō)明中,對(duì)一起提供修改示例信息230A和注意事項(xiàng)信息230B的情況進(jìn)行示例說(shuō)明。修改示例生成部230以缺陷檢測(cè)部220檢測(cè)出的缺陷信息220A以及語(yǔ)法分析部210提煉的分析所需的信息為基礎(chǔ),來(lái)生成修改示例信息230A和注意事項(xiàng)信息230B。修改示例信息230A是指能夠告知如何將在缺陷信息220A內(nèi)發(fā)生的缺陷修改為實(shí)際源代碼的修改示例代碼。例如,以修改示例信息230A中告知的信息為基礎(chǔ)修改源代碼,則不會(huì)發(fā)生缺陷。所述修改示例信息230A可包括對(duì)檢測(cè)出缺陷信息220A的源代碼行進(jìn)行“添加”另一代碼行、“變更”為另一代碼行、“刪除”檢測(cè)出的代碼行中的至少一種。注意事項(xiàng)信息230B是指用戶(hù)在修改源代碼時(shí)可能發(fā)生的多種注意事項(xiàng)信息。例如,可為,有助于用戶(hù)修改源代碼的信息,或者為按照修改示例信息230A告知的修改示例修改代碼時(shí),可能發(fā)生的附帶的問(wèn)題,或者為因源代碼分析裝置A無(wú)法自動(dòng)生成而需要用戶(hù)親自修改的事項(xiàng)等。分析結(jié)果傳送部240將先前生成的缺陷信息220A或修改示例信息230A、注意事項(xiàng)信息230B構(gòu)成為綜合分析結(jié)果信息240A,并傳送至分析結(jié)果輸出模塊300。這種綜合分析結(jié)果信息240A可為文件或儲(chǔ)存器內(nèi)的數(shù)據(jù),也可包含有其他信息。并且,根據(jù)缺陷的種類(lèi),在一個(gè)缺陷信息220A中,修改示例信息230A或注意事項(xiàng)信息230B可以不存在或存在更多。作為優(yōu)選例,分析結(jié)果輸出模塊300包括缺陷輸出部310和修改示例輸出部320。缺陷輸出部310在從源代碼分析模塊200接收的綜合分析結(jié)果信息240A中提取缺陷信息220A展示給用戶(hù)。一般情況下,這種信息可以是如上所述的源代碼的文件名、如行等的位置信息、缺陷的種類(lèi)或成為缺陷的實(shí)際原因的部分、導(dǎo)致缺陷發(fā)生的源代碼流等。修改示例輸出部320在從源代碼分析模塊200接收的綜合分析結(jié)果信息240A中提取修改示例信息230A和注意事項(xiàng)信息230B展示給用戶(hù)。一般情況下,這種信息可以是如上所述的對(duì)于如何修改實(shí)際代碼的修改示例代碼信息和修改源代碼時(shí)可能發(fā)生的多種注意事項(xiàng)信息。根據(jù)實(shí)施例,缺陷輸出部310和修改示例輸出部320可同時(shí)執(zhí)行輸出或額外輸出其他信息。下面,通過(guò)各示例頁(yè)面對(duì)本實(shí)施例的源代碼分析裝置的具體實(shí)施例進(jìn)行示例說(shuō)明。圖3示出通過(guò)本發(fā)明的一個(gè)實(shí)施例的源代碼分析裝置的缺陷檢測(cè)部的檢查器發(fā)現(xiàn)缺陷的源代碼頁(yè)面例。發(fā)現(xiàn)缺陷時(shí)頁(yè)面的右側(cè)上端表示有修改示例按鈕。圖4示出本發(fā)明的一個(gè)實(shí)施例的源代碼分析裝置的點(diǎn)擊修改示例按鈕后的綜合分析結(jié)果的輸出頁(yè)面例。頁(yè)面上分別顯示缺陷信息、修改示例信息、注意事項(xiàng)信息。對(duì)于一個(gè)缺陷信息,可提供一個(gè)或一個(gè)以上的修改示例信息或注意事項(xiàng)信息。圖5示出本發(fā)明的一個(gè)實(shí)施例的源代碼分析裝置的點(diǎn)擊修改示例按鈕后的綜合分析結(jié)果輸出頁(yè)面中示例菜單的顯示例。示例菜單的數(shù)量可根據(jù)檢查器的種類(lèi)和源代碼而變得不同。各示例菜單可通過(guò)點(diǎn)擊左側(cè)端的三角形標(biāo)記收回或展開(kāi)。圖6示出本發(fā)明的一個(gè)實(shí)施例的源代碼分析裝置的點(diǎn)擊修改示例按鈕后的綜合分析結(jié)果輸出頁(yè)面中缺陷信息的顯示例。缺陷信息菜單告知如何修改檢查器檢測(cè)出的缺陷。圖7示出本發(fā)明的一個(gè)實(shí)施例的源代碼分析裝置的點(diǎn)擊修改示例按鈕后的綜合分析結(jié)果輸出頁(yè)面中修改示例信息的顯示例。在修改示例菜單中告知如何修改源代碼的哪個(gè)部分。所述示例代碼盡可能以與實(shí)際代碼相同的方式提供。在頁(yè)面中由紅色標(biāo)注(gradation)且由“-”開(kāi)始的行是表示要?jiǎng)h除的代碼,由綠色標(biāo)注且由“+”開(kāi)始的行相當(dāng)于需要添加的代碼。需要修改的代碼行相隔很遠(yuǎn)或是其他文件時(shí),可顯示多個(gè)框(box)。圖8示出本發(fā)明的一個(gè)實(shí)施例的源代碼分析裝置的點(diǎn)擊修改示例按鈕后的綜合分析結(jié)果輸出頁(yè)面中注意事項(xiàng)信息的顯示例。注意事項(xiàng)信息說(shuō)明修改源代碼后可能發(fā)生的多種情況或者注意事項(xiàng)。因此,其數(shù)量和內(nèi)容可根據(jù)檢查器的種類(lèi)以及源代碼而發(fā)生變化。下述的源代碼是本發(fā)明的一個(gè)實(shí)施例的源代碼分析裝置的修改示例XML文件的例,表1是表示下述源代碼的修改示例XML文件的主要標(biāo)簽或者變量的定義例的表。通過(guò)下面的源代碼和表1的示例,能夠理解本實(shí)施例的修改示例XML文件。[表1]alarm表示最上位缺陷要素。scaSCA最上位要素。alternative分別包括一個(gè)應(yīng)對(duì)方案的要素。desc表示應(yīng)對(duì)方案的說(shuō)明要素。(=資源屬性)arg表示應(yīng)對(duì)方案說(shuō)明要素的參數(shù)值。code表示變更的代碼要素。note表示注意事項(xiàng)要素。(note)desc表示注意事項(xiàng)的說(shuō)明要素。(=資源屬性)(note)arg表示注意事項(xiàng)的說(shuō)明要素的參數(shù)值value表示注意事項(xiàng)中變更的值的要素‘sca’或者‘Sca’作為‘SmartCodeAlternative’的縮寫(xiě),為了方便,命名為包括本實(shí)施例的修改示例XML文件所包括的多個(gè)應(yīng)對(duì)方案(alternative)的上位要素的示例名稱(chēng)。圖9示出用于本發(fā)明的一個(gè)實(shí)施例的源代碼分析裝置的體現(xiàn)檢查器類(lèi)別中XML輸出類(lèi)別的例子,圖10示出用于本發(fā)明的一個(gè)實(shí)施例的源代碼分析裝置的體現(xiàn)檢查器類(lèi)別中代碼生成類(lèi)別的例子。針對(duì)圖9,從上位類(lèi)別開(kāi)始進(jìn)行簡(jiǎn)單的示例說(shuō)明。最上部的‘AlarmXMLMaker’類(lèi)別,在輸出提醒時(shí)若有Sca例程(instance),則一起輸出。中間的‘Sca’類(lèi)別負(fù)責(zé)ScaAlternative例程的生成,且檢查器生成應(yīng)對(duì)方案時(shí),使用該函數(shù)。最下部的‘ScaAlternative’類(lèi)別(應(yīng)對(duì)方案信息類(lèi)別)包括說(shuō)明、代碼、注意事項(xiàng)信息,并且有代碼的添加/變更/刪除信息接收‘CodeGenerator’類(lèi)別所生成的代碼信息或從原始源代碼接收的情況。在圖10中,‘CodeGenerator’類(lèi)別(代碼生成類(lèi)別)將根據(jù)一定的模板對(duì)原始源代碼進(jìn)行分析以及推測(cè)的結(jié)果作為輸入值,生成修改示例代碼?!瓹odeGenerator’類(lèi)別包括用于添加行的‘SimpleCodeGenerator’、用于生成類(lèi)型的‘TypeCodeGenerator’、用于生成變量的‘VariableCodeGenerator’、用于生成函數(shù)的‘FunctionCodeGenerator’等。表2示出用于本發(fā)明的一個(gè)實(shí)施例的源代碼分析裝置的檢查器結(jié)構(gòu)的一個(gè)例子,表3示出用于本發(fā)明的一個(gè)實(shí)施例的源代碼分析裝置的檢查器結(jié)構(gòu)的另一例子,表4是表示用于本發(fā)明的一個(gè)實(shí)施例的源代碼分析裝置的檢查器結(jié)構(gòu)的又一例子。[表2]例題1是檢查除了dot(.)運(yùn)算符之外的二元運(yùn)算符和前后操作數(shù)需用空格區(qū)分的檢查器??赏ㄟ^(guò)在提供的源代碼中使用二元運(yùn)算符‘-’的部分的左右插入空格來(lái)編寫(xiě)應(yīng)對(duì)方案代碼(修改示例代碼)。該例題沒(méi)有特別的注意事項(xiàng)。[表3]例題2是提示對(duì)通過(guò)數(shù)組類(lèi)型的參數(shù)接收的數(shù)組類(lèi)型的變量不能使用sizeof的檢查器。應(yīng)對(duì)方案代碼在1、3號(hào)行上發(fā)生,此時(shí)由于1號(hào)行的變更生成函數(shù)接口變更的注意事項(xiàng)。如果函數(shù)接口變更,則該函數(shù)的聲明或使用的部分也需要修改。在3號(hào)行的strncpy中的第三個(gè)參數(shù)的始點(diǎn)加入在應(yīng)對(duì)方案代碼1中添加的長(zhǎng)度值的變量。沒(méi)有與此相關(guān)的特別注意事項(xiàng)。[表4]例題3是檢查無(wú)效果的函數(shù)調(diào)用的檢查器。例如,在memset中,第三個(gè)參數(shù)的值為0時(shí),成為無(wú)實(shí)際含義的代碼。應(yīng)對(duì)方案1是在能夠推測(cè)需要初始化的緩沖大小時(shí),則表示該大小,而無(wú)法推測(cè)時(shí),使用<<length>>等指定的標(biāo)識(shí)符表示。應(yīng)對(duì)方案2是創(chuàng)建附加條件的應(yīng)對(duì)方案。當(dāng)memset的第二個(gè)參數(shù)不是單一常數(shù)時(shí),有可能交換使用了第二、第三個(gè)參數(shù)。因此,應(yīng)對(duì)方案2提議對(duì)memset的第二、第三個(gè)參數(shù)值進(jìn)行互相交換。相關(guān)檢查器也沒(méi)有特別的注意事項(xiàng)。作為一例,所述表2至表4中示例的各檢查器的應(yīng)對(duì)方案可通過(guò)所述圖9中示例的‘Sca’類(lèi)別和‘ScaAlternative’類(lèi)別(應(yīng)對(duì)方案信息類(lèi)別)來(lái)提供。作為另外一例,所述表2至表4中示例的各檢查器的應(yīng)對(duì)方案可通過(guò)所述圖10中示例的‘CodeGenerator’類(lèi)別(代碼生成類(lèi)別)來(lái)提供。‘Sca’類(lèi)別、‘ScaAlternative’類(lèi)別(應(yīng)對(duì)方案信息類(lèi)別)以及‘CodeGenerator’類(lèi)別(代碼生成類(lèi)別)可事先與各檢查器的缺陷內(nèi)容相應(yīng)地設(shè)置。本發(fā)明的實(shí)施例包括用于執(zhí)行多種通過(guò)計(jì)算機(jī)實(shí)現(xiàn)的操作的程序和記錄該程序的計(jì)算機(jī)可讀介質(zhì)。所述計(jì)算機(jī)可讀介質(zhì)可單獨(dú)包括或以組合的形式包括程序指令、數(shù)據(jù)文件、數(shù)據(jù)結(jié)構(gòu)等。所述介質(zhì)可以是為本發(fā)明特別設(shè)計(jì)和構(gòu)建的,或者也可以是計(jì)算機(jī)軟件普通技術(shù)人員公知而可使用的。計(jì)算機(jī)可讀記錄介質(zhì)的例子包括:磁性介質(zhì),如硬盤(pán)、軟盤(pán)以及磁帶;光學(xué)介質(zhì)(opticalmedia),如CD-ROM、DVD、USB驅(qū)動(dòng)器等;磁光學(xué)介質(zhì),如光盤(pán)(flopticaldisk)等;以及特別構(gòu)成為存儲(chǔ)和執(zhí)行程序指令的硬件裝置,如只讀存儲(chǔ)器(ROM)、隨機(jī)存取儲(chǔ)存器(RAM)、閃存等。所述介質(zhì)可以是包括傳送對(duì)程序指令、數(shù)據(jù)結(jié)構(gòu)等進(jìn)行指定的信號(hào)的載波的光或者金屬線、波導(dǎo)管等的傳輸介質(zhì)。程序命令的例子不僅是如通過(guò)編譯器制作的機(jī)器語(yǔ)言代碼,還包括可使用解釋器等且通過(guò)計(jì)算機(jī)運(yùn)行的高級(jí)語(yǔ)言代碼。作為一例,本發(fā)明的源代碼分析裝置是通過(guò)以下形式來(lái)實(shí)現(xiàn):通過(guò)用于執(zhí)行源代碼分析功能和分析結(jié)果輸出功能的計(jì)算機(jī)程序來(lái)執(zhí)行計(jì)算機(jī)功能操作。源代碼分析功能通過(guò)所述源代碼分析模塊來(lái)被提供,分析結(jié)果輸出功能通過(guò)所述分析結(jié)果輸出模塊來(lái)被提供。通過(guò)源代碼分析功能進(jìn)一步執(zhí)行源代碼分析模塊的具體功能,分析結(jié)果輸出功能進(jìn)一步執(zhí)行分析結(jié)果輸出模塊的具體功能,從而能夠提供本發(fā)明的源代碼分析裝置的全部功能。當(dāng)前第1頁(yè)1 2 3