Максим Казанцев — Fuzzing для тестирования JVM: зачем и как
Ближайшая конференция — Joker 2024, 9 октября (Online), 15–16 октября (Санкт-Петербург + трансляция). Подробности и билеты: — — . . . . Полезная идея фаззинга, которую нужно нести в массы. Макс занял первое место на JBreak, и его будет интересно послушать. Пользователи ждут от Java-машин в первую очередь корректной и стабильной работы. Наша компания занимается разработкой собственной VM и активно развивает оптимизирующий JIT-компилятор, основанный на LLVM. При этом каждая новая оптимизация несёт в себе опасность внесения новых функциональных багов, а также может привести к тому, что начнут проявлять себя древние проблемы, спрятанные в старом коде и до сих пор не дававшие о себе знать. Так как же обеспечить своевременный поиск таких багов в условиях, когда в наш компилятор еженедельно интегрируются десятки и сотни тысяч строк кода? Абсолютного ответа на этот вопрос не знает никто, но у нас есть успешный опыт использования Fuzzer — генератора случайных тестов, которые сконструированы таким образом, чтобы с хорошей вероятностью находить возможные проблемы в компиляторе. При этом мы получаем стабильный детерминированный способ воспроизводить проблемы на тесте, для которого у нас есть исходники. В этом докладе мы расскажем о том, как и почему используем генератор случайных Java-программ, об устройстве таких генераторов, а также о дальнейших шагах по генерации программ на Scala, Kotlin и других языках, компилируемых в Java-байткод.