Mutation score 72% — и почему я всё ещё не могу сказать, что тесты хорошие

Рано или поздно задумываешься над качествовом тестов. Проверяют ли они то что должны или являются просто фикцией? Решил попробовать mutmut (инструмент для мутационного тестирования), который дал 72%. Звучит солидно. Но если меня спросить, хорошие ли у нас тесты, честного «да» я не скажу. И 72 тут ни при чём: одна цифра о качестве тестов почти ничего не говорит. Приходится смотреть глубже.

Распределение, а не среднее

В среднем по проекту 72, но стоит разбить по модулям — и картина рассыпается. Где-то счёт 100%, а в одном модуле с бизнес-логикой — всего 27.5%. Красивое среднее спокойно прячет модуль, где почти ничего не проверяется. Поэтому следить стоит не за средним, а за слабыми зонами.

Не каждый выживший — дефект

После прогона у меня на руках почти полторы тысячи выживших мутаций. Звучит страшно, но делятся они на три рода. Эквивалентные убить невозможно — они не меняют поведение (обычно 5–15% от всех). Некритичные — текст лога, дефолт: тест не ловит, но и ломаться нечему. Беспокоиться стоит о дырах — мутациях, выживших в условии или расчёте.

Статичный показатель сам по себе мало что даёт. Полезным он становится в динамике — падает, значит тесты деградировали. До этого пока не дошёл.

Если у вас mutation score считается — что ваша цифра вам говорит? Или тоже «72 и как-то живём»?