Comments 9
Прошу прощения за глупый вопрос (к тем, кто понимает).
Ясно, что это перевод, но вот это:
Покрытие команды bar — это расширенный набор команды foo, поэтому ввод, содержащий foo, будет отброшен при минимизации корпуса. Есть уязвимость, недоступная через команду bar, которая может быть не обнаружена никогда.
я не понял от слова "совсем". Да, я не тестер, но по коду выглядит как из входного файла, перенаправляемого на консоль ввода (потому что getchar и вдуг EOF, а не fgetc) берется тестовая последовательность.
Ну и, если последовательность байтов такая "0,32,200" то что и почему это будет "отброшено"? Почему она не будет обнаружена никогда? Это проблема "Edge coverage"?
Если есть ссылка на "почитать", буду благодарен.
Насколько я понимаю, под минимизацией корпуса автор имеет в виду технику, когда программа тестирования сокращает количество входных данных, ориентируясь на сам код. Минимизация по определению направлена на сокращение чего-либо, поэтому программу не интересуют надмножества, расширенные наборы и т.п., она сделана так, чтобы обращать внимание на подмножества, затачивая подаваемые данные под них.
То есть руками вы, конечно, придумаете нужную комбинацию, а вот автоматы эту штуку упустят из-за оптимизаций. Как у Кнута: «Преждевременная оптимизация — корень всех зол». Думаю, «никогда» — это преувеличение, чтобы обратить внимание на проблему. Иначе бы автор сам ничего не нашёл.
Правильная минимизация не просто уменьшает количество различных наборов данных, а минимизирует количество, необходимое для (полного) покрытия.
Ну это я понимаю. Я не вижу здесь почему подмножество "bar" является расширенным для "foo". Мне, как программисту и не тестеру видится как раз наоборот. Потому и вопрос - или я что-то не понимаю, или что-то не так с методом отбора тестирующих последовательностей.
Ваше мнение?
Как я это понимаю. Пусть функцияf1
определена какf1(int8 x) = f2(x)
, а функцияf2
— f2(int16 x) -> bool
. Тогда, в тестах, включающихf1
,f2
будет тестироваться только с парамерамиint8
, не смотря на то, что одно из значений int16
может привести к багу.
Хорошо, так логично. Но, в том примере можно использовать (по аналогии с вашим примером) и непосредственно f2 без f1.
Это был очень упрощенный пример. В жизниf1
может быть некой оберткой, выполняющей дополнительные проверки.
Например,f1
может проверять, чтох
является сущностью классаenemy
(которых не более 100 на сцену), аf2
— может "убивать" переданный объект по индексу. Тогда при вызовеf2
на объекте 9999 может происходить запись за пределы массива объектов.
Алё, PVS-Studio, вы файрфокс проверяли? Это переполнение находили? Если нет, то почему?
Как Mozilla упустила (не)очевидную уязвимость