Tergantung adalah alat ekstraksi ketergantungan kode sumber, yang dirancang untuk menyimpulkan hubungan sintaksis di antara entitas kode sumber, seperti file dan metode, dari berbagai bahasa pemrograman. Tujuan kami adalah untuk menyediakan kerangka kerja yang mudah diperluas untuk mendukung ekstraksi ketergantungan dari berbagai bahasa pemrograman dan file konfigurasi, sehingga alat analisis tingkat tinggi lainnya dapat dibangun di atasnya, dengan cara yang tidak tergantung pada bahasa. Aplikasi sampel termasuk visualisasi kode, pemahaman program, deteksi bau kode, analisis arsitektur, refactoring desain, dll.
Penciptaan kami tergantung dimotivasi oleh pengamatan bahwa vendor yang berbeda, seperti memahami ™, struktur 101 ™, dan Lattix ™, menciptakan alat ekstraksi ketergantungan mereka sendiri yang dikemas dengan fungsi analisis mereka yang lain. Untuk melakukan analisis baru, vendor dan peneliti masing -masing harus membuat alat ekstraksi ketergantungan mereka sendiri, atau menggunakan output alat lain, yang biasanya tidak dirancang untuk dapat digunakan kembali.
Kami percaya bahwa analisis ketergantungan kode sumber perangkat lunak adalah salah satu dasar terpenting dari rekayasa perangkat lunak. Mengingat semakin banyak sistem yang dibangun di atas bahasa baru dan multi-bahasa, kebutuhan kerangka ekstraksi ketergantungan multi-bahasa yang fleksibel dan dapat diperluas, dengan antarmuka yang sederhana dan terpadu diakui secara luas.
Tergantung adalah open source dan gratis, untuk mempromosikan kolaborasi masyarakat, untuk menghindari pekerjaan berulang, dan untuk meningkatkan kualitas alat analitik.
Anda dapat mengunduh versi terbaru dari tergantung dari https://github.com/multilat-depends/depends/releases/,
dan kemudian unzip file depends-*version*.tgz
di direktori komputer Anda.
Tergantung ditulis dalam Java, sehingga dapat dijalankan pada OS apa pun dengan lingkungan JRE atau JDK (seperti Windows, Linux atau Mac OS).
Mengikuti prinsip tanggung jawab tunggal, tergantung dirancang untuk tujuan mengekstraksi dependensi saja. Ini hanya menyediakan antarmuka CLI, tanpa GUI. Tetapi Anda dapat mengonversi output tergantung ke GUI alat lain, seperti graphviz (http://graphviz.org/), plantuml (http://plantuml.com/), dan dv8 (https: // www. archdia.com).
Anda dapat berjalan tergantung dengan cara -cara berikut: depends.sh
pada linux/mac, depends.bat
pada microsoft windows, atau java -jar depends.jar
.
CATATAN: Jika Anda menemukan kesalahan memori seperti GC overhead limt exceed
, harap perluas memori JVM seperti mengikuti java -Xmx4g -jar depends.jar <args>
.
Penggunaan alat CLI dapat dicantumkan oleh depends --help
, seperti berikut:
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(.)
Untuk menjalankan tergantung , Anda perlu menentukan 3 parameter terpenting: lang
, src
, output
, seperti yang dijelaskan di atas.
Harap dicatat bahwa untuk sebagian besar bahasa pemrograman, seperti C/C++, Ruby, Maven/Gradle
, --includes
jalur penting untuk tergantung untuk menemukan file yang tepat saat melakukan analisis ketergantungan kode, mirip dengan Makefile/IDE. Jika tidak, dependensi yang diekstraksi mungkin tidak akurat.
Jangan tentukan termasuk jalur di luar direktori SRC (level sistem misalnya termasuk jalur, atau dependensi eksternal) karena tergantung tidak akan memprosesnya.
--auto-include
adalah parameter yang berguna untuk menyederhanakan input incluble dirs: dengan parameter ini, tergantung akan mencakup semua sub-direktori src
.
Untuk program Java
, Anda tidak diharuskan untuk menentukan jalur termasuk, karena pemetaan antara jalur file Java secara eksplisit dinyatakan dalam pernyataan impor.
Output dari tergantung dapat diekspor ke 5 format: json, xml, excel, dot, dan plantuml. Karena batasan MS Excel, Anda hanya dapat mengekspor ke file Excel jika jumlah elemen kurang dari 256.)
File dot dapat digunakan untuk menghasilkan grafik menggunakan graphviz (http://graphviz.org/).
File Plantuml dapat digunakan untuk menghasilkan diagram UML menggunakan Plantuml (http://plantuml.com/).
File JSON dan XML dapat digunakan untuk menghasilkan matriks struktur desain (DSM) menggunakan DV8 (https://www.archdia.net).
Detail format JSON/XML dapat ditemukan di sini.
Tergantung mendukung jenis ketergantungan utama, termasuk:
import
Java, C/C ++ #include
, Ruby require
.Untuk detail jenis yang didukung, silakan merujuk di sini
Ada banyak cara untuk berkontribusi tergantung . Misalnya:
Tergantung mengimplementasikan kernel anggun untuk analisis ketergantungan, yang dapat diperluas untuk mengakomodasi berbagai bahasa pemrograman. Sejauh ini, itu hanya mendukung Java, C/C ++, Ruby, dan Maven. Silakan memanfaatkan kerangka kerja ini untuk menambahkan ekstraktor ketergantungan Anda sendiri.
Upaya yang dibutuhkan untuk setiap bahasa sangat bervariasi. Kami menghabiskan 24 jam untuk mendukung Maven, tetapi menghabiskan berminggu -minggu untuk mengekstrak dependensi dari Ruby
File sumber parsing tidak sepele. Ada banyak fitur khusus bahasa yang perlu dipertimbangkan. Melaporkan fitur bahasa yang tidak didukung atau memperbaiki masalah yang ada akan membuat lebih baik.
Anda dapat menggunakan tergantung sebagai blok bangunan untuk membuat berbagai alat, baik open source atau komersial, untuk produksi atau penelitian, seperti alat GUI, alat visualisasi kode, dll.
Ini akan membantu kami jika perusahaan atau institut Anda menjadi sponsor proyek kami. Donasi Anda dapat membantu tergantung untuk menjadi mandiri, berkelanjutan, dan mendukung lebih banyak kontributor.
Anda dipersilakan untuk menggunakan "tergantung" dalam proyek Anda, baik open source atau komersial, serta penelitian rekayasa perangkat lunak. Umpan balik Anda sangat dihargai. Kami juga akan berterima kasih jika Anda dapat membantu kami menyebarkan kata -kata dan mendorong lebih banyak orang untuk menggunakannya.
Proyek ini dibangun di atas karya peneliti lain yang sangat baik, termasuk kerangka kerja ENRE (https://github.com/jinwuxia/enre) yang diusulkan oleh Jin Wuxia et al., Dan penelitian arsitektur dari tim Prof. Yuanfang Cai ( https://www.cs.drexel.edu/~yfcai/) tentang analisis ketergantungan.
Front-end spesifik bahasa tergantung dibangun di atas beberapa proyek open source yang sangat baik, termasuk Antlr/Antlr Grammar V4 (https://github.com/antlr), Eclipse CDT (www.eclipse.org/cdt), dan jruby ( https://github.com/jruby/jruby).