ตัวแบ่งโปรแกรมโปรแกรมสำหรับ 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 -cli/target/sdg-cli- {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 และตัวแบ่งส่วนที่ทำงานด้วย:
java -jar sdg-cli.jar -c Example.java#11:sum
คำอธิบายโดยละเอียดเพิ่มเติมเกี่ยวกับตัวเลือกที่มีอยู่สามารถดูได้ด้วย:
java -jar sdg-cli.jar --help
ตัวแยกของเราต้องการโปรแกรมอินพุต Java เพื่อรวบรวมได้ดังนั้นไลบรารีทั้งหมดจะต้องให้โดยใช้ค่าสถานะ -i สำหรับกรณีที่ไม่มีซอร์สโค้ดคุณอาจรวมไลบรารีที่จำเป็นใน Java ClassPath โดยใช้การโทรต่อไปนี้:
java -cp your-libraries.jar -jar sdg-cli.jar -c Example.java#11:sum
วิธีการนี้สร้างชิ้นคุณภาพต่ำกว่าเนื่องจากเนื้อหาของการโทรในห้องสมุดไม่เป็นที่รู้จัก
ตัวอย่างการใช้งานที่ดีของ sdg-core เพื่อรับชิ้นจากซอร์สโค้ดมีอยู่ที่ slicer.java#slice () โดยที่ขั้นตอนต่อไปนี้จะดำเนินการ:
CompilationUnit sSlicingCriterion ถูกสร้างขึ้นจากอาร์กิวเมนต์อินพุตและได้รับชิ้นCompilationUnit (แต่ละรายการแทนไฟล์)CompilationUnit จะถูกทิ้งลงในไฟล์ที่เกี่ยวข้อง หากกราฟเป็นที่สนใจสามารถส่งออกในรูปแบบ dot หรือ pdf ผ่าน SDGLog#generateImages() ดังที่เห็นได้ใน phpslice.java#124 (คลาสนี้นำเสนอส่วนหน้าสำหรับเว็บ Java Slicer ที่ยังไม่เผยแพร่)