專利名稱:源代碼比較設(shè)備、源代碼比較方法和源代碼比較程序的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種源代碼比較裝置、源代碼比較方法及源代碼比較程序。
背景技術(shù):
常規(guī)上,對于確認(rèn)修正源代碼內(nèi)容的技術(shù)而言,例如使用如下方法使用UNIX 的 diff命令,以行為單位比較修正前后的文本源代碼,并顯示源代碼之間的差異。然而,僅利 用這種文本差異,用戶自己還必須確定每個(gè)修正對應(yīng)于哪個(gè)函數(shù)或特征。因此,如果存在與 多個(gè)特征相關(guān)的混合修正,則變得難以將修正位置與特征相關(guān)聯(lián)。存在用于將修正位置與 特征相關(guān)聯(lián)的技術(shù),例如在下述專利文獻(xiàn)I和2中公開的技術(shù)。
專利文獻(xiàn)I中公開的技術(shù)將未修正源代碼與修正后源代碼相比較來提取修正位 置,并通過使用源代碼的語法分析結(jié)果來將修正位置與變量名或函數(shù)名相關(guān)聯(lián)。專利文獻(xiàn)2 中公開的技術(shù)預(yù)先按照等級構(gòu)造源代碼,以將源代碼分為程序、模塊、文件和函數(shù)中的各個(gè) 等級,并通過以程序、模塊、文件和函數(shù)的相應(yīng)等級單位將未修正源代碼與修改后源代碼相 比較來將修正位置與等級特征相關(guān)聯(lián)。
[專利文獻(xiàn)I] JPO8-1M6IlA
[專利文獻(xiàn)2] JP2OO6-277I27A
在高于變量名和函數(shù)名的較高等級中,與專利文獻(xiàn)I 一樣,僅將語法分析結(jié)果用 于與模塊、文件等相關(guān)聯(lián)是不充分的。此外,在專利文獻(xiàn)2中,因?yàn)楸匦桀A(yù)先定義和預(yù)先登 記程序、模塊等的等級結(jié)構(gòu),如果例如設(shè)計(jì)信息不可用,則可以設(shè)想在添加信息期間會遺漏 登記,從而難以進(jìn)行管理。發(fā)明內(nèi)容
本發(fā)明被配置為解決上述問題,以及本發(fā)明的示例性目標(biāo)在于,提供一種源代碼 比較設(shè)備、源代碼比較方法和源代碼比較程序,能夠正確而簡單地將修正位置與特征相關(guān)聯(lián)。
根據(jù)本發(fā)明的一個(gè)方面,提供了一種源代碼比較設(shè)備,包括差異提取部,提取修 正前源代碼與修正后源代碼之間的差異;語法分析部,將提取的差異分割為與能夠在源代 碼中使用的構(gòu)成要素相對應(yīng)的分割差異,并產(chǎn)生將所述分割差異與對應(yīng)于所述分割差異的 構(gòu)成要素相關(guān)聯(lián)的語法分析結(jié)果;特征分析部,針對語法分析結(jié)果中包括的每個(gè)分割差異 設(shè)置特征區(qū)分;以及輸出部,輸出將所述分割差異與針對所述分割差異設(shè)置的特征區(qū)分相 關(guān)聯(lián)的比較結(jié)果,其中,所述特征分析部被配置為如果語法分析結(jié)果中包括的構(gòu)成要素被 包括在將構(gòu)成要素與特征區(qū)分相關(guān)聯(lián)的修正歷史中,則針對與語法分析結(jié)果中的構(gòu)成要素相關(guān)聯(lián)的所述分割差異,設(shè)置與修正歷史中的構(gòu)成要素相關(guān)聯(lián)的特征區(qū)分。
根據(jù)本發(fā)明的另一方面,提供了一種源代碼比較方法,包括差異提取步驟,提取 修正前源代碼與修正后源代碼之間的差異;語法分析步驟,將提取的差異分割為與能夠在 源代碼中使用的構(gòu)成要素相對應(yīng)的分割差異,并產(chǎn)生將所述分割差異與對應(yīng)于所述分割差 異的構(gòu)成要素相關(guān)聯(lián)的語法分析結(jié)果;特征分析步驟,針對語法分析結(jié)果中包括的每個(gè)分 割差異設(shè)置特征區(qū)分;以及輸出步驟,輸出將所述分割差異與針對所述分割差異設(shè)置的特 征區(qū)分相關(guān)聯(lián)的比較結(jié)果,其中,所述特征分析步驟被配置為如果語法分析結(jié)果中包括的 構(gòu)成要素被包括在將構(gòu)成要素與特征區(qū)分相關(guān)聯(lián)的修正歷史中,則針對與語法分析結(jié)果中 的構(gòu)成要素相關(guān)聯(lián)的所述分割差異,設(shè)置與修正歷史中的構(gòu)成要素相關(guān)聯(lián)的特征區(qū)分。
根據(jù)本發(fā)明的再一方面,提供了一種存儲源代碼比較程序的計(jì)算機(jī)可讀介質(zhì),所 述源代碼比較程序包括用于使計(jì)算機(jī)執(zhí)行處理的指令,所述處理包括以下步驟差異提取 步驟,提取修正前源代碼與修正后源代碼之間的差異;語法分析步驟,將提取的差異分割為 與能夠在源代碼中使用的構(gòu)成要素相對應(yīng)的分割差異,并產(chǎn)生將所述分割差異與對應(yīng)于所 述分割差異的構(gòu)成要素相關(guān)聯(lián)的語法分析結(jié)果;特征分析步驟,針對語法分析結(jié)果中包括 的每個(gè)分割差異設(shè)置特征區(qū)分;以及輸出步驟,輸出將所述分割差異與針對所述分割差異 設(shè)置的特征區(qū)分相關(guān)聯(lián)的比較結(jié)果,其中,所述特征分析步驟被配置為如果語法分析結(jié)果 中包括的構(gòu)成要素被包括在將構(gòu)成要素與特征區(qū)分相關(guān)聯(lián)的修正歷史中,則針對與語法分 析結(jié)果中的構(gòu)成要素相關(guān)聯(lián)的所述分割差異,設(shè)置與修正歷史中的構(gòu)成要素相關(guān)聯(lián)的特征 區(qū)分。
根據(jù)本發(fā)明,能夠正確而簡單地將修正位置與特征相關(guān)聯(lián)。
圖1是對根據(jù)本發(fā)明示例性實(shí)施例的源代碼比較設(shè)備的配置進(jìn)行舉例說明的圖2是對語法分析結(jié)果進(jìn)行舉例說明的圖3是對分割后語法分析結(jié)果進(jìn)行舉例說明的圖4是對修正歷史表的數(shù)據(jù)配置進(jìn)行舉例說明的圖5是對臨時(shí)特征分析結(jié)果進(jìn)行舉例說明的圖6是對特征分析結(jié)果進(jìn)行舉例說明的圖7是對修正歷史表的另一數(shù)據(jù)配置進(jìn)行舉例說明的圖8是對比較結(jié)果進(jìn)行舉例說明的圖9是對另一比較結(jié)果進(jìn)行舉例說明的圖10是用于說明比較未修正與修正后源代碼期間的操作的流程圖11是對比較未修正與修正后源代碼期間的數(shù)據(jù)轉(zhuǎn)變的狀態(tài)進(jìn)行舉例說明的 圖12是示出了當(dāng)根據(jù)修改的適當(dāng)性檢查部檢查修正適當(dāng)性的示例的模式圖13是對按照每個(gè)特征區(qū)分計(jì)算得到的每個(gè)構(gòu)成要素的修正率進(jìn)行舉例說明的 圖14是以特征區(qū)分的構(gòu)成要素為單位對過去修正率與當(dāng)前修正狀況之間的相應(yīng) 關(guān)系進(jìn)行舉例說明的圖15是示出了將修正歷史寫入源代碼以保存修正歷史的示例的模式圖。
具體實(shí)施方式
以下,將參考
根據(jù)本發(fā)明的源代碼比較設(shè)備、源代碼比較方法和源代碼比較程序。
首先,參考圖1,說明示例性實(shí)施例中的源代碼比較設(shè)備的功能配置。例如,源代碼比較設(shè)備I功能上具有差異提取部11、語法分析部12、特征分析部13、修正歷史登記部14 和比較結(jié)果輸出部15。
這里,源代碼比較設(shè)備I物理上被配置為包括例如CPU (中央處理單元)、存儲器和輸入和輸出接口。存儲器包括如下元件例如ROM(只讀存儲器)和用于存儲要由CPU處理的程序和數(shù)據(jù)的HDD (硬盤驅(qū)動(dòng)器)、主要用作控制進(jìn)程的各個(gè)工作區(qū)的RAM(隨機(jī)存取存儲器)等。這些元件彼此經(jīng)由總線相連。CPU可以通過如下步驟實(shí)現(xiàn)源代碼比較設(shè)備I中的每個(gè)部件的功能執(zhí)行ROM中存儲的程序,并處理經(jīng)由輸入和輸出接口接收的源代碼和消息、加載到RAM中的數(shù)據(jù)等。
差異提取部11將未修正源代碼與修正后源代碼相比較,以提取差異。對于比較源代碼的方法,能夠使用普通(ordinary)文本比較處理。差異提取部11通過依次比較源代碼的相應(yīng)文本,來枚舉(enumerate)未修正源代碼與修正后源代碼之間的差異。
S卩,差異提取部11可以被描述為提取未修正源代碼與修正后源代碼之間的差異。
語法分析部12根據(jù)由差異提取部11提取的差異來枚舉修正對象的構(gòu)成要素,并產(chǎn)生語法分析結(jié)果。構(gòu)成要素是能夠在源代碼中使用的這些構(gòu)成元素,例如相應(yīng)變量、函數(shù)、結(jié)構(gòu)體等。圖2示出了語法分析結(jié)果的示例。圖2的語法分析結(jié)果示出了作為源代碼之間的差異,提取了 “差異1”、“差異2”和“差異3”,其中“差異I”中包括作為構(gòu)成要素的 “函數(shù)1”,“差異2”中包括作為構(gòu)成要素的“變量I”和“結(jié)構(gòu)體1 ”,以及“差異3”中包括作為構(gòu)成要素的“函數(shù)2”。
如果存在包括多個(gè)構(gòu)成要素的差異,則語法分析部12根據(jù)每個(gè)構(gòu)成要素分割差異,并更新語法分析結(jié)果。這是由于考慮了如下事實(shí)在對源代碼中鄰近描述的多個(gè)構(gòu)成要素進(jìn)行修正的情況下,包括多個(gè)構(gòu)成要素的差異被提取作為差異塊(clump)。在這種情況下,根據(jù)每個(gè)構(gòu)成要素分割差異,圖3示出了分割之后的語法分析結(jié)果的示例。圖3的語法分析結(jié)果示出了,因?yàn)閳D2的“差異2”包括多個(gè)構(gòu)成要素(“變量I”和“結(jié)構(gòu)體2”),“差異2”被分割為與構(gòu)成要素“變量I”相對應(yīng)的“差異2a”和與構(gòu)成要素“結(jié)構(gòu)體I”相對應(yīng)的“差異2b”。
S卩,語法分析部12可以被描述為將由差異提取部11提取的差異分割為與構(gòu)成要素相對應(yīng)的分割差異,并產(chǎn)生將分割差異與對應(yīng)于分割差異的構(gòu)成要素相關(guān)聯(lián)的語法分析結(jié)果。
特征分析部13參考修正歷史表31,確定與語法分析結(jié)果中包括的構(gòu)成要素相對應(yīng)的特征區(qū)分,并產(chǎn)生特征分析結(jié)果。
將參考圖4說明修正歷史表31的數(shù)據(jù)配置。修正歷史表31例如具有如下數(shù)據(jù)項(xiàng) 歷史編號項(xiàng)、構(gòu)成要素項(xiàng)和特征區(qū)分項(xiàng)。歷史編號項(xiàng)存儲每次比較未修正和修正后源代碼時(shí)遞增的標(biāo)識號。構(gòu)成要素項(xiàng)存儲構(gòu)成要素的標(biāo)識信息,用于唯一標(biāo)識修正對象的構(gòu)成要素。特征區(qū)分項(xiàng)存儲標(biāo)識信息,用于唯一標(biāo)識構(gòu)成要素所屬的特征。用戶可以任意地設(shè)置特征區(qū)分,例如以允許標(biāo)識由一個(gè)構(gòu)成要素或多個(gè)構(gòu)成要素實(shí)現(xiàn)的特征。
S卩,可以將修正歷史描述為與如下信息相關(guān)聯(lián)的信息用于標(biāo)識對源代碼的修正的信息(示例性實(shí)施例中的歷史編號)、構(gòu)成要素和特征區(qū)分。
圖4的修正歷史表示出了,對于特定源代碼,通過比較第一次修正之前和修正之后的結(jié)果,修正屬于特征區(qū)分“特征I”的構(gòu)成要素“函數(shù)I”和“變量1”,同時(shí)通過比較第二次修正之前和修正之后的結(jié)果,修正屬于特征區(qū)分“特征2”的構(gòu)成要素“結(jié)構(gòu)體I”。
如果修正歷史表31具有語法分析結(jié)果中包括的構(gòu)成要素,則特征分析部13對應(yīng)于構(gòu)成要素,與特征分析結(jié)果的特征區(qū)分的構(gòu)成要素相關(guān)聯(lián)的設(shè)置在修正歷史表31中存儲的特征區(qū)分。如果修正歷史表31不具有語法分析結(jié)果中包括的構(gòu)成要素,則特征分析部 13將對修正歷史中不存在構(gòu)成要素加以指示的區(qū)分(例如,“新特征”)暫時(shí)設(shè)置成與構(gòu)成要素相對應(yīng)的特征分析結(jié)果的特征區(qū)分。
如果在特征區(qū)分中暫時(shí)設(shè)置了“新特征”,則特征分析部13使輸出設(shè)備4顯示此刻的特征分析結(jié)果作為臨時(shí)特征分析結(jié)果,并促使用戶向暫時(shí)設(shè)置特征區(qū)分輸入“新特征”。 此后,當(dāng)從用戶接受到暫時(shí)設(shè)置特征區(qū)分的輸入時(shí),特征分析部13通過將暫時(shí)設(shè)置臨時(shí)特征分析結(jié)果的特征區(qū)分改變?yōu)檩斎氲奶卣鲄^(qū)分,來更新特征分析結(jié)果。
圖5示出了臨時(shí)特征分析結(jié)果的示例。基于圖3的語法分析結(jié)果和圖4的修正歷史表產(chǎn)生圖5的臨時(shí)特征分析結(jié)果。在圖3的語法分析結(jié)果中的構(gòu)成要素中,因?yàn)椤昂瘮?shù) 1”、“變量I”和“結(jié)構(gòu)體I”存在于圖4的修正歷史表中,將修正歷史表中存儲的與相應(yīng)構(gòu)成要素相關(guān)聯(lián)的特征區(qū)分“特征1”、“特征2”和“特征3”相應(yīng)地設(shè)置為與圖5的臨時(shí)特征分析結(jié)果的構(gòu)成要素“函數(shù)1”、“變量I”和“結(jié)構(gòu)體I”相對應(yīng)的特征區(qū)分。另一 方面,在圖3 的語法分析結(jié)果中的構(gòu)成要素中,因?yàn)樵趫D4的修正歷史表中不存在“函數(shù)2”,將對修正歷史中不存在“函數(shù)2”加以指示的區(qū)分“新特征”暫時(shí)設(shè)置到與圖5的臨時(shí)特征分析結(jié)果的構(gòu)成要素“函數(shù)2”相對應(yīng)的特征區(qū)分。
圖6示出了特征分析結(jié)果的示例。圖6的特征分析結(jié)果示出了這樣的狀態(tài)在設(shè)置中將與圖5的臨時(shí)特征分析結(jié)果的構(gòu)成要素“函數(shù)2”相對應(yīng)的特征區(qū)分改變?yōu)橛脩糨斎氲摹疤卣?”。
S卩,特征分析部13可以被描述為當(dāng)語法分析結(jié)果中所包括的構(gòu)成要素也被包括在將構(gòu)成元素與特征區(qū)分相關(guān)聯(lián)的修正歷史中時(shí),針對語法分析結(jié)果中與構(gòu)成要素相關(guān)聯(lián)的分割差異,設(shè)置修正歷史中與構(gòu)成要素相關(guān)聯(lián)的特征區(qū)分。
此外,特征分析部13可以被描述為當(dāng)語法分析結(jié)果中包括的構(gòu)成要素未包括在修正歷史中時(shí),針對與語法分析結(jié)果中的構(gòu)成要素相關(guān)聯(lián)的分割差異,暫時(shí)設(shè)置對修正歷史中不包括構(gòu)成要素加以指示的信息作為特征區(qū)分,同時(shí)促使用戶輸入用于暫時(shí)設(shè)置特征區(qū)分的信息。
此外,特征分析部13可以被描述為當(dāng)接受用戶輸入的用于暫時(shí)設(shè)置特征區(qū)分的信息時(shí),通過將暫時(shí)設(shè)置的信息改變?yōu)榻邮艿男畔碓O(shè)置該信息,作為針對分割差異的特征區(qū)分。
按照這種方式,特征分析部13可以被描述為針對語法分析結(jié)果中包括的每個(gè)分割差異來設(shè)置特征區(qū)分。
修正歷史登記部14基于特征分析結(jié)果將修正歷史登記到修正歷史表31上。
圖7示出了更新后修正歷史表的示例。圖7的修正歷史表處于基于圖6的特征分析結(jié)果來更新了圖4的修正歷史表的狀態(tài)。圖7的修正歷史表額外登記了圖6的特征分析結(jié)果中包括的四組構(gòu)成要素和特征區(qū)分,作為與修正歷史表中的歷史編號“3”相對應(yīng)的數(shù)據(jù)。
即,修正歷史登記部14可以被描述為將這樣的信息存儲到存儲設(shè)備中作為修正歷史將特征分析部13設(shè)置的針對分割差異的特征區(qū)分與關(guān)聯(lián)于語法分析結(jié)果中的分割差異的構(gòu)成要素相關(guān)聯(lián)的信息。
比較結(jié)果輸出部15使輸出設(shè)備4顯示對未修正和修正后源代碼的比較結(jié)果加以指示的比較結(jié)果。能夠使用包括在特征分析結(jié)果中的每項(xiàng)來顯示比較結(jié)果。用戶可以從特征分析結(jié)果中包括的每項(xiàng)中任意地指定要在比較結(jié)果中顯示的項(xiàng)。
圖8示出了比較結(jié)果的示例。圖8的比較結(jié)果是通過使用特征分析結(jié)果中包括的分割差異和特征區(qū)分來顯示的示例。圖8的比較結(jié)果示出,提取“差異I”和“差異2a”,作為關(guān)于“特征I”的修正,提取“差異2b”,作為關(guān)于“特征2”的修正,以及提取“差異3”,作為關(guān)于“特征3”的修正。
圖9示出了當(dāng)用戶已經(jīng)指定特定特征作為輸出對象時(shí)顯示的比較結(jié)果的示例。圖 9示出了當(dāng)用戶指定“特征I”作為輸出對象時(shí)顯示的比較結(jié)果。圖9的比較結(jié)果僅示出了關(guān)于用戶指定的“特征I”的多個(gè)修正后特征的比較結(jié)果。用戶可以使用例如查詢函數(shù),來任意地指定輸出對象。
S卩,比較結(jié)果輸出部15可以被描述為輸出將分割差異與針對分割差異設(shè)置的特征區(qū)分相關(guān)聯(lián)的比較結(jié)果。
接下來,參考圖10和11,說明在比較未修正和修正后源代碼期間的操作。圖10是說明了在比較未修正和修正后源代碼期間的操作的流程圖。圖11是在方式上示出了在比較未修正和修正后源代碼期間的數(shù)據(jù)轉(zhuǎn)變狀態(tài)的圖。
首先,執(zhí)行源代碼讀入處理,以從輸入設(shè)備2讀取未修正源代碼A和修正后源代碼 B (步驟 S101)。
接下來,差異提取部11通過將未修正源代碼A與修正后源代碼B的文本相比較來執(zhí)行文本比較處理,用于提取差異 (步驟S102)。在圖11中,作為未修正源代碼A與修正后源代碼B之間的差異,提取了 “差異1”、“差異2”和“差異3”。
接下來,語法分析部12執(zhí)行語法分析處理,用于按照步驟S102中提取的差異枚舉修正對象的構(gòu)成要素,并按照每個(gè)構(gòu)成要素來分割差異,以產(chǎn)生語法分析結(jié)果(步驟 S103)。在圖11中,作為“差異1”、“差異2”和“差異3”中包括的構(gòu)成要素,枚舉了 “函數(shù) 1”、“變量1”、“結(jié)構(gòu)體I”和“函數(shù)2”。
接下來,特征分析部13執(zhí)行特征分析處理,一遍通過參考修正歷史表31來確定與步驟S103中產(chǎn)生的語法分析結(jié)果中包括的構(gòu)成要素相對應(yīng)的特征區(qū)分,并產(chǎn)生特征分析結(jié)果(步驟S104)。在圖11中,特征分析部13參考修正歷史表,將修正歷史表中現(xiàn)有的“特征I”和“特征2”確定為與按照差異列舉的構(gòu)成要素相對應(yīng)的特征區(qū)分。
特征分析部13確定步驟103中產(chǎn)生的語法分析結(jié)果中包括的所有構(gòu)成要素(修正后位置)是否存在于修正歷史表31中(步驟S105)。如果該確定是肯定的(步驟S105 是),則過程移至隨后步驟S108。
另一方面,如果步驟S105確定的語法分析結(jié)果中包括的任意構(gòu)成要素(修正位 置)不存在于修正歷史表31中(步驟S105 :否),則特征分析部13使輸出設(shè)備4顯示此刻 的特征分析結(jié)果,作為臨時(shí)特征分析結(jié)果(步驟S106),并促使用戶向暫時(shí)設(shè)置的特征區(qū)分 輸入“新特征”。在圖11中,促使用戶針對與按照“差異3”枚舉的“函數(shù)2”相對應(yīng)的特征 區(qū)分來輸入“新特征”。
接下來,當(dāng)從用戶接受到暫時(shí)設(shè)置特征區(qū)分的輸入時(shí),特征分析部13通過將臨時(shí) 特征分析結(jié)果中暫時(shí)設(shè)置的“新特征”的特征區(qū)分改變?yōu)檩斎氲奶卣鲄^(qū)分,來更新特征分析 結(jié)果(步驟S107)。在圖11中,將設(shè)置中與按照“差異3”來列舉的“函數(shù)2”相對應(yīng)的特征 區(qū)分改變?yōu)椤疤卣?”。
接下來,修正歷史登記部14基于步驟S104中產(chǎn)生的特征分析結(jié)果或者基于步驟 107中更新的特征分析結(jié)果來執(zhí)行修正歷史登記處理,用于在修正歷史表31上登記修正歷 史(步驟S108)。在圖11中,在修正歷史表上額外登記歷史編碼“3”的修正歷史數(shù)據(jù)。
接下來,比較結(jié)果輸出部15執(zhí)行比較結(jié)果輸出處理,用于使輸出設(shè)備4顯示對未 修正和修正后源代碼的比較結(jié)果加以指示的比較結(jié)果(步驟S109)。
如上所述,根據(jù)示例性實(shí)施例中的源代碼比較設(shè)備1,因?yàn)榭梢曰谶^去創(chuàng)建的修 正歷史將修正位置與特征相關(guān)聯(lián),能夠基于過去的實(shí)際修正記錄來執(zhí)行正確關(guān)聯(lián)。
此外,對于沒有修正歷史的新修正位置,因?yàn)榇偈褂脩糨斎肱c新修正位置相對應(yīng) 的特征以便登記由用戶輸入的特征,在添加新代碼或新特征的情況下,能夠可靠地防止登 記中的任何遺漏。
此外,因?yàn)槟軌驅(qū)⑿拚恢门c特征相關(guān)聯(lián)且在每次修正時(shí)額外登記修正位置和特 征來累積關(guān)聯(lián)信息,可以通過參考過去的關(guān)聯(lián)信息來進(jìn)行程序開發(fā),從而允許提高開發(fā)期 間的工作效率。
[修改]
此外,上述示例性實(shí)施例僅是舉例說明,因而沒有以任何方式排除應(yīng)用未在示例 性實(shí)施例中清楚描述的各種修改和技術(shù)。即,可以在不背離本發(fā)明的實(shí)際精神或范圍的情 況下對本發(fā)明進(jìn)行多種形式上的修改之后實(shí)踐本發(fā)明。
例如,上述示例性實(shí)施例的源代碼比較設(shè)備I包括圖1所示的相應(yīng)部件。然而,其 還可以包括適當(dāng)性檢查部。適當(dāng)性檢查部參考修正歷史表31,并且對于每個(gè)特征區(qū)分,計(jì)算 作為屬于該特征區(qū)分的構(gòu)成要素的每個(gè)修正后構(gòu)成要素的比例(修正率)。如果任意構(gòu)成 要素(針對該構(gòu)成要素,相對于每個(gè)特征區(qū)分計(jì)算的每個(gè)構(gòu)成要素的修正比不小于預(yù)定閾 值)沒有被設(shè)置為與特征分析結(jié)果中的該特征區(qū)分相對應(yīng)的構(gòu)成要素,則適當(dāng)性檢查部向 用戶通知修正不適當(dāng)。
參考圖12至14,將具體說明適當(dāng)性檢查部的功能。圖12是在方式上示出了當(dāng)適 當(dāng)性檢查部檢查修正適當(dāng)性時(shí)的示例的圖。圖13是示出了按照每個(gè)特征區(qū)分計(jì)算得到的 每個(gè)構(gòu)成要素的修正率的示例的圖。圖14是以特征區(qū)分的構(gòu)成要素為單位對過去的修正 率與當(dāng)前的修正狀況之間的相應(yīng)關(guān)系進(jìn)行舉例說明的圖。
適當(dāng)性檢查部參考圖12所示的修正歷史表,并按照圖13所示的每個(gè)特征區(qū)分計(jì) 算每個(gè)構(gòu)成要素的修正率。圖12的修正歷史表已經(jīng)累積了由歷史編號“I”和歷史編號“2”標(biāo)識的兩個(gè)相應(yīng)比較結(jié)果,作為修正歷史?!疤卣鱅”是這兩個(gè)結(jié)果的修正對象,而“特征2” 僅是歷史編號“I”的修正對象。
當(dāng)修正“特征I”時(shí),因?yàn)檫@兩個(gè)結(jié)果中均修正了 “函數(shù)I”和“變量1”,“函數(shù)I” 和“變量I”的修正率是100% ;另一方面,因?yàn)閮H在歷史編號“2”中修正了“結(jié)構(gòu)體1”,所以“結(jié)構(gòu)體I”的修正率是50% (參見圖13)。
當(dāng)修正“特征2”時(shí),因?yàn)樾拚?“變量1”,所以“變量I”的修正率是100% ;另一方面,因?yàn)闆]有修正“函數(shù)I”和“結(jié)構(gòu)體1”,所以“函數(shù)I”和“結(jié)構(gòu)體I”的修正率是0% (參見圖13)。
S卩,適當(dāng)性檢查部可以被描述為根據(jù)基于修正歷史的每個(gè)構(gòu)成要素,計(jì)算對源代碼執(zhí)行第一修正的次數(shù)相對于對源代碼執(zhí)行第二修正的次數(shù)之比(修正率),其中第一修正包括與關(guān)聯(lián)于特征區(qū)分的特定構(gòu)成要素相對應(yīng)的部分的改變,第二修正包括與關(guān)聯(lián)于每個(gè)特征區(qū)分的任意構(gòu)成要素相對應(yīng)的部分的改變。
適當(dāng)性檢查部參考按照圖13所示的各個(gè)特征區(qū)分來記載的每個(gè)構(gòu)成要素的修正率,以及如果其修正率不小于要檢查的特征區(qū)分的預(yù)定閾值的任何構(gòu)成要素沒有被設(shè)置為特征分析結(jié)果中與特征區(qū)分相對應(yīng)的構(gòu)成要素,則適當(dāng)性檢查部向用戶通知修正不適當(dāng)。
如圖12所示,如果將未修正源代碼A與修正后源代碼B相比較,則在特征分析結(jié)果中,將“函數(shù)I”和“特征I”的組合設(shè)置為“差異I”。圖14示出了圖13所示的“特征I” 的每個(gè)構(gòu)成要素的修正率與當(dāng)前修正狀況之間的相應(yīng)關(guān)系。假設(shè)修正率的閾值被設(shè)置為 90%,則修正率不小于閾值的構(gòu)成要素是“函數(shù)I”和“變量I”。在關(guān)于“特征I”的當(dāng)前修正中,因?yàn)閮H修正了 “函數(shù)1”,所以適當(dāng)性檢查部確定修正中遺漏了 “變量1”,并向用戶通知所述遺漏。
S卩,適當(dāng)性檢查部可以被描述為當(dāng)針對語法分析結(jié)果中包括的至少一個(gè)分割差異設(shè)置了特征區(qū)分且相對于特征區(qū)分和關(guān)聯(lián)于特征區(qū)分的特定構(gòu)成要素的組,比例(修正率)等于或大于與相關(guān)聯(lián)的預(yù)定閾值時(shí),如果提取的差異不包括與構(gòu)成要素相對應(yīng)的部分,則向用戶通知修正不適當(dāng)。
此外,向用戶通知的內(nèi)容不限于修正的遺漏。例如,如果過去的修正率不大于第二閾值的構(gòu)成要素被修正,則也能夠確·定為修正錯(cuò)誤,并向用戶通知所述錯(cuò)誤。
通過包括這種適當(dāng)性檢查部,能夠基于過去的修正歷史確定當(dāng)前修正的適當(dāng)性, 從而允許在程序開發(fā)中進(jìn)一步提高工作效率。
此外,盡管在上述示例性實(shí)施例中,在修正歷史表31中存儲并保存了修正歷史, 但是用于保存修正歷史的方法不限于此。例如,如圖15所示,也可以通過將修正歷史寫入要比較的源代碼來保存修正歷史。圖15示出了如下示例將修正歷史X作為注釋 (annotation)嵌入到JavaTM語言形式的源代碼Y中。與每個(gè)特征區(qū)分相對應(yīng)的注釋被定義為源代碼Y的一部。每個(gè)注釋被當(dāng)作具有int型數(shù)組的單一值注釋。已經(jīng)設(shè)置了相應(yīng)歷史編號的注釋被插入到相應(yīng)構(gòu)成要素的描述位置。鑒于此,能夠?qū)崿F(xiàn)對源代碼的編輯和對一個(gè)源代碼的修正歷史的參照,從而允許在修正內(nèi)容的證實(shí)、程序開發(fā)等期間提高工作效率。
S卩,源代碼比較設(shè)備I也可以包括修正歷史并入部,用于將如下信息并入到修正后源代碼中作為修正歷史將特征分析部13設(shè)置的針對分割差異的特征區(qū)分與關(guān)聯(lián)于語法分析結(jié)果中的分割差異的構(gòu)成要素相關(guān)聯(lián)的信息。
此外,全部或部上述示例性實(shí)施例也可以被描述為以下附注,但是本發(fā)明不限于 此。
(附注I)
一種源代碼比較設(shè)備,包括
差異提取部,通過將修正前源代碼與修正后源代碼相比較來提取差異;
語法分析部,按照能夠在源代碼中使用的每個(gè)構(gòu)成要素對由差異提取部提取的差 異進(jìn)行分割,并產(chǎn)生將構(gòu)成元素與對所述差異進(jìn)行分割后產(chǎn)生的分割差異相關(guān)聯(lián)的語法分 析結(jié)果;
特征分析部,通過將特征區(qū)分設(shè)置為與語法分析結(jié)果中包括的構(gòu)成要素和所述分 割差異的組相關(guān)聯(lián),來產(chǎn)生特征分析結(jié)果;以及
輸出部,使用特征分析結(jié)果中包括的分割差異和特征區(qū)分來輸出修正前源代碼與 修正后源代碼之間的比較結(jié)果,
其中,如果語法分析結(jié)果中包括的構(gòu)成要素存在于過去基于比較源代碼的結(jié)果而 構(gòu)造的修正歷史中,則特征分析部將修正歷史中設(shè)置的與構(gòu)成要素相關(guān)聯(lián)的特征區(qū)分設(shè)置 為特征分析結(jié)果中與構(gòu)成要素相對應(yīng)的特征區(qū)分。
(附注2)
根據(jù)附注I所述的源代碼比較設(shè)備,其中,如果修正歷史中不存在語法分析結(jié)果 中包括的構(gòu)成要素,則特征分析部將對不存在構(gòu)成要素加以指示的區(qū)分暫時(shí)設(shè)置為特征分 析結(jié)果中與構(gòu)成要素相對應(yīng)的特征區(qū)分,并促使用戶進(jìn)行輸入,以暫時(shí)設(shè)置特征區(qū)分。
(附注3)
根據(jù)附注2所述的源代碼比較設(shè)備,其中,當(dāng)接受來自用戶的用于暫時(shí)設(shè)置的特 征區(qū)分的輸入時(shí),特征分析部通過將暫時(shí)設(shè)置的特征區(qū)分改變?yōu)檩斎氲奶卣鲄^(qū)分,來更新 特征分析結(jié)果。
(附注4)
根據(jù)附注I至3中任一項(xiàng)所述的源代碼比較設(shè)備,還包括適當(dāng)性檢查部,用于參 照修正歷史,按照每個(gè)特征區(qū)分計(jì)算被修正為屬于該特征區(qū)分的構(gòu)成要素的構(gòu)成要素的比 率,以及如果比率大于預(yù)定閾值的構(gòu)成要素沒有被設(shè)置為與特征分析結(jié)果的特征區(qū)分相對 應(yīng)的構(gòu)成要素,則向用戶通知修正不適當(dāng)。
(附注5)
根據(jù)附注I至4中任一項(xiàng)所述的源代碼比較設(shè)備,還包括修正歷史存儲部,使存儲 設(shè)備存儲由特征分析部產(chǎn)生的特征分析結(jié)果,作為修正歷史。
(附注6)
根據(jù)附注I至5中任一項(xiàng)所述的源代碼比較設(shè)備,還包括修正歷史并入部,用于將 由特征分析部產(chǎn)生的特征分析結(jié)果并入修正后源代碼,作為修正歷史。
(附注7)
一種源代碼比較方法,包括
差異提取步驟,通過將修正前源代碼與修正后源代碼相比較來提取差異;
語法分析步驟,按照能夠在源代碼中使用的每個(gè)構(gòu)成要素對差異提取步驟中提取的差異進(jìn)行分割,并產(chǎn)生將構(gòu)成元素與對所述差異進(jìn)行分割后產(chǎn)生的分割差異相關(guān)聯(lián)的語 法分析結(jié)果;
特征分析步驟,通過將特征區(qū)分設(shè)置為與語法分析結(jié)果中包括的構(gòu)成要素和所述 分割差異的組相關(guān)聯(lián),來產(chǎn)生特征分析結(jié)果;以及
輸出步驟,使用特征分析結(jié)果中包括的分割差異和特征區(qū)分來輸出修正前源代碼 與修正后源代碼之間的比較結(jié)果,
其中,如果語法分析結(jié)果中包括的構(gòu)成要素存在于過去基于比較源代碼的結(jié)果而 構(gòu)造的修正歷史中,則特征分析步驟將修正歷史中設(shè)置的與構(gòu)成要素相關(guān)聯(lián)的特征區(qū)分設(shè) 置為特征分析結(jié)果中與構(gòu)成要素相對應(yīng)的特征區(qū)分。
(附注8)
一種源代碼比較程序,包括用于使計(jì)算機(jī)執(zhí)行根據(jù)附注7所述的每個(gè)步驟的指 令。
權(quán)利要求
1.一種源代碼比較設(shè)備,包括差異提取部,提取修正前源代碼與修正后源代碼之間的差異;語法分析部,將提取的差異分割為與能夠在源代碼中使用的構(gòu)成要素相對應(yīng)的分割差異,并產(chǎn)生語法分析結(jié)果,其中,所述語法分析結(jié)果將所述分割差異與對應(yīng)于所述分割差異的構(gòu)成要素相關(guān)聯(lián);特征分析部,針對語法分析結(jié)果中包括的每個(gè)分割差異設(shè)置特征區(qū)分;以及輸出部,輸出將所述分割差異與針對所述分割差異設(shè)置的特征區(qū)分相關(guān)聯(lián)的比較結(jié)果,其中,所述特征分析部被配置為如果語法分析結(jié)果中包括的構(gòu)成要素包括在將構(gòu)成要素與特征區(qū)分相關(guān)聯(lián)的修正歷史中,則針對與語法分析結(jié)果中的構(gòu)成要素相關(guān)聯(lián)的所述分割差異,設(shè)置與修正歷史中的構(gòu)成要素相關(guān)聯(lián)的特征區(qū)分。
2.根據(jù)權(quán)利要求1所述的源代碼比較設(shè)備,其中,所述特征分析部被配置為如果所述語法分析結(jié)果中包括的構(gòu)成要素沒有包括在所述修正歷史中,則對于與所述語法分析結(jié)果中的構(gòu)成要素相關(guān)聯(lián)的分割差異,暫時(shí)將對所述修正歷史中不包括構(gòu)成要素加以指示的信息設(shè)置為特征區(qū)分,并促使用戶輸入用于暫時(shí)設(shè)置的特征區(qū)分的信息。
3.根據(jù)權(quán)利要求2所述的源代碼比較設(shè)備,其中,所述特征分析部被配置為當(dāng)接受用戶輸入的用于暫時(shí)設(shè)置的特征區(qū)分的信息時(shí),通過將所述暫時(shí)設(shè)置的特征區(qū)分改變?yōu)榻邮艿男畔?,來設(shè)置針對所述分割差異的信息作為特征區(qū)分。
4.根據(jù)權(quán)利要求1所述的源代碼比較設(shè)備,還包括適當(dāng)性檢查部,其中,所述修正歷史是將用于標(biāo)識對源代碼的修正的信息與構(gòu)成要素和特征區(qū)分相關(guān)聯(lián)的信息;以及所述適當(dāng)性檢查部基于修正歷史,計(jì)算對源代碼執(zhí)行第一修正的次數(shù)相對于對源代碼執(zhí)行第二修正的次數(shù)之比,所述第一修正包括與關(guān)聯(lián)于特征區(qū)分的特定構(gòu)成要素相對應(yīng)的部分的改變,所述第二修正包括與關(guān)聯(lián)于所述特征區(qū)分的任意構(gòu)成要素相對應(yīng)的部分的改變;以及當(dāng)針對語法分析結(jié)果中包括的至少一個(gè)分割差異設(shè)置了所述特征區(qū)分且所述比率等于或大于預(yù)定閾值時(shí),如果提取的差異不包括與所述特定構(gòu)成要素相對應(yīng)的部分,則所述適當(dāng)性檢查部向用戶通知修正不適當(dāng)。
5.根據(jù)權(quán)利要求1所述的源代碼比較設(shè)備,還包括修正歷史登記部,將信息存儲到存儲設(shè)備中,作為修正歷史,其中,所述信息將由所述特征分析部針對所述分割差異進(jìn)行設(shè)置的特征區(qū)分與關(guān)聯(lián)于語法分析結(jié)果中的所述分割差異的構(gòu)成要素相關(guān)聯(lián)。
6.根據(jù)權(quán)利要求1所述的源代碼比較設(shè)備,還包括修正歷史并入部,將信息并入修正后源代碼中,作為修正歷史,其中,所述信息將由所述特征分析部針對所述分割差異進(jìn)行設(shè)置的特征區(qū)分與關(guān)聯(lián)于語法分析結(jié)果中的所述分割差異的構(gòu)成要素相關(guān)聯(lián)。
7.一種源代碼比較方法,包括差異提取步驟,提取修正前源代碼與修正后源代碼之間的差異;語法分析步驟,將提取的差異分割為與能夠在源代碼中使用的構(gòu)成要素相對應(yīng)的分割差異,并產(chǎn)生將所述分割差異與對應(yīng)于所述分割差異的構(gòu)成要素相關(guān)聯(lián)的語法分析結(jié)果; 特征分析步驟,針對語法分析結(jié)果中包括的每個(gè)分割差異設(shè)置特征區(qū)分;以及輸出步驟,輸出將所述分割差異與針對所述分割差異設(shè)置的特征區(qū)分相關(guān)聯(lián)的比較結(jié)果,其中,所述特征分析步驟被配置為如果語法分析結(jié)果中包括的構(gòu)成要素包括在將構(gòu)成要素與特征區(qū)分相關(guān)聯(lián)的修正歷史中,則針對與語法分析結(jié)果中的構(gòu)成要素相關(guān)聯(lián)的所述分割差異,設(shè)置與修正歷史中的構(gòu)成要素相關(guān)聯(lián)的特征區(qū)分。
8.一種存儲源代碼比較程序的計(jì)算機(jī)可讀介質(zhì),所述源代碼比較程序包括用于使計(jì)算機(jī)執(zhí)行處理的指令,所述處理包括以下步驟差異提取步驟,提取修正前源代碼與修正后源代碼之間的差異;語法分析步驟,將提取的差異分割為與能夠在源代碼中使用的構(gòu)成要素相對應(yīng)的分割差異,并產(chǎn)生將所述分割差異與對應(yīng)于所述分割差異的構(gòu)成要素相關(guān)聯(lián)的語法分析結(jié)果; 特征分析步驟,針對語法分析結(jié)果中包括的每個(gè)分割差異設(shè)置特征區(qū)分;以及輸出步驟,輸出將所述分割差異與針對所述分割差異設(shè)置的特征區(qū)分相關(guān)聯(lián)的比較結(jié)果,其中,所述特征分析步驟被配置為如果語法分析結(jié)果中包括的構(gòu)成要素包括在將構(gòu)成要素與特征區(qū)分相關(guān)聯(lián)的修正歷史中,則針對與語法分析結(jié)果中的構(gòu)成要素相關(guān)聯(lián)的所述分割差異,設(shè)置與修正歷史中的構(gòu)成要素相關(guān)聯(lián)的特征區(qū)分。
全文摘要
一種源代碼比較設(shè)備包括差異提取部,提取修正前源代碼與修正后源代碼之間的差異;語法分析部,將提取的差異分割為與能夠在源代碼中使用的構(gòu)成要素相對應(yīng)的分割差異,并產(chǎn)生語法分析結(jié)果,所述語法分析結(jié)果將所述分割差異與對應(yīng)于所述分割差異的構(gòu)成要素相關(guān)聯(lián);特征分析部,針對語法分析結(jié)果中包括的每個(gè)分割差異來設(shè)置特征區(qū)分和輸出部;以及輸出部,輸出將所述分割差異與針對所述分割差異設(shè)置的特征區(qū)分相關(guān)聯(lián)的比較結(jié)果。如果語法分析結(jié)果中包括的構(gòu)成要素被包括在將構(gòu)成要素與特征區(qū)分相關(guān)聯(lián)的修正歷史中,則特征分析部針對與語法分析結(jié)果中的構(gòu)成要素相關(guān)聯(lián)的分割差異,設(shè)置與修正歷史中的構(gòu)成要素相關(guān)聯(lián)的特征區(qū)分。
文檔編號G06F9/44GK103019666SQ201210310930
公開日2013年4月3日 申請日期2012年8月28日 優(yōu)先權(quán)日2011年9月20日
發(fā)明者野村芳明 申請人:日本電氣株式會社