Описание доклада на сайте конференции Joker 2023
Этот проект используется в материалах самой презентации. В папке src лежат исходные коды, сама презентация, написанная с использованием Code Surfer находится в папке presentation.
В репозитории подготовлены конфигурации для запуска в IntellijIDEA Community:
- TimSort запускает фаззер для тестирования метода
TimSort#timsort
взятого из проекта sorting-algorithms. - Rotate запускает фаззер для метода
com.google.common.primitives.Ints#rotate(int[], int, int, int)
из проекта guava. Фаззер запускается с использованием lib/guava-32.1.1-jre.jar в качестве classpath. - Parse Step 1, Parse Step 2, Parse Step 3, Parse запускает фаззер для метода
com.alibaba.fastjson2.JSON#parse(java.lang.String)
из проекта fastjson2 с использованием lib/fastjson2-2.0.38.jar в качестве classpath.
Все файлы репортов сохраняются в корне проекта.
Запустите команду для сборки jar-файлов для запуска.
gradle jar
После этого в папке lib/builds
можно будет найти следующие файлы:
fuzzer-timsort.jar
для запуска примера сTimSort#timSort
.fuzzer-rotate.jar
для запуска примера сInts#rotate
.fuzzer-parse-step1.jar
для запуска примера сJSON#parse
со случайной генерацией строк.fuzzer-parse-step2.jar
для запуска примера сJSON#parse
с использованием мутаций над строками, которые не приводят к ошибкам.fuzzer-parse-step3.jar
для запуска примера сJSON#parse
с использованием мутаций и инструментацией кода.fuzzer-parse.jar
для запуска примера сJSON#parse
с использованием мутаций и инструментацией кода, а также заранее подготовленной захардкоженной строке в формате json.
Для запуска из консоли нужно выполнить команду в таком виде:
java -jar build/libs/fuzzer-parse-step3.jar -c com.alibaba.fastjson2.JSON -m parse(java.lang.String) -cp lib/fastjson2-2.0.38.jar
Где -c
тестируемый класс, -m
целевой тестируемый метод -cp
classpath, содержащий тестируемый класс.
Для просмотра презентации из директории presentation выполните следующие команды:
npm install
npm start
После чего презентация откроется в браузере по адресу localhost:8000. Управление презентацией описано на странице проекта mdx-deck#keyboard-shortcuts.