Periksa demo online kami.
Bixie adalah alat analisis statis yang mendeteksi ketidakkonsistenan dalam java bytecode. Ketidakkonsistenan terjadi ketika kode harus melempar pengecualian atau tidak dapat dijangkau karena karena asumsi yang dibuat oleh pernyataan lain.
if (operator == null) {
throw new SemanticException("Operator " + operator.getName());
}
Dalam contoh ini dari hive, operator.getName() tidak konsisten dengan operator == null .
Dalam contoh ini dari Cassandra:
public Boolean generate() {
return identityDistribution.next() % 1 == 0;
}
Ada ketidakkonsistenan dalam bytecode karena ekspresi identityDistribution.next() % 1 == 0 muncul sebagai pilihan bersyarat dalam bytecode, dan satu kasus tidak dapat dijangkau karena identityDistribution.next() % 1 mengembalikan nilai konstan.
Bixie menggunakan Gradle untuk membangun:
git clone https://github.com/SRI-CSL/bixie.git
cd bixie
./gradlew shadowJar
Untuk memeriksa apakah semuanya berfungsi, jalankan Bixie dengan sendirinya:
cd build/libs/
java -jar bixie.jar -j ../classes/main/
Untuk kenyamanan Anda, ada skrip Python (runner/runner.py) yang secara otomatis akan menentukan classPaths apa yang akan digunakan dan di mana file kelas dihasilkan, dan kemudian memohon Bixie. Ini bekerja untuk proyek yang dibangun dengan semut, maven, atau lulusan. Misalnya:
cd <path-to-project>
mvn clean
python <path-to-bixie>/runner/runner.py -- mvn compile
Perintah ini akan menjalankan proses pembuatan Maven untuk proyek dan mengikis outputnya untuk contoh di mana Javac dipanggil, kemudian memberi informasi itu kepada Bixie. Pastikan untuk membersihkan sebelum membangun, karena alat ini hanya dapat mendeteksi file yang sebenarnya dikompilasi saat mengamati.
Bixie bukan suara. Banyak fitur Java, seperti konkurensi dan refleksi, tidak ditangani oleh Bixie dan dapat mengakibatkan alarm palsu. Bixie juga kadang -kadang mendeteksi ketidakkonsistenan dalam bytecode yang tidak memiliki ketidakkonsistenan yang sesuai dalam kode sumber. Misalnya, pilihan bersyarat dengan konjungsi dalam kondisi terkadang menaikkan alarm palsu.