온라인 데모를 확인하십시오.
Bixie는 Java Bytecode의 불일치를 감지하는 정적 분석 도구입니다. 코드가 예외를 던져야하거나 다른 진술에 의한 가정 때문에 불일치가 발생하거나 도달 할 수 없을 때 발생합니다.
if (operator == null) {
throw new SemanticException("Operator " + operator.getName());
}
Hive 의이 예에서는 operator.getName() 이 조건부 operator == null 과 일치하지 않습니다.
Cassandra 의이 예에서 :
public Boolean generate() {
return identityDistribution.next() % 1 == 0;
}
expression 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)가있어 사용할 클래스 경로와 클래스 파일이 생성되는 곳을 자동으로 결정한 다음 Bixie를 호출합니다. 개미, Maven 또는 Gradle로 제작 된 프로젝트에서 작동합니다. 예를 들어:
cd <path-to-project>
mvn clean
python <path-to-bixie>/runner/runner.py -- mvn compile
이 명령은 프로젝트의 Maven 빌드 프로세스를 실행하고 Javac이 호출 된 사례에 대한 출력을 긁어 내고 해당 정보를 Bixie에게 공급합니다. 도구는 관찰 중에 실제로 컴파일 된 파일 만 감지 할 수 있으므로 구축하기 전에 청소해야합니다.
Bixie는 소리가 아닙니다. 동시성 및 반사와 같은 많은 Java 기능은 Bixie에 의해 처리되지 않으며 잘못된 경보를 초래할 수 있습니다. Bixie는 때때로 소스 코드에서 해당 불일치가없는 바이트 코드의 불일치를 감지합니다. 예를 들어, 조건이 결합 된 조건부 선택은 때때로 잘못된 경보를 나타냅니다.