Тестирование мутаций существует уже некоторое время, и кажется, что по крайней мере, одна или две коммерческие среды тестирования мутаций для C / C ++. Вы ими пользовались? Какой у вас опыт? Есть ли альтернативы с открытым исходным кодом?
Какие существуют рамки тестирования мутаций для C / C ++?
- Хороший вопрос, так как я не знал о мутационном тестировании. Отличная идея ^^ 17.01.2011
- См. stackoverflow.com/questions/246495/ 17.01.2011
Ответы:
Краткий поиск привел к:
- PlexTest: https://www.itregister.com.au/products/plextest_detail.htm
- Insure ++: https://www.parasoft.com/jsp/products/insure.jsp;jsessionid=baacpvbaDywLID?itemId=63
- MILU (может быть только для C): https://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 ++ кажется вариантом, которого нет в уже упомянутых.
Mutate ++ - среда тестирования мутаций C ++
Существующие фреймворки требовали слишком много времени для настройки и использования, поэтому я сделал свою собственную реализацию - быстрое и простое решение, которое должно работать на любой машине. Доступны бинарные файлы для MacOSX, Windows и RaspberryPi (Linux):
https://github.com/RagnarDa/dumbmutate
Надеюсь, это поможет кому-нибудь!