Vérifiez notre démo en ligne .
Bixie est un outil d'analyse statique qui détecte les incohérences dans Java Bytecode. Une incohérence se produit lorsque le code doit lancer une exception ou est inaccessible en raison des hypothèses faites par d'autres déclarations.
if (operator == null) {
throw new SemanticException("Operator " + operator.getName());
}
Dans cet exemple de Hive, operator.getName() est incompatible avec l' operator == null .
Dans cet exemple de Cassandra:
public Boolean generate() {
return identityDistribution.next() % 1 == 0;
}
Il y a une incohérence dans le bytecode car l'expression identityDistribution.next() % 1 == 0 apparaît comme un choix conditionnel dans le bytecode, et un cas est inaccessible car identityDistribution.next() % 1 renvoie une valeur constante.
Bixie utilise Gradle pour construire:
git clone https://github.com/SRI-CSL/bixie.git
cd bixie
./gradlew shadowJar
Pour vérifier si tout fonctionne, exécutez Bixie sur lui-même:
cd build/libs/
java -jar bixie.jar -j ../classes/main/
Pour votre commodité, il y a un script Python (Runner / Runner.py) qui déterminera automatiquement les chemins de classe à utiliser et où les fichiers de classe sont générés, puis invoquer Bixie. Il fonctionne pour des projets construits avec Ant, Maven ou Gradle. Par exemple:
cd <path-to-project>
mvn clean
python <path-to-bixie>/runner/runner.py -- mvn compile
Cette commande exécutera le processus de construction Maven pour le projet et grattera sa sortie pour les instances où Javac a été appelé, puis alimentez ces informations à Bixie. Assurez-vous de nettoyer avant la construction, car l'outil ne peut détecter que des fichiers qui ont été réellement compilés pendant l'observation.
Bixie n'est pas solide. De nombreuses fonctionnalités Java, telles que la concurrence et la réflexion, ne sont pas gérées par Bixie et peuvent entraîner de fausses alarmes. Bixie détecte également parfois les incohérences dans le bytecode qui n'ont aucune incohérence correspondante dans le code source. Par exemple, les choix conditionnels avec des conjonctions dans la condition remontent parfois les fausses alarmes.