Полезно ли тестирование мутаций на практике? - PullRequest
41 голосов
/ 28 октября 2008

Есть ли у вас примеры реальных тестов на мутации? Работает ли он лучше, чем простые тестовые инструменты? Или это бесполезно?

Каковы преимущества / недостатки мутационного тестирования в реальном мире?

Ответы [ 6 ]

17 голосов
/ 09 марта 2012

Полезность юнит-тестов больше не обсуждается. Они необходимы в концепции качественного применения. Но как мы можем оценить их актуальность? Индикатор покрытия кода до 100% не означает, что код проверен на 100%. Это просто представление исполняемого кода во время выполнения модульных тестов. Мутационное тестирование позволит вам быть более уверенным в своих тестах.

Это двухэтапный процесс:

  1. Генерация мутантов.
  2. Проверьте, что мутации обнаружены тестами.

Я написал статью об этом процессе, включая некоторые конкретные случаи.

9 голосов
/ 28 октября 2008

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

Это не подлинное тестирование на мутации, а метод, который использует аналогичную парадигму для проверки эффективности тестовых сценариев. Это достаточно просто реализовать, и ИМО делает хорошую работу.

4 голосов
/ 10 декабря 2012

Я поиграл с питстом для небольшого, надуманного приложения:

http://pitest.org/

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

http://www.eclemma.org/

Для покрытия.


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

Мутационное тестирование - это угол атаки, который сильно отличается от методологий модульного / функционального / интеграционного тестирования.

  1. Вы тестируете свой набор тестов - это мета-тест всей вашей программы тестирования.
  2. Это вдохновляет на дополнительные тестовые случаи, которые вы не могли бы рассмотреть иначе.
3 голосов
/ 22 июня 2016

Я знаю, что это старый вопрос, но недавно дядя Боб написал сообщение в блоге, очень интересное о мутантном тестировании, которое может помочь понять полезность этого типа тестирования:

Сообщение блога по тестированию дяди Боба

2 голосов
/ 01 декабря 2018

Мутационное тестирование помогло мне выявить проблемы с утверждениями тестового примера.

Например, когда вы получаете сообщение, в котором говорится, что «ни один мутант не был убит тестовым примером x», вы смотрите, и оказывается, что утверждение закомментировано.

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

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

2 голосов
/ 11 июля 2010

Недавно я провел несколько исследований по мутации. Результаты здесь:

http://abeletsky.blogspot.com/2010/07/using-of-mutation-testing-in-real.html

Короче говоря: тестирование на мутацию может дать некоторую информацию о качестве исходного кода и тестов, но это не то, что просто использовать.

...