Какие рамки тестирования мутаций существуют для C/C++?

Тестирование мутаций уже давно проводится, и кажется, что есть по крайней мере одна или две коммерческие среды тестирования мутаций для C/C++. Вы их использовали? Каковы ваши переживания? Есть ли альтернативы с открытым исходным кодом?

4 ответа

Решение

В результате краткого поиска:

С учетом сказанного вы должны понимать, что тестирование на мутации не особенно полезно (по крайней мере, из некоторых вещей, которые я ранее читал). Это интересный инструмент, когда он сталкивается с жесткими (в переносном смысле) утверждениями и обеспечивает соблюдение требований к данным (когда имеешь дело с if and only if ситуации).

На мой взгляд, есть гораздо более устоявшиеся способы анализа надежности кода.

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

Я попробовал другой интересный инструмент, который может автоматически обнаруживать инварианты в инструментальном коде C и C++ - он называется "Daikon". По сути, он делает то же самое, что и инструмент, который генерирует эквивалентные мутации, но вместо идентификации проблемного кода он дает вам набор инвариантов, таких как "A == B + 1". Я думаю, что инварианты более полезны, потому что когда вы смотрите на обнаруженный инвариант, это дает вам уверенность в том, что ваш код верен, если инвариант имеет смысл, а затем вы можете конвертировать инварианты в утверждения, и это дает вам больше уверенности при изменении кода.

Прямой Python-скрипт для мутирующих c-программ доступен по адресу:

https://github.com/parunbabu/mutate.py

Автор говорит, что это работает лучше, если тестируемый код декомментирован и имеет отступ.

и это также бесплатно и с открытым исходным кодом... я думаю, это то, что вы ищете.

  • Mull основан на LLVM и, кажется, активно развивается и прост в использовании.
  • dextool mutate также основан на LLVM и активно развивается, более сложен в использовании, но имеет больше функций, таких как повторный запуск живых мутантов и только мутировать внесенные изменения на основеgit diff

У меня нет опыта с этим, но Mutate++ кажется вариантом, которого нет в уже упомянутых.

Mutate++ - среда тестирования мутаций C++

Я в настоящее время использую:

Инструмент помог мне разоблачить некоторые тестовые случаи, которые не убили ни одного мутанта. В одном из них утверждение было закомментировано.

Я также обнаружил несколько тестовых случаев, которые убивают тех же мутантов. Это было особенно распространено при использовании параметризованного тестирования.

Существующие фреймворки были слишком трудоемкими для настройки и использования, поэтому я сделал свою собственную реализацию, быстрое и простое решение, которое должно работать на любой машине. Для MacOSX, Windows и RaspberryPi (Linux) доступны двоичные файлы:

https://github.com/RagnarDa/dumbmutate

Надеюсь, это кому-нибудь поможет!

Другие вопросы по тегам