依存は、さまざまなプログラミング言語からファイルやメソッドなどのソースコードエンティティ間の構文関係を推測するように設計されたソースコード依存性抽出ツールです。私たちの目的は、異なるプログラミング言語と構成ファイルからの依存関係抽出をサポートするために簡単に拡張できるフレームワークを提供し、言語に依存しない方法で他の高レベルの分析ツールを構築できるようにすることです。サンプルアプリケーションには、コードの視覚化、プログラムの理解、コード臭いの検出、アーキテクチャ分析、設計リファクタリングなどが含まれます。
依存関係の作成は、理解™、Structure 101™、Lattix™などのさまざまなベンダーが、他の分析関数でパッケージ化された独自の依存関係抽出ツールを作成したという観察によって動機付けられています。新しい分析を実施するには、ベンダーと研究者はそれぞれ独自の依存関係抽出ツールを作成するか、通常、再利用可能になるように設計されていない他のツールの出力を使用する必要があります。
ソフトウェアソースコードの依存分析は、ソフトウェアエンジニアリングの最も重要な基盤の1つであると考えています。新しい言語と多言語に基づいて構築されたシステムの数が増えていることを考えると、シンプルで統一されたインターフェイスを備えた柔軟で拡張可能な多言語依存抽出フレームワークの必要性は広く認識されています。
依存は、コミュニティのコラボレーションを促進し、繰り返しの仕事を避け、分析ツールの品質を向上させるために、オープンソースと無料であり、無料です。
https://github.com/multilang-depends/depts/releases/からDependsの最新バージョンをダウンロードできます。
そして、コンピューターの任意のディレクトリにdepends-*version*.tgz
ファイルを解凍します。
依存関係はJavaで書かれているため、JREまたはJDK環境(Windows、Linux、Mac OSなど)を備えたOSで実行できます。
単一の責任の原則に従って、依存は依存関係を抽出する目的でのみ設計されています。 GUIなしでCLIインターフェイスのみを提供します。ただし、Graphviz(http://graphviz.org/)、Plantuml(http://plantuml.com/)、dv8(https:// wwwなど、依存の出力を他のツールのGUIに変換できます。 Archdia.com)。
次の方法で依存関係を実行できます。Linux/Mac、 depends.bat
、Microsoft Windows、またはjava -jar depends.jar
のdepends.sh
。
注: 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(.)
依存性を実行するには、 src
で説明したように、3 lang
の最も重要なパラメーターの3つの最も重要なパラメーターoutput
指定する必要があります。
C/C++, Ruby, Maven/Gradle
などのほとんどのプログラミング言語では、MakeFile/IDEと同様に、コード依存関係分析を実行するときに適切なファイルを見つけるためには、 --includes
パスが重要であることに注意してください。それ以外の場合、抽出された依存関係が正確ではない場合があります。
SRCディレクトリ外のパスを含めることはありません(例:システムレベルにはパス、または外部依存関係)依存関係が処理されないためです。
--auto-include
、include direの入力を簡素化するための便利なパラメーターです。このパラメーターを使用すると、 src
のすべてのサブディレクトリが含まれます。
Java
プログラムの場合、Javaファイルパス間のマッピングがインポートステートメントに明示的に記載されているため、パスを含めることを指定する必要はありません。
依存の出力は、JSON、XML、Excel、DOT、およびPlantumlの5つの形式にエクスポートできます。 MS Excelの制限により、要素の数が256未満の場合にのみExcelファイルにエクスポートできます。)
DOTファイルは、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のみをサポートしています。このフレームワークを活用して、独自の依存関係抽出器を追加してください。
各言語に必要な努力は大きく異なります。 Mavenをサポートするために24時間を費やしましたが、Rubyから依存関係を抽出するために数週間費やしました
ソースファイルの解析は些細なことではありません。考慮に入れる必要がある多くの言語固有の機能があります。サポートされていない言語機能を報告するか、既存の問題を修正すると、より良くなります。
GUIツール、コード視覚化ツールなどのプロダクションや研究のために、オープンソースまたはコマーシャルのいずれかのさまざまなツールを作成するために、依存をビルディングブロックとして使用できます。
あなたの会社や研究所が私たちのプロジェクトのスポンサーになった場合、それは私たちに大いに役立ちます。あなたの寄付は、独立し、持続可能であり、より多くの貢献者をサポートするのに依存する可能性があります。
オープンソースまたはコマーシャルのプロジェクト、およびソフトウェアエンジニアリングの研究でも、プロジェクトで「依存」を使用できます。あなたのフィードバックは非常に高く評価されています。また、言葉を広め、より多くの人々にそれを使用するように勧めることができれば感謝します。
このプロジェクトは、Jin Wuxia et al。が提案した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(Jruby( https://github.com/jruby/jruby)。