Какие рамки тестирования мутаций существуют для C/C++?
Тестирование мутаций уже давно проводится, и кажется, что есть по крайней мере одна или две коммерческие среды тестирования мутаций для C/C++. Вы их использовали? Каковы ваши переживания? Есть ли альтернативы с открытым исходным кодом?
4 ответа
В результате краткого поиска:
- PlexTest: http://www.itregister.com.au/products/plextest_detail.htm
- Страхование ++: http://www.parasoft.com/jsp/products/insure.jsp;jsessionid=baacpvbaDywLID?itemId=63
- MILU (может быть только для C): http://www.dcs.kcl.ac.uk/pg/jiayue/milu/
С учетом сказанного вы должны понимать, что тестирование на мутации не особенно полезно (по крайней мере, из некоторых вещей, которые я ранее читал). Это интересный инструмент, когда он сталкивается с жесткими (в переносном смысле) утверждениями и обеспечивает соблюдение требований к данным (когда имеешь дело с 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++ кажется вариантом, которого нет в уже упомянутых.
Я в настоящее время использую:
Инструмент помог мне разоблачить некоторые тестовые случаи, которые не убили ни одного мутанта. В одном из них утверждение было закомментировано.
Я также обнаружил несколько тестовых случаев, которые убивают тех же мутантов. Это было особенно распространено при использовании параметризованного тестирования.
Существующие фреймворки были слишком трудоемкими для настройки и использования, поэтому я сделал свою собственную реализацию, быстрое и простое решение, которое должно работать на любой машине. Для MacOSX, Windows и RaspberryPi (Linux) доступны двоичные файлы:
https://github.com/RagnarDa/dumbmutate
Надеюсь, это кому-нибудь поможет!