Slide 1

Slide 1 text

1 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Ближайшее будущее мутационного тестирования на Python Евгений Блинов для Moscow Python Meetup

Slide 2

Slide 2 text

2 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Обо мне Делаю разные питоновые штуки

Slide 3

Slide 3 text

3 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Контакты Гитхаб: github.com/pomponchik Линкедин: linkedin.com/in/pomponchik Личный сайт: pomponchik.org

Slide 4

Slide 4 text

4 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Я + МТ == ❤ Будущее!

Slide 5

Slide 5 text

5 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb LLM

Slide 6

Slide 6 text

6 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb LLM

Slide 7

Slide 7 text

7 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb LLM

Slide 8

Slide 8 text

8 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb LLM

Slide 9

Slide 9 text

9 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb 3 факта о будущем

Slide 10

Slide 10 text

10 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb 1. Парадокс Джевонса ● Чем дешевле код, тем больше его нужно ● IT будет продолжать расти в капитализации ● Бенефициары перераспределятся ● Какую долю среди них займут “операторы LLM” – вопрос пока открытый

Slide 11

Slide 11 text

11 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb 2. Бутылочные горлышки переместятся ● По сути все IT – это фабрики ифов ● Код пишется, чтобы проверять чьи-то гипотезы ● Код – промежуточный артефакт ● Генерация кода – только один из конвееров ● Расширение одного конвеера перемещает ботлнеки в другие

Slide 12

Slide 12 text

12 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb 2.1. Нагрузка на тестирование резко возрастет

Slide 13

Slide 13 text

13 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Тесты – бутылочное горлышко агентского кодинга ● Все используют LLM для генерации кода ● Тесты кажутся легкой целью ● Но программисты по факту все равно перечитывают весь код ● Тесты и их корректность – по-прежнему сложнейшая задача в программировании > LLM пишет тесты

Slide 14

Slide 14 text

14 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb 3. Изменение роли Python ● Если код все равно пишет агент, зачем мне Python, если есть Rust? ● Проще сделать и протестировать прототип на Python, а потом переписать на Rust, чем писать сразу на Rust ● Основная роль Python в будущем – промежуточный язык ● Базовый тест-сьют, вероятно, останется на Python

Slide 15

Slide 15 text

15 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Вот каким будет будущее

Slide 16

Slide 16 text

16 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Так а что там про МТ?

Slide 17

Slide 17 text

17 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Главный вопрос тестирования: как протестировать тесты?

Slide 18

Slide 18 text

18 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Нужна штука, которая будет сомневаться в тестах ● Действительно ли этот тест что-то проверяет? ● А если я код вот так поменяю, тесты упадут?

Slide 19

Slide 19 text

19 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Картинка по запросу “скептик”

Slide 20

Slide 20 text

20 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Мутационное тестирование – это автоматизация скептицизма ● Ломаем исходный код (например меняем + на -) ● Запускаем тесты ● Падают – хорошо ● Не падают – плохо ● Повторяем тысячи раз, получаем метрику: процент “убитых мутантов” (MSI) ● ИИ-агент ориентируется на метрику, и при необходимости дописывает недостающие тесты ● Проблема: эквивалентные мутанты

Slide 21

Slide 21 text

21 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Это единственный способ расширить ботлнек тестирования

Slide 22

Slide 22 text

22 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Ограничения ● Эта штука не выявляет баги, несоответствие спеке ● Она проверяет только то, что юнит-тесты что-то проверяют ● Не заменяет другие виды тестирования ● Все еще дорого по компьюту ● Должно применяться после всех других видов тестирования

Slide 23

Slide 23 text

23 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Как обстоят дела сейчас?

Slide 24

Slide 24 text

24 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Общий стейт: ● Вообще идея мутационного тестирования старая, из 70-х ● Крупные компании типа Google и Meta внедряют в продакшен массовые проверки с помощью огромных мутационных систем ● Однако опенсорсный тулинг для питона все еще не очень ● В некоторых языках все обстоит гораздо лучше (например, JS, С#, Java)

Slide 25

Slide 25 text

25 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Google ● На 2021 год: активно используется более чем 24 000 инженеров, проверяются все PRы ● Система встроена в продакшен ● Все крутится вокруг дешевых инкрементальных проверок research.google/pubs/practical- mutation-testing-at-scale-a-view- from-google/

Slide 26

Slide 26 text

26 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Meta (запрещено в РФ) ● Активно мутируют ● Интегрируют с LLM: нейронка как ломает код, так и пишет тесты engineering.fb.com/2025/09/30/ security/llms-are-the-key-to-mutati on-testing-and-better-compliance/

Slide 27

Slide 27 text

27 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb А питонячий опенсорс?

Slide 28

Slide 28 text

28 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb 2024: PyCon pomponchik.org/ talks/how-to-test-libraries-in-python/

Slide 29

Slide 29 text

29 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Пока не очень

Slide 30

Slide 30 text

30 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Нужно, чтобы одновременно: ● Удобно ● Параллелизм из коробки (между машинами!) ● Сэндбоксинг (изолированные среды) ● Много мутаций, поддержка LLM-мутаций ● “Пригодность к продакшену” Я не нашел решения, где есть сразу все, и решил его создать

Slide 31

Slide 31 text

31 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Новый фреймворк

Slide 32

Slide 32 text

32 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Главные фичи ● Плагинная система – легко добавлять мутации ● Параллелизация из коробки ● Сендбоксинг: запуск кода в изолированных средах ● Минимум настройки ● Адаптация к повседневной работе и продакшену (возможность встроить в CI)

Slide 33

Slide 33 text

33 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Принципы разработки ● Максимальная модульность, опора на собственную плагинную систему ● Разбиение проекта на подлибы ● Вертикальная интеграция ● Внимание к деталям

Slide 34

Slide 34 text

34 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Пример компонента: pristan github.com/ mutating/pristan from pristan import slot @slot def some_slot(a, b) -> dict[str, int]: ... @some_slot.plugin def plugin_1(a, b) -> int: return a + b @some_slot.plugin def plugin_2(a, b) -> int: return a + b + 1 print(some_slot(1, 2)) #> {'plugin_1': 3, 'plugin_2': 4}

Slide 35

Slide 35 text

35 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Пример компонента: metacode ● Многие тулзы используют машиночитаемые комментарии ● Мне это нужно, чтобы мьютить мутации ● Я заметил, что нет общего стандарта вокруг этого и предложил свой github.com/ mutating/metacode

Slide 36

Slide 36 text

36 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Когда?

Slide 37

Slide 37 text

37 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Скоро!

Slide 38

Slide 38 text

38 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb (мне можно писать по поводу закрытого тестирования)

Slide 39

Slide 39 text

39 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Роадмап: ● Фреймворк – весна 2026 ● Агенты, покрывающие код тестами ● Комплексное решение для создания кода, соответствующего спеке

Slide 40

Slide 40 text

40 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Следите за анонсами!

Slide 41

Slide 41 text

41 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Ссылки: ● Гитхаб: github.com/mutating За красивую тему для презентации отдельная благодарность компании Evrone