Slicer program untuk Java, berdasarkan grafik ketergantungan sistem (SDG). Program Slicing adalah teknik analisis perangkat lunak untuk mengekstraksi subset pernyataan yang relevan dengan nilai variabel dalam pernyataan tertentu ( kriteria pengiris ). Subset pernyataan disebut irisan , dan dapat digunakan untuk debugging, paralelisasi, deteksi klon, dll. Repositori ini berisi dua modul:
sdg-core , perpustakaan yang memperoleh irisan dari kode sumber Java melalui SDG, struktur data yang mewakili pernyataan sebagai node dan ketergantungannya sebagai busur.sdg-cli , klien baris perintah untuk sdg-core , yang mengambil input program Java dan kriteria pengiris, dan mengeluarkan irisan yang sesuai. PERINGATAN: Semua panggilan metode harus diselesaikan ke deklarasi metode. Jika program Java Anda memerlukan perpustakaan tambahan, kode sumbernya harus tersedia dan dimasukkan dalam analisis dengan opsi -i . Panggilan metode apa pun yang tidak dapat diselesaikan akan menghasilkan kesalahan runtime.
Javasdgslicer mengelola dependensinya melalui Maven, jadi Anda harus memiliki JDK (≥11) dan Maven terpasang, lalu jalankan
mvn package -Dmaven.test.skip
Sebuah toples gemuk yang berisi semua dependensi proyek dapat ditempatkan di ./sdg-cli/target/sdg-cli-{version}-jar-with-dependencies.jar {version}-jar-with-dependencies.jar.
Kriteria pengiris dapat ditentukan dengan flag -c {file}#{line}:{var} , di mana file, baris dan variabel dapat ditentukan. Jika variabel muncul beberapa kali di baris yang diberikan, semuanya akan dipilih.
Jika kami ingin mengiris program berikut sehubungan dengan sum variabel dalam baris 11,
public class Example {
public static void main(String[] args) {
int sum = 0;
int prod = 0;
int i;
int n = 10;
for (i = 0; i < 10; i++) {
sum += 1;
prod += n;
}
System.out.println(sum);
System.out.println(prod);
}
}
Program ini dapat disimpan ke Example.java , dan slicer berjalan dengan:
java -jar sdg-cli.jar -c Example.java#11:sum
Deskripsi yang lebih rinci tentang opsi yang tersedia dapat dilihat dengan:
java -jar sdg-cli.jar --help
Slicer kami membutuhkan program Java input untuk dapat dikompilasi, sehingga semua perpustakaan harus disediakan menggunakan bendera -i . Untuk kasus di mana kode sumber tidak tersedia, Anda dapat memasukkan pustaka yang diperlukan di Java Classpath dengan menggunakan panggilan berikut:
java -cp your-libraries.jar -jar sdg-cli.jar -c Example.java#11:sum
Pendekatan ini menghasilkan irisan kualitas yang lebih rendah, karena konten panggilan perpustakaan tidak diketahui.
Contoh penggunaan yang baik dari sdg-core untuk mendapatkan irisan dari kode sumber tersedia di slicer.java#slice (), di mana langkah-langkah berikut dilakukan:
CompilationUnit .SlicingCriterion dibuat, dari argumen input, dan irisan diperoleh.CompilationUnit (masing -masing mewakili file).CompilationUnit yang dibuang ke file yang sesuai. Jika grafik menarik, dapat dikeluarkan dalam format dot atau PDF melalui SDGLog#generateImages() , seperti yang dapat dilihat di phpslice.java#124 (kelas ini menyajikan frontend untuk pengirim java web yang belum dirilis).