testing

8 posts

Символическое исполнение нашло целочисленное переполнение, которое пропустило моё покрытие тестами в 94%

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

У вашего набора тестов 94% покрытия и ноль падений. Движок символического исполнения находит краш в вашем коде менее чем за три секунды. Тесты не сломаны.…

Metamorphic testing нашёл 147 багов в компиляторах и дефект в системе самоуправляемого автомобиля. Вот как это работает.

Metamorphic testing выявил реальные баги в GCC, LLVM, компиляторах шейдеров Vulkan и симуляторах ADAS. В этом посте объясняется техника с рабочим кодом и показано, куда она вписывается в ваш набор тестов.

Metamorphic testing обнаружил 147 подтверждённых багов в GCC и LLVM, дефекты в коммерческих симуляторах ADAS, используемых автомобильными OEM, и критический…

Большинство metamorphic relations бесполезны. Вот как выбрать хорошие.

Не все metamorphic relations ловят баги. Слабые соотношения дают ложную уверенность, а сильные находят реальные дефекты. Вот как отличить их и построить набор соотношений, который реально работает.

Вы написали двенадцать metamorphic relations для вашего pricing engine. Каждый тест проходит. Вы довольны своим покрытием. Затем клиент сообщает, что bulk…

Как тестировать код, когда я не знаю правильного ответа?

Metamorphic testing позволяет проверять корректность кода, не зная точного ожидаемого вывода. Вот как это работает, когда чего-то не хватает, и как начать использовать.

Вы выкатываете модель машинного обучения, которая маркирует тикеты поддержки. Ваш test suite зелёный. Каждый тест пройден. Ни один из этих тестов на самом деле…

Я перестал копировать код в документацию, храня тесты, код и прозу в одном Markdown-файле

Literate programming поддерживает синхронизацию документации, тестов и реализации, делая Markdown-файл единственным источником правды. Вот как реализовать это тридцатью строками на Python.

Ваша документация, тесты и код — это три файла, которые плохо рассказывают одну и ту же историю. Вы обновляете сигнатуру функции в исходнике. Забываете про…

Ожидание race conditions — ужасная стратегия тестирования

Почему model checking превосходит дни продакшен-рантайма в поиске concurrency-багов и как применить его к собственному коду.

Ждать, пока race conditions проявятся в продакшене, — это не тестирование. Это надежда, замаскированная под добросовестность. Вы можете запускать приложение…

Ваши unit tests проходят, но данные всё равно исчезают

Mock-тесты базы данных проверяют синтаксис SQL, но не то, переживут ли строки сбои, конкурентные записи или несоответствие схемы. Вот как тестировать persistence по-настоящему.

Если вы используете mock для базы данных в тестах, вы проверяете то, что ваш repository layer вызывает правильные методы. Вы не проверяете то, что данные…

Тестирование Redux без утопания в мок-экшенах

Мокирование каждого экшена Redux превращает ваши тесты в валидатор ченджлога. Вот как тестировать стор с реальными переходами состояния.

Если вы когда-либо писали тест, который проверяет, что был вызван с точной структурой payload, вы написали тест, который ломается каждый раз, когда кто-то…