تحقق من العرض التوضيحي عبر الإنترنت .
Bixie هي أداة تحليل ثابتة تكتشف التناقضات في Java Bytecode. يحدث عدم الاتساق عندما يجب أن يرمي الشفرة استثناء أو لا يمكن الوصول إليه لأنه بسبب الافتراضات التي تدل عليها بيانات أخرى.
if (operator == null) {
throw new SemanticException("Operator " + operator.getName());
}
في هذا المثال من Hive ، operator == null operator.getName()
في هذا المثال من كاساندرا:
public Boolean generate() {
return identityDistribution.next() % 1 == 0;
}
هناك عدم تناسق في رمز bytecode لأن identityDistribution.next() % 1 == 0 التعبير 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 الذي لا يوجد به تناقض مماثل في الكود المصدري. على سبيل المثال ، تثير الخيارات الشرطية مع التواصل في الحالة أحيانًا إنذارات خاطئة.