jokerconf Joker 2018 (19.10.2018)

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

img

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

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

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

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

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

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