Labor für angewandte Programmanalyse

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.

Projekte

Kotlin Compiler Fuzzing

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.

Java Bytecode Analysis

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.

LLM-Code-Validierung durch differenzielle Tests: Konsistenz über alles

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.

Gradle zu Gradle KTS über LLMs konvertieren: Funktioniert das überhaupt?

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.

Gruppenmitglieder

Marat Akhin
Leiter Forschungslabor
Azat Abdullin
Senior Researcher
Niyaz Nigmatullin
Forscher
Sergei Kharitontcev-Beglov
Junior Researcher
Rustam Sadykov
Junior Researcher
Kristina Trofimova
Junior Researcher

Ehemalige Mitglieder

Mikhail Belyaev
Vladimir Itsykson
Valentin Sobol
Daniil Stepanov