Pull to refresh

Comments 9

Прошу прощения за глупый вопрос (к тем, кто понимает).
Ясно, что это перевод, но вот это:

Покрытие команды bar — это расширенный набор команды foo, поэтому ввод, содержащий foo, будет отброшен при минимизации корпуса. Есть уязвимость, недоступная через команду bar, которая может быть не обнаружена никогда.

я не понял от слова "совсем". Да, я не тестер, но по коду выглядит как из входного файла, перенаправляемого на консоль ввода (потому что getchar и вдуг EOF, а не fgetc) берется тестовая последовательность.

Ну и, если последовательность байтов такая "0,32,200" то что и почему это будет "отброшено"? Почему она не будет обнаружена никогда? Это проблема "Edge coverage"?
Если есть ссылка на "почитать", буду благодарен.

Насколько я понимаю, под минимизацией корпуса автор имеет в виду технику, когда программа тестирования сокращает количество входных данных, ориентируясь на сам код. Минимизация по определению направлена на сокращение чего-либо, поэтому программу не интересуют надмножества, расширенные наборы и т.п., она сделана так, чтобы обращать внимание на подмножества, затачивая подаваемые данные под них.

То есть руками вы, конечно, придумаете нужную комбинацию, а вот автоматы эту штуку упустят из-за оптимизаций. Как у Кнута: «Преждевременная оптимизация — корень всех зол». Думаю, «никогда» — это преувеличение, чтобы обратить внимание на проблему. Иначе бы автор сам ничего не нашёл.

Правильная минимизация не просто уменьшает количество различных наборов данных, а минимизирует количество, необходимое для (полного) покрытия.

Ну это я понимаю. Я не вижу здесь почему подмножество "bar" является расширенным для "foo". Мне, как программисту и не тестеру видится как раз наоборот. Потому и вопрос - или я что-то не понимаю, или что-то не так с методом отбора тестирующих последовательностей.

Ваше мнение?

Как я это понимаю. Пусть функцияf1определена какf1(int8 x) = f2(x), а функцияf2f2(int16 x) -> bool. Тогда, в тестах, включающихf1,f2будет тестироваться только с парамерамиint8, не смотря на то, что одно из значений int16 может привести к багу.

Хорошо, так логично. Но, в том примере можно использовать (по аналогии с вашим примером) и непосредственно f2 без f1.

Это был очень упрощенный пример. В жизниf1может быть некой оберткой, выполняющей дополнительные проверки.

Например,f1может проверять, чтохявляется сущностью классаenemy(которых не более 100 на сцену), аf2— может "убивать" переданный объект по индексу. Тогда при вызовеf2на объекте 9999 может происходить запись за пределы массива объектов.

Да я не про ваш пример. С ним все понятно. Я про пример в тексте, о котором мой первый комент.

Алё, PVS-Studio, вы файрфокс проверяли? Это переполнение находили? Если нет, то почему?

Sign up to leave a comment.