Фаззинг компилятора Gleam: как случайные программы находят баги
Fuzzing the Gleam Compiler

Автор рассказывает, как с помощью структурированного фаззинга ищет баги в компиляторе Gleam. Он генерирует случайные программы, проверяет их на двух целевых платформах (Erlang и JavaScript) и сравнивает результаты. В статье описаны два подхода: фаззинг парсера с помощью libFuzzer и генерация типобезопасных программ с помощью «смита». В итоге удалось найти регрессию на nightly-версии компилятора, связанную с конвейерным оператором в const-выражении.
Один — точно больше, чем ноль.
- nwellnhof
> Мы можем сравнить вывод одной и той же программы для обеих целей и отметить любые различия.
Это называется дифференциальным фазингом и является одним из самых мощных методов поиска ошибок в любом программном обеспечении.
- goranmoomin
У меня есть предчувствие, что мы могли бы использовать маленькие LLM, чтобы выявлять части, которые могут быть хрупкими, и сочетать их с традиционным фазингом на основе генерации/мутаций для создания фаззинг-целей, которые с большей вероятностью вызовут крайний случай.
Я вообще не думал о применении LLM к фазингу, пока не увидел llvm-hackme[0], который делает как традиционный мутационный фазинг, так и целевые регрессионные тесты, генерируемые LLM, где LLM довольно эффективно понимает PR и нацеливается на крайние случаи! Это было впечатляюще, и я постоянно думаю о том, как мы можем объединить LLM, чтобы сделать фазинг более эффективным и действенным.
// Извините за очередной комментарий про LLM. Я очень люблю языки программирования и ужасно извиняюсь, что добавляю еще один контент, связанный с LLM (вместо более интересных вещей!)
- stephenlf
Отличная статья. Спасибо, что поделились. Мне нравится честный взгляд на фазинг на основе LLM. Это именно то, что я бы сделал с похожей проблемой.