專利名稱:一種基于代碼變更的軟件模型同步方法
技術(shù)領(lǐng)域:
本發(fā)明涉及對過期的軟件模型與新代碼進(jìn)行同步的方法,屬于軟件工程、模型驅(qū)動工程交叉技術(shù)領(lǐng)域。
背景技術(shù):
模型驅(qū)動工程是以模型為主要產(chǎn)品,試圖通過建立模型來明確軟件開發(fā)的內(nèi)容,是近年來軟件工程發(fā)展的重要課題。模型用建模語言來表示,能夠描述軟件卻高于軟件,是一種描述設(shè)計、指導(dǎo)軟件開發(fā)的中間產(chǎn)物。標(biāo)準(zhǔn)的軟件開發(fā)流程包括需求分析、模型設(shè)計、代碼編寫以及測試部署這些步驟。其中模型設(shè)計不但承接了需求分析中的各種要素,而且還是后續(xù)編寫代碼軟件測試等活動的基準(zhǔn),在整個開發(fā)流程中至關(guān)重要。軟件開發(fā)過程中,模型作為設(shè)計思路和業(yè)務(wù)邏輯的抽象,能夠指導(dǎo)開發(fā)人員之間的交流以及代碼的開發(fā)和軟件的交付。開發(fā)人員需要理解模型的含義,然后用程序設(shè)計語言表達(dá)出模型中的種種信息,模型中的要求和思路都會在代碼中得到體現(xiàn),最終遞交的軟件和模型是一致的。在證明軟件的正確性時,也是通過它和模型的對應(yīng)關(guān)系入手的,能夠解決問題的軟件系統(tǒng)往往非常復(fù)雜,而其模型是某種層次上的抽象,因此在企業(yè)的實(shí)際開發(fā)和測試中,可以通過證明模型的正確性以及模型與軟件系統(tǒng)的對應(yīng)關(guān)系來證明軟件的正確性。軟件開發(fā)完成后,并不是一成不變的。在實(shí)際的使用和生產(chǎn)環(huán)境中,軟件往往會因為多種原因,如使用場景變化、用戶要求、性能優(yōu)化、錯誤排除,由開發(fā)人員進(jìn)行維護(hù)。這個維護(hù)過程中,軟件會進(jìn)行不斷演化,代碼會經(jīng)過諸多修改而變成新的東西,而模型可能會被忽視。多個版本之后代碼與最初的代碼有了很大的變化,與最初的模型也無法對應(yīng),這時如果需要模型來完成相關(guān)工作,就會遇到模型與代碼的不一致問題。這種不一致問題會導(dǎo)致模型過期,那么與模型相關(guān)的一系列軟件開發(fā)行為就無法正常進(jìn)行。在實(shí)際開發(fā)環(huán)境中,往往由一組開發(fā)人員進(jìn)行協(xié)作完成代碼和相關(guān)的開發(fā)任務(wù),代碼通過多次迭代開發(fā)最終成型。在整個開發(fā)過程中,代碼由代碼管理系統(tǒng)來進(jìn)行管理,提供版本控制、沖突檢查、代碼分發(fā)、子版本管理、變更檢測等多種功能。每個代碼單元(比如源代碼文件)從無到有的各個狀態(tài)都由這個系統(tǒng)統(tǒng)一管理,如果需要源代碼文件的歷史版本、演化軌跡,都可以向代碼管理系統(tǒng)發(fā)出請求。
發(fā)明內(nèi)容
技術(shù)問題:本發(fā)明的目的是處理代碼演化過程中軟件模型同步方法,以舊代碼以及舊模型為基準(zhǔn),通過分析新代碼與舊代碼的變更內(nèi)容,并自動識別舊代碼和舊模型之間的關(guān)系,對舊模型進(jìn)行修改和更新,得到與新代碼相匹配的新模型。技術(shù)方案:本發(fā)明所述基于代碼變更的軟件模型同步方法采用代碼變更分析技術(shù)來比較代碼之間的差別,利用代碼檢索技術(shù)自動將為軟件模型和代碼建立聯(lián)系,通過軟件模型所適用的規(guī)則集,逐個處理代碼變更,并對模型進(jìn)行自動或半自動更新。本發(fā)明所述軟件模型是對軟件實(shí)體進(jìn)行簡化,用適當(dāng)?shù)淖儸F(xiàn)形式或規(guī)則把它的主要特征描述出來。本發(fā)明所述軟件模型所適用的規(guī)則集包括一系列規(guī)則,每一個規(guī)則給出模型中的元素和標(biāo)準(zhǔn)代碼中的元素關(guān)系,該規(guī)則和標(biāo)準(zhǔn)代碼由開發(fā)人員預(yù)先定義。步驟1、代碼變更分析從有變化的代碼中,將非實(shí)質(zhì)變更、非本質(zhì)變更、非相關(guān)變更的代碼過濾出去,獲得軟件模型相關(guān)的變更代碼,所述非實(shí)質(zhì)變更是指在不斷演化過程中,開發(fā)人員可能會引入一些格式的調(diào)整,比如空白字符、空行,這些變更只是改變代碼文件的存儲內(nèi)容,沒有改變根據(jù)代碼所得到的軟件行為和結(jié)構(gòu),所述非本質(zhì)變更是指在代碼語法和語義約束下,程序代碼內(nèi)容改變,但根據(jù)代碼所得到的軟件在行為和結(jié)構(gòu)上保持不變,所述非相關(guān)變更是指變更發(fā)生在與模型無關(guān)的代碼片段,但不在模型所關(guān)注的范圍內(nèi);步驟2、模型代碼匹配給定軟件模型,根據(jù)模型的類型和元素的名稱,對模型與軟件模型相關(guān)的變更代碼進(jìn)行匹配,建立模型中的元素與代碼中的元素之間的對應(yīng)關(guān)系,具體匹配過程如下:·
步驟2.1:讀入軟件模型,讀入軟件模型所適用的規(guī)則集;步驟2.2:讀入軟件模型相關(guān)的變更代碼;步驟2.3:確定模型中需要對應(yīng)的元素,逐個根據(jù)模型所適用的規(guī)則在軟件模型相關(guān)的變更代碼中進(jìn)行搜索,找到可能與之相聯(lián)系的代碼片段,并給出可信度,根據(jù)預(yù)設(shè)定的可信度閾值決定立即匹配或是交由開發(fā)人員確認(rèn);步驟2.4:將所獲得的模型中的元素與代碼中的元素之間的對應(yīng)關(guān)系信息加入代碼庫中;步驟3、代碼變更處理將得到的代碼變更信息、模型中的元素與代碼中的元素之間的對應(yīng)關(guān)系翻譯為更新操作,產(chǎn)生新模型,具有步驟為:步驟3.1:根據(jù)軟件模型所適用的規(guī)則、模型中的元素與代碼中的元素之間的對應(yīng)關(guān)系、已修改的變更代碼,修改對應(yīng)的模型元素;步驟3.2:根據(jù)軟件模型所適用的規(guī)則、模型中的元素與代碼中的元素之間的對應(yīng)關(guān)系、已刪除的變更代碼,移除對應(yīng)的模型元素;步驟3.3:根據(jù)軟件模型所適用的規(guī)則、模型中的元素與代碼中的元素之間的對應(yīng)關(guān)系、已新增的變更代碼,判斷是否需要在模型中新增新的元素,如果是,則在模型中新增新的元素。步驟I中所述非實(shí)質(zhì)變更是指在不斷演化過程中,開發(fā)人員可能會引入一些格式的調(diào)整,這些變更沒有改變根據(jù)代碼所得到的軟件行為和結(jié)構(gòu)。步驟I中所述非本質(zhì)變更是指在語法和語義約束下,代碼內(nèi)容改變,但根據(jù)代碼所得到的軟件在行為和結(jié)構(gòu)上保持不變。
步驟I中所述非相關(guān)變更是指變更發(fā)生在與模型無關(guān)的代碼片段,但不在模型所關(guān)注的范圍內(nèi)。有益效果:本發(fā)明所述的基于代碼變更的軟件模型同步方法中,相關(guān)功能可以集成在代碼版本管理系統(tǒng)中,能夠自動判斷代碼的差異,確定如何修改模型,對于模棱兩可的情況會向開發(fā)人員請求人工干預(yù)。具體說來,本發(fā)明所述的方法具有如下有益效果:(I)在本發(fā)明所述的基于代碼變更的軟件模型同步方法中,代碼的差異是通過自動分析出來的,并且能夠根據(jù)預(yù)先設(shè)定的規(guī)則過濾不相關(guān)的變更差異,減輕開發(fā)人員的負(fù)擔(dān)。(2)在本發(fā)明所述的基于代碼變更的軟件模型同步方法中,模型與代碼比較采用啟發(fā)式模糊匹配,對于不確定的情況會經(jīng)過人工確認(rèn),既保證了正確性又減輕工作量。(3)在本發(fā)明所述的基于代碼變更的軟件模型同步方法中,模型在修改之后會與代碼進(jìn)行校驗,以確保模型與代碼的一致性。(4)在本發(fā)明所述的基于代碼變更的軟件模型同步方法中,模型與代碼的定義規(guī)則比較靈活,等夠適應(yīng)不同的復(fù)雜系統(tǒng)以及用戶需求的變化。
圖1是基于代碼變更的軟件模型同步方法具體實(shí)施流程示意圖。圖2是代碼變更示意圖。圖3是代碼變更分析流程示意圖。圖4是代碼與模型對應(yīng)示意圖。圖5是開發(fā)人員在方法中所扮演角色的示意圖。
具體實(shí)施例方式本發(fā)明所述的基于代碼變更的軟件模型同步方法具體實(shí)施中,首先需要現(xiàn)有的軟件模型以及與軟件模型相對應(yīng)的軟件代碼,可以通過版本控制系統(tǒng)管理同一代碼單元的不同版本。本發(fā)明根據(jù)規(guī)則集解析不同的軟件模型,可以采用代碼檢索技術(shù),結(jié)合啟發(fā)式信息,將模型中的元素與代碼中的元素之間建立起對應(yīng)的對應(yīng)關(guān)系。對不同版本的代碼進(jìn)行比較,過濾出較為重要的變更,根據(jù)軟件模型所適用的規(guī)則集,決定如何修改、刪除和新增模型,并進(jìn)行最終更新模型。本發(fā)明所述的基于代碼變更的軟件模型同步方法具體實(shí)施流程如圖1所示。下面對附圖本發(fā)明的某些實(shí)施例作更詳細(xì)的描述。1、代碼變更分析本發(fā)明所述的基于代碼變更的軟件模型同步方法具體實(shí)施中,需要對新舊兩個版本的代碼進(jìn)行分析,因為其中的差別就是造成了舊版軟件模型與新版代碼不一致的因素。在具體實(shí)施中,需要準(zhǔn)確地弄清楚到底應(yīng)該將那些變更反映在原來的軟件模型中。圖2是代碼變更示意圖,原始代碼(圖2左)與變更代碼(圖2右)之間進(jìn)行存在差異,在具體實(shí)施中,可以定制編譯器,處理代碼的新舊版本,生成特定的代碼表示,以過濾一些不需要關(guān)心的代碼變更,如圖3所示。這些不需要關(guān)心的代碼變更`主要包括非實(shí)質(zhì)代碼變更、非本質(zhì)代碼變更、非相關(guān)代碼變更等三種。
(I)非實(shí)質(zhì)代碼變更代碼在不斷演化過程中,開發(fā)人員可能會引入一些格式的調(diào)整,比如空白字符、空行,這些變更固然改變了代碼文件的存儲內(nèi)容,但是并不能算作真正的代碼變更,因為根據(jù)代碼所得到的軟件無論在行為上還是結(jié)構(gòu)上都保持不變,說明這些代碼變更沒有造成實(shí)質(zhì)上的變化。在對舊版模型進(jìn)行更新的時候,完全不必考慮此類變更,因此需要在具體實(shí)施中將這種變更過濾出去。(2)非本質(zhì)代碼變更代碼都是用編程語言來寫的,遵照一定的語法和語義。在這種約束下,除了非實(shí)質(zhì)代碼變更,還有一些雖然改變了程序的代碼內(nèi)容,但根據(jù)代碼所得到的軟件在行為和結(jié)構(gòu)上仍然保持不變。這是因為程序語言在設(shè)計過程中,為了使用方便,往往會為同一種含義加入多種表達(dá)方式,比如通常的程序設(shè)計語言對于循環(huán)會有while組合句和for組合句這兩種。那么如果代碼中的while完全可能被改成for語句,而代碼在本質(zhì)上并沒有語義變化。這種變更也不會影響模型的更新,所以在具體實(shí)施中也應(yīng)該被過濾。
(3)非相關(guān)代碼變更代碼是根據(jù)模型編寫的,有些代碼直接反應(yīng)了模型中某個組件的語義,有些代碼則是對模型更進(jìn)一步的細(xì)化和對平臺的適應(yīng)。如果代碼變更發(fā)生在與模型無關(guān)的代碼片段,那么這些變更雖然在本質(zhì)上改變了軟件的行為或者結(jié)構(gòu),但其具體變更并不在模型所關(guān)注的范圍內(nèi),因此這一類變更在具體實(shí)施中也需要排除在外。代碼變更分析是對代碼進(jìn)行解析并進(jìn)行比較的過程,在具體實(shí)施時需要手動修改編譯器的前段,加入自定義的處理規(guī)則,以從有變化的代碼中將非實(shí)質(zhì)變更、非本質(zhì)變更、非相關(guān)變更的代碼過濾出去,獲得軟件模型相關(guān)的變更代碼。2、模型代碼匹配本發(fā)明所述的基于代碼變更的軟件模型同步方法具體實(shí)施中,模型與代碼之間有某種對應(yīng)關(guān)系,將模型分成最簡單的組件,如圖4所示,以統(tǒng)一建模語言中的活動圖為例說明,則分為節(jié)點(diǎn)和邊,其中節(jié)點(diǎn)分為很多細(xì)類,邊也分為帶條件和無條件兩類,具體實(shí)施步驟如下:步驟1:讀入活動圖模型,讀入模型所適用的規(guī)則集;步驟2:讀入活動圖模型相關(guān)的變更代碼;步驟3:確定活動圖模型中需要對應(yīng)的節(jié)點(diǎn)和邊等元素,逐個根據(jù)規(guī)則在代碼中進(jìn)行搜索,找到可能與之相聯(lián)系的代碼片段,并給出可信度,根據(jù)預(yù)設(shè)定的可信度閾值決定立即匹配或是交由開發(fā)人員確認(rèn)。步驟4:將所獲得的對應(yīng)信息加入代碼庫中。3、代碼變更處理代碼變更得到之后,需要根據(jù)這些變更以及模型代碼之間的對應(yīng)關(guān)系,決定如何修改、刪除和新增模型元素。本發(fā)明所述的基于代碼變更的軟件模型同步方法具體實(shí)施中,有些不能確定的情況,如匹配情況,修改確認(rèn),需要人工干預(yù),如圖5所示。
權(quán)利要求
1.一種基于代碼變更的軟件模型同步方法,其特征在于該方法所包含的步驟為: 步驟1、代碼變更分析 從有變化的代碼中,將非實(shí)質(zhì)變更、非本質(zhì)變更、非相關(guān)變更的代碼過濾出去,獲得軟件模型相關(guān)的變更代碼, 所述非實(shí)質(zhì)變更是指在不斷演化過程中,開發(fā)人員可能會引入一些格式的調(diào)整,比如空白字符、空行,這些變更只是改變代碼文件的存儲內(nèi)容,沒有改變根據(jù)代碼所得到的軟件行為和結(jié)構(gòu), 所述非本質(zhì)變更是指在代碼語法和語義約束下,程序代碼內(nèi)容改變,但根據(jù)代碼所得到的軟件在行為和結(jié)構(gòu)上保持不變, 所述非相關(guān)變更是指變更發(fā)生在與模型無關(guān)的代碼片段,但不在模型所關(guān)注的范圍內(nèi); 步驟2、模型代碼匹配 給定軟件模型,根據(jù)模型的類型和元素的名稱,對模型與軟件模型相關(guān)的變更代碼進(jìn)行匹配,建立模型中的元素與代碼中的元素之間的對應(yīng)關(guān)系,具體匹配過程如下: 步驟2.1:讀入軟件模型,讀入軟件模型所適用的規(guī)則集; 步驟2.2:讀入軟件模型相關(guān)的變更代碼; 步驟2.3:確定模型中需要對應(yīng)的元素,逐個根據(jù)模型所適用的規(guī)則在軟件模型相關(guān)的變更代碼中進(jìn)行搜索,找到可能與之相聯(lián)系的代碼片段,并給出可信度,根據(jù)預(yù)設(shè)定的可信度閾值決定立即匹配 或是交由開發(fā)人員確認(rèn); 步驟2.4:將所獲得的模型中的元素與代碼中的元素之間的對應(yīng)關(guān)系信息加入代碼庫中; 步驟3、代碼變更處理 將得到的代碼變更信息、模型中的元素與代碼中的元素之間的對應(yīng)關(guān)系翻譯為更新操作,產(chǎn)生新模型,具有步驟為: 步驟3.1:根據(jù)軟件模型所適用的規(guī)則、模型中的元素與代碼中的元素之間的對應(yīng)關(guān)系、已修改的變更代碼,修改對應(yīng)的模型元素; 步驟3.2:根據(jù)軟件模型所適用的規(guī)則、模型中的元素與代碼中的元素之間的對應(yīng)關(guān)系、已刪除的變更代碼,移除對應(yīng)的模型元素; 步驟3.3:根據(jù)軟件模型所適用的規(guī)則、模型中的元素與代碼中的元素之間的對應(yīng)關(guān)系、已新增的變更代碼,判斷是否需要在模型中新增新的元素,如果是,則在模型中新增新的元素。
2.根據(jù)權(quán)利要求1所述的一種基于代碼變更的軟件模型同步方法,其特征在于步驟I中所述非實(shí)質(zhì)變更是指在不斷演化過程中,引入一些格式的調(diào)整,這些變更沒有改變根據(jù)代碼所得到的軟件行為和結(jié)構(gòu)。
3.根據(jù)權(quán)利要求1所述的一種基于代碼變更的軟件模型同步方法,其特征在于步驟I中所述非本質(zhì)變更是指在語法和語義約束下,代碼內(nèi)容改變,但根據(jù)代碼所得到的軟件在行為和結(jié)構(gòu)上保持不變。
4.根據(jù)權(quán)利要求1所述的一種基于代碼變更的軟件模型同步方法,其特征在于步驟I中所述非相關(guān)變更是指變更發(fā)生在與模型無關(guān)的代碼片段,但不在模型所關(guān)注的范圍內(nèi)。
全文摘要
本發(fā)明提出的一種基于代碼變更的軟件模型同步方法,該方法從有變化的代碼中將非實(shí)質(zhì)變更、非本質(zhì)變更、非相關(guān)變更的代碼過濾出去,獲得軟件模型相關(guān)的變更代碼,對軟件模型與其相關(guān)的變更代碼進(jìn)行匹配,建立模型中的元素與代碼中的元素之間的對應(yīng)關(guān)系,將得到的代碼變更信息、模型中的元素與代碼中的元素之間的對應(yīng)關(guān)系翻譯為更新操作,產(chǎn)生新模型,實(shí)現(xiàn)模型同步。本發(fā)明可以集成在代碼版本管理系統(tǒng)中,能夠通過預(yù)定義規(guī)則,對軟件模型進(jìn)行自動或半自動更新,保證軟件模型與代碼的一致性。
文檔編號G06F9/445GK103235729SQ20131013585
公開日2013年8月7日 申請日期2013年4月18日 優(yōu)先權(quán)日2013年4月18日
發(fā)明者王林章, 李袁奎, 李宣東, 陳志 申請人:南京大學(xué)