ตรวจสอบ การสาธิตออนไลน์ ของเรา
Bixie เป็นเครื่องมือวิเคราะห์แบบคงที่ที่ตรวจพบความไม่สอดคล้องกันในจาวาไบต์ ความไม่สอดคล้องกันเกิดขึ้นเมื่อรหัสต้องโยนข้อยกเว้นหรือไม่สามารถเข้าถึงได้เพราะเนื่องจากสมมติฐานของข้อความอื่น ๆ
if (operator == null) {
throw new SemanticException("Operator " + operator.getName());
}
ในตัวอย่างนี้จาก Hive, operator.getName() ไม่สอดคล้องกับ operator == null
ในตัวอย่างนี้จากคาสซานดรา:
public Boolean generate() {
return identityDistribution.next() % 1 == 0;
}
มีความไม่สอดคล้องกันใน bytecode เนื่องจากนิพจน์ identityDistribution.next() % 1 == 0 ปรากฏเป็นตัวเลือกตามเงื่อนไขใน bytecode และกรณีหนึ่งไม่สามารถเข้าถึงได้เนื่องจาก identityDistribution.next() % 1 ส่งคืนค่าคงที่
Bixie ใช้ Gradle เพื่อสร้าง:
git clone https://github.com/SRI-CSL/bixie.git
cd bixie
./gradlew shadowJar
หากต้องการตรวจสอบว่าทุกอย่างใช้งานได้หรือไม่ให้เรียกใช้ Bixie ด้วยตัวเอง:
cd build/libs/
java -jar bixie.jar -j ../classes/main/
เพื่อความสะดวกของคุณมีสคริปต์ Python (runner/runner.py) ที่จะกำหนดว่าจะใช้ classpaths ใดและไฟล์คลาสถูกสร้างขึ้นโดยอัตโนมัติแล้วเรียกใช้ Bixie มันใช้งานได้สำหรับโครงการที่สร้างด้วย Ant, Maven หรือ Gradle ตัวอย่างเช่น:
cd <path-to-project>
mvn clean
python <path-to-bixie>/runner/runner.py -- mvn compile
คำสั่งนี้จะดำเนินการกระบวนการสร้าง Maven สำหรับโครงการและขูดเอาต์พุตสำหรับอินสแตนซ์ที่เรียกว่า Javac จากนั้นป้อนข้อมูลนั้นไปยัง Bixie ตรวจสอบให้แน่ใจว่าได้ทำความสะอาดก่อนที่จะสร้างเนื่องจากเครื่องมือสามารถตรวจจับไฟล์ที่รวบรวมได้จริงในขณะที่มันกำลังสังเกต
Bixie ไม่ใช่เสียง คุณสมบัติ Java หลายอย่างเช่นการเกิดขึ้นพร้อมกันและการสะท้อนกลับไม่ได้รับการจัดการโดย Bixie และอาจส่งผลให้เกิดการเตือนที่ผิดพลาด Bixie บางครั้งก็ตรวจพบความไม่สอดคล้องกันใน bytecode ที่ไม่มีความไม่สอดคล้องกันที่สอดคล้องกันในซอร์สโค้ด ตัวอย่างเช่นตัวเลือกแบบมีเงื่อนไขที่มีการเชื่อมในบางครั้งเงื่อนไขทำให้เกิดการเตือนที่ผิดพลาด