Обычные метрики покрытия (coverage 90%) ничего не говорят о качестве тестов. Код можно покрыть, но не проверить. Mutation testing проверяет не код, а тесты.
〰️ Как это работает:
Инструмент специально вносит мелкие изменения (мутации) в код:
🟣 > заменяет на <🟣== на !=🟣убирает строки, инвертирует условия
Если после этого тесты всё равно проходят — значит, они не ловят ошибку 😬
💡 Пример:
def is_adult(age):
return age >= 18
Тест проверяет
age = 18.
Мутация меняет код на
>— тест всё ещё проходит.
Вывод: тест слабый, не покрывает граничные случаи.
〰️ Попробовать можно с инструментами:
—
mutmut (Python)—
PITest (Java)—
stryker (JS/TS)🐸 Библиотека тестировщика
#теория_на_пальцах
