Fuzzing для тестирования JVM: зачем и как

День 2 /  / Зал 3  /  RU /

Комментарий Программного комитета:

Полезная идея фаззинга, которую нужно нести в массы. Макс занял первое место на JBreak, и его будет интересно послушать.

Пользователи ждут от Java-машин в первую очередь корректной и стабильной работы. Наша компания занимается разработкой собственной VM и активно развивает оптимизирующий JIT-компилятор, основанный на LLVM. При этом каждая новая оптимизация несёт в себе опасность внесения новых функциональных багов, а также может привести к тому, что начнут проявлять себя древние проблемы, спрятанные в старом коде и до сих пор не дававшие о себе знать.

Так как же обеспечить своевременный поиск таких багов в условиях, когда в наш компилятор еженедельно интегрируются десятки и сотни тысяч строк кода? Абсолютного ответа на этот вопрос не знает никто, но у нас есть успешный опыт использования Fuzzer — генератора случайных тестов, которые сконструированы таким образом, чтобы с хорошей вероятностью находить возможные проблемы в компиляторе. При этом мы получаем стабильный детерминированный способ воспроизводить проблемы на тесте, для которого у нас есть исходники.

В этом докладе мы расскажем о том, как и почему используем генератор случайных Java-программ, об устройстве таких генераторов, а также о дальнейших шагах по генерации программ на Scala, Kotlin и других языках, компилируемых в Java-байткод.


Максим Казанцев
Максим Казанцев
Azul Systems

Инженер компиляторов в Azul Systems. Последние 5 лет занимается оптимизирующими JIT-компиляторами для виртуальных машин. С 2017 года работает над Zing VM, активно коммитит в LLVM. До этого работал над виртуальными машинами ART и Dalvik в компании Intel, внёс свой вклад в Android Open Source Project.

Прошлые выступления спикера