Cela dépend d'un outil d'extraction de dépendance du code source, conçu pour déduire les relations syntaxiques entre les entités de code source, telles que les fichiers et les méthodes, à partir de divers langages de programmation. Notre objectif est de fournir un cadre facilement extensible pour prendre en charge l'extraction de dépendance à partir de différents langages de programmation et fichiers de configuration, de sorte que d'autres outils d'analyse de haut niveau peuvent être construits sur elle, d'une manière indépendante du langage. Les exemples d'applications incluent la visualisation du code, la compréhension du programme, la détection des odeurs de code, l'analyse d'architecture, la refactorisation de conception, etc.
Notre création de Detend est motivée par les observations selon lesquelles différents fournisseurs, tels que Comprendre ™, Structure 101 ™ et Lattix ™, ont créé leurs propres outils d'extraction de dépendance qui sont emballés avec leurs autres fonctions d'analyse. Pour effectuer de nouvelles analyses, les fournisseurs et les chercheurs doivent chacun créer leurs propres outils d'extraction de dépendance ou utiliser la sortie d'autres outils, qui ne sont généralement pas conçus pour être réutilisables.
Nous pensons que l'analyse de dépendance du code source logiciel est l'une des fondements les plus importants de l'ingénierie logicielle. Compte tenu du nombre croissant de systèmes construits sur de nouvelles langues et multi-langues, la nécessité d'un cadre d'extension multi-language flexible et extensible, avec des interfaces simples et unifiées, est largement reconnu.
Cela dépend de l'open source et gratuitement, pour promouvoir la collaboration communautaire, pour éviter les travaux répétitifs et améliorer la qualité des outils analytiques.
Vous pouvez télécharger la dernière version de Detend à partir de https://github.com/multilang-depends/depends/releases/,
Et puis dézip le fichier depends-*version*.tgz
dans n'importe quel répertoire de votre ordinateur.
Dépend est écrit en java, il peut donc être exécuté sur n'importe quel système d'exploitation avec un environnement JRE ou JDK (comme Windows, Linux ou Mac OS).
Suivant le principe de responsabilité unique, dépend est conçu dans le but d'extraire uniquement les dépendances. Il fournit uniquement l'interface CLI, sans GUI. Mais vous pouvez convertir la sortie de dépend en GUI d'autres outils, tels que Graphviz (http://graphviz.org/), Plantuml (http://plantuml.com/) et dv8 (https: // www. archdia.com).
Vous pouvez exécuter dépend de la manière suivante: depends.sh
de Linux / Mac, depends.bat
sur Microsoft Windows, ou java -jar depends.jar
.
Remarque: Si vous avez rencontré une erreur de mémoire comme GC overhead limt exceed
, veuillez développer la mémoire JVM comme le suivant java -Xmx4g -jar depends.jar <args>
.
L'utilisation de l'outil CLI pourrait être répertoriée par depends --help
, comme suivre:
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(.)
Pour fonctionner , vous devez spécifier 3 paramètres les plus importants: lang
, src
, output
, comme expliqué ci-dessus.
Veuillez noter que pour la plupart des langages de programmation, tels que C/C++, Ruby, Maven/Gradle
, le chemin --includes
le chemin est important pour la recherche de bons fichiers lors de l'analyse de dépendance du code, similaire à MakeFile / IDE. Sinon, les dépendances extraites peuvent ne pas être exactes.
Ne spécifiez pas les chemins d'inclusion en dehors du répertoire SRC (par exemple, le niveau du système inclut les chemins ou les dépendances externes) car la dépendance ne les traitera pas.
--auto-include
est un paramètre utile pour simplifier l'entrée des réseaux inclués: avec ce paramètre, dépendra toutes les sous-répertoires de src
.
Pour les programmes Java
, vous n'êtes pas obligé de spécifier les chemins d'inclusion, car le mappage entre les chemins de fichier Java est explicitement indiqué dans les instructions d'importation.
La sortie de dépend peut être exportée en 5 formats: JSON, XML, Excel, Dot et Plantuml. En raison de la limitation de MS Excel, vous ne pouvez exporter que dans un fichier Excel que si le nombre d'éléments est inférieur à 256.)
Les fichiers DOT peuvent être utilisés pour générer des graphiques à l'aide de Graphviz (http://graphviz.org/).
Les fichiers Plantuml pourraient être utilisés pour générer un diagramme UML à l'aide de Plantuml (http://plantuml.com/).
Les fichiers JSON et XML pourraient être utilisés pour générer des matrices de structure de conception (DSM) à l'aide de DV8 (https://www.archdia.net).
Le détail du format JSON / XML a pu être trouvé ici.
Dépend des prises en charge les principaux types de dépendances, notamment:
import
, C / C ++ #include
, Ruby require
.Pour plus de détails sur les types pris en charge, veuillez vous référer à ici
Il existe de nombreuses façons de contribuer . Par exemple:
Dépend de la mise en œuvre d'un noyau gracieux pour l'analyse de dépendance, qui peut être étendu pour s'adapter à divers langages de programmation. Jusqu'à présent, il ne prend en charge que Java, C / C ++, Ruby et Maven. N'hésitez pas à tirer parti de ce cadre pour ajouter votre propre extracteur de dépendance.
L'effort nécessaire pour chaque langue varie beaucoup. Nous avons passé 24 heures pour soutenir Maven, mais nous avons passé des semaines à extraire les dépendances de Ruby
Analyser les fichiers source n'est pas trivial. Il existe de nombreuses fonctionnalités spécifiques à la langue qui doivent être prises en considération. La déclaration des fonctionnalités linguistiques non prises en charge ou la résolution des problèmes existants rendront mieux.
Vous pouvez utiliser dépend comme des éléments constitutifs pour créer divers outils, open source ou commercial, pour les productions ou la recherche, tels que les outils de l'interface graphique, les outils de visualisation de code, etc.
Cela nous aidera beaucoup si votre entreprise ou votre institut devient un sponsor de notre projet. Votre don pourrait aider à être indépendant , durable et à soutenir plus de contributeurs.
Vous êtes invités à utiliser des "dépend" de vos projets, Open Source ou commerciaux, ainsi que la recherche en génie logiciel. Vos commentaires sont très appréciés. Nous serons également reconnaissants si vous pouviez nous aider à répandre les mots et à encourager plus de gens à l'utiliser.
Ce projet est construit sur l'excellent travail d'autres chercheurs, notamment le cadre ENRE (https://github.com/jinwuxia/enre) proposé par Jin Wuxia et al., Et la recherche en architecture de l'équipe du professeur Yuanfang Cai ( https://www.cs.drexel.edu/~yfcai/) sur l'analyse de dépendance.
Le front-end spécifique à la langue est construit sur plusieurs excellents projets open source, notamment Antlr / Antlr Grammar V4 (https://github.com/antlr), Eclipse CDT (www.eclipse.org/cdt) et Jruby (www.eclipse.org/cdt) et JRuby ( https://github.com/jruby/jruby).