Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Moscow Python Meetup №109. Евгений Блинов (The ...

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

Moscow Python Meetup №109. Евгений Блинов (The Mutating Company). Ближайшее будущее мутационного тестирования на Python

Анонсирую новый фреймворк мутационного тестирования, который создавал в течение последних нескольких месяцев.

Видео: https://moscowpython.ru/meetup/109/mutating-testing-future/

Moscow Python: http://moscowpython.ru
Курсы Learn Python: http://learn.python.ru
Moscow Python Podcast: http://podcast.python.ru
Заявки на доклады: https://bit.ly/mp-speaker

Avatar for Moscow Python Meetup

Moscow Python Meetup PRO

March 18, 2026
Tweet

More Decks by Moscow Python Meetup

Transcript

  1. 1 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Ближайшее

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    PyCon pomponchik.org/ talks/how-to-test-libraries-in-python/
  18. 30 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Нужно,

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

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

    разработки • Максимальная модульность, опора на собственную плагинную систему • Разбиение проекта на подлибы • Вертикальная интеграция • Внимание к деталям
  21. 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}
  22. 35 The Mutating Company › Евгений Блинов › bit.ly/4bvTdbb Пример

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

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

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

    • Гитхаб: github.com/mutating За красивую тему для презентации отдельная благодарность компании Evrone