TW201314482A - 分析目標物件之依賴關係的方法 - Google Patents
分析目標物件之依賴關係的方法 Download PDFInfo
- Publication number
- TW201314482A TW201314482A TW100139806A TW100139806A TW201314482A TW 201314482 A TW201314482 A TW 201314482A TW 100139806 A TW100139806 A TW 100139806A TW 100139806 A TW100139806 A TW 100139806A TW 201314482 A TW201314482 A TW 201314482A
- Authority
- TW
- Taiwan
- Prior art keywords
- target object
- dependent
- dependency
- precondition
- target
- Prior art date
Links
Landscapes
- Stored Programmes (AREA)
Abstract
分析目標物件之依賴關係的方法,包含有提供一生成檔案之一描述檔,並定義一目標物件;根據該描述檔,判斷該目標物件是否具有一前置條件,並於該目標物件具有該前置條件時,判斷出相關於該前置條件之一第一依賴物件;紀錄相關於該目標參數與該第一依賴參數之一第一依賴關係值;查找出該第一依賴物件之所有依賴關係,並紀錄為一第二依賴關係值;根據該目標物件、該第一依賴關係值與該第二依賴關係值,產生與該目標物件有關之一依賴關係結果。
Description
本發明係指一種分析目標物件之依賴關係的方法,尤指一種利用程式開發環境中所具有之指令工具來找出相關依賴關係之分析目標物件之依賴關係的方法。
在軟體開發的過程中,程式設計者通常必須利用各種依賴關聯檢查工具(dependency-tracking build tool)來取得編譯文件的依賴關係,以輔助設計各種複雜的大型程式專案。生成檔案(makefile)便是最常用的工具之一。生成檔案可定義出原始碼及所生成的目標(target)檔案的存放目錄,同時也記載著各目標檔案之間的依賴關係。
然而,目前在生成檔案中對編譯物件依賴關係的解析還停留在全人力的基礎上,也就是說,程式設計者仍需完全仰賴人力來研讀生成檔案所記載的內容,進而理解編譯物件的依賴關係。然而,在大型的程式開發專案中,生成檔案中往往牽扯存在複雜的引入(include)關係,研讀起來有一定難度。舉例來說,在編寫程式時,往往需要將某一系統下的應用軟體(如嵌入式作業系統OpenWrt中的介面軟體LuCI)移植到另一個系統中(如軟體系統Ralink)來使用。因此,也就需要對該應用軟體重新進行編譯與安裝,但若僅是將原有系統下的生成檔案直接移動到新的系統中,很可能就會產生錯誤。在此情況下,為解決此問題,便需要仔細研讀舊系統、應用軟體、新系統三方的生成檔案。然而,在生成檔案中,各目標檔案的依賴關係,通常都有四層或五層,甚至更多。如此一來,程式設計者便需耗費極大的心力與時間來研讀相關的生成檔案,而且當存在複雜的引入關係時,透過人力的研讀更常常會發生錯誤的解析結果。因此,如何能迅速且正確地提供程式設計者解析出生成檔案的所記載的依賴關係,便是目前亟需解決的問題之一。
因此,本發明之主要目的之一即在於提供一種分析目標物件之依賴關係的方法。
本發明揭露一種分析目標物件之依賴關係的方法,包含有提供一生成檔案之一描述檔,並定義一目標物件;根據該描述檔,判斷該目標物件是否具有一前置條件,並於該目標物件具有該前置條件時,判斷出相關於該前置條件之一第一依賴物件;紀錄相關於該目標參數與該第一依賴參數之一第一依賴關係值;查找出該第一依賴物件之所有依賴關係,並紀錄為一第二依賴關係值;根據該目標物件、該第一依賴關係值與該第二依賴關係值,產生與該目標物件有關之一依賴關係結果。
為了改善習知對於生成檔案(makefile)中所記載的編譯物件依賴關係必須完全仰賴人力來進行研讀與解析而導致效率不彰的問題。本發明提出一種分析目標物件之依賴關係的方法,以期能迅速且清楚地提供程式設計者相關目標物件的依賴關係,進而縮短程式設計者開發程式的時間。首先,請參考第1圖,第1圖為本發明實施例一流程10之示意圖。流程10用來分析一目標物件之依賴關係,其包含以下步驟:
步驟100:開始。
步驟102:提供生成檔案之描述檔,並定義目標物件。
步驟104:根據描述檔,判斷目標物件是否具有前置條件,並於目標物件具有前置條件時,判斷出相關於前置條件之依賴物件。
步驟106:紀錄相關於目標物件與依賴物件之第一依賴關係值。
步驟108:查找出依賴物件之所有依賴關係,並紀錄為第二依賴關係值。
步驟110:根據目標物件、第一依賴關係值與第二依賴關係值,產生與目標物件有關之依賴關係結果。
步驟112:結束。
詳細來說,於步驟102中,首先,於程式開發環境中產生一生成檔案之描述檔。舉例來說,以下為生成檔案之描述檔DIZ之範例內容:
此外,於步驟102中也要定義出需要解析出依賴關係之目標物件,舉例來說,假設程式設計者欲找出物件manuconfig之所有依賴關係。因此,定義出目標物件為manuconfig。
接著,於步驟104中,可利用程式開發環境中所具有的指令工具來查找出描述檔中是否有出現目標物件manuconfig,並且判斷目標物件manuconfig是否具有一前置條件。當目標物件manuconfig具有前置條件時,則判斷出相關於該前置條件之依賴物件。也就是說,查找出是否有與目標物件manuconfig存在相依性的其他目標或文件。舉例來說,由於在描述檔中,通常會使用冒號(:)來敘述目標檔案以及與這個目標檔案有依賴性的其他目標檔案或文件。即冒號的左邊(或前面)表示目標檔案,冒號的右邊(或後面)表示目標檔案所依賴的其他物件或文件。因此,於步驟104中,可利用一查找指令來尋找是否存在與目標物件manuconfig具有相依性的其他目標或文件。例如使用指令“find-name 〞Makefile〞|xargs grep〞=\s*manuconfig\s*:〞 -n”,來查找出於描述檔中存在有描述目標物件manuconfig之處並且於描述文字(在此即manuconfig)之後有冒號字元的情況。換言之,此時的前置條件為”manuconfig:”。而前述指令的執行結果會顯示目標物件manuconfig具有依賴物件a與b。請參考第2圖,第2圖為本發明實施例之一依賴關係結構圖20之示意圖。即透過步驟104,可找出依賴物件a與b皆為目標物件manuconfig之第一層依賴物件。
另一方面,於步驟104中,若判斷出目標物件manuconfig並無具有前置條件時,則判斷目標物件manuconfig並無其他的依賴物件。
於步驟106中,可將目標物件manuconfig、依賴物件a與依賴物件b之間的關聯性紀錄成第一依賴關係值並儲存下來。舉例來說,可利用目錄值來呈現第一依賴關係值,透過一藉由目錄建立的指令(例如mkdir指令)來建立一目標物件manuconfig之目錄,並於目標物件manuconfig之目錄下分別建立依賴物件a與b之目錄,以表示依賴物件a與b為目標物件manuconfig之第一層依賴物件,並藉由前述所建立之目錄值來描述第一依賴關係值。
接著,於步驟108中,查找出依賴物件a與b之所有依賴關係,並將依賴物件a與b之所有依賴關係紀錄為第二依賴關係值。舉例來說,使用如步驟102至步驟104中所述之方式來查找出相關於依賴物件a與b的依賴物件。更詳細來說,利用步驟102分別將依賴物件a與b定義為目標物件(即目標物件a與b),並利用步驟104與106,尋找目標物件a與b是否具有前置條件時,以判斷出其依賴物件。因此可以查找出依賴物件a具有一依賴物件c,而依賴物件b沒有其他依賴物件。簡言之,可使用如步驟102至步驟104中所述之方式,查找目標物件manuconfig第二層依賴物件,並依此方式,找出與依賴物件有關的所有依賴關係,也就是遞迴地找出目標物件manuconfig之第一層依賴物件之外的所有階層的物件依賴關係。同時,將所找出的依賴關係紀錄為第二依賴關係值,例如,利用目錄值來呈現第二依賴關係值。
於步驟110中,可根據目標物件manuconfig、第一依賴關係值與第二依賴關係值,來產生與目標物件manuconfig有關之依賴關係結果。舉例來說,可根據目標物件manuconfig、第一依賴關係值與第二依賴關係值,利用一樹狀圖指令(例如tree指令),將所有與目標物件有關之依賴關係以樹狀結構圖來呈現。例如,以解析生成檔案之描述檔DIZ為例,透過步驟104至步驟108,查找出目標物件manuconfig有關的所有依賴關係之後,如第2圖所示,便可以樹狀結構圖作一簡單明瞭的分析顯示,以呈現目標物件的依賴關係。
另一方面,由於在程式設計的過程中,目標物件也可能會被賦予其他的變量(在此稱為賦量物件),在此情況下,也必須對目標物件被賦予其他的變量時的依賴關係加以分析。舉例來說,可利用一查找指令來尋找目標物件manuconfig是否賦予其他變量。例如使用指令“find-name 〞Makefile〞|xargs grep〞=\s*manuconfig\s*$〞 -n”,而前述指令的執行結果會顯示目標物件manuconfig賦予另一變量,即物件target(target=manuconfig)。因此,同樣地,程式設計者也必須利用透過步驟102至步驟110之方式找出物件target之所有依賴關係。即利用步驟102將物件target定義為目標物件(即目標物件target),並利用步驟104與106來尋找目標物件target是否具有前置條件時,以判斷出依賴物件,例如使用指令“find-name 〞Makefile〞|xargs grep〞$(target)〞 -n”。接著,利用步驟108找出依賴物件之所有依賴關係。如此一來,將目標物件以及目標物件之其他賦量的所有依賴關係皆查找出來後,再透過容易判讀的樹狀結構圖來呈現,即可徹底地完成目標物件之依賴關係的分析。
簡單來說,流程10利用程式開發環境中所具有之指令工具於生成檔案之描述檔中找出相關於目標物件的依賴物件及依賴物件之所有依賴關係,並據以透過目錄樹狀圖的方式呈現,而能迅速且清楚地解析出目標物件的依賴關係,進而縮短程式設計者開發程式的時間。
要注意的是,若是有實質上相同的結果,則流程10並不以第1圖所示流程圖的順序為限。而且,流程10亦可另包含其他的中間步驟或者可將幾個步驟合併成單一步驟,以做適當之變化。只要可以找出相關於目標物件的依賴物件及依賴物件之所有依賴關係,並據以透過目錄樹狀圖的方式來呈現即可。
舉例來說,請參考第3圖,第3圖為本發明實施例一流程30之示意圖。首先,可提供一生成檔案之描述檔(步驟302)。再來,將程式設計者欲找出依賴關係之物件定義為目標物件(步驟304),並利用目錄建立的指令建立目標物件之目錄(步驟306),例如,使用指令“mkdir-p目標物件”。於執行步驟306之後,利用一查找指令來尋找目標物件是否賦予其他變量,即是否有其他賦量物件(步驟308)。接著,判斷目標物件或賦量物件是否具有前置條件(步驟310)。當判斷出目標物件或是賦量物件具有前置條件時,執行步驟304;當判斷出目標物件或是賦量物件並無具有前置條件時,執行步驟312。換言之,透過步驟304至步驟310之遞迴地的運作,可依序查找出第一層依賴物件至最底層的依賴物件,也就是查找出將所有與目標物件有關的所有依賴關係。因此,於步驟312中,依據步驟306所建立目錄的目錄值,利用一樹狀圖指令(例如tree指令),即可將所有與目標物件有關之依賴關係以樹狀結構圖來呈現。
另一方面,在流程10中,步驟106與步驟108中主要是將相關物件間之依賴關係值紀錄下來,以提供作為後續執行樹狀圖指令之依據。然而,也可利用階層縮進列印的方式來顯示出依賴關係之樹狀結構圖,舉例來說,請參考第4圖,第4圖為本發明實施例一流程40之示意圖。首先,提供一生成檔案之描述檔(步驟402)。再來,將程式設計者欲找出依賴關係之物件定義為目標物件(步驟404),接著,將一列印縮進層次設定為0(步驟406)。本發明實施所提及之列印縮進可以是任何之階層縮進列印方式,例如,tab縮進、空格縮進等。之後,執行一依賴圖形函數putDependencyGraph將相關物件間之依賴關係階層縮進列印的方式列印出來(步驟408),其中步驟408包含步驟412至步驟428。以下為依賴圖形函數putDependencyGraph之虛擬程式碼(#表示說明)。
在步驟408中,會先在新行上列印縮進並列印目標物件的名稱(步驟412)。接著,利用一查找指令來尋找目標物件是否賦予其他變量,即是否存在有其他賦量物件(步驟414)。當判斷出目標物件有其他賦量物件時,執行步驟416,進行賦值替換以將賦量物件定義為目標物件;當判斷出目標物件無其他賦量物件時,執行步驟418,以尋找目標物件之前置條件,同時保存出尋找的結果。接著,執行步驟420,判斷目標物件是否有前置條件,當判斷出目標物件無前置條件時,執行步驟428;當判斷出目標物件有前置條件時,執行步驟422,以將列印縮進層次增加1。再來,執行步驟424,即將步驟418中所尋找出的前置條件依次執行依賴圖形函數putDependencyGraph,同時儲存尋找的結果。最後,於步驟426中,將列印縮進層次減少1。換言之,透過遞迴地執行依賴圖形函數putDependencyGraph來依序將第一層依賴物件至最底層的依賴物件查找出,並以階層縮進列印的方式來呈現出所有與目標物件有關之依賴關係的樹狀結構圖。
進一步地,以前述生成檔案之描述檔DIZ之範例內容為例,依據流程40,於步驟412中會先列印出目標物件menuconfig的名稱,並執行步驟414至步驟422,以找出並儲存依賴文件a與b,以及將列印縮進層次增加1。接著,執行步驟424,以依序將依賴文件a與b代入依賴圖形函數putDependencyGraph,即分別將依賴文件a與b定義為目標文件代入執行步驟412至步驟424。當依賴文件a被定義為目標文件而代入執行步驟412至步驟424時,會找出依賴文件c為依賴物件a之依賴物件。在此情況下,會於前述所列印出之menuconfig名稱的下一個縮進列印出依賴文件a的名稱,並於依賴文件a的下一個縮進列印出依賴文件c的名稱。當依賴文件b被定義為目標文件而代入執行步驟412至步驟424時,由於依賴文件b其他依賴物件,所以僅會於前述所列印出之menuconfig名稱的下一個縮進列印出依賴文件b的名稱。因此,依據流程40也會列印顯示出如第2圖所示的樹狀結構圖。
由於,樹狀結構圖可以讓程式設計者簡單且明瞭的在短時間即可掌握最精準的目標物件依賴關係,舉例來說,請參考第5圖,第5圖為本發明實施例之依賴關係結構圖之另一示意圖。目標物件menuconfig的依賴關係雖有四層,也就是說除了目標物件menuconfig之外,包含了第一層依賴關係至第三層依賴關係。因此,在本發明實施例,透過樹狀結構圖即可讓目標物件依賴關係獲得最適當的呈現。
相較於習知技術對於生成檔案中所記載的編譯物件依賴關係必須完全仰賴人力來進行研讀與解析而導致效率不彰的問題。本發明提出一種分析目標物件之依賴關係的方法,利用程式開發環境中所具有之指令工具於生成檔案之描述檔中找出相關於目標物件的依賴物件及依賴物件之所有依賴關係後,再據以透過樹狀結構圖的方式呈現,如此一來,將能迅速且清楚地提供程式設計者相關目標物件的依賴關係,進而縮短程式設計者開發程式的時間,並能降低開發人力成本、增進效率以及減少錯誤的發生。
以上所述僅為本發明之較佳實施例,凡依本發明申請專利範圍所做之均等變化與修飾,皆應屬本發明之涵蓋範圍。
10、30、40...流程
100、102、104、106、108、110、112、300、302、304、306、308、310、312、314、400、402、404、406、408、410、412、414、416、418、420、422、424、426、428...步驟
第1圖為本發明實施例一流程之示意圖。
第2圖為本發明實施例之一依賴關係結構圖之示意圖。
第3圖與為第4圖分別為本發明實施例一流程之另一示意圖。
第5圖為本發明實施例之依賴關係結構圖之另一示意圖。
10...流程
100、102、104、106、108、110、112...步驟
Claims (10)
- 一種分析目標物件之依賴關係的方法,包含有:提供一生成檔案之一描述檔,並定義一目標物件;根據該描述檔,判斷該目標物件是否具有一前置條件,並於該目標物件具有該前置條件時,判斷出相關於該前置條件之一第一依賴物件;紀錄相關於該目標物件與該第一依賴物件之一第一依賴關係值;查找出該第一依賴物件之所有依賴關係,並紀錄為一第二依賴關係值;以及根據該目標物件、該第一依賴關係值與該第二依賴關係值,產生與該目標物件有關之一依賴關係結果。
- 如請求項1所述之方法,其中根據該描述檔判斷該目標物件是否具有該前置條件並於該目標物件具有該前置條件時判斷出相關於該前置條件之該第一依賴物件之步驟包含有:於該描述檔中,利用一查找指令,查找該目標物件以及該目標物件之後是否存在一冒號字元;以及於該目標物件之後具有存在一冒號字元時,判斷該目標物件具有該前置條件,並將該冒號字元之後的物件判斷為相關於該前置條件之該第一依賴物件。
- 如請求項1所述之方法,其中紀錄相關於該目標物件與該第一依賴物件之該第一依賴關係值之步驟包含有:利用一目錄建立指令,來建立該目標物件之目錄,並於該目標物件之目錄下建立該第一依賴物件之目錄,並以該目標物件與該第一依賴物件之目錄值作為該第一依賴關係值。
- 如請求項3所述之方法,其中查找出該第一依賴物件之所有依賴關係並紀錄為該第二依賴關係值之步驟包含有:根據該描述檔,判斷該第一依賴物件是否具有該前置條件,並於該第一依賴物件具有該前置條件時,判斷出相關於該第一依賴物件之一第二依賴物件;以及利用該目錄建立指令,於第一依賴物件之目錄下來建立第二依賴物件之目錄,並以第一依賴物件與該第二依賴物件之目錄值以及與該第二依賴物件有關之其他所有依賴關係作為該第二依賴關係值。
- 如請求項4所述之方法,其中根據該描述檔判斷該第一依賴物件是否具有該前置條件並於該第一依賴物件具有該前置條件時判斷出相關於該第一依賴物件之該第二依賴物件之步驟包含有:於該描述檔中,利用一查找指令,查找該第一依賴物件以及該第一依賴物件之後是否存在一冒號字元;於該第一依賴物件之後具有存在一冒號字元時,判斷該第一依賴物件具有該前置條件,並將該冒號字元之後的物件判斷為相關於該前置條件之該第二依賴物件。
- 如請求項1所述之方法,其中紀錄相關於該目標物件與該第一依賴物件之第一依賴關係值之步驟另包含有:利用階層縮進列印的方式,列印顯示出相關於該目標物件與該第一依賴物件之依賴關係。
- 如請求項1所述之方法,其中查找出該第一依賴物件之所有依賴關係並紀錄為該第二依賴關係值之步驟另包含有:查找出該第一依賴物件之所有依賴關係,並利用階層縮進列印的方式,列印顯示出該第一依賴物件之所有依賴關係。
- 如請求項1所述之方法,其另包含:於該描述檔中,判斷該目標物件是否具有一賦量物件;於判斷出該目標物件具有該賦量物件時,查找出該賦量物件之所有依賴關係,並紀錄為一第三依賴關係值;以及根據該目標物件、該第一依賴關係值、該第二依賴關係值與該第三依賴關係值,產生與該目標物件有關之該依賴關係結果。
- 如請求項8所述之方法,其中於該描述檔中判斷該目標物件是否具有該賦量物件之步驟包含有:於該描述檔中,利用一查找指令,查找該目標物件以及該目標物件之前是否存在一錢號字元;以及於該目標物件之前具有存在一錢號字元時,將該錢號字元之後的物件判斷為相關於該目標物件之該賦量物件。
- 如請求項1所述之方法,其中該依賴關係結果為一樹狀結構圖。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110285270.8A CN103020075B (zh) | 2011-09-23 | 2011-09-23 | 分析目标对象的依赖关系的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
TW201314482A true TW201314482A (zh) | 2013-04-01 |
TWI437457B TWI437457B (zh) | 2014-05-11 |
Family
ID=47968690
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW100139806A TWI437457B (zh) | 2011-09-23 | 2011-11-01 | 分析目標物件之依賴關係的方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN103020075B (zh) |
TW (1) | TWI437457B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104077140B (zh) * | 2014-07-04 | 2017-11-07 | 用友网络科技股份有限公司 | 用于持续集成的自动化编译方法和编译装置 |
CN104866369B (zh) * | 2015-05-22 | 2018-05-08 | 广州华多网络科技有限公司 | 一种数据处理的方法以及装置 |
US9411706B1 (en) * | 2015-09-30 | 2016-08-09 | Semmle Limited | Suggesting candidate removable software dependencies |
CN105718296B (zh) * | 2016-04-21 | 2019-11-08 | 北京元心科技有限公司 | 编译依赖关系树的生成显示方法及装置 |
CN106886442A (zh) * | 2017-03-06 | 2017-06-23 | 中山大学 | 一种软件依赖关系分析方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6502095B2 (en) * | 1999-09-09 | 2002-12-31 | Lucent Technologies Inc. | Timestamp-based system and method for serializing lazy updates in a distributed database |
CN101393528B (zh) * | 2008-10-30 | 2011-11-16 | 上海交通大学 | 软件动态更新中确定实例对象转换次序的方法及系统 |
CN102141919B (zh) * | 2010-01-28 | 2013-03-13 | 北京邮电大学 | 模块化java应用软件在线更新系统及方法 |
-
2011
- 2011-09-23 CN CN201110285270.8A patent/CN103020075B/zh active Active
- 2011-11-01 TW TW100139806A patent/TWI437457B/zh active
Also Published As
Publication number | Publication date |
---|---|
CN103020075B (zh) | 2016-03-09 |
CN103020075A (zh) | 2013-04-03 |
TWI437457B (zh) | 2014-05-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10754645B2 (en) | Displaying results of a codebase analysis service | |
US10481879B2 (en) | Code development using continued machine learnings | |
US9619211B2 (en) | Code suggestion in a software development tool | |
US7571427B2 (en) | Methods for comparing versions of a program | |
JP5138090B2 (ja) | プログラム解析支援装置 | |
US8739134B2 (en) | Valgrind suppressions file editor | |
US10489150B2 (en) | Software dependency shading | |
US8122440B1 (en) | Method and apparatus for enumerating external program code dependencies | |
US10942718B2 (en) | Systems and/or methods for type inference from machine code | |
TWI437457B (zh) | 分析目標物件之依賴關係的方法 | |
Debreceni et al. | Automated model merge by design space exploration | |
EP3750049A1 (en) | Variable analysis using code context | |
US20100083225A1 (en) | Dynamic Autocompletion Tool | |
WO2018222327A1 (en) | Automated or machine-enhanced source code debugging | |
US8898649B2 (en) | Application program analysis method, analysis system and recording medium for identifying a contributing factor for an invalid operation of an application program | |
US9141344B2 (en) | Hover help support for application source code | |
US10725748B2 (en) | Extracting program features for assisting software development | |
US9003359B2 (en) | User customizable queries to populate model diagrams | |
JP5900193B2 (ja) | 更新判定プログラムおよび更新判定装置 | |
US8473903B2 (en) | Code edit apparatus and recording medium | |
JP2009059351A (ja) | コンピュータソースコードに対して行われる操作を記録するためのシステム、方法、及びコンピュータプログラム製品 | |
WO2023109648A1 (zh) | 一种模型-代码同步方法 | |
Anderson et al. | Supporting analysis of SQL queries in PHP AiR | |
Mahouachi et al. | Search-based refactoring detection | |
Anguel et al. | Towards models and metamodels co-evolution approach |