Abhängig ist ein Tool zur Extraktion von Quellcode -Abhängigkeiten, das syntaktische Beziehungen zwischen Quellcode -Entitäten wie Dateien und Methoden aus verschiedenen Programmiersprachen abschließt. Unser Ziel ist es, ein Framework bereitzustellen, das leicht erweiterbar ist, um die Abhängigkeitsextraktion aus verschiedenen Programmiersprachen und Konfigurationsdateien zu unterstützen, damit andere Analyse-Tools auf hoher Ebene auf sprachunabhängige Weise aufgebaut werden können. Zu den Beispielanwendungen gehören Codevisualisierung, Programmverständnis, Code -Geruchserkennung, Architekturanalyse, Design Refactoring usw.
Unsere Abhängigkeit von Abhängig ist durch die Beobachtungen motiviert, dass verschiedene Anbieter wie Verständnis ™, Struktur 101 ™ und Lattix ™ ihre eigenen Abhängigkeitsextraktionstools erstellt haben, die mit ihren anderen Analysefunktionen verpackt sind. Um neue Analysen durchzuführen, müssen Anbieter und Forscher jeweils ihre eigenen Abhängigkeitsextraktionstools erstellen oder die Ausgabe anderer Tools verwenden, die normalerweise nicht als wiederverwendbar ausgelegt sind.
Wir glauben, dass die Abhängigkeitsanalyse des Software -Quellcodes eine der wichtigsten Grundlagen des Software -Engineering ist. Angesichts der wachsenden Anzahl von Systemen, die auf neuen Sprachen und Multisprachigern basieren, ist die Notwendigkeit eines flexiblen, erweiterbaren Rahmens für die Abhängigkeitsextraktion mit einfachen und einheitlichen Schnittstellen weit verbreitet.
Abhängig ist Open Source und Free, um die Zusammenarbeit der Gemeinschaft zu fördern, sich wiederholende Arbeiten zu vermeiden und die Qualität der analytischen Tools zu verbessern.
Sie können die neueste Version von abhängig von https://github.com/multilang-depends/depends/releases/ herunterladen,,
und dann die depends-*version*.tgz
Datei in einem beliebigen Verzeichnis Ihres Computers entpacken.
Abhängig wird in Java geschrieben, sodass es auf jedem Betriebssystem mit einer JRE- oder JDK -Umgebung (wie Windows, Linux oder Mac OS) ausgeführt werden kann.
Nach dem Prinzip der einzelnen Verantwortung ist abhängig , um nur Abhängigkeiten zu extrahieren. Es liefert nur eine CLI -Schnittstelle ohne GUI. Sie können jedoch die Ausgabe von abhängig von der GUI anderer Tools wie Graphviz (http://graphviz.org/), Plantuml (http://plantuml.com/) und DV8 (https: // www. archdia.com).
Sie können auf folgende Weise ausgeführt werden: Depends.sh von Linux/Mac, depends.sh
depends.bat
Microsoft Windows oder java -jar depends.jar
.
Hinweis: Wenn Sie aus dem Speicherfehler wie GC overhead limt exceed
, erweitern Sie bitte den JVM -Speicher wie folgt java -Xmx4g -jar depends.jar <args>
.
Die Verwendung von CLI -Tools kann von depends --help
, wie folgt aufgeführt:
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(.)
Zum Ausführen von Abhängig müssen Sie 3 wichtigste Parameter angeben: lang
, src
, output
, wie oben erläutert.
Bitte beachten Sie, dass für die meisten Programmiersprachen, wie C/C++, Ruby, Maven/Gradle
, der Pfad --includes
Pfad wichtig ist, um die richtigen Dateien bei der Durchführung von Codeabhängigkeitsanalysen zu finden, ähnlich wie mit MakeFile/IDE. Andernfalls sind die extrahierten Abhängigkeiten möglicherweise nicht genau.
Geben Sie nicht an, dass Pfade außerhalb des SRC -Verzeichnisses (z. B. Systemebene enthalten Pfade oder externe Abhängigkeiten), da abhängig sie nicht verarbeitet.
--auto-include
ist ein nützlicher Parameter, um die Eingabe von Include Dirs zu vereinfachen: Mit diesem Parameter hängt davon ab , dass alle Unterverzeichnisse von src
enthalten sind.
Bei Java
-Programmen müssen Sie nicht angeben, dass die Pfade eingeschlossen werden, da die Zuordnung zwischen Java -Dateipfaden in den Importanweisungen ausdrücklich angegeben ist.
Die Ausgabe von Abhängig kann in 5 Formate exportiert werden: JSON, XML, Excel, DOT und Plantuml. Aufgrund der Einschränkung von MS Excel können Sie nur in eine Excel -Datei exportieren, wenn die Anzahl der Elemente weniger als 256 beträgt.)
DOT -Dateien können verwendet werden, um Diagramme mit GraphViz (http://graphviz.org/) zu generieren.
Plantuml -Dateien können verwendet werden, um UML -Diagramm mit Plantuml (http://plantuml.com/) zu generieren.
JSON- und XML -Dateien können verwendet werden, um Designstrukturmatrizen (DSMs) mit DV8 (https://www.archdia.net) zu generieren.
Das Detail des JSON/XML -Formats könnte hier gefunden werden.
Abhängig unterstützt die wichtigsten Abhängigkeitstypen, einschließlich:
import
, C/C ++ #include
, Ruby require
.Details der unterstützten Typen finden Sie hier hier
Es gibt viele Möglichkeiten, zu denen abhängig ist . Zum Beispiel:
Abhängig von einem anmutigen Kernel für die Abhängigkeitsanalyse, die erweitert werden kann, um verschiedene Programmiersprachen aufzunehmen. Bisher unterstützt es nur Java, C/C ++, Ruby und Maven. Bitte nutzen Sie dieses Framework, um Ihren eigenen Abhängigkeitsextraktor hinzuzufügen.
Der Aufwand für jede Sprache ist sehr unterschiedlich. Wir verbrachten 24 Stunden damit, Maven zu unterstützen, verbrachten aber Wochen, um Abhängigkeiten von Ruby zu extrahieren
Das Parsing -Quelldateien ist nicht trivial. Es gibt viele sprachspezifische Merkmale, die berücksichtigt werden müssen. Die Berichterstattung über nicht unterstützte Sprachfunktionen oder die Behebung bestehender Probleme hängt besser ab .
Sie können als Bausteine verwendet werden, um verschiedene Tools zu erstellen, entweder Open Source oder Commercial für Produktionen oder Forschung, z. B. GUI -Tools, Tools zur Codevisualisierung usw.
Es wird uns sehr helfen, wenn Ihr Unternehmen oder Ihr Institut zum Sponsor unseres Projekts wird. Ihre Spende könnte helfen, unabhängig, nachhaltig zu sein und mehr Mitwirkende zu unterstützen.
Sie können "Abhängige" in Ihren Projekten, entweder Open Source- oder kommerzielle, sowie Software -Engineering -Forschung verwenden. Ihr Feedback wird sehr geschätzt. Wir werden auch dankbar sein, wenn Sie uns helfen könnten, die Worte zu verbreiten und mehr Menschen zu ermutigen, sie zu verwenden.
Dieses Projekt basiert auf der hervorragenden Arbeit anderer Forscher, darunter das von Jin Wuxia et al. Vorgeschlagene Enre -Framework (https://github.com/jinwuxia/enre) und die Architekturforschung des Teams von Prof. YuanFang Cai (Team (Team https://www.cs.drexel.edu/~yfcai/) zur Abhängigkeitsanalyse.
Das von der Sprachspezifische Front-End abhängig ist auf mehreren hervorragenden Open-Source-Projekten, darunter Antlr/Antlr Grammar V4 (https://github.com/antlr), Eclipse CDT (www.eclipse.org/cdt) und Jruby ((www.eclipse.org/cdt) und Jruby ((www.eclipse.org/cdt) und jruby (( https://github.com/jruby/jruby).