شريحة برنامج لـ Java ، استنادًا إلى الرسم البياني للاعتماد على النظام (SDG). تقطيع البرنامج هو تقنية تحليل البرمجيات لاستخراج مجموعة فرعية من العبارات ذات الصلة بقيمة المتغير في بيان معين ( معيار التقطيع ). تسمى المجموعة الفرعية من العبارات شريحة ، ويمكن استخدامها لتصحيح الأخطاء ، والموازاة ، والكشف عن الاستنساخ ، وما إلى ذلك. يحتوي هذا المستودع على وحدتين:
sdg-core ، وهي مكتبة تحصل على شرائح من رمز مصدر Java عبر SDG ، وهيكل بيانات يمثل عبارات مثل العقد وتبعياتها كقوس.sdg-cli ، عميل سطر الأوامر لـ sdg-core ، والذي يأخذ كبرنامج Java للإدخال ومعيار التقطيع ، ويخرج الشريحة المقابلة. تحذير: يجب حل جميع مكالمات الطريقة إلى إعلان الطريقة. إذا كان برنامج Java الخاص بك يتطلب مكتبات إضافية ، فيجب أن يكون رمز المصدر متاحًا وإدراجها في التحليل باستخدام خيار -i . أي استدعاء طريقة لا يمكن حلها ستؤدي إلى خطأ في وقت التشغيل.
Javasdgslicer تدير تبعياتها من خلال Maven ، لذلك تحتاج إلى تثبيت JDK (≥11) و Maven ، ثم قم بتشغيل
mvn package -Dmaven.test.skip
يمكن بعد ذلك وضع جرة سمينة تحتوي على جميع تبعيات المشروع على ./sdg-cli/target/sdg-cli-{version}-jar-with-dependencies.jar {version )-jar-with-dependencies.jar.
يمكن تحديد معيار التقطيع باستخدام Flag -c {file}#{line}:{var} ، حيث يمكن تحديد الملف والخط والمتغير. إذا ظهر المتغير عدة مرات في السطر المحدد ، فسيتم اختيارها جميعًا.
إذا كنا نرغب في تقطيع البرنامج التالي فيما يتعلق sum متغير في السطر 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);
}
}
يمكن حفظ البرنامج إلى Example.java ، وتشغيل Slicer مع:
java -jar sdg-cli.jar -c Example.java#11:sum
يمكن رؤية وصف أكثر تفصيلاً للخيارات المتاحة مع:
java -jar sdg-cli.jar --help
يتطلب Slicer لدينا أن يكون برنامج Java الإدخال قابلاً للتجميع ، لذلك يجب توفير جميع المكتبات باستخدام علامة -i . بالنسبة للحالات التي لا يتوفر فيها الرمز المصدر ، يمكنك تضمين المكتبات المطلوبة في Java ClassPath باستخدام المكالمة التالية:
java -cp your-libraries.jar -jar sdg-cli.jar -c Example.java#11:sum
ينتج هذا النهج شرائح جودة أقل ، حيث أن محتويات مكالمات المكتبة غير معروفة.
يتوفر مثال جيد الاستخدام لـ sdg-core للحصول على شريحة من رمز المصدر على slicer.java#slice () ، حيث يتم تنفيذ الخطوات التالية:
CompilationUnit s.SlicingCriterion ، من وسيطات الإدخال ، ويتم الحصول على الشريحة.CompilationUnit (كل تمثل ملف).CompilationUnit في ملفها المقابل. إذا كان الرسم البياني ذا أهمية ، فيمكن إخراجه بتنسيق dot أو PDF عبر SDGLog#generateImages() ، كما يمكن رؤيته في phpslice.java#124 (يقدم هذا الفئة واجهة للاختران Java Slicer غير المصدر).