의존하는 것은 소스 코드 종속성 추출 도구로, 다양한 프로그래밍 언어의 파일 및 방법과 같은 소스 코드 엔티티 간의 구문 관계를 유추하도록 설계되었습니다. 우리의 목표는 다양한 프로그래밍 언어 및 구성 파일의 종속성 추출을 지원할 수있는 프레임 워크를 제공하여 언어 독립적 인 방식으로 다른 고급 분석 도구를 구축 할 수 있도록하는 것입니다. 샘플 응용 프로그램에는 코드 시각화, 프로그램 이해, 코드 냄새 감지, 아키텍처 분석, 디자인 리팩토링 등이 포함됩니다.
ENGPER 의 생성은 SNICERT ™, Structure 101 ™ 및 Lattix ™와 같은 다른 공급 업체가 다른 분석 기능과 함께 포장 된 자체 의존성 추출 도구를 만들었다는 관찰에 의해 동기가 부여됩니다. 새로운 분석을 수행하기 위해 공급 업체와 연구원은 각각 고유 한 종속성 추출 도구를 만들거나 일반적으로 재사용 할 수 있도록 설계되지 않은 다른 도구의 출력을 사용해야합니다.
우리는 소프트웨어 소스 코드의 종속성 분석이 소프트웨어 엔지니어링의 가장 중요한 기초 중 하나라고 생각합니다. 새로운 언어와 다중 언어를 기반으로 구축 된 시스템의 수가 증가함에 따라 간단하고 통합 된 인터페이스를 갖춘 유연하고 확장 가능한 다중 언어 의존성 추출 프레임 워크가 널리 인식됩니다.
의존하는 것은 오픈 소스이며 무료이며, 커뮤니티 협업을 촉진하고, 반복적 인 작업을 피하고, 분석 도구의 품질을 향상시키기 위해 무료입니다.
최신 버전 의 https://github.com/multilang-depends/depends/releases/,
그런 다음 컴퓨터의 모든 디렉토리에서 depends-*version*.tgz
파일을 압축 해제하십시오.
의존하는 것은 Java로 작성되므로 JRE 또는 JDK 환경 (Windows, Linux 또는 Mac OS)이있는 OS에서 실행할 수 있습니다.
단일 책임 원칙에 따라 의존하는 것은 종속성을 추출 할 목적으로 설계되었습니다. GUI없이 CLI 인터페이스 만 제공합니다. 그러나 GraphViz (http://graphviz.org/), plantuml (http://plantuml.com/) 및 dv8 (https : // www . archdia.com).
Linux/Mac에 따라 depends.sh
, Microsoft Windows에 depends.bat
하거나 java -jar depends.jar
따라 달라질 수 있습니다.
참고 : 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(.)
실행 하려면 위에서 설명한대로 lang
, src
, output
의 3 가지 가장 중요한 매개 변수를 지정해야합니다.
C/C++, Ruby, Maven/Gradle
과 같은 대부분의 프로그래밍 언어의 경우 --includes
경로는 MakeFile/IDE와 유사하게 코드 종속성 분석을 수행 할 때 올바른 파일을 찾는 데 중요 합니다 . 그렇지 않으면 추출 된 종속성이 정확하지 않을 수 있습니다.
SRC 디렉토리 외부의 경로 (예 : 시스템 수준은 경로 또는 외부 종속성 포함)를 지정하지 마십시오 .
--auto-include
포함 DIRS의 입력을 단순화하는 유용한 매개 변수입니다.이 매개 변수에는 src
의 모든 하위 디렉토리 가 포함됩니다.
Java
프로그램의 경우 Java 파일 경로 간의 매핑이 가져 오기 문에 명시 적으로 명시되어 있기 때문에 경로를 포함시킬 필요가 없습니다.
ENGENT 의 출력은 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)을 사용하여 설계 구조 행렬 (DSMS)을 생성하는 데 사용될 수 있습니다.
JSON/XML 형식의 세부 사항은 여기에서 찾을 수 있습니다.
다음 과 같은 주요 종속성 유형을 지원합니다.
import
, C/C ++ #include
, Ruby require
.지원되는 유형의 세부 사항은 여기를 참조하십시오
의존하는 데 기여하는 방법에는 여러 가지가 있습니다. 예를 들어:
의존성 분석을위한 우아한 커널을 구현 했으며, 이는 다양한 프로그래밍 언어를 수용하도록 확장 할 수 있습니다. 지금까지 Java, C/C ++, Ruby 및 Maven 만 지원합니다. 이 프레임 워크를 활용하여 자신의 종속성 추출기를 추가하십시오.
각 언어에 필요한 노력은 다양합니다. 우리는 Maven을 지원하기 위해 24 시간을 보냈지 만 Ruby에서 의존성을 추출하는 데 몇 주를 보냈습니다.
소스 파일을 구문 분석하는 것은 사소하지 않습니다. 고려해야 할 많은 언어 별 기능이 있습니다. 지원되지 않는 언어 기능을보고하거나 기존 문제를 해결하는 것이 더 나을 수 있습니다.
GUI 도구, 코드 시각화 도구 등과 같은 생산 또는 연구를 위해 오픈 소스 또는 상업용의 다양한 도구를 만들기 위해 빌딩 블록으로 사용될 수 있습니다 .
귀하의 회사 나 연구소가 프로젝트의 후원자가된다면 많은 도움이 될 것입니다. 기부금은 독립 적이고 지속 가능하며 더 많은 기여자를 지원하는 데 도움이 될 수 있습니다.
당신은 프로젝트에서 오픈 소스 또는 상업용 프로젝트뿐만 아니라 소프트웨어 엔지니어링 연구를 사용하는 것을 환영합니다. 귀하의 의견은 높이 평가됩니다. 우리가 단어를 전파하고 더 많은 사람들이 그것을 사용하도록 격려 할 수 있다면 우리는 또한 감사 할 것입니다.
이 프로젝트는 Jin Wuxia et al.이 제안한 Enre Framework (https://github.com/jinwuxia/enre)와 Yuanfang Cai 's Team의 건축 연구를 포함한 다른 연구자들의 훌륭한 작업을 기반으로합니다. 종속성 분석에 대한 https://www.cs.drexel.edu/~yfcai/).
ENGITE 의 언어 별 프론트 엔드는 Antlr/Antlr Grammar V4 (https://github.com/antlr), Eclipse CDT (www.eclipse.org/cdt) 및 Jruby (Jruby)를 포함한 여러 가지 우수한 오픈 소스 프로젝트에 구축됩니다. https://github.com/jruby/jruby).