依賴性是一種源代碼依賴性提取工具,旨在從各種編程語言中推斷源代碼實體(例如文件和方法)之間的句法關係。我們的目標是提供一個易於擴展的框架,以支持從不同的編程語言和配置文件中提取依賴關係,以便以獨立於語言的方式在其上構建其他高級分析工具。示例應用程序包括代碼可視化,程序理解,代碼氣味檢測,體系結構分析,設計重構等。
我們的依賴創建是由觀察結果激發的,即不同的供應商(例如Leach™,Construct 101™和Lattix™)創建了自己的依賴性提取工具,這些工具包裝了其他分析功能。為了進行新的分析,供應商和研究人員必須各自創建自己的依賴提取工具,或使用其他工具的輸出,這些工具通常無法重複使用。
我們認為,軟件源代碼的依賴性分析是軟件工程最重要的基礎之一。鑑於越來越多的系統建立在新語言和多語言上,因此需要廣泛認識到一個靈活的,可擴展的多語言依賴性提取框架,並具有簡單和統一的接口。
依賴是開源的,可以自由,以促進社區合作,避免重複性工作以及提高分析工具的質量。
您可以從https://github.com/multilang-deperds/deppers/releases/下載最新版本的依賴版本
然後在計算機的任何目錄中解壓縮depends-*version*.tgz
文件。
依賴性用Java編寫,因此可以在任何具有JRE或JDK環境的OS上運行(例如Windows,Linux或Mac OS)。
遵循單一責任原則,依賴的目的是僅提取依賴性。它僅提供CLI接口,沒有GUI。但是您可以將依賴的輸出轉換為其他工具的GUI,例如GraphViz(http://graphviz.org/),Plantuml(http://plantuml.com/)和DV8(https:// www。 Artdia.com )。
您可以按以下方式運行以下方式: depends.sh
於Linux/Mac的sh, depends.bat
於Microsoft Windows或java -jar depends.jar
。
注意:如果您遇到的內存錯誤(例如GC overhead limt exceed
,請像以下java -Xmx4g -jar depends.jar <args>
那樣展開JVM內存。
CLI工具的用法可以由depends --help
,如以下內容:
Usage: depends [-hms] [--auto-include] [-d=<dir>] [-g=<granularity>]
[-p=<namePathPattern>] [-f=<format>[,<format>...]]...
[-i=<includes>[,<includes>...]]... <lang> <src> <output>
<lang> The language of project files: [cpp, java, ruby, python,
pom]
<src> The directory to be analyzed
<output> The output file name
--auto-include auto include all paths under the source path (please
notice the potential side effect)
-i, --includes=<includes>[,<includes>...]
The files of searching path
-d, --dir=<dir> The output directory
-f, --format=<format>[,<format>...]
The output format: [json(default),xml,excel,dot,
plantuml]
-g, --granularity=<granularity>
Granularity of dependency.[file(default),method,L#(the level of folder. e.g. L1=1st level folder) ]
-h, --help Display this help and exit
-s, --strip-leading-path Strip the leading path.
-m, --n-map-files Output DV8 dependency map file.
-p, --namepattern=<namePathPattern>
The name path separators.[default(/),dot(.)
要運行依賴,您需要指定3個最重要的參數:如上所述, lang
, src
, output
。
請注意,對於大多數編程語言,例如C/C++, Ruby, Maven/Gradle
, --includes
Path對於在進行代碼依賴性分析時,與MakeFile/IDE相似的代碼依賴性分析時,依賴的路徑很重要。否則,提取的依賴項可能不准確。
請勿指定SRC目錄之外的路徑(例如,系統級別包括路徑或外部依賴關係),因為依賴不會處理它們。
--auto-include
是一個有用的參數,可以簡化include dirs的輸入:使用此參數,依賴將包括src
的所有子目錄。
對於Java
程序,您無需指定路徑,因為Java文件路徑之間的映射在導入語句中明確說明。
依賴的輸出可以將其導出為5種格式:JSON,XML,Excel,Dot和Plantuml。由於MS Excel的限制,如果元素的數量小於256,則只能導出到Excel文件中。)
點文件可用於使用GraphViz(http://graphviz.org/)生成圖形。
Plantuml文件可用於使用Plantuml(http://plantuml.com/)生成UML圖。
JSON和XML文件可用於使用DV8(https://www.archdia.net)生成設計結構矩陣(DSM)。
JSON/XML格式的細節可以在此處找到。
依賴性支持主要的依賴類型,包括:
import
,C/C ++ #include
,Ruby require
。有關支持類型的詳細信息,請參考此處
有很多方法可以貢獻依賴。例如:
依賴性實現了依賴性分析的優美內核,可以擴展以適應各種編程語言。到目前為止,它僅支持Java,C/C ++,Ruby和Maven。請隨時利用此框架來添加您自己的依賴提取器。
每種語言所需的努力差異很大。我們花了24個小時來支持Maven,但花了數週的時間從Ruby提取依賴性
解析源文件並非微不足道。需要考慮許多特定於語言的功能。報告不支持的語言功能或解決現有問題將使依賴更好。
您可以使用依賴作為構建塊來創建各種開源或商業工具,用於製作或研究,例如GUI工具,代碼可視化工具等。
如果您的公司或研究所成為我們項目的讚助商,這將為我們提供很多幫助。您的捐款可能有助於取決於獨立,可持續和支持更多貢獻者。
歡迎您在您的項目中使用“取決於”的開源或商業項目以及軟件工程研究。高度讚賞您的反饋。如果您能幫助我們傳播這些單詞並鼓勵更多人使用它,我們也將很感激。
該項目建立在其他研究人員的出色工作基礎上,包括Jin Wuxia等人提出的Enre框架(https://github.com/jinwuxia/enre),以及Yuanfang Cai教授團隊的建築研究( https://www .cs.drexel.edu/~yfcai/)關於依賴性分析。
語言特定的依賴的前端基於幾個出色的開源項目,包括Antlr/Antlr語法V4(https://github.com/antlr),Eclipse CDT(www.eclipse.org/cdt)和Jruby( https:// github.com/jruby/jruby)。