Im Labor für angewandte Programmanalyse versuchen wir, neue Methoden für die Programmanalyse zu finden und bestehende Methoden an die Probleme anzupassen, denen Entwickler*innen bei ihrer täglichen Arbeit begegnen.
Ein Teil unserer Forschung konzentriert sich auf die internen Bedürfnisse von JetBrains, während andere Projekte auf allgemeinere Fälle abzielen. Wir beschäftigen uns auch gerne mit anderen Aufgaben wie dem Design und der Implementierung neuer Funktionen für die Programmiersprache Kotlin.
In diesem Projekt erforschen wir die Anwendungen von Fuzzy-Tests für den Kotlin-Compiler. Bei unseren früheren Untersuchungen fanden wireine Reihe von Fehlern im Compiler. Wir arbeiten derzeit daran, den Fuzzing-Prozess auf noch mehr Compiler-Komponenten auszuweiten und in die Qualitätssicherung-Pipeline des Compilers einzubinden.
Kex ist unsere Java-Bytecode-Analyseplattform, die das Laden von Java-Bytecode, den Aufbau eines Zwischenmodells und dessen Analyse mittels SMT-Solvern unterstützt. Im Moment konzentriert sich Kex auf die Testgenerierung, aber wir überlegen auch, es für andere Zwecke wie die Reproduktion von Abstürzen, Programmanalyse und -reparatur einzusetzen.
In diesem Projekt versuchen wir zu verstehen, ob Selbstkonsistenz ein gutes Maß für die Qualität von LLM-generiertem Code ist. Ein LLM erzeugt ein selbstkonsistentes Ergebnis, wenn es bei gleicher Anweisung Lösungen erzeugt, die einer bestimmten Definition von Konsistenz entsprechen. In diesem Projekt verwenden wir differenzielle Tests, um die Konsistenz zu messen: alle generierten Lösungen sollten sich bei einer gegebenen oder generierten Testsuite gleich verhalten. Um Tests zu generieren, wenden wir Kex im Testgenerierungsmodus an.
LLMs können gut zwischen verschiedenen Sprachen konvertieren. Wir möchten verstehen, ob dies für die Konvertierung von Gradle-Build-Konfigurationen von .gradle
in .gradle.kts
zutrifft. Dies gilt vor allem für die Konvertierung von der älteren Groovy-API zur neueren Kotlin-API. Dazu vergleichen wir die abstrakten Konfigurationen vor und nach dem Build, die mit den IntelliJ-Plattform-Tools aus Gradle extrahiert wurden.