Depende una herramienta de extracción de dependencia del código fuente, diseñada para inferir relaciones sintácticas entre las entidades del código fuente, como archivos y métodos, de varios lenguajes de programación. Nuestro objetivo es proporcionar un marco que sea fácilmente extensible para admitir la extracción de dependencia de diferentes lenguajes de programación y archivos de configuración, de modo que otras herramientas de análisis de alto nivel se puedan construir sobre él, de manera independiente del lenguaje. Las aplicaciones de muestra incluyen visualización de código, comprensión del programa, detección de olor a código, análisis de arquitectura, refactorización de diseño, etc.
Nuestra creación de Depends está motivada por las observaciones de que los diferentes proveedores, como Entender ™, Structure 101 ™ y Lattix ™, crearon sus propias herramientas de extracción de dependencia que están empaquetadas con sus otras funciones de análisis. Para realizar nuevos análisis, los proveedores e investigadores deben crear sus propias herramientas de extracción de dependencia, o usar la salida de otras herramientas, que generalmente no están diseñadas para ser reutilizables.
Creemos que el análisis de dependencia del código fuente de software es una de las bases más importantes de la ingeniería de software. Dado el creciente número de sistemas construidos en nuevos idiomas y idiomas múltiples, la necesidad de un marco flexible y extensible de extracción de dependencia de varios idiomas, con interfaces simples y unificadas es ampliamente reconocido.
Depende de código abierto y gratuito, para promover la colaboración comunitaria, evitar el trabajo repetitivo y mejorar la calidad de las herramientas analíticas.
Puede descargar la última versión de Depends de https://github.com/multilang-depends/depends/releases/,
y luego descifrar el archivo depends-*version*.tgz
en cualquier directorio de su computadora.
Depende se escribe en Java, por lo que podría ejecutarse en cualquier sistema operativo con un entorno JRE o JDK (como Windows, Linux o Mac OS).
Siguiendo el principio de responsabilidad única, Depende está diseñado para extraer solo dependencias. Solo proporciona interfaz CLI, sin GUI. Pero puede convertir la salida de depender de la GUI de otras herramientas, como GraphViz (http://graphviz.org/), plantuml (http://plantuml.com/) y dv8 (https: // www. Archdia.com).
Podrías ejecutar depende de las siguientes maneras: depends.sh
en java -jar depends.jar
/Mac, depends.bat
.
NOTA: Si se encuentra fuera del error de memoria como GC overhead limt exceed
, expanda la memoria JVM como después de java -Xmx4g -jar depends.jar <args>
.
El uso de la herramienta CLI podría enumerarse depends --help
, como seguir:
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(.)
Para ejecutar depende , debe especificar 3 parámetros más importantes: lang
, src
, output
, como se explicó anteriormente.
Tenga en cuenta que para la mayoría de los lenguajes de programación, como C/C++, Ruby, Maven/Gradle
, la ruta --includes
es importante para depender de los archivos correctos al realizar el análisis de dependencia del código, similar a MakeFile/IDE. De lo contrario, las dependencias extraídas pueden no ser precisas.
No especifique que incluya rutas fuera del directorio SRC (por ejemplo, el nivel del sistema incluye rutas o dependencias externas) porque depende no las procesará.
--auto-include
es un parámetro útil para simplificar la entrada de los DIR de incluido: con este parámetro, depende incluirá todos los subdirectorios de src
.
Para los programas Java
, no está obligado a especificar las rutas de incluido, porque la asignación entre las rutas de archivo Java se indica explícitamente en las declaraciones de importación.
La salida de Depends se puede exportar en 5 formatos: JSON, XML, Excel, Dot y Plantuml. Debido a la limitación de MS Excel, solo puede exportar a un archivo de Excel si el número de elementos es inferior a 256).
Los archivos DOT podrían usarse para generar gráficos usando GraphViz (http://graphviz.org/).
Los archivos de plantuml podrían usarse para generar diagrama UML usando plantuml (http://plantuml.com/).
Los archivos JSON y XML podrían usarse para generar matrices de estructura de diseño (DSMS) usando DV8 (https://www.archdia.net).
El detalle del formato JSON/XML se puede encontrar aquí.
Depende admite los principales tipos de dependencia, que incluyen:
import
, C/C ++ #include
, Ruby require
.Para obtener detalles de los tipos compatibles, consulte aquí
Hay muchas formas de contribuir a Depends . Por ejemplo:
Depende implementado un núcleo elegante para el análisis de dependencia, que puede extenderse para acomodar varios lenguajes de programación. Hasta ahora, solo admite Java, C/C ++, Ruby y Maven. No dude en aprovechar este marco para agregar su propio extractor de dependencia.
El esfuerzo necesario para cada idioma varía mucho. Pasamos 24 horas para apoyar a Maven, pero pasamos semanas para extraer dependencias de Ruby
Analizar archivos fuente no es trivial. Hay muchas características específicas del lenguaje que deben tenerse en cuenta. Informar las características del lenguaje no compatible o solucionar los problemas existentes lo hará depende mejor.
Puede usar Depends como bloques de construcción para crear diversas herramientas, ya sea de código abierto o comercial, para producciones o investigaciones, como herramientas de GUI, herramientas de visualización de código, etc.
Nos ayudará mucho si su empresa o instituto se convierte en patrocinador de nuestro proyecto. Su donación podría ayudar depende de ser independientes, sostenibles y apoyar a más contribuyentes.
Puede usar "depende" de sus proyectos, ya sea de código abierto o comercial, así como investigación de ingeniería de software. Sus comentarios son muy apreciados. También estaremos agradecidos si pudiera ayudarnos a difundir las palabras y alentar a más personas a usarlas.
Este proyecto se basa en el excelente trabajo de otros investigadores, incluido el marco Enre (https://github.com/jinwuxia/enre) propuesto por Jin Wuxia et al., Y la investigación de arquitectura del equipo del profesor Yuanfang Cai ( https://www.cs.drexel.edu/~yfcai/) en el análisis de dependencia.
El front-end específico del lenguaje de depende se basa en varios excelentes proyectos de código abierto, incluidas la gramática ANTLR/ANTLR V4 (https://github.com/antlr), Eclipse CDT (www.eclipse.org/cdt) y Jruby ( https://github.com/jruby/jruby).