Depende é uma ferramenta de extração de dependência do código -fonte, projetada para inferir relações sintáticas entre entidades de código -fonte, como arquivos e métodos, de várias linguagens de programação. Nosso objetivo é fornecer uma estrutura que seja facilmente extensível para suportar a extração de dependência de diferentes linguagens de programação e arquivos de configuração, para que outras ferramentas de análise de alto nível possam ser construídas sobre ela, de maneira independente de linguagem. Os aplicativos de amostra incluem visualização de código, compreensão do programa, detecção de cheiro de código, análise de arquitetura, refatoração de design, etc.
Nossa criação de depende é motivada pelas observações de que diferentes fornecedores, como compreender ™, estrutura 101 ™ e Lattix ™, criaram suas próprias ferramentas de extração de dependência que são embaladas com suas outras funções de análise. Para realizar novas análises, cada um dos fornecedores deve criar suas próprias ferramentas de extração de dependência ou usar a saída de outras ferramentas, que geralmente não são projetadas para serem reutilizáveis.
Acreditamos que a análise de dependência do código -fonte do software é um dos fundamentos mais importantes da engenharia de software. Dado o crescente número de sistemas construídos em novos idiomas e múltiplas linguagens, a necessidade de uma estrutura de extração de dependência flexível e extensível em várias linguagens, com interfaces simples e unificadas é amplamente reconhecida.
Depende é de código aberto e gratuito, para promover a colaboração da comunidade, evitar o trabalho repetitivo e melhorar a qualidade das ferramentas analíticas.
Você pode baixar a versão mais recente de depende de https://github.com/multilang-dependes/depends/releases/,
e descompacte o arquivo depends-*version*.tgz
em qualquer diretório do seu computador.
Depende está escrito em Java, para que possa ser executado em qualquer sistema operacional com um ambiente JRE ou JDK (como Windows, Linux ou Mac OS).
Seguindo o princípio de responsabilidade única, depende de depende para o objetivo de extrair apenas dependências. Ele fornece apenas interface CLI, sem GUI. Mas você pode converter a saída de depende na GUI de outras ferramentas, como GraphViz (http://graphviz.org/), plantauml (http://plantuml.com/) e dv8 (https: // www. archdia.com).
Você pode executar depende das seguintes maneiras: depends.sh
de Linux/Mac java -jar depends.jar
depends.bat
.
NOTA: Se você encontrou um erro fora da memória, como GC overhead limt exceed
, expandir a memória da JVM como seguir java -Xmx4g -jar depends.jar <args>
.
O uso da ferramenta da CLI pode ser listado depends --help
, como a 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 executar depende , você precisa especificar 3 parâmetros mais importantes: lang
, src
, output
, conforme explicado acima.
Observe que, para a maioria das linguagens de programação, como C/C++, Ruby, Maven/Gradle
, o caminho --includes
é importante para que depende de encontrar os arquivos corretos ao realizar a análise de dependência do código, semelhante ao Makefile/IDE. Caso contrário, as dependências extraídas podem não ser precisas.
Não especifique incluir caminhos fora do diretório SRC (por exemplo, o nível do sistema inclui caminhos ou dependências externas) porque depende não os processará.
--auto-include
é um parâmetro útil para simplificar a entrada de Incluir Dirs: com este parâmetro, depende de incluir todos os subdiretos do src
.
Para os programas Java
, você não é obrigado a especificar incluir caminhos, porque o mapeamento entre os caminhos do arquivo Java são explicitamente declarados nas instruções de importação.
A saída de depende pode ser exportada para 5 formatos: JSON, XML, Excel, Dot e Plantuml. Devido à limitação do MS Excel, você só pode exportar para um arquivo do Excel se o número de elementos for menor que 256.)
Os arquivos DOT podem ser usados para gerar gráficos usando o GraphViz (http://graphviz.org/).
Os arquivos Plantuml podem ser usados para gerar diagrama UML usando o Plantuml (http://plantuml.com/).
Os arquivos JSON e XML podem ser usados para gerar matrizes de estrutura de design (DSMS) usando DV8 (https://www.archdia.net).
Os detalhes do formato JSON/XML podem ser encontrados aqui.
Depende do suporte a grandes tipos de dependência, incluindo:
import
java, c/c ++ #include
, ruby require
.Para detalhes dos tipos suportados, consulte aqui
Existem muitas maneiras de contribuir depende . Por exemplo:
Depende de implementar um kernel gracioso para análise de dependência, que pode ser estendida para acomodar várias linguagens de programação. Até agora, ele suporta apenas Java, C/C ++, Ruby e Maven. Sinta -se à vontade para aproveitar essa estrutura para adicionar seu próprio extrator de dependência.
O esforço necessário para cada idioma varia muito. Passamos 24 horas para apoiar o maven, mas passamos semanas para extrair dependências do rubi
A análise de arquivos de origem não é trivial. Existem muitos recursos específicos do idioma que precisam ser levados em consideração. Relatar recursos de linguagem não suportados ou corrigir problemas existentes depende melhor.
Você pode usar depende como blocos de construção para criar várias ferramentas, de código aberto ou comercial, para produções ou pesquisas, como ferramentas de GUI, ferramentas de visualização de código etc.
Isso nos ajudará muito se sua empresa ou instituto se tornar um patrocinador do nosso projeto. Sua doação pode ajudar depende de ser independente, sustentável e apoiar mais colaboradores.
Você pode usar "depende" em seus projetos, de código aberto ou comercial, bem como pesquisas de engenharia de software. Seu feedback é muito apreciado. Também seremos gratos se você puder nos ajudar a espalhar as palavras e incentivar mais pessoas a usá -lo.
Este projeto é construído sobre o excelente trabalho de outros pesquisadores, incluindo a estrutura do ENRE (https://github.com/jinwuxia/enre) proposta por Jin Wuxia et al. E a pesquisa de arquitetura da equipe do Prof. Yuanfang Cai ( https://www.cs.drexel.edu/~yfcai/) em análise de dependência.
O front-end específico do idioma depende é construído em vários excelentes projetos de código aberto, incluindo a Gramática Antlr/Antlr V4 (https://github.com/antlr), Eclipse CDT (www.eclipse.org/cdt) e jruby ( https://github.com/jruby/jruby).