本發(fā)明涉及軟件工程和數(shù)據(jù)庫技術(shù),尤其涉及一種在軟件配置和管理中構(gòu)建軟件配置管理時(shí)態(tài)對象變更模型的方法和系統(tǒng)。
背景技術(shù):
::變更影響分析是軟件配置管理的又一個(gè)關(guān)鍵技術(shù)。變更影響分析是保證軟件質(zhì)量的重要手段,可以減少軟件維護(hù)和測試成本,因?yàn)橹恍枰獙κ苡绊懙能浖ο?模型、構(gòu)件或者其他軟件對象)進(jìn)行維護(hù)和測試。首先分析各種軟件對象變更原因和變更方式,然后分析其導(dǎo)致的影響規(guī)律。變更是軟件開發(fā)過程中的一個(gè)重點(diǎn)問題,一個(gè)優(yōu)秀的軟件變更影響分析算法對于整個(gè)軟件系統(tǒng)開發(fā)是非常重要的。當(dāng)前國內(nèi)外對于軟件變更影響分析的相關(guān)研究不少,但大多數(shù)都是基于源碼集的變更影響分析,較少是基于軟件體系結(jié)構(gòu)層面的變更影響分析,而對于過程級的軟件變更影響分析的相關(guān)研究更少。雖然已經(jīng)有研究人員開始在基于已有的變更影響分析研究成果上,從靜態(tài)發(fā)展到動(dòng)態(tài),考慮支持版本演化中的變更影響分析,但卻仍然沒有真正從時(shí)態(tài)的角度來考慮變更影響分析。我們總結(jié)了已有的軟件變更影響分析方法,分析對比其優(yōu)缺點(diǎn),并且在參考現(xiàn)有的變更影響分析算法成果中,加入了時(shí)態(tài)性,研究基于圖和時(shí)態(tài)的軟件開發(fā)過程的變更影響分析方法。首先分析各種軟件對象變更原因和變更方式,然后分析其導(dǎo)致的影響規(guī)律。軟件生命周期對象(softwarelife-cycleobjects,slos),也叫作軟件產(chǎn)品或者軟件制品,是軟件開發(fā)中產(chǎn)生的成果,我們研究基于過程級的變更影響分析,故而所述的生命周期對象是軟件開發(fā)過程中的抽象實(shí)體,它可以是需求或者需求項(xiàng),也可以是設(shè)計(jì)、模型或者構(gòu)件等等。變更影響分析主要包括在同一類實(shí)體內(nèi)部的依賴性分析(如需求依賴性分析)和整個(gè)開發(fā)周期內(nèi)多種軟件周期對象之間關(guān)系的追蹤性分析。一個(gè)軟件變更最終的影響范圍由以下兩個(gè)因素決定:1)軟件變更的類型;2)發(fā)生變更的實(shí)體所處的上下文環(huán)境,主要指該實(shí)體與其他實(shí)體的各種依賴關(guān)系。一、變更影響分析研究現(xiàn)狀現(xiàn)有技術(shù)中有關(guān)軟件變更影響分析的方法主要有如下三個(gè)不同的領(lǐng)域:(1)源代碼(sourcecode)可以是靜態(tài)的(static)、動(dòng)態(tài)的(dynamic)或者在線的(online)。(2)形式模型(formalmodels)進(jìn)一步分為體系結(jié)構(gòu)(architectural)和需求(requirements)模型,來反映軟件開發(fā)的早期階段,也就是需求捕捉(requirementscapturing)和體系結(jié)構(gòu)推理(architecturalreasoning)。(3)各種軟件過程產(chǎn)物(miscellaneousartifacts)包括各種文檔(documents)和數(shù)據(jù)來源(datasources),例如文檔(documentation)、缺陷跟蹤(bugtrackers)和配置文件(configurationfiles)等。國內(nèi)外研究現(xiàn)狀具體如下:(1)源代碼(sourcecode)許多變更影響分析的研究方法都是從繼承關(guān)系、方法調(diào)用行為和其它程序?qū)嶓w間的依賴關(guān)系推理出來的。通過分析源碼文件、類包、類、方法、聲明和變量來預(yù)測變更的傳播。源碼級的變更影響分析方法不適用在軟件設(shè)計(jì)的早期階段和需求分析。靜態(tài)的(static)代碼分析是從源碼中提取信息來構(gòu)造調(diào)用圖、切片和其它用來評估一個(gè)變更影響的方法。相比之下,動(dòng)態(tài)的(dynamic)和在線的(online)方法通過工具編碼或編譯二進(jìn)制文件來收集方法執(zhí)行信息。這些所謂的執(zhí)行追蹤是在程序執(zhí)行后的分析(動(dòng)態(tài)的)或者是在執(zhí)行時(shí)(在線的)并發(fā)進(jìn)行變更的評估。代碼級的變更影響分析都有如下技術(shù):①調(diào)用圖(callgraphs),②依賴性分析(dependencyanalysis),③程序切片(programslicing),④執(zhí)行追蹤(executiontraces),⑤顯式規(guī)則(explicitrules),⑥信息檢索(informationretrieval),⑦概率模型(probabilisticmodels),⑻歷史挖掘(historymining),⑨混合技術(shù)(combinedtechnologies),⑩其它技術(shù)(othertechnologies)。(2)體系結(jié)構(gòu)模型(architecturalmodels)例如uml構(gòu)件圖能夠在一個(gè)比源碼更為抽象的層面上評估體系結(jié)構(gòu)的變更,這個(gè)能夠在開發(fā)的早期階段和在基于模型開發(fā)(modelbaseddevelopment,mbd)上進(jìn)行影響分析的方法在近年來越來越重要。然而即使是允許細(xì)粒度結(jié)果的體系結(jié)構(gòu)分析都要依賴于底層的建模語言,例如分析復(fù)雜的uml類圖。典型的粒度包括系統(tǒng)、子系統(tǒng)、構(gòu)件和類。(3)需求模型(requirementsmodels)正式的需求是軟件開發(fā)過程中的第一個(gè)可用的工件,并且在確定一個(gè)程序的最終版本前會經(jīng)歷許多變化。如果需求被形式化建模語言如uml,那么由于需求依附于一個(gè)結(jié)構(gòu)良好的元模型,此時(shí)可以把它們視為是形式分析的對象。相比之下,如果他們被表示為純文本,那么就只有文本檢索的方法如信息檢索(informationretrieval,ir)的方法可用了。(4)各種軟件過程產(chǎn)物(miscellaneousartifacts)變更不只是發(fā)生在源代碼或構(gòu)件模型上,這已經(jīng)是一個(gè)公認(rèn)的事實(shí)了。文件編制、配置文件、故障追蹤器和類似的軟件輔助內(nèi)容也是頻繁變更的對象了。然而,變更這樣的實(shí)體(例如當(dāng)一個(gè)配置文件變更了)也可能影響軟件,在這樣的實(shí)體(主要是不同類型的文件)中執(zhí)行影響分析,也因此成為研究社群的一個(gè)問題。(5)混合領(lǐng)域(combinedscopes)典型的軟件開發(fā)過程是由不同的階段組成的,即從需求分析和體系結(jié)構(gòu)推理開始,然后逐步進(jìn)行實(shí)現(xiàn)。當(dāng)變更軟件時(shí),不限制它們對某種工件的影響,那么變更一個(gè)需求可以影響不同的體系結(jié)構(gòu)模型,以及已經(jīng)實(shí)現(xiàn)的源碼構(gòu)件。因此,綜合分析是在所有可用的工件中進(jìn)行追蹤影響所必須的手段。然而,這需要能夠處理可能涉及的各種類型的工件的復(fù)雜概念。二、時(shí)態(tài)對象實(shí)體概念和依賴關(guān)系建模軟件需求、設(shè)計(jì)、模型、構(gòu)件、參數(shù)和軟件產(chǎn)品等軟件開發(fā)要素及其之間的復(fù)雜聯(lián)系,建立集成統(tǒng)一的數(shù)據(jù)模型,是軟件開發(fā)支撐平臺的基礎(chǔ),也是核心工作。圖1顯示了現(xiàn)有技術(shù)中集成統(tǒng)一數(shù)據(jù)模型的軟件開發(fā)平臺框架示意圖。但是以上存在不能將時(shí)態(tài)技術(shù)應(yīng)用到軟件開發(fā)平臺中的弊端。本發(fā)明提出從時(shí)間維度出發(fā),綜合利用時(shí)態(tài)圖技術(shù)和時(shí)態(tài)數(shù)據(jù)庫技術(shù),研究軟件開發(fā)諸要素及其復(fù)雜聯(lián)系的時(shí)態(tài)建模方法,設(shè)計(jì)集成統(tǒng)一的時(shí)態(tài)數(shù)據(jù)模型和存儲模型,該模型包括軟件需求(requirement)庫、設(shè)計(jì)(design)庫、模型(model)庫、構(gòu)件(component)庫、參數(shù)(parameter)庫、軟件產(chǎn)品(softwareproduct)庫和時(shí)態(tài)實(shí)體聯(lián)系數(shù)據(jù)圖(temporalentity-relationshipdatagraph);在此基礎(chǔ)上,研究時(shí)態(tài)數(shù)據(jù)維護(hù)、檢索和分析技術(shù),可以為新的軟件開發(fā)支撐平臺開發(fā)提供基礎(chǔ)性的支持。圖2顯示以時(shí)態(tài)實(shí)體聯(lián)系數(shù)據(jù)圖為核心的集成統(tǒng)一數(shù)據(jù)模型,這是本發(fā)明思想的基礎(chǔ)。軟件需求、設(shè)計(jì)、模型、構(gòu)件、參數(shù)和軟件產(chǎn)品等實(shí)體對象都具有不同的版本,每個(gè)版本具有相應(yīng)的發(fā)布時(shí)間、使用時(shí)間和停用時(shí)間。具有時(shí)態(tài)屬性,并且其狀態(tài)隨時(shí)間變化的實(shí)體,稱為時(shí)態(tài)實(shí)體。圖3描述了a實(shí)體(例如構(gòu)件)和b實(shí)體(例如軟件)的4種版本時(shí)態(tài)聯(lián)系,其中at0,at1,at2,at3,at4,at5….由虛箭頭線相連隨時(shí)間發(fā)展演化成a實(shí)體的各個(gè)版本對象,b實(shí)體也有類似隨時(shí)間演化的版本序列,每個(gè)時(shí)刻版本對象上的時(shí)態(tài)標(biāo)簽為該對象的有效時(shí)間“[發(fā)布時(shí)間,停用時(shí)間)”,邊上的標(biāo)簽表示兩個(gè)版本對象建立聯(lián)系的有效時(shí)間“[開始時(shí)間,結(jié)束時(shí)間)”;圖3表示at0版本“使用”bt0版本;圖3表示a實(shí)體由at1版本升級為at2版本,bt1版本不變;圖3表示at3版本不變,bt3版本升級為bt4版本;圖3表示at3升級為at5版本,bt4版本升級為bt5版本。上述a和b兩類時(shí)態(tài)實(shí)體之間的四種時(shí)態(tài)聯(lián)系,實(shí)際上為兩類時(shí)態(tài)聯(lián)系:a版本變化,b版本同步變化;a版本變化,b版本不變化。圖3表明,軟件開發(fā)中的軟件需求、設(shè)計(jì)、模型、構(gòu)件、參數(shù)和軟件等時(shí)態(tài)實(shí)體本身不僅存在隨時(shí)間演化的版本聯(lián)系,時(shí)態(tài)實(shí)體之間存在復(fù)雜的時(shí)態(tài)聯(lián)系。因此,結(jié)合時(shí)態(tài)擴(kuò)展實(shí)體聯(lián)系e-r模型和時(shí)態(tài)圖(temporalgraph)模型,研究軟件開發(fā)要素的時(shí)態(tài)建模方法,構(gòu)建軟件開發(fā)要素的概念模型,構(gòu)建時(shí)態(tài)實(shí)體聯(lián)系圖,可以描述上述六類實(shí)體之間的動(dòng)態(tài)時(shí)態(tài)聯(lián)系。依賴關(guān)系,是軟件實(shí)體間最主要的一種關(guān)系,尤其是在軟件開發(fā)過程中,軟件實(shí)體類之間的依賴關(guān)系以及實(shí)體類內(nèi)部之間的依賴關(guān)系,對軟件的變更影響分析以及風(fēng)險(xiǎn)分析等都具有非常大的影響。然而,目前對于依賴關(guān)系的研究工作大多集中于代碼級的研究。軟件開發(fā)過程中,一共有六個(gè)主要的實(shí)體,即需求、設(shè)計(jì)、模型、構(gòu)件、軟件以及支持?jǐn)?shù)據(jù),這六個(gè)實(shí)體間存在大量的依賴關(guān)系,同樣的,實(shí)體內(nèi)部也包含多種依賴關(guān)系。在軟件系統(tǒng)中,某一部分發(fā)生變更之后,其代碼的變更可能會發(fā)生在許多不同的模塊中,甚至于,波及到整個(gè)系統(tǒng),這就是變更的連鎖反應(yīng)(chainreaction),而這種連鎖反應(yīng)就是由實(shí)體間的依賴關(guān)系引起的。當(dāng)某一個(gè)實(shí)體發(fā)生變更或失效時(shí),實(shí)體間的依賴關(guān)系可能會導(dǎo)致與其有所關(guān)聯(lián)的實(shí)體都發(fā)生變化,甚至于是失效,因而,軟件實(shí)體間的依賴關(guān)系也成為了軟件實(shí)體的變更影響分析以及失效風(fēng)險(xiǎn)分析的基礎(chǔ)。如何將軟件實(shí)體依賴關(guān)系分析并且表現(xiàn)出來,對于軟件的其他分析有很大的幫助。本發(fā)明提出的基于時(shí)態(tài)的對象變更模型的建模方法即基于以上時(shí)態(tài)建模和依賴關(guān)系的思想。技術(shù)實(shí)現(xiàn)要素:本研究針對于軟件開發(fā)過程中需求、設(shè)計(jì)、模型、構(gòu)件、軟件和支持?jǐn)?shù)據(jù)等六類實(shí)體之間的過程級依賴關(guān)系進(jìn)行研究,并且提出了一種軟件實(shí)體依賴性分析方法。本發(fā)明請求保護(hù)一種一種基于時(shí)態(tài)的對象變更模型的建模方法,其特征在于包括:步驟1,根據(jù)時(shí)態(tài)實(shí)體以及時(shí)態(tài)實(shí)體之間的聯(lián)系,建立數(shù)據(jù)庫模式;其中時(shí)態(tài)實(shí)體包括軟件開發(fā)要素中的以下至少一種:軟件需求、設(shè)計(jì)、模型、構(gòu)件、軟件產(chǎn)品、開發(fā)單位、開發(fā)人員;時(shí)態(tài)實(shí)體具有時(shí)態(tài)屬性,該時(shí)態(tài)屬性包括時(shí)態(tài)實(shí)體的版本信息和/或有效時(shí)間信息;時(shí)態(tài)實(shí)體聯(lián)系包括時(shí)態(tài)實(shí)體內(nèi)部的依賴關(guān)系或時(shí)態(tài)實(shí)體之間的依賴關(guān)系;其中該時(shí)態(tài)實(shí)體還包括變更;其中建立數(shù)據(jù)庫模式包括將時(shí)態(tài)實(shí)體和時(shí)態(tài)實(shí)體聯(lián)系在數(shù)據(jù)庫環(huán)境中以包括表table、視圖view、存儲過程的方式來創(chuàng)建,其中建立專門的聯(lián)系表relationtable來表達(dá)時(shí)態(tài)實(shí)體的內(nèi)部聯(lián)系和時(shí)態(tài)實(shí)體之間的外部聯(lián)系,其中表、視圖中還包括時(shí)態(tài)屬性字段來表達(dá)時(shí)態(tài)實(shí)體的以上時(shí)態(tài)屬性;步驟2,構(gòu)建多層時(shí)態(tài)依賴圖mtdg(multilayertemporaldependencygraph),包括:定義每種時(shí)態(tài)實(shí)體分別對應(yīng)多層時(shí)態(tài)依賴圖中的一層layer,定義每種時(shí)態(tài)實(shí)體的一個(gè)具體對象為該層layer中的一個(gè)結(jié)點(diǎn)e,定義層內(nèi)的結(jié)點(diǎn)與結(jié)點(diǎn)之間的有向邊為內(nèi)部依賴(即內(nèi)部聯(lián)系),定義層間的結(jié)點(diǎn)與結(jié)點(diǎn)之間的有向邊為外部依賴(即外部聯(lián)系);定義由以上所有結(jié)點(diǎn)和有向邊構(gòu)成的圖為多層時(shí)態(tài)依賴圖;輸入以上數(shù)據(jù)庫模式,獲取其中包括表、視圖、存儲過程的所有數(shù)據(jù)庫模式ds(databaseschema);初始化多層時(shí)態(tài)依賴圖的層數(shù)mtdg.layercnt為0;開始非空循環(huán),條件為“數(shù)據(jù)庫模式不為空”;如果獲得的數(shù)據(jù)庫模式是一個(gè)時(shí)態(tài)實(shí)體;多層時(shí)態(tài)依賴圖的層數(shù)mtdg.layercnt加1;生成當(dāng)前層的時(shí)態(tài)依賴圖中的結(jié)點(diǎn);否則,如果獲得的數(shù)據(jù)庫模式是一個(gè)內(nèi)部聯(lián)系;生成層內(nèi)依賴關(guān)系,其包括生成層內(nèi)結(jié)點(diǎn)之間的有向邊;否則,如果獲得的數(shù)據(jù)庫模式是一個(gè)外部聯(lián)系;生成層間依賴關(guān)系,即外部依賴關(guān)系,其包括生成層間結(jié)點(diǎn)之間的有向邊;結(jié)束非空循環(huán),條件為“數(shù)據(jù)庫模式不為空”;輸出多層時(shí)態(tài)依賴圖mtdg;其中,輸出的多層時(shí)態(tài)依賴圖中包括變更層,并且還包括以下至少一層:軟件需求層、設(shè)計(jì)層、模型層、構(gòu)件層、軟件產(chǎn)品層、開發(fā)單位層、開發(fā)人員層。本發(fā)明請求保護(hù)一種一種基于時(shí)態(tài)的對象變更模型的建模系統(tǒng),包括:數(shù)據(jù)庫模式構(gòu)建模塊,根據(jù)時(shí)態(tài)實(shí)體以及時(shí)態(tài)實(shí)體之間的聯(lián)系,建立數(shù)據(jù)庫模式;其中時(shí)態(tài)實(shí)體包括軟件開發(fā)要素中的以下至少一種:軟件需求、設(shè)計(jì)、模型、構(gòu)件、軟件產(chǎn)品、開發(fā)單位、開發(fā)人員;時(shí)態(tài)實(shí)體具有時(shí)態(tài)屬性,該時(shí)態(tài)屬性包括時(shí)態(tài)實(shí)體的版本信息和/或有效時(shí)間信息;時(shí)態(tài)實(shí)體聯(lián)系包括時(shí)態(tài)實(shí)體內(nèi)部的依賴關(guān)系或時(shí)態(tài)實(shí)體之間的依賴關(guān)系;其中該時(shí)態(tài)實(shí)體還包括變更;其中建立數(shù)據(jù)庫模式包括將時(shí)態(tài)實(shí)體和時(shí)態(tài)實(shí)體聯(lián)系在數(shù)據(jù)庫環(huán)境中以包括表table、視圖view、存儲過程的方式來創(chuàng)建,其中建立專門的聯(lián)系表relationtable來表達(dá)時(shí)態(tài)實(shí)體的內(nèi)部聯(lián)系和時(shí)態(tài)實(shí)體之間的外部聯(lián)系,其中表、視圖中還包括時(shí)態(tài)屬性字段來表達(dá)時(shí)態(tài)實(shí)體的以上時(shí)態(tài)屬性;構(gòu)建包含變更層的依賴圖構(gòu)建模塊,構(gòu)建多層時(shí)態(tài)依賴圖mtdg(multilayertemporaldependencygraph),包括:定義每種時(shí)態(tài)實(shí)體分別對應(yīng)多層時(shí)態(tài)依賴圖中的一層layer,定義每種時(shí)態(tài)實(shí)體的一個(gè)具體對象為該層layer中的一個(gè)結(jié)點(diǎn)e,定義層內(nèi)的結(jié)點(diǎn)與結(jié)點(diǎn)之間的有向邊為內(nèi)部依賴(即內(nèi)部聯(lián)系),定義層間的結(jié)點(diǎn)與結(jié)點(diǎn)之間的有向邊為外部依賴(即外部聯(lián)系);定義由以上所有結(jié)點(diǎn)和有向邊構(gòu)成的圖為多層時(shí)態(tài)依賴圖;輸入以上數(shù)據(jù)庫模式,獲取其中包括表、視圖、存儲過程的所有數(shù)據(jù)庫模式ds(databaseschema);初始化多層時(shí)態(tài)依賴圖的層數(shù)mtdg.layercnt為0;開始非空循環(huán),條件為“數(shù)據(jù)庫模式不為空”;如果獲得的數(shù)據(jù)庫模式是一個(gè)時(shí)態(tài)實(shí)體;多層時(shí)態(tài)依賴圖的層數(shù)mtdg.layercnt加1;生成當(dāng)前層的時(shí)態(tài)依賴圖中的結(jié)點(diǎn);否則,如果獲得的數(shù)據(jù)庫模式是一個(gè)內(nèi)部聯(lián)系;生成層內(nèi)依賴關(guān)系,其包括生成層內(nèi)結(jié)點(diǎn)之間的有向邊;否則,如果獲得的數(shù)據(jù)庫模式是一個(gè)外部聯(lián)系;生成層間依賴關(guān)系,即外部依賴關(guān)系,其包括生成層間結(jié)點(diǎn)之間的有向邊;結(jié)束非空循環(huán),條件為“數(shù)據(jù)庫模式不為空”;輸出多層時(shí)態(tài)依賴圖mtdg;其中,輸出的多層時(shí)態(tài)依賴圖中包括變更層,并且還包括以下至少一層:軟件需求層、設(shè)計(jì)層、模型層、構(gòu)件層、軟件產(chǎn)品層、開發(fā)單位層、開發(fā)人員層。本發(fā)明獲得的有益技術(shù)效果:可以自動(dòng)化地幫助軟件研發(fā)人員了解軟件開發(fā)中的各種依賴關(guān)系,有助于在軟件部分發(fā)生變更(例如版本變更、人員變更)是發(fā)現(xiàn)其中的依賴關(guān)系,提高軟件維護(hù)效能。附圖說明圖1是現(xiàn)有技術(shù)一個(gè)基于集成統(tǒng)一數(shù)據(jù)模型的軟件開發(fā)平臺框架示意圖。圖2是本發(fā)明一個(gè)以時(shí)態(tài)實(shí)體聯(lián)系數(shù)據(jù)圖為核心的集成統(tǒng)一數(shù)據(jù)模型。圖3是本發(fā)明一個(gè)兩類軟件開發(fā)要素實(shí)體a和b的4種版本時(shí)態(tài)聯(lián)系圖。圖4是本發(fā)明一個(gè)總體時(shí)態(tài)概念結(jié)構(gòu)圖(時(shí)態(tài)ter圖)。圖5是本發(fā)明一個(gè)以需求為核心的分時(shí)態(tài)ter圖。圖6是本發(fā)明一個(gè)需求內(nèi)部之間的分時(shí)態(tài)ter圖。圖7是本發(fā)明一個(gè)以設(shè)計(jì)為核心的分時(shí)態(tài)ter圖。圖8是本發(fā)明一個(gè)設(shè)計(jì)內(nèi)部之間的分時(shí)態(tài)ter圖。圖9是本發(fā)明一個(gè)以模型為核心的分時(shí)態(tài)ter圖。圖10是本發(fā)明一個(gè)模型內(nèi)部之間的分時(shí)態(tài)ter圖。圖11是本發(fā)明一個(gè)以構(gòu)件為核心的分時(shí)態(tài)ter圖。圖12是本發(fā)明一個(gè)構(gòu)件內(nèi)部聯(lián)系的分時(shí)態(tài)ter圖。圖13是本發(fā)明一個(gè)以軟件為核心的分時(shí)態(tài)ter圖。圖14是本發(fā)明一個(gè)以支持?jǐn)?shù)據(jù)為核心的分時(shí)態(tài)ter圖。圖15是本發(fā)明一個(gè)以項(xiàng)目為中心的分時(shí)態(tài)ter圖。圖16是本發(fā)明一個(gè)以配置為核心的分時(shí)態(tài)ter圖。圖17是本發(fā)明一個(gè)版本樹示例。圖18是本發(fā)明一個(gè)簡單的構(gòu)件依賴圖。圖19是本發(fā)明一個(gè)實(shí)體依賴樹。圖20是本發(fā)明一個(gè)多層依賴圖示例。圖中實(shí)線為層內(nèi)依賴關(guān)系,虛線為層間依賴關(guān)系。任意兩層間都可以有依賴關(guān)系。圖21是本發(fā)明一個(gè)傳入耦合示例圖。圖22是本發(fā)明一個(gè)傳出耦合示例圖。圖23是本發(fā)明一個(gè)實(shí)體距離計(jì)算。圖24是本發(fā)明一個(gè)實(shí)體依賴圖示例。圖25是本發(fā)明一個(gè)正向?qū)嶓w依賴分析結(jié)果。圖26是本發(fā)明一個(gè)逆向?qū)嶓w依賴分析結(jié)果。圖27是本發(fā)明一個(gè)雙向?qū)嶓w依賴分析結(jié)果。圖28是本發(fā)明一個(gè)推導(dǎo)出開發(fā)人員只見依賴關(guān)系示意圖。圖29是本發(fā)明一個(gè)開發(fā)人員d7依賴于d4推導(dǎo)關(guān)系示意圖。圖30是本發(fā)明一個(gè)增加了變更層的多層時(shí)態(tài)依賴圖示例。具體實(shí)施方式一、本發(fā)明的實(shí)現(xiàn)環(huán)境本發(fā)明的實(shí)現(xiàn)可以采用例如下列工具和環(huán)境,但是僅僅是可選的工具和環(huán)境之一,并不用于限定本發(fā)明的保護(hù)范圍?!鯏?shù)據(jù)庫采用oracle11gexpress數(shù)據(jù)庫?!鯏?shù)據(jù)庫中間件采用hibernate?!蹰_發(fā)語言采用java?!鮳eb開發(fā)框架采用wicket和html?!蹰_發(fā)工具采用開源的開發(fā)工具eclipse。□圖形標(biāo)準(zhǔn)和顯示采用svg和d3.js。二、時(shí)態(tài)實(shí)體概念結(jié)構(gòu)設(shè)計(jì)及其時(shí)態(tài)實(shí)體關(guān)系圖本發(fā)明基于時(shí)態(tài)建模方法,結(jié)合關(guān)系數(shù)據(jù)庫技術(shù)和時(shí)態(tài)數(shù)據(jù)庫技術(shù),構(gòu)建包括軟件需求、設(shè)計(jì)、模型、構(gòu)件、支持?jǐn)?shù)據(jù)和軟件產(chǎn)品等軟件開發(fā)要素實(shí)體及其聯(lián)系的概念模型。如圖4所示的總體時(shí)態(tài)概念結(jié)構(gòu)圖(時(shí)態(tài)ter圖),體現(xiàn)了軟件需求、設(shè)計(jì)、模型、構(gòu)件、支持?jǐn)?shù)據(jù)、軟件產(chǎn)品、開發(fā)單位、開發(fā)人員、項(xiàng)目等時(shí)態(tài)實(shí)體之間的聯(lián)系關(guān)系(依賴)。下表1.1是對圖4中時(shí)態(tài)e-r圖中符號的說明。表1.1時(shí)態(tài)ter圖的符號說明說明:(1)總的時(shí)態(tài)e-r圖只是反映出最主要的實(shí)體之間的聯(lián)系,此處略去了某些輔助實(shí)體之間的聯(lián)系。(2)實(shí)體內(nèi)部之間的聯(lián)系可以根據(jù)需要將在分e-r圖中畫出(此處省略),例如需求實(shí)體內(nèi)部的聯(lián)系(依賴關(guān)系)分為父子層次聯(lián)系、引用聯(lián)系、復(fù)用聯(lián)系等。(3)實(shí)體的屬性需要設(shè)定時(shí)變屬性。2.1以需求為核心的概念結(jié)構(gòu)設(shè)計(jì)及其分時(shí)態(tài)實(shí)體聯(lián)系圖ter圖5是以需求為核心的分時(shí)態(tài)ter圖。其表達(dá)了以需求為核心時(shí)的積累需求之間的關(guān)系以及與其它軟件開發(fā)要素之間的關(guān)系。原始需求、使用需求、系統(tǒng)需求、軟件需求,實(shí)際上為各種需求項(xiàng)(requirementitems)。各類需求項(xiàng)內(nèi)部之間具有層次結(jié)構(gòu)、復(fù)用和參照等各種聯(lián)系,為了e-r圖簡潔,上述各種聯(lián)系在上圖中沒有畫出。圖6表達(dá)了需求內(nèi)部之間的分時(shí)態(tài)ter圖。與軟件需求一樣,系統(tǒng)需求、使用需求和原始需求也有類似的聯(lián)系。2.2以設(shè)計(jì)為核心的概念結(jié)構(gòu)設(shè)計(jì)及其分時(shí)態(tài)實(shí)體聯(lián)系圖ter圖7是以設(shè)計(jì)為核心的時(shí)態(tài)ter圖。圖中顯示了以設(shè)計(jì)為核心時(shí),設(shè)計(jì)與其它軟件開發(fā)要素之間各種聯(lián)系。在圖中,設(shè)計(jì),實(shí)際上為各種設(shè)計(jì)項(xiàng)(designitems)。設(shè)計(jì)項(xiàng)內(nèi)部之間具有層次結(jié)構(gòu)、復(fù)用和參照等各種聯(lián)系,為了e-r圖簡潔,上述各種聯(lián)系在上圖中沒有畫出。圖8是設(shè)計(jì)內(nèi)部之間的分時(shí)態(tài)ter圖,其中可見設(shè)計(jì)內(nèi)部的關(guān)系主要是父子關(guān)系和依賴關(guān)系。2.3以模型為核心的概念結(jié)構(gòu)設(shè)計(jì)及其分時(shí)態(tài)實(shí)體聯(lián)系圖ter圖9是以模型為核心的分時(shí)態(tài)ter圖。圖中給出了以模型為核心時(shí),其與其它軟件開發(fā)要素之間的聯(lián)系。圖中各類型模型之間具有復(fù)用和參照等各種聯(lián)系,為了e-r圖簡潔,上述各種聯(lián)系在上圖中沒有畫出。圖10是模型內(nèi)部之間的分時(shí)態(tài)ter圖。圖中可見模型內(nèi)部之間的關(guān)系主要是父子關(guān)系和依賴關(guān)系。2.4以構(gòu)件為核心的概念結(jié)構(gòu)設(shè)計(jì)及其分時(shí)態(tài)實(shí)體聯(lián)系圖ter圖11是以構(gòu)件為核心的分時(shí)態(tài)ter圖。圖中顯示了構(gòu)件與其它軟件開發(fā)要素之間的關(guān)系。各類構(gòu)件之間具有復(fù)用、引用和組合等各種聯(lián)系,為了e-r圖簡潔,上述各種聯(lián)系在上圖中沒有畫出。構(gòu)件在具體開發(fā)上,可能是一個(gè)構(gòu)件選定一種構(gòu)件模型,并實(shí)現(xiàn)一種構(gòu)件實(shí)現(xiàn)代碼,因此,構(gòu)件模型和實(shí)現(xiàn)代碼,只是構(gòu)件分類的兩個(gè)重要屬性,在邏輯設(shè)計(jì)時(shí),也許并不需要把他們作為實(shí)體對待。圖12是構(gòu)件內(nèi)部聯(lián)系的分時(shí)態(tài)ter圖??梢娫跇?gòu)件內(nèi)部中主要包括父子關(guān)系和依賴關(guān)系。2.5以軟件產(chǎn)品為核心的概念結(jié)構(gòu)設(shè)計(jì)及其分時(shí)態(tài)實(shí)體聯(lián)系圖ter圖13是以軟件為核心的分時(shí)態(tài)ter圖。圖中顯示了以軟件為核心時(shí),該時(shí)態(tài)實(shí)體與其它時(shí)態(tài)實(shí)體之間的關(guān)系。2.6以支持?jǐn)?shù)據(jù)為核心的概念結(jié)構(gòu)設(shè)計(jì)及其分時(shí)態(tài)實(shí)體聯(lián)系圖ter圖14以支持?jǐn)?shù)據(jù)為核心的分時(shí)態(tài)ter圖。圖中顯示了以支持?jǐn)?shù)據(jù)為核心時(shí),該時(shí)態(tài)實(shí)體與其它時(shí)態(tài)實(shí)體之間的關(guān)系。(1)設(shè)計(jì)與構(gòu)件相關(guān),不與構(gòu)件實(shí)現(xiàn)直接相關(guān);(2)支持?jǐn)?shù)據(jù)全集,實(shí)際上因?yàn)橹挥幸粋€(gè),不用具體存儲。2.7以項(xiàng)目為核心的概念結(jié)構(gòu)設(shè)計(jì)及其分時(shí)態(tài)實(shí)體聯(lián)系圖ter圖15是以項(xiàng)目為中心的分時(shí)態(tài)ter圖。圖中顯示了以項(xiàng)目為核心時(shí),該時(shí)態(tài)實(shí)體與其它時(shí)態(tài)實(shí)體之間的關(guān)系。在該圖中產(chǎn)品分解結(jié)構(gòu)粒度細(xì)化到哪個(gè)層次、工作分解結(jié)構(gòu)粒度細(xì)化到哪個(gè)層次、產(chǎn)品分解結(jié)構(gòu)、工作分解結(jié)構(gòu)和設(shè)計(jì)等其他實(shí)體之間的聯(lián)系如何,則取決于具體的軟件項(xiàng)目。2.8以配置項(xiàng)為核心的概念結(jié)構(gòu)設(shè)計(jì)及其分時(shí)態(tài)實(shí)體聯(lián)系圖ter圖16是以配置為核心的分時(shí)態(tài)ter圖。圖中顯示了以配置為核心時(shí),該時(shí)態(tài)實(shí)體與其它時(shí)態(tài)實(shí)體之間的關(guān)系。三、構(gòu)建時(shí)態(tài)實(shí)體及其聯(lián)系的邏輯模型本部分基于以上時(shí)態(tài)實(shí)體、依賴關(guān)系的發(fā)明構(gòu)思,設(shè)計(jì)相應(yīng)的關(guān)系數(shù)據(jù)庫邏輯模型,包括軟件需求、設(shè)計(jì)、模型、構(gòu)件、支持?jǐn)?shù)據(jù)和軟件產(chǎn)品等軟件開發(fā)要素實(shí)體及其之間聯(lián)系的邏輯模型,特別是時(shí)態(tài)實(shí)體之間的時(shí)態(tài)聯(lián)系邏輯模型,也包括相應(yīng)的時(shí)態(tài)完整性約束。概念結(jié)構(gòu)設(shè)計(jì)識別出時(shí)態(tài)實(shí)體、時(shí)態(tài)屬性和時(shí)態(tài)聯(lián)系,并建立了時(shí)態(tài)實(shí)體聯(lián)系圖ter圖。數(shù)據(jù)庫邏輯模型(即數(shù)據(jù)庫模式):由時(shí)態(tài)實(shí)體和時(shí)態(tài)實(shí)體聯(lián)系兩部分組成,而每個(gè)時(shí)態(tài)實(shí)體有兩部分組成:一部分為記錄非時(shí)態(tài)屬性的實(shí)體基本表table,另一部分為記錄時(shí)態(tài)版本屬性的實(shí)體版本信息表table。在軟件工程中每個(gè)以上時(shí)態(tài)實(shí)體的版本形成一棵多分枝的版本樹,分枝又能合并,因此版本樹是一個(gè)有向無環(huán)圖(dag)。圖17顯示了這樣一顆版本樹示例。對于某個(gè)實(shí)體的版本樹,可以根據(jù)該實(shí)體的版本及其記錄的先序版本,逐步倒推出該版本相關(guān)的版本樹??梢詫r(shí)態(tài)實(shí)體和時(shí)態(tài)實(shí)體聯(lián)系在例如oracle數(shù)據(jù)庫環(huán)境中創(chuàng)建,其中建立數(shù)據(jù)庫模式包括將時(shí)態(tài)實(shí)體和時(shí)態(tài)實(shí)體聯(lián)系在數(shù)據(jù)庫環(huán)境中以包括表table、視圖view、存儲過程的方式來創(chuàng)建,其中建立專門的聯(lián)系表relationtable來表達(dá)時(shí)態(tài)實(shí)體的內(nèi)部聯(lián)系和時(shí)態(tài)實(shí)體之間的外部聯(lián)系,其中表、視圖中還包括時(shí)態(tài)屬性字段來表達(dá)時(shí)態(tài)實(shí)體的以上時(shí)態(tài)屬性;以下數(shù)據(jù)庫模式表table、視圖view中,涉及“實(shí)體內(nèi)部的聯(lián)系及其屬性”、“實(shí)體外部的聯(lián)系及其屬性”的,體現(xiàn)了時(shí)態(tài)實(shí)體的內(nèi)部聯(lián)系和外部聯(lián)系,更重要的是體現(xiàn)了時(shí)態(tài)實(shí)體的內(nèi)部依賴和外部依賴。以下數(shù)據(jù)庫模式表table、視圖view中的時(shí)間屬性,或者代表了該時(shí)態(tài)實(shí)體的有效時(shí)間,或者代表該時(shí)態(tài)與其它時(shí)態(tài)實(shí)體之間聯(lián)系(依賴)的有效時(shí)間validtime;以下數(shù)據(jù)庫模式表table、視圖view中,涉及“變更”的表table、視圖view、字段field則可用于以上時(shí)態(tài)實(shí)體變更分析。四、依賴基本概念(1)依賴(dependency)基本定義從變更影響的角度出發(fā),依賴是指元素間存在的一種特定的語義連接和動(dòng)態(tài)關(guān)聯(lián)關(guān)系,當(dāng)某個(gè)元素發(fā)生變更時(shí),與之有依賴關(guān)系的另一個(gè)元素也會發(fā)生相應(yīng)的變更,從而保證軟件系統(tǒng)演化的完整性和一致性。下面給出實(shí)體及其依賴關(guān)系的相關(guān)定義。定義2.1實(shí)體型(entitytype,et):實(shí)體型et定義為(ua,doma,f,ub),ua為et的m個(gè)屬性集合{a1,a2,…,am},doma為取值范圍集合{dom1,dom2,…domn},f為ua到doma的映射,即ai對應(yīng)的取值范圍為domi,ub為et的n個(gè)行為集合{b1,b2,…,bn};et定義可以簡寫為(ua,ub);實(shí)體(entity)e是實(shí)體型et的實(shí)例(instance),et也是e的集合。定義2.2時(shí)態(tài)實(shí)體型(temporalentitytype,tet):時(shí)態(tài)實(shí)體型tet定義為(ua,doma,f,ub,vt),簡寫為(et,vt)或者(ua,ub,vt),即在有效時(shí)間vt(validtime)內(nèi)有效的et,而vt為有效開始時(shí)間(validstarttime)ts和有效結(jié)束時(shí)間(validendtime)te組成的右半開時(shí)間區(qū)間[ts,te)的集合。時(shí)態(tài)實(shí)體et是實(shí)體型tet的實(shí)例(instance),tet也是et的集合。定義2.3依賴(dependency):依賴關(guān)系d:e1×dt×e2,定義為兩個(gè)實(shí)體型e1和e2,以及依賴類型(dependencytype,dt)上的三元組;給定任意兩個(gè)實(shí)體ei和ej,依賴類型dtk,如果ej的屬性ai或者行為bi發(fā)生變更后,也會導(dǎo)致ei的屬性aj或者行為bj發(fā)生變更,則稱ei依賴ej于dtk,記為:d={<ei,dtk,ej>|ei∈e∧ej∈e∧dt∈dt∧dtk=f(ai|bi,aj|bj)},其中f(ai|bi,aj|bj)表示dtk跟ai(或bi)和aj(或bj)有關(guān),即一個(gè)實(shí)體的不同屬性或者行為,與另外一個(gè)實(shí)體的不同屬性或行為之間可能存在著不同類型的依賴。當(dāng)e1與e2相同時(shí),dtk為實(shí)體型內(nèi)部的依賴關(guān)系;當(dāng)e1和e2不同時(shí),dtk為實(shí)體型之間的依賴關(guān)系。定義2.4時(shí)態(tài)依賴(temporaldependency):時(shí)態(tài)依賴dt:d×vt,即在有效時(shí)間vt內(nèi)存在的依賴關(guān)系d,在有效時(shí)間實(shí)體ei依賴ej于dtk,記為dt={<ej,dtk,ei,[ts,te)>}|ei∈e1∧ej∈e2∧[ts,te)∈vt∧dtk∈dt∧dtk=f(ai|bi,aj|bj)}。假設(shè)依賴dtk不隨時(shí)間變化。(2)依賴的性質(zhì)不同實(shí)體之間的依賴關(guān)系是反自反的、不對稱的、傳遞的,證明如下:■反自反性依賴是基于不同實(shí)體之間關(guān)系為前提,也就是說,依賴指代的是兩個(gè)或多個(gè)不同實(shí)體之間一個(gè)或多個(gè)實(shí)體的變化對于其他實(shí)體的影響,實(shí)體本身的變化不能夠稱作依賴,因此,依賴關(guān)系是反自反的?!霾粚ΨQ性采用反證法來證明。假設(shè)a與b是兩個(gè)實(shí)體,且a依賴于b,b依賴于a。根據(jù)依賴關(guān)系的定義,當(dāng)a變化時(shí),b也發(fā)生變化;同理,b發(fā)生變化時(shí),a也發(fā)生變化。則當(dāng)a發(fā)生變化時(shí),會引起a本身變化,這與依賴關(guān)系是反自反的相矛盾。所以,不同實(shí)體之間的依賴關(guān)系是不對稱的?!鰝鬟f性假設(shè)a、b、c是三個(gè)不同的實(shí)體,且a依賴于b,b依賴于c,則根據(jù)依賴關(guān)系定義,c的變化會引起b的變化,b的變化會引起a的變化,即c的變化引起了a的變化,也就是說a依賴于c,所以說實(shí)體之間的依賴關(guān)系是傳遞的。(3)依賴關(guān)系的分類實(shí)體具有屬性(attribute)和行為(behavior),屬性所引起的依賴通常稱為屬性依賴(attributedependency,ad),行為引起的依賴稱為行為依賴(behaviordependency,bd)。從面向?qū)ο蟪绦虻慕嵌葋砜?,?shí)體對應(yīng)為對象,對象具有屬性和方法,對象屬性引起的依賴通常成為數(shù)據(jù)依賴(datadependency,dd),而對象方法引起的依賴通常稱為方法依賴(methoddependency,md)。定義2.5屬性依賴(attributedependency)若一個(gè)實(shí)體ei的屬性ai引用ej的屬性aj,或者是ei的行為bi引用ej的屬性aj,即當(dāng)ej的屬性aj變更將引起ei的屬性ai或者行為bi變更,稱ei依賴ej于ad,記為ad={<ei,ad,ej>|ei∈e1∧ej∈e2∧ad∈dt∧ad=f(ai|bi,aj)}。屬性依賴屬于靜態(tài)依賴。實(shí)體存在著各種各樣的行為,實(shí)體行為之間也存在依賴關(guān)系。實(shí)體行為的復(fù)雜性使得實(shí)體行為之間的依賴關(guān)系比屬性依賴更為復(fù)雜。行為依賴屬于動(dòng)態(tài)依賴。定義2.6行為依賴(behaviordependency)若一個(gè)實(shí)體ej的行為bj變更將引起ei的行為bi變更,稱ei依賴ej于bd,記為bd={<ei,bd,ej>|ei∈e1∧ej∈e2∧bd∈dt∧bd=f(bi,bj)}。除了屬性依賴(數(shù)據(jù)依賴)與行為依賴(方法依賴)之外,還有一些依賴關(guān)系的定義。實(shí)際上,依賴關(guān)系可以從不同的角度來分類,詳情如下:■從依賴的作用分為結(jié)構(gòu)依賴、行為依賴和可跟蹤性依賴(參見表2.1)。表2.1常用的實(shí)體間依賴關(guān)系■從依賴的社會性分:技術(shù)性依賴、技術(shù)社會性依賴、社會性依賴(僅與人有關(guān)的依賴)■從依賴的來源分:直接依賴、間接依賴、導(dǎo)出依賴(根據(jù)依賴的傳遞特性從直接依賴和間接依賴推導(dǎo)出來的)。五、依賴性分析自從提出依賴性分析以來,依賴性分析技術(shù)的研究、發(fā)展和應(yīng)用已經(jīng)經(jīng)歷了40多年,取得了一系列的理論成果和開展了部分實(shí)際應(yīng)用。(1)依賴性分析定義從程序級別上講,依賴性分析是一種分析、理解和維護(hù)程序的重要手段,它反映了程序中語句、模塊之間的執(zhí)行順序和相互調(diào)用關(guān)系。從實(shí)體級別上來講,依賴性分析是一種分析、理解和維護(hù)實(shí)體及其聯(lián)系的重要手段,它反映了實(shí)體之間互相影響的關(guān)系和影響的程度。一般來說,人們采用兩種方法進(jìn)行依賴性分析:一種是沿著被依賴的方向由前(源頭)至后(目的)的正向分析方法,例如,從需求到設(shè)計(jì)到構(gòu)件到軟件的分析方向,也稱跟蹤性分析。另一種是沿著依賴的方向由后(目的)至前(源頭)的逆向分析,例如,從軟件到構(gòu)件到設(shè)計(jì)到需求的分析方向,也稱溯源分析。六、實(shí)體依賴關(guān)系通常,實(shí)體間的關(guān)系可以細(xì)分為:關(guān)聯(lián)關(guān)系、聚合關(guān)系、組合關(guān)系、泛化關(guān)系、依賴關(guān)系。關(guān)聯(lián)關(guān)系、聚合關(guān)系、組合關(guān)系、泛化關(guān)系與依賴關(guān)系都是實(shí)體間的關(guān)系,但是它們具有的部分屬性滿足依賴關(guān)系,因而可以稱為弱依賴關(guān)系。在依賴性分析過程中,可以作為依賴關(guān)系考慮。(1)實(shí)體間關(guān)系定義■關(guān)聯(lián)關(guān)系:描述了給定實(shí)體之間語義的連接描述,提供了不同實(shí)體間可以相互作用的連接。■聚合關(guān)系:聚合關(guān)系是關(guān)聯(lián)關(guān)系的一種特殊形式,表示實(shí)體與實(shí)體間的“整體-部分”關(guān)系。聚合關(guān)系可以細(xì)分為一般聚合關(guān)系和共享聚合關(guān)系。■組合關(guān)系:組合是聚合的一種特殊情況。在組合中,成員對象的生命周期取決于聚合的生命周期。■泛化關(guān)系:泛化關(guān)系描述了父類和子類在分類學(xué)上的關(guān)系?!鲆蕾囮P(guān)系:依賴關(guān)系描述是兩個(gè)實(shí)體之間的語義上的連接關(guān)系,一個(gè)實(shí)體是獨(dú)立的,另一個(gè)實(shí)體是非獨(dú)立的,它依賴于獨(dú)立的實(shí)體,如果獨(dú)立的實(shí)體發(fā)生改變,將會影響依賴該實(shí)體的實(shí)體。(2)軟件開發(fā)實(shí)體間依賴關(guān)系軟件開發(fā)過程中需求、設(shè)計(jì)、模型、構(gòu)件、軟件和支持?jǐn)?shù)據(jù)等實(shí)體之間存在著許多的操作以及構(gòu)成關(guān)系,實(shí)體之間存在著層次變化,因而實(shí)體之間存在依賴關(guān)系;而實(shí)體內(nèi)部也會隨著時(shí)間以及版本的變化存在大量的變更狀況,因而實(shí)體內(nèi)部也存在依賴關(guān)系?!鰧?shí)體之間的依賴關(guān)系√需求和設(shè)計(jì)、設(shè)計(jì)和模型、設(shè)計(jì)和構(gòu)件存在跟蹤性依賴(traceabilitydependency);√構(gòu)件與軟件之間存在結(jié)構(gòu)依賴(如組成依賴):軟件是由多個(gè)構(gòu)件經(jīng)過多種組合方式形成的;√支持?jǐn)?shù)據(jù)與模型、支持?jǐn)?shù)據(jù)與構(gòu)件存在數(shù)據(jù)依賴;■實(shí)體內(nèi)部依賴關(guān)系√需求內(nèi)部:不同需求之間結(jié)構(gòu)依賴(包括內(nèi)容依賴、引用依賴、復(fù)用依賴、同步依賴等等);原始需求和使用需求、使用需求和系統(tǒng)需求、系統(tǒng)需求和軟件需求之間的跟蹤性依賴;需求不同版本之間存在版本依賴?!淘O(shè)計(jì)內(nèi)部:存在結(jié)構(gòu)依賴、版本依賴。√模型內(nèi)部:概念模型、數(shù)學(xué)模型和工程模型之間存在跟蹤性依賴;模型之間存在結(jié)構(gòu)依賴、版本依賴?!虡?gòu)件內(nèi)部:構(gòu)件之間存在結(jié)構(gòu)依賴(如同步依賴、互斥依賴、組合依賴、包含依賴等等):構(gòu)件的方法之間存在行為依賴,構(gòu)件之間還可能存在數(shù)據(jù)依賴和版本依賴?!誊浖?nèi)部:與構(gòu)件類似,軟件之間存在結(jié)構(gòu)依賴、行為依賴、數(shù)據(jù)依賴和版本依賴。七、針對軟件實(shí)體的依賴性分析以構(gòu)件作為實(shí)例。直至目前,沒有一個(gè)關(guān)于構(gòu)件的統(tǒng)一規(guī)范定義。但綜合分析已有的幾種典型定義,不難發(fā)現(xiàn)構(gòu)件具備以下基本特征:構(gòu)件是近乎獨(dú)立的、可替換的、滿足一定功能的模塊;對所處的環(huán)境或上下文有一定的依賴關(guān)系;構(gòu)件通常符合一組接口標(biāo)準(zhǔn),構(gòu)件之間通過接口進(jìn)行通訊。構(gòu)件軟件是多個(gè)構(gòu)件(可以是異質(zhì)的)通過連接件進(jìn)行組裝而形成的系統(tǒng),是一種松耦合結(jié)構(gòu)。研究者在對構(gòu)件軟件進(jìn)行體系結(jié)構(gòu)分析、測試或可靠性評估過程中,利用多種方式對構(gòu)件軟件系統(tǒng)進(jìn)行了建模表示。例如,wu等人用構(gòu)件交互圖cig(componentinteractiongraph)描述構(gòu)件間的交互場景;還有依賴矩陣、構(gòu)件遷移概率圖等表示方式。但最被普遍認(rèn)同和廣泛使用的還是構(gòu)件依賴圖cdg(componentdependencygraph)模型。構(gòu)件依賴圖定義如下:定義2.7構(gòu)件依賴圖(componentdependencygraph)構(gòu)件軟件可用一個(gè)四元組形式的依賴圖cdg=(v,e,vs,vt)表示,其中v為表示構(gòu)件的頂點(diǎn)集,e是表示連接件的邊集,vs和vt分別表示起始、終止結(jié)點(diǎn)。構(gòu)件頂點(diǎn)集v和連接件邊集e可進(jìn)一步定義如下:v={〈vi,cpxi〉}(1≤i≤|v|),其中vi為第i個(gè)構(gòu)件的標(biāo)識符,cpxi為構(gòu)件vi的復(fù)雜性。e={〈eij,pij〉}(1≤i,j≤|v|),其中eij為由構(gòu)件vi連接到構(gòu)件vj的連接件的標(biāo)識符,pij為連接件eij被執(zhí)行的概率。圖18顯示了一個(gè)簡單的構(gòu)件依賴關(guān)系圖。其中從起始點(diǎn)s開始,到終止結(jié)點(diǎn)t,<es1,1>表示構(gòu)件s到構(gòu)件v1的連接件標(biāo)識符為es1,其es1被執(zhí)行的概率為1;<v1,0.4>表示構(gòu)件v1的構(gòu)件復(fù)雜性為0.4。其中,構(gòu)件復(fù)雜性是指構(gòu)件的復(fù)雜程度的度量。對于代碼可見的情形,可以認(rèn)為程序控制流圖的圈復(fù)雜性、代碼行數(shù)以及包含的庫文件數(shù)目均會對構(gòu)件的復(fù)雜性產(chǎn)生影響。對于構(gòu)件ci,其復(fù)雜性的3個(gè)分量(圈復(fù)雜性cci、行復(fù)雜性lci和庫包含復(fù)雜性libi),參考文獻(xiàn)中有公式可以計(jì)算。其中程序控制流圖的圈復(fù)雜性,是用來衡量一個(gè)程序模塊所包含的判定結(jié)構(gòu)的復(fù)雜程度,數(shù)量上表現(xiàn)為獨(dú)立路徑的條數(shù),即合理地預(yù)防錯(cuò)誤所需測試的最少路徑條數(shù)對于代碼不可見的外部構(gòu)件,構(gòu)件開發(fā)者一般運(yùn)用xml等標(biāo)準(zhǔn)、易于交換的文件格式提供構(gòu)件的梗概信息(元數(shù)據(jù)),典型的有代碼總行數(shù)、方法數(shù)目及方法間的調(diào)用關(guān)系等。構(gòu)件使用者可以利用這些信息對構(gòu)件的復(fù)雜性進(jìn)行粗略的估計(jì)。八、基于時(shí)態(tài)圖,建模軟件配置管理對象之間的依賴關(guān)系本發(fā)明提出軟件配置管理對象之間的依賴關(guān)系可以建模成一個(gè)時(shí)態(tài)有向圖,其中實(shí)體對應(yīng)時(shí)態(tài)圖的結(jié)點(diǎn),依賴關(guān)系對應(yīng)時(shí)態(tài)圖的邊;在該圖中,不僅要考慮結(jié)點(diǎn)的時(shí)態(tài)性,也要考慮邊的時(shí)態(tài)性。設(shè)計(jì)基于關(guān)系數(shù)據(jù)庫存儲的時(shí)態(tài)數(shù)據(jù)生成時(shí)態(tài)圖的算法,以及相應(yīng)的時(shí)態(tài)圖的更新維護(hù)方法。8.1依賴圖建模為了方便理解,人們一般用圖的形式來表示各種依賴關(guān)系,并提出許多依賴圖的模型,主要由程序依賴圖pdg、系統(tǒng)依賴圖sdg、對象依賴圖odg和類依賴圖cdg等,也可以使用圖形化的方法表示實(shí)體間的各種依賴關(guān)系。除了常用的一些依賴圖之外,還可以通過依賴觀察矩陣、依賴樹等一些方法對實(shí)體、程序、函數(shù)等之間的依賴關(guān)系進(jìn)行展示和描述。(1)有向依賴圖實(shí)體間的依賴關(guān)系可以使用有向依賴圖來表示。有向依賴圖的定義如下。定義2.7有向依賴圖(directeddependencygraph)設(shè)有向依賴圖dg=(v,e)中,v為結(jié)點(diǎn)vi的集合,記為v={vi},其中,節(jié)點(diǎn)vi表示實(shí)體ei,i=1,2,…,n。e為結(jié)點(diǎn)間有向邊〈vi,vj〉的集合,其中,序偶〈vi,vj〉表示結(jié)點(diǎn)vi依賴于結(jié)點(diǎn)vj,1≤i≤n,1≤j≤n。簡單地說,就是一個(gè)有向依賴圖主要由兩種元素的集合來表達(dá),即有向依賴圖的結(jié)點(diǎn)以及結(jié)點(diǎn)間的有向邊。在實(shí)體的有向依賴圖中,一個(gè)結(jié)點(diǎn)就表示一個(gè)實(shí)體,而結(jié)點(diǎn)間的有向邊則是由一對序偶<vi,vj>來表示,其中vi與vj表示的都是有向依賴圖中的結(jié)點(diǎn),<vi,vj>表示結(jié)點(diǎn)vi依賴于結(jié)點(diǎn)vj。對于實(shí)體間的依賴關(guān)系,通常是指實(shí)體間的調(diào)用關(guān)系(或者是包含關(guān)系),用實(shí)體間的依賴邊表示,從代表調(diào)用實(shí)體(或起始實(shí)體)的節(jié)點(diǎn)指向代表被調(diào)用實(shí)體(或終結(jié)實(shí)體)的節(jié)點(diǎn)。(2)多粒度依賴關(guān)系圖定義2.8多粒度依賴圖(multi-granulardependencygraph)對于給定依賴圖g=<v,e,dt>,結(jié)點(diǎn)既可以是實(shí)體(entity),也可以是實(shí)體屬性(attribute),也可以是實(shí)體的行為(behavior),則v=ve∪va∪vb,e=v×dt×v,其中dt表示依賴類型集合。例如,對于給定一個(gè)基于java的面向?qū)ο筌浖,多粒度有向圖g的結(jié)點(diǎn)可以分別是類、成員函數(shù)和成員變量,而dt={inheritance,membership,call,use},在類粒度上使用類-成員關(guān)系圖為面向?qū)ο筌浖?,在方法粒度上使用控制調(diào)用圖為成員函數(shù)建模。更具體地,e=v×dt×v表示為三個(gè)集合的笛卡爾積,其結(jié)果也是一個(gè)集合,該集合中每個(gè)元素是一個(gè)三元組(vi,dt,vj),其中第一個(gè)分量vi來自v×dt×v的第一個(gè)集合v,第二個(gè)分量dt來自v×dt×v的第二個(gè)集合dt,第三個(gè)分量vj來自v×dt×v的第三個(gè)集合v。(vi,dt,vj)實(shí)際上就是一條邊的表示方法,其vi是邊的起點(diǎn),vj是邊的終點(diǎn),dt表示邊的類型。所以,e=v×dt×v表示e是一個(gè)邊的集合,每條邊是一個(gè)三元組。實(shí)際上,e應(yīng)該是v×dt×v的子集,而不等于v×dt×v。所以更準(zhǔn)確的表示是:(3)依賴矩陣當(dāng)考慮實(shí)體間的依賴時(shí),也可以建立一個(gè)矩陣模型來體現(xiàn)實(shí)體間的依賴關(guān)系。具體的依賴觀察矩陣定義如下:定義2.9依賴矩陣(dependencymatrix)矩陣m=n×n,其中n表示n個(gè)實(shí)體的集合,矩陣元素依賴對<e1,dt,e2>表示實(shí)體e1依賴e2于dt(dt為依賴類型),其中依賴對的為數(shù)據(jù)依賴關(guān)系則為數(shù)據(jù)依賴觀察矩陣,為控制依賴關(guān)系則為控制依賴觀察矩陣。例如軟件開發(fā)過程中,存在需求依賴矩陣,需求設(shè)計(jì)依賴矩陣等等。(4)實(shí)體依賴樹除了經(jīng)常使用的依賴圖和依賴觀察矩陣之外,還可以使用依賴樹來表示實(shí)體間的依賴關(guān)系,而依賴樹一般是由依賴圖轉(zhuǎn)化而來的。定義2.10實(shí)體依賴樹(entitydependencytree)對于依賴圖dg=(v,e),從給定結(jié)點(diǎn)vs出發(fā),到終止結(jié)點(diǎn)vt,轉(zhuǎn)化成一棵生成樹:依賴圖樹dgt=(vt,et,vrt),其中vt為表示實(shí)體的結(jié)點(diǎn)集,vrt為根結(jié)點(diǎn),et為表示實(shí)體依賴的有向邊集。由于依賴圖中不可能存在依賴循環(huán)子圖,因此,從一個(gè)給定點(diǎn)出發(fā),一定能生成一棵生成樹。由依賴圖向依賴樹的轉(zhuǎn)化方法如下:第1步,給定結(jié)點(diǎn)vs作為根結(jié)點(diǎn)vrt,同時(shí)記根節(jié)點(diǎn)為當(dāng)前結(jié)點(diǎn)。第2步,對任一當(dāng)前結(jié)點(diǎn),廣度優(yōu)先搜索dg,將當(dāng)前節(jié)點(diǎn)每一條出向邊作為dgt中對應(yīng)結(jié)點(diǎn)的一條邊,該邊目標(biāo)結(jié)點(diǎn)作為當(dāng)前結(jié)點(diǎn)的兒子結(jié)點(diǎn)。當(dāng)滿足如下兩個(gè)條件之一時(shí),dgt中的結(jié)點(diǎn)終止擴(kuò)展:(1)若當(dāng)前結(jié)點(diǎn)是終止結(jié)點(diǎn)vt;(2)若當(dāng)前節(jié)點(diǎn)(設(shè)它處于dgt的第i(i>1)層)在dgt的1至i-1層出現(xiàn)過。第3步,迭代進(jìn)行第2步的遍歷,直到所有節(jié)點(diǎn)都不能擴(kuò)展為止。一個(gè)簡單的依賴樹如圖19所示。其中給出了經(jīng)過以上算法,起點(diǎn)s依賴于結(jié)點(diǎn)c1,結(jié)點(diǎn)c1有分別依賴于結(jié)點(diǎn)c2、結(jié)點(diǎn)c3,結(jié)點(diǎn)c2、結(jié)點(diǎn)c3同時(shí)依賴于結(jié)點(diǎn)c4,結(jié)點(diǎn)c4依賴與結(jié)點(diǎn)t,到達(dá)終點(diǎn)。由此生成了一個(gè)實(shí)體依賴圖樹。由以上定義來看,有向依賴圖、多粒度依賴圖是目前用得較多的依賴模型,而依賴矩陣可以用來作為依賴關(guān)系的輸入模型,而依賴樹可以作為依賴關(guān)系的輸出模型。(5)多層依賴圖模型在深入研究依賴關(guān)系各種建模方法的基礎(chǔ)上,提出了多層依賴圖模型。定義2.11多層依賴圖(multilayerdependencygraph)每一層li定義為一個(gè)多粒度依賴圖li=gi=(vi,ei,dti),該層只有相同類型的實(shí)體及其屬性和行為構(gòu)成,對于每個(gè)結(jié)點(diǎn)vi都有一個(gè)屬性記錄其所在層號。多層依賴圖mdg=(l,el,dtl),其中l(wèi)為每一層多粒度依賴圖集合gi,el為層間依賴關(guān)系<vi,dtl,vj>的集合,每個(gè)依賴關(guān)系由vi和vj來自不同的層,vi∈vi,vj∈vj,dtl∈dtl。從上述定義可以看出,一方面,mdg可以看作是關(guān)于圖的圖(graphofgraph),是由各層的有向依賴圖構(gòu)成的圖;另一方面,其實(shí)質(zhì)仍然是一個(gè)有向多粒度圖,等價(jià)于g=(∪i=1nvi,∪i=1nei∪el,∪i=1ndti∪dtl)。更具體地,在物理上,多層依賴圖mdg,實(shí)際上等價(jià)于一個(gè)多粒度圖g,其頂點(diǎn)集合v等于各層多粒度依賴圖的頂點(diǎn)集合vi的并集∪i=1nvi,邊集合e等于各層多粒度依賴圖的邊集合ei的并集∪i=1nei(其中u表示集合的并運(yùn)算符,其下標(biāo)i=1和上標(biāo)n表示從1到n的n個(gè)集合的并),再并上層間邊的集合el,其邊的類型集合等于各個(gè)多粒度依賴圖的邊的類型集合dti的并集∪i=1ndti,再并上層間邊集合的類型dtl(6)多層時(shí)態(tài)依賴圖模型首先回顧單層依賴圖的(實(shí)際上是一個(gè)圖)的定義:根據(jù)定義2.8定義多粒度時(shí)態(tài)依賴圖g=<v,e,dt>,即定點(diǎn)集合v是普通結(jié)點(diǎn)和時(shí)態(tài)結(jié)點(diǎn)的結(jié)合,邊e是普通邊和時(shí)態(tài)邊的集合,為了統(tǒng)一表示,普通結(jié)點(diǎn)和普通邊的有效時(shí)間記為其創(chuàng)建時(shí)間開始至正無窮(+∞),其結(jié)點(diǎn)為vi表示為(vi,vt),其中vt為其有效時(shí)間,邊ei表示為(vi,dt,vj,vt),即從vi到vj的邊,邊類型為dt,有效時(shí)間為v。然后定義多層時(shí)態(tài)依賴圖。定義2.12多層時(shí)態(tài)依賴圖(multilayertemporaldependencygraph)每一層li定義為一個(gè)多粒度依賴圖li=gi=(vi,ei,dti),若vi為時(shí)態(tài)實(shí)體集合,ei為時(shí)態(tài)依賴集合,則稱li為多粒度時(shí)態(tài)依賴圖;若多層依賴圖mdg=(l,el,dtl),若l為多粒度時(shí)態(tài)依賴圖,el為層間時(shí)態(tài)依賴關(guān)系<vi,dtl,vj,vt>的集合,其中vt為有效時(shí)間,則稱mdg為多層時(shí)態(tài)依賴圖。根據(jù)以上定義2.12,多層時(shí)態(tài)依賴圖的相關(guān)數(shù)據(jù)結(jié)構(gòu)可以如下:數(shù)據(jù)結(jié)構(gòu)為:圖20給出了一個(gè)多層依賴圖示例。圖中實(shí)線為層內(nèi)依賴關(guān)系,虛線為層間依賴關(guān)系。任意兩層間都可以有依賴關(guān)系。圖20中的多層依賴圖包括需求層、設(shè)計(jì)層、開發(fā)人員層、開發(fā)單位層共4個(gè)層l。其中需求層和設(shè)計(jì)層又構(gòu)成了技術(shù)層;開發(fā)人員層和開發(fā)單位層又構(gòu)成了社會層。設(shè)計(jì)層中有結(jié)點(diǎn)s1、s2、s3、s4、其中設(shè)計(jì)層內(nèi)依賴關(guān)系包括s1依賴于s2、s2依賴于s4、s4依賴于s3;設(shè)計(jì)層與開發(fā)人員層的層間依賴關(guān)系包括s2依賴d4、s4和s3均依賴d3。更多示例性的層內(nèi)依賴關(guān)系、層間依賴關(guān)系可從圖20中看出。在圖20的示例中,這些層內(nèi)依賴關(guān)系、層間依賴關(guān)系可以直觀地看出來,在數(shù)據(jù)庫中,這些依賴關(guān)系則存儲或“隱藏”在一張張table中,需要本發(fā)明的解決方案將其“挖掘”出來。針對軟件開發(fā)過程管理,以需求、設(shè)計(jì)、模型、構(gòu)件、軟件和支持?jǐn)?shù)據(jù)為例,可以分為六層,實(shí)際上還要考慮到變更、項(xiàng)目、開發(fā)人員、開發(fā)機(jī)構(gòu)等實(shí)體,則分層更多。分層的主要好處是,在邏輯上讓可以更清楚地理解復(fù)雜依賴圖的結(jié)構(gòu)。圖20是軟件開發(fā)過程管理的部分分層時(shí)態(tài)依賴圖示例。下面介紹多層時(shí)態(tài)依賴圖的生成算法(如算法2.1)。算法2.1:多層時(shí)態(tài)依賴圖生成算法mtdgga(multilayertemporaldependencygraphgenerationalgorithm)算法2.1結(jié)合第三節(jié)的邏輯模型(也就是數(shù)據(jù)庫設(shè)計(jì)中的數(shù)據(jù)庫模式databaseshema,包括表table、視圖view等),進(jìn)一步說明如下:input為數(shù)據(jù)庫中的所有數(shù)據(jù)模式,包括第三節(jié)中的所有表table、視圖view。以上所有表table分為實(shí)體table、實(shí)體之間的聯(lián)系table、實(shí)體內(nèi)部的聯(lián)系table三類。output為多層時(shí)態(tài)依賴圖,其數(shù)據(jù)結(jié)構(gòu)參見定義2.12下的相關(guān)數(shù)據(jù)結(jié)構(gòu)。算法2.1中的如下步驟(后續(xù)簡稱算法2.1步驟3-8):是對數(shù)據(jù)庫中的所有時(shí)態(tài)實(shí)體及其內(nèi)部聯(lián)系、外部聯(lián)系的挖掘并建立多層時(shí)態(tài)依賴圖的過程。其中的各個(gè)實(shí)體、關(guān)系均對應(yīng)第三節(jié)中的邏輯模型。舉例來說,根據(jù)第三節(jié)在數(shù)據(jù)庫中建立的邏輯模型,該邏輯模型至少包括以下將建立為多層時(shí)態(tài)依賴圖中的“層”,每“層”又至少包括如下實(shí)體、內(nèi)部聯(lián)系、以及層間聯(lián)系。第一層為需求層:實(shí)體例如為:需求關(guān)系requirements,需求版本關(guān)系reqver_vt層內(nèi)聯(lián)系為:需求層次依賴聯(lián)系reqhierarchy層內(nèi)聯(lián)系為:需求版本依賴聯(lián)系:reqverdependency第二層為設(shè)計(jì)層:實(shí)體例如為:設(shè)計(jì)關(guān)系design,設(shè)計(jì)版本關(guān)系desver_vt層內(nèi)聯(lián)系為:設(shè)計(jì)層次聯(lián)系deshierarchy層內(nèi)聯(lián)系為:設(shè)計(jì)版本依賴聯(lián)系desverdependency第三層為模型層:實(shí)體例如為:模型關(guān)系model,模型版本關(guān)系modver_vt層內(nèi)聯(lián)系為:模型層次聯(lián)系modhierarchy層內(nèi)聯(lián)系為:模型版本依賴聯(lián)系modverdependency第四層為構(gòu)件層:實(shí)體例如為:構(gòu)件關(guān)系component,構(gòu)件版本關(guān)系comver_vt層內(nèi)聯(lián)系為:構(gòu)件層次聯(lián)系comhierarchy層內(nèi)聯(lián)系為:構(gòu)件版本依賴聯(lián)系comverdependency第五層為軟件層:實(shí)體例如為:軟件關(guān)系software,軟件版本關(guān)系softver_vt層內(nèi)聯(lián)系為:軟件層次聯(lián)系softhierarchy(層內(nèi)聯(lián)系為:軟件版本依賴聯(lián)系softverdependency第六層為支持?jǐn)?shù)據(jù)層:實(shí)體例如為:支持?jǐn)?shù)據(jù)關(guān)系supdataset,支持?jǐn)?shù)據(jù)版本supver_vt層內(nèi)聯(lián)系為:支持?jǐn)?shù)據(jù)版本聯(lián)系supverrelship_vt第七層為變更層:變更關(guān)系change_vt該層內(nèi)沒有聯(lián)系,層間聯(lián)系通過“變更類型chgtype,變更前版本號prechgverid,變更后版本號postchgverid”三個(gè)屬性與其他層間建立聯(lián)系,例如變更類型為“需求變更”,則變更前版本號prechgverid與第一層需求層內(nèi)的需求版本對象相對應(yīng),建立聯(lián)系;變更后版本號postchgverid也與第一層需求層內(nèi)的需求版本對象相對應(yīng),建立聯(lián)系。當(dāng)變更類型為設(shè)計(jì)變更、模型變更、構(gòu)件變更、軟件變更和支持?jǐn)?shù)據(jù)變更時(shí),變更相應(yīng)的與其對應(yīng)的層和層內(nèi)對象建立聯(lián)系。第一層與第二層層間聯(lián)系:需求版本與設(shè)計(jì)版本之間可跟蹤性聯(lián)系:trac_reqver_desver第二層與第三層層間聯(lián)系:設(shè)計(jì)版本與模型版本可跟蹤性聯(lián)系trac_desver_modver第三層與第六層層間聯(lián)系:模型版本與支持?jǐn)?shù)據(jù)版本可跟蹤性聯(lián)系trac_modver_suppver第二層與第四層層間聯(lián)系:設(shè)計(jì)版本與構(gòu)件版本可跟蹤性聯(lián)系trac_desver_comver第四層與第六層層間聯(lián)系:構(gòu)件版本與支持?jǐn)?shù)據(jù)版本可跟蹤性聯(lián)系trac_comver_suppver第四層與第五層層間聯(lián)系:構(gòu)件版本與軟件版本可跟蹤性聯(lián)系trac_comver_softver。按照上面各層說明,第一層至第六層,每層內(nèi)的實(shí)體是對應(yīng)的實(shí)體對象及其各個(gè)版本對象,例如:第一層需求層,包含需求對象,以及每個(gè)需求對象的各個(gè)版本對象;層內(nèi)聯(lián)系主要是:父子層次聯(lián)系和版本對象之間的依賴聯(lián)系,而版本對象之間的依賴聯(lián)系主要是相關(guān)依賴聯(lián)系、同步依賴聯(lián)系等,詳情參見表2.1常用的實(shí)體間依賴關(guān)系。第七層變更層,則只包含各個(gè)變更對象,沒有版本對象,層內(nèi)對象之間沒有聯(lián)系。該層與其它層的聯(lián)系,見之前對“第七層為變更層”的介紹舉例說明。根據(jù)以上舉例,舉例說明算法2.1中循環(huán)的執(zhí)行過程:從算法2.1執(zhí)行2步循環(huán)開始,第3步,判斷requirements是一個(gè)實(shí)體關(guān)系,則第4步,增加一層,第5步,建立需求層時(shí)態(tài)依賴圖,(循環(huán))第3步,判斷reqver_vt是一個(gè)時(shí)態(tài)實(shí)體關(guān)系,則第5步由于需求時(shí)態(tài)實(shí)體關(guān)系依賴需求實(shí)體關(guān)系,則仍然在需求層建立需求版本對象。(循環(huán))第6步,判斷reqhierarchy為internalrelationship,則第7步,生成層內(nèi)需求實(shí)體依賴聯(lián)系;(循環(huán))第6步,判斷reqverdependency為internalrelationship,則第7步,生成層內(nèi)需求版本實(shí)體依賴聯(lián)系;(循環(huán))第8步,判斷trac_reqver_desver為需求層與設(shè)計(jì)層之間的聯(lián)系,則第9步,生成需求層與設(shè)計(jì)層之間的聯(lián)系其他依次類推。8.2多層時(shí)態(tài)依賴圖的性質(zhì)(1)異構(gòu)性(heterogeneous)依賴圖中存在異構(gòu)的實(shí)體(如需求、設(shè)計(jì)、模型、構(gòu)件等等),也存在異構(gòu)的不同粒度的結(jié)點(diǎn)(如實(shí)體、屬性和行為等結(jié)點(diǎn))。(2)多層性(mutilayer)同類實(shí)體為一次,每層都是一個(gè)多粒度有向依賴圖。(3)多粒度(multigranular)每一層都存在實(shí)體、屬性和行為等不同粒度。(4)有向性(directed)依賴關(guān)系具有不對稱性,因此必須是有向的。如實(shí)體a依賴b于dt,等價(jià)的描述是:b被a依賴于dt-1,但都統(tǒng)一記為:記為<a,dt,b>。(5)非循環(huán)性(acyclic)由于依賴的反自反性,依賴不能存在循環(huán),因此,有向依賴圖中也不能存在循環(huán)子圖。(6)稀疏性(sparse)由于實(shí)體通常只跟少數(shù)其他實(shí)體有依賴關(guān)系,依賴圖中也會存在一個(gè)個(gè)子的依賴社區(qū),總體上,依賴圖表現(xiàn)出稀疏性。(7)動(dòng)態(tài)性(dynamic)由于會不斷有新的實(shí)體(如新的需求項(xiàng)、構(gòu)件、模型等)加入依賴圖,有些不再使用的實(shí)體也會被淘汰,因此總體上,依賴圖會不斷變化,呈現(xiàn)出較大的動(dòng)態(tài)性。(8)時(shí)態(tài)性(temporal)依賴圖中存在時(shí)態(tài)實(shí)體、實(shí)體也可能存在時(shí)態(tài)屬性,其中一個(gè)最主要的時(shí)態(tài)變化,是需求、設(shè)計(jì)、模型、構(gòu)件、軟件等的版本性,他們會隨時(shí)間不斷演變產(chǎn)生新的版本,依賴圖因此會隨時(shí)間的變化不斷演變,變現(xiàn)出很強(qiáng)的時(shí)態(tài)特性。深入理解和分析依賴圖的以上特性,對依賴圖的依賴性分析具有很重要的意義。九、設(shè)計(jì)基于時(shí)態(tài)的軟件配置管理對象依賴關(guān)系發(fā)現(xiàn)算法本發(fā)明考慮到軟件系統(tǒng)生命周期軟件缺陷修復(fù)、功能增強(qiáng)、性能改進(jìn)、需求增加、運(yùn)行環(huán)境改變等均要求構(gòu)件和軟件系統(tǒng)等對象具有較強(qiáng)的演化能力,對象之間的依賴關(guān)系也可能在隨時(shí)間不斷發(fā)生變化演化。同時(shí),由于多版本并行開發(fā),某個(gè)軟件對象演化特征并不是簡單的隨時(shí)間線性演化,由于不同用戶要求或運(yùn)行環(huán)境要求而存在多個(gè)版本分支隨時(shí)間演化而構(gòu)成一個(gè)版本樹。因此有必要研究基于時(shí)態(tài)的對象依賴關(guān)系發(fā)現(xiàn)算法研究。隨著需求、設(shè)計(jì)、模型、構(gòu)件等復(fù)用程度的增加,軟件開發(fā)過程的各類實(shí)體之間的依賴關(guān)系也變得越來越復(fù)雜。因此有必要統(tǒng)計(jì)和分析各類實(shí)體的依賴關(guān)系,分析各類實(shí)體的穩(wěn)定性、抽象性和是否存在循環(huán)依賴的問題,分析各類實(shí)體依賴關(guān)系的合理性,甚至可以發(fā)現(xiàn)不必要的依賴關(guān)系。對于設(shè)計(jì)的分層時(shí)態(tài)依賴圖,既可以在整個(gè)圖上執(zhí)行各種依賴分析任務(wù),也可以選擇只在某層上執(zhí)行分析任務(wù),使得依賴分析任務(wù)執(zhí)行比較靈活。另外,目前考慮分層的模型,一方面是為了在邏輯上容易理解復(fù)雜的時(shí)態(tài)依賴圖,另外,在圖形化顯示方面,也可以按分層的思想來顯示,也更有利于理解實(shí)體之間的依賴關(guān)系。為了進(jìn)行依賴性分析,借鑒代碼質(zhì)量的評價(jià)指標(biāo),定義幾個(gè)類似的依賴性評價(jià)指標(biāo):定義2.13傳入耦合ca(afferentcouplings)依賴于被分析實(shí)體的其他實(shí)體的數(shù)量,即有多少實(shí)體依賴于它,用于衡量實(shí)體的職責(zé),以評估變更實(shí)體造成的影響。圖21給出了傳入耦合示例圖,其中n個(gè)實(shí)體entity1、entity2、……entityn均依賴于entity0。如圖21所示,ca越大,更改entity0造成的影響越大,ca越小,更改entity0造成的影響越小。定義2.14傳出耦合ce(efferentcouplings)被分析的實(shí)體所依賴的其他實(shí)體的數(shù)量,即它依賴了多少其他實(shí)體,用于衡量實(shí)體的獨(dú)立性,以評估外界的更改如何影響實(shí)體。圖22給出了傳出耦合示例圖,其中實(shí)體entity0分別依賴于n個(gè)實(shí)體,從實(shí)體entity1、entity2、……到entityn。如圖22所示,ce越大,外界變更對該實(shí)體的影響越大,ce越小,外界變更對該實(shí)體的影響越小。定義2.15實(shí)體不穩(wěn)定性i(entityinstability)定義i=ce/(ce+ca),用于衡量實(shí)體的不穩(wěn)定性,取值范圍為[0,1],i=0表示實(shí)體最穩(wěn)定,i=1表示實(shí)體最不穩(wěn)定。如這個(gè)等式所示,傳出耦合對包的穩(wěn)定性起作用:一個(gè)包越依賴于其他包,面對更改時(shí)它越容易受到連鎖反應(yīng)的影響,換句話說,如果這個(gè)實(shí)體不依賴于任何其他實(shí)體,則它是最穩(wěn)定的。反過來說,一個(gè)實(shí)體越被依賴,它越不可能發(fā)生更改。在開發(fā)、設(shè)計(jì)和實(shí)現(xiàn)實(shí)體時(shí),依賴于穩(wěn)定的實(shí)體是有益的,因?yàn)檫@些實(shí)體不太可能更改;而不穩(wěn)定的實(shí)體依賴性會在發(fā)生變更時(shí)增大系統(tǒng)發(fā)生間接變更的風(fēng)險(xiǎn)。定義2.16實(shí)體抽象性a(entityabstractness)如果軟件開發(fā)過程的實(shí)體越與具體的項(xiàng)目和應(yīng)用背景無關(guān),越能用到更多的項(xiàng)目和應(yīng)用中去,就越抽象。抽象性a取值范圍為[0,1],取值為0,表示最具體,不抽象;取值為1,表示最抽象。該取值可以由該實(shí)體與具體應(yīng)用無關(guān)的特征和全部特征的比值得出,或者由專家憑經(jīng)驗(yàn)給出,或者利用該實(shí)體的復(fù)用度來估計(jì)。定義2.17實(shí)體距離d(enttitydistance)圖23給出了實(shí)體距離計(jì)算的示意圖。被分析實(shí)體和理想曲線a+i=1的垂直距離(如圖23所示),用于衡量實(shí)體在穩(wěn)定性和抽象性之間的平衡。理想的實(shí)體要么完全是抽象的和穩(wěn)定(a=1,i=0),要么完全是具體類和不穩(wěn)定(a=0,i=1)。取值范圍為[0,1],d=0表示完全符合理想標(biāo)準(zhǔn),d=1表示實(shí)體最大程度地偏離了理想標(biāo)準(zhǔn)。即實(shí)體要么是抽象的,不依賴任何其他實(shí)體(完全是抽象類和穩(wěn)定);要么是具體的,不被任何其他實(shí)體依賴。定義2.18循環(huán)依賴c(cycle)循環(huán)依賴的數(shù)量。定義2.19依賴強(qiáng)度s(severityofdependency)定義多層時(shí)態(tài)有向依賴圖的邊的權(quán)值為依賴強(qiáng)度s(severityofdependency)。通常該依賴強(qiáng)度默認(rèn)值為1,即完全依賴,依賴強(qiáng)度為0表示不依賴,取值范圍為[0,1]。某個(gè)實(shí)體直接依賴另外一個(gè)實(shí)體,其依賴強(qiáng)度通常由業(yè)務(wù)人員或者業(yè)務(wù)專家給出。由于依賴存在傳遞性,結(jié)點(diǎn)a到c之間的間接依賴強(qiáng)度不斷減弱,由a到c的最短路徑上的所有邊的依賴強(qiáng)度相乘得出,再除以(ln(最短路徑的邊數(shù))+1)。2.1)例如,設(shè)a----0.8--->b---0.9---->c,則a--->>c的依賴強(qiáng)度有下列公式計(jì)算:severityofdep(a,c)=severityofdep(a,b)×severityofdep(b,c)/(ln(最短路徑的邊數(shù))+1)=0.8×0.9×/(ln2+1)在做依賴性分析之前,可以遍歷整個(gè)圖,計(jì)算各個(gè)結(jié)點(diǎn)的傳入耦合、傳出耦合、穩(wěn)定性、抽象性等性能指標(biāo)。在分析結(jié)果中可以顯示各個(gè)結(jié)點(diǎn)的上述指標(biāo)。目前研究如下分析算法和分析結(jié)果展現(xiàn)算法。直接依賴統(tǒng)計(jì)分析算法2.2基本思想是采用寬度優(yōu)先算法遍歷整個(gè)圖,計(jì)算每個(gè)結(jié)點(diǎn)的傳入耦合ca、傳出耦合ce和實(shí)體穩(wěn)定性i。如果每個(gè)實(shí)體的抽象性給定,則可以根據(jù)定義2.17計(jì)算每個(gè)結(jié)點(diǎn)的實(shí)體距離d。算法2.2:直接依賴統(tǒng)計(jì)分析算法ddsa(directdependencystatistics&analysisalgorithm)實(shí)際上,結(jié)點(diǎn)的傳入耦合ca也表示該結(jié)點(diǎn)代表的實(shí)體被多少個(gè)其他實(shí)體依賴,也表示一種被使用情況;而傳出耦合ce也表示該實(shí)體依賴了多少個(gè)其他實(shí)體,也表示一種使用情況。通過算法2.2計(jì)算出每個(gè)結(jié)點(diǎn)的各個(gè)指標(biāo)參數(shù)后,可以如表2.2的表格方式,把有向依賴圖展現(xiàn)出來,方便用戶瀏覽。表2.2實(shí)體依賴瀏覽表示例依賴鏈分析(1)從給定實(shí)體出發(fā)的直接依賴和間接依賴分析從給定實(shí)體出發(fā),查找其直接依賴和間接依賴關(guān)系,實(shí)際上是從給定實(shí)體出發(fā),生成一棵生成樹的過程。由于依賴關(guān)系的反自反特性,有向依賴圖中不存在循環(huán),所以一定能夠生成一棵樹,該生成樹的最大高度由給定的最大間接依賴層數(shù)lmax確定,從而避免生成太高的生成樹,難以顯示,也不便于理解。算法2.1的基本思想是,采用寬度優(yōu)先算法生成實(shí)體依賴樹,同時(shí)也要保持原有的分層特性,便于理解。算法2.3:依賴鏈分析算法dla(dependencylinkanalysisalgorithm)對于實(shí)體依賴樹,可以使用例如d3.js這樣的強(qiáng)大的可視化圖形顯示工具來顯示,也需要設(shè)計(jì)相應(yīng)的分層顯示算法。(2)從給定實(shí)體出發(fā)的正向依賴分析和逆向依賴分析算法dla實(shí)際上是一個(gè)正向依賴鏈分析算法,即沿著a依賴于b,b依賴于c,c依賴于d,...的依賴鏈正向分析實(shí)體之間的直接和間接依賴關(guān)系。為了實(shí)現(xiàn)逆向依賴分析算法,只需把算法did的寬度優(yōu)先遍歷出邊,改為寬度優(yōu)先遍歷入邊,就可以實(shí)現(xiàn)逆向依賴分析,即沿著a被b依賴,b被c依賴,c被d依賴,...的方向一直分析下去,是一種逆向依賴鏈分析方法。把算法dla改造為一個(gè)通用的正向或者逆向分析算法,如算法mdla所示,只需要通過一個(gè)控制變量就可以控制正向或逆向分析,當(dāng)然也可以雙向分析。算法2.4:多向依賴鏈分析算法mdla(multidirectionaldependencylinkanalysisalgorithm)正向分析或者逆向分析,產(chǎn)生的是一個(gè)實(shí)體依賴樹,比如容易清楚地顯示實(shí)體之間的依賴關(guān)系,但是當(dāng)同時(shí)進(jìn)行雙向分析時(shí),很容易把依賴和被依賴關(guān)系混合在一起,這樣就需要在顯示時(shí),采用比較靈活方便的方式來顯示。另外正向分析結(jié)果和逆向分析結(jié)果合并在一起,并不等于同時(shí)進(jìn)行的雙向分析結(jié)果。這一點(diǎn)將在實(shí)現(xiàn)時(shí)予以區(qū)分。舉例說明如下:圖24顯示了一個(gè)與時(shí)態(tài)實(shí)體a相關(guān)的所有依賴關(guān)系的圖。圖中既包括從a開始的依賴關(guān)系:a依賴于b、c,b依賴于w,c依賴于z;同時(shí)也包括從a開始的被依賴關(guān)系:a被d、e依賴,d被b依賴,b被g、f依賴。圖24中還包括了與結(jié)點(diǎn)b、c有依賴關(guān)系的其它結(jié)點(diǎn)x、y、u、v。針對圖24所示的實(shí)體依賴圖,圖25顯示了正向?qū)嶓w依賴分析結(jié)果為:a依賴于b、c,b依賴于w,c依賴于z。針對圖24所示的實(shí)體依賴圖,圖26顯示了逆向?qū)嶓w依賴分析結(jié)果為:a被d、e依賴,d被b依賴,b被g、f依賴。針對圖24所示的實(shí)體依賴圖,圖27顯示了雙向?qū)嶓w依賴分析結(jié)果為:從a開始的依賴關(guān)系:a依賴于b、c,b依賴于w,c依賴于z;從a開始的被依賴關(guān)系:a被d、e依賴,d被b依賴,b被g、f依賴。圖24中還包括了與結(jié)點(diǎn)b、c有依賴關(guān)系的其它結(jié)點(diǎn)x、y、u、v。可以證明,當(dāng)lmax等于1時(shí),算法mdlaa分析算法滿足:mdla(正向分析)+mdla(逆向分析)=mdla(雙向分析);當(dāng)lmax大于1時(shí),算法mdla分析算法滿足:mdla(正向分析)+mdla(逆向分析)<>mdla(雙向分析);因此改進(jìn)算法mdla為tmdla,可以實(shí)現(xiàn)當(dāng)lmax為任何值時(shí),tmdla(正向分析)+tmdla(逆向分析)=tmdla(雙向分析)。這樣可以減少圖的二次遍歷,從而提高分析效率。改進(jìn)的基本思想是:設(shè)立兩個(gè)隊(duì)列,一個(gè)正向隊(duì)列,一個(gè)逆向隊(duì)列,對正向隊(duì)列的所有結(jié)點(diǎn),都只進(jìn)行正向分析;對逆向隊(duì)列的結(jié)點(diǎn),都只進(jìn)行逆向分析。算法如下:算法2.5:通用多向依賴鏈分析算法tmdla(truemultidirectionaldependencylinkanalysisalgorithm)(3)從給定兩個(gè)實(shí)體出發(fā),分析它們之間的依賴關(guān)系給定兩個(gè),或者多個(gè)實(shí)體,分析他們之間的依賴關(guān)系,實(shí)際上是一個(gè)有向圖搜索生成steiner樹的問題,這個(gè)問題在數(shù)據(jù)庫信息檢索領(lǐng)域已經(jīng)有很多研究。解決該問題的基本思想是:把有向圖當(dāng)做無向圖看待,然后把給定的實(shí)體對應(yīng)的結(jié)點(diǎn)當(dāng)做葉子結(jié)點(diǎn),從每個(gè)葉子結(jié)點(diǎn)出發(fā)并行執(zhí)行一個(gè)最短路徑算法(如dijkstra算法),直到找到一個(gè)公共的結(jié)點(diǎn)或者找不到為止,該算法為banks算法。如果接著在該結(jié)果的基礎(chǔ)上,進(jìn)一步優(yōu)化,可以采用star算法。(4)檢測多層依賴圖中的循環(huán)依賴多層依賴圖在整體上還是一個(gè)有向圖。由于有向圖的循環(huán)檢測算法時(shí)間復(fù)雜性通常為o(n2),比較耗費(fèi)時(shí)間。因此,一方面,可以在整個(gè)圖上檢測循環(huán)依賴,另一方面,也可以只在某一層上檢測循環(huán)依賴。另外,如果不考慮時(shí)態(tài)約束,則多層依賴圖中可能存在較多的循環(huán)依賴,但是,若從時(shí)態(tài)的角度考慮,有些依賴關(guān)系是有有效性,即在某個(gè)有效時(shí)間范圍內(nèi)是有效的,當(dāng)查詢時(shí)間不在其有效范圍之內(nèi),則那些依賴關(guān)系相當(dāng)于是不存在的。因此,需要把目前已有的在有向圖上檢測環(huán)的算法,改為時(shí)態(tài)的有向環(huán)檢測算法。為了檢測環(huán),借鑒一個(gè)改進(jìn)的深度優(yōu)先(depthfirst)搜索算法,稱之為著色的dfs算法。其基本思想是:初始,所有結(jié)點(diǎn)標(biāo)記為白色(white,即未被訪問過),當(dāng)它被訪問過,標(biāo)記為灰色(grey),當(dāng)它的所有后裔結(jié)點(diǎn)都被完全訪問過,它被標(biāo)記為黑色(black)。如果一個(gè)灰色結(jié)點(diǎn)被再次遇到(訪問),則存在一個(gè)環(huán)。時(shí)態(tài)的有向圖環(huán)檢測算法2.6所示。算法2.6:檢測循環(huán)依賴算法dcd(detectingcycledependencyalgorithm)算法2.7:結(jié)點(diǎn)訪問算法visit//booleanvisit(graphmtdg,vertexv,validtimeqvt):社會性分析開發(fā)人員之間的社會性依賴關(guān)系,通常是通過與其他實(shí)體之間的技術(shù)-社會性依賴關(guān)系和技術(shù)性依賴關(guān)系推導(dǎo)得出來的。這里又分為直接推導(dǎo)出來的,還是間接推導(dǎo)出來的。如圖28所示。圖28是一個(gè)推導(dǎo)出開發(fā)人員只見依賴關(guān)系示意圖。其顯示了開發(fā)人員d7依賴于d4,d4依賴于d3,d5依賴于d3,其具體的依賴關(guān)系推導(dǎo)過程可能是直接推導(dǎo)出來的,也可能是間接推導(dǎo)出來的。根據(jù)開發(fā)人員和需求,開發(fā)人員和設(shè)計(jì)之間的依賴關(guān)系(其意義是指需求或者設(shè)計(jì)分配給某個(gè)開發(fā)人員來完成,因此也可以理解為需求或者設(shè)計(jì)依賴該開發(fā)人員),推導(dǎo)出開發(fā)人員之間存在依賴關(guān)系,其依賴強(qiáng)度由公式2.1得出。圖29顯示了開發(fā)人員d7依賴于d4推導(dǎo)關(guān)系示意圖。在圖中,由于r1—>r2—>s2,則推導(dǎo)出d7依賴d4,其依賴強(qiáng)度(權(quán)值)由公式2.1得出。這里從r1到s2有兩條路徑,則d7和d4之間存在兩個(gè)依賴關(guān)系,對應(yīng)存在兩條邊,其依賴強(qiáng)度不一樣。依據(jù)每條依賴邊,可以查詢其依賴路徑詳情。社會性依賴圖產(chǎn)生算法如下:算法2.8:社會性依賴圖生成算法sdgg(socialdependencygraphgenerationalgorithm)算法2.8只是一個(gè)簡單的社會性依賴圖的生成算法。在實(shí)現(xiàn)時(shí),講依據(jù)實(shí)驗(yàn)情況,進(jìn)一步改進(jìn)該生成算法。(1)從給定開發(fā)人員出發(fā)分析其直接依賴的其他開發(fā)人員和間接依賴的開發(fā)人員(2)從給定開發(fā)人員出發(fā)的正向依賴分析和逆向依賴分析(3)從給定兩個(gè)開發(fā)人員出發(fā),尋找他們之間的依賴關(guān)系基于社會性依賴圖,可以直接采用多層時(shí)態(tài)依賴圖上的算法2.3到2.6,按照上述三種情況分析開發(fā)人員之間依賴關(guān)系。時(shí)態(tài)性分析對于多層時(shí)態(tài)依賴圖,結(jié)點(diǎn)和邊都有有效時(shí)間。上述各種分析算法,通過增加一個(gè)查詢時(shí)間區(qū)間,在處理過程中增加時(shí)間區(qū)間過濾,就可以實(shí)現(xiàn)基本的時(shí)態(tài)依賴分析算法。(1)對給定實(shí)體,分析其版本演化情況對應(yīng)算法2.5.輸入增加一維輸入?yún)?shù)“有效時(shí)間”validtime。(2)對給定實(shí)體,分析其依賴關(guān)系隨版本變化情況該分析對應(yīng)算法2.5輸入增加一維輸入?yún)?shù)“有效時(shí)間”validtime。(3)對給定實(shí)體,分析其被依賴(被使用)情況該分析對應(yīng)算法2.2。十、變更分析本發(fā)明研究通用的變更影響分析方法來支持需求、設(shè)計(jì)、模型、構(gòu)件、軟件和支持?jǐn)?shù)據(jù)等軟件開發(fā)過程實(shí)體的變更影響分析。下面以需求變更為例,概述變更相關(guān)概念和過程。變更類型,指引起變更的原因類型,可分為需求變更、設(shè)計(jì)變更、代碼優(yōu)化、用戶文檔優(yōu)化和計(jì)劃變更等。變更優(yōu)先級,依據(jù)變更的重要性、緊迫性和對關(guān)鍵業(yè)務(wù)的影響程度,以及對系統(tǒng)安全性和穩(wěn)定性的影響程度,可分為critical、high、middle和low等4級。變更標(biāo)志,分為新增、修改和刪除。變更影響分析,包括變更影響對工作量和進(jìn)度的影響,發(fā)生風(fēng)險(xiǎn)的可能性與影響程度,以及需要回測的范圍。可能影響的工作產(chǎn)品,包括項(xiàng)目計(jì)劃、需求文檔、概要設(shè)計(jì)文檔、詳細(xì)設(shè)計(jì)文檔、源代碼和程序、測試計(jì)劃和測試案例以及用戶文檔。十一、構(gòu)建軟件配置管理對象變更模型本發(fā)明基于時(shí)態(tài)和圖模型,構(gòu)建軟件對象內(nèi)部以及對象之間的依賴、交互及架構(gòu)關(guān)系,以進(jìn)行變更影響分析。從不同的角度來看,可以對由軟件對象建立不同的模型。例如,從外部用戶的角度,構(gòu)件的主要功能是提供api,于是可以建立api模型;從系統(tǒng)層面看,構(gòu)件之間存在著交互關(guān)系,還有組合、配置等多種架構(gòu)關(guān)系,可以建立相應(yīng)的系統(tǒng)模型。因此,建立合適的軟件對象以及系統(tǒng)模型是軟件對象變更影響分析的重要前提?;诙鄬訒r(shí)態(tài)依賴圖模型,我們把需求、設(shè)計(jì)、模型、構(gòu)件、軟件和支持?jǐn)?shù)據(jù)等所有實(shí)體的變更,統(tǒng)一當(dāng)做一個(gè)單獨(dú)的變更層,從而可以在多層時(shí)態(tài)依賴圖中增加一個(gè)變更層,如圖30所示。圖30是增加了變更層的多層時(shí)態(tài)依賴圖示例。其中,變更層中有節(jié)點(diǎn)c1到c6,其中層內(nèi)依賴正向關(guān)系(a依賴于b)為:c4、c1、c5、c2、c6、c3;層間依賴正向關(guān)系為參見圖中:c4依賴于r1,c1依賴于r1,c5依賴于r1,c2依賴于r2,c6依賴于s4,c3依賴于s3。為了簡單起見,結(jié)點(diǎn)和邊的時(shí)態(tài)約束沒有標(biāo)注,默認(rèn)每個(gè)結(jié)點(diǎn)和每條邊都有一個(gè)有效時(shí)間。在“3.1以需求為核心的數(shù)據(jù)庫模式邏輯設(shè)計(jì)(table和view)”中,有基于變更的時(shí)態(tài)實(shí)體設(shè)計(jì)——表table:變更c(diǎn)hange_vt、變更狀態(tài)chgstat_vt;還有基于變更的視圖view設(shè)計(jì)——需求變更view_reqchg_vt。在其后各小節(jié)的數(shù)據(jù)庫邏輯模型的設(shè)計(jì)中,存在外部視圖的設(shè)計(jì),例如設(shè)計(jì)變更視圖、模型變更視圖等等。這是因?yàn)?,每個(gè)對象都有變更,在邏輯模型中(table、view及其字段)設(shè)計(jì)出來了。具體例如:“3.2以設(shè)計(jì)為核心的數(shù)據(jù)庫模式邏輯設(shè)計(jì)(table和view)”中,有視圖view——設(shè)計(jì)變更view_deschg_vt;“3.3以模型為核心的數(shù)據(jù)庫模式邏輯設(shè)計(jì)(table和view)”中,有視圖view——模型變更view_modchg_vt;“3.4以構(gòu)件為核心的數(shù)據(jù)庫模式邏輯設(shè)計(jì)(table和view)”中,有視圖view——構(gòu)件變更view_comchg_vt;“3.5以軟件為核心的數(shù)據(jù)庫模式邏輯設(shè)計(jì)(table和view)”中,有視圖view——軟件變更view_softchg_vt;“3.6以支持?jǐn)?shù)據(jù)為核心的數(shù)據(jù)庫模式邏輯設(shè)計(jì)(table和view)”中,有視圖view——;“3.7以項(xiàng)目為核心的數(shù)據(jù)庫模式邏輯設(shè)計(jì)(table和view)”中,有視圖view——;“3.8以配置為核心的數(shù)據(jù)庫模式邏輯設(shè)計(jì)(table和view)”中,有視圖view——配置項(xiàng)變更view_cichg_vt。關(guān)于邏輯模型table中的字段此處不再贅述,可以參照第三節(jié)“邏輯模型”中各個(gè)邏輯模型table中與“變更”相關(guān)的字段。因此,基于之前算法2.1多層時(shí)態(tài)依賴圖生成算法mtdgga構(gòu)建時(shí)態(tài)依賴圖時(shí),可以如圖30增加變更層,從而可以構(gòu)建基于時(shí)態(tài)的對象變更模型。通過以上的實(shí)施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到上述實(shí)施例方法可借助軟件加必需的通用硬件平臺的方式來實(shí)現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者是更佳的實(shí)施方式?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計(jì)算機(jī)軟件產(chǎn)品存儲在一個(gè)存儲介質(zhì)(如rom/ram、磁碟、光盤)中,包括若干指令用以使得一臺終端設(shè)備(可以是手機(jī),計(jì)算機(jī),服務(wù)器,空調(diào)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例該的方法。以上僅為本發(fā)明的優(yōu)選實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的
技術(shù)領(lǐng)域:
:,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。當(dāng)前第1頁12當(dāng)前第1頁12