Написать фаззинг-тест для простого проекта (https://github.com/TimurNurp/12.7_fcCheckString/blob/main/12.7_module.cpp). Добиться максимального покрытия проекта фаззинг-тестом.
В исходном проекте множество ошибок. Основные недочеты - это отсутствие проверки корректности данных. По этой причине исходный проект много раз падал, иногда уходил в бесконечный цикл (если K = 1). Для построения отчета покрытия добаваил в исходный проект заглушок для избежания бесконечного цикла и падения программы.
Фаззинг тестирование проводится на случайных данных. Была попытка создать заранее некоторый корпус, на основе которого проводить фаззинг-тестирование. Если я все правильно понял, то фаззер должен постепенно мутировать данный корпус. К сожалению, на 10.000 итераций фаззер не подбирает значения, чтобы начать вызывать функции. При увеличении количества иттераций, фаззер начинает находить нужные данные, чтобы зайти в новые ветки программы, но к этому моменту заканчивается оперативная память :(
Пример генерации корпуса находится в файле gen_corpus.cpp
При тестировании на случайных входных данных, хватает около 6.000 - 10.000 итераций, чтобы покрыть большинство строк кода.
Цикл while
внутри функции computeLPS(string pat, int *lps)
не покрыт по той причине, что длина строки pat
всегда будет равна 1.
File | Lines | Functions | Branches | |||
---|---|---|---|---|---|---|
12.7_module.cpp | 81.4% | 57 / 70 | 100.0% | 4 / 4 | 61.7% | 37 / 60 |
fuzz_test_my.cpp | 100.0% | 8 / 8 | 100.0% | 1 / 1 | 50.0% | 7 / 14 |
Компиляция:
clang++ -g --coverage -fsanitize=fuzzer -o fuzz_test_my 12.7_module.cpp fuzz_test_my.cpp
Фаззинг тестирование запускалось при помощи команды:
./fuzz_test_my -runs=6000 -rss_limit_mb=9000
Генерация отчета производилась при помощи gcovr
:
gcovr -r . -e ./ --html --html-details -o coverage/index.html --gcov-executable "llvm-cov gcov"
Отчет лежит по пути coverage/index.html
- При K = 1 программа уходит в бесконечнйы цикл.
- Множество утечек памяти.
- Цикл внутри функции
computeLPS(string pat, int *lps)
никогда не вызывается - Нет проверки на ошибку выделения памяти на куче.