Пирамида против трофея и как ИИ меняет экономику тестов
Сцена · форма набора тестов
У набора тестов есть форма: сколько в нём юнитов, сколько интеграционных, сколько E2E. Эту форму рисуют фигурой. Пирамида: широкое основание из юнитов, узкая вершина E2E. Трофей: основание поуже, зато толстая середина из интеграционных. Рожок мороженого: всё наоборот, гора E2E на тонкой ножке юнитов, и это антипаттерн.
Форма не дело вкуса. Она следствие экономики: что в данном проекте дёшево писать и что даёт больше уверенности за тест. А экономика только что сдвинулась, потому что юнит-тесты теперь пишет агент почти бесплатно. Этот урок про то, какую форму выбрать и почему ответ поменялся.
Карта урока · что заберёшь
- разберёшь три формы набора: пирамиду, трофей, рожок мороженого;
- поймёшь, какая экономика стоит за каждой формой;
- увидишь, как дешёвая ИИ-генерация и mutation testing двигают оптимум;
- научишься выбирать форму от контекста и запишешь стратегию для Kassa.
Раздел 1 · три формы
Идея словами
Пирамида родилась из простого наблюдения: юнит дёшев и быстр, E2E дорог и хрупок, значит логику дешевле проверять внизу, а наверху оставить только склейку. Долгое время это был выбор по умолчанию.
Трофей Кента Доддса сместил центр тяжести в интеграционные. Аргумент: изолированный юнит проверяет деталь, а интеграционный проверяет, что куски работают вместе, ближе к тому, как код реально используется. За один интеграционный тест ты покупаешь больше уверенности.
Рожок мороженого это то, что получается само, когда команда пишет тесты “сверху”: кликают E2E, потому что так “проверяется по-настоящему”, а юниты не пишут. Итог: набор бежит десятки минут, падает без изменения кода и тормозит разработку.
Картинка · морфинг формы
Ползунок это стоимость написания одного юнит-теста. Сдвинь его вправо (юнит дорог): оптимум уезжает к трофею, вес перетекает в интеграционные. Сдвинь влево (юнит почти бесплатен): основание расширяется, форма становится пирамидой. Форма набора это не догма, это функция от цены теста.
Что взять с собой
- пирамида: дешёвое основание из юнитов, узкая вершина;
- трофей: вес в интеграционных, больше уверенности за тест;
- рожок мороженого: антипаттерн, медленный и хрупкий.
Раздел 2 · сдвиг экономики
Идея словами
Почему трофей вообще появился. В мире, где юнит пишет человек руками, юнит стоит дорого: время инженера на каждый случай. Раз юнит дорог, разумно меньше юнитов и больше интеграционных, где один тест окупает себя сильнее. Трофей это рациональный ответ на дорогой юнит.
Теперь две вещи изменились одновременно.
- Агент удешевил юнит почти до нуля. Сгенерировать сто юнит-тестов по таблице случаев это минуты, а не дни. Цена написания, главный аргумент против широкого основания, упала.
- Mutation testing вернул юнитам доверие. Дешёвые ИИ-юниты опасны тем, что легко зелёные и пустые. Но честный прибор, который сажает в код баги и проверяет, ловит ли их набор, отсеивает пустышки. У тебя снова есть дешёвый и проверяемый юнит.
Сложи два сдвига: юнит стал дёшев и снова надёжен. Оптимум поехал обратно вниз, к пирамиде. Не потому что трофей был неправ, а потому что поменялись вводные, на которых он строился.
Когда код пишет агент
Тут и кроется главная ловушка серии. Агент с радостью завалит тебя сотней зелёных юнитов. Без проверки честности это иллюзия покрытия: форма выглядит как идеальная пирамида, а ловит она почти ничего. Поэтому дешёвая ИИ-генерация работает только в связке с mutation testing. Юниты как ТЗ для агента плюс mutation как приёмка: эту петлю мы соберём целиком в блоке про unit-тесты, но логика уже понятна.
Что взять с собой
- трофей был ответом на дорогой ручной юнит;
- агент удешевил юнит, mutation вернул ему доверие;
- дешёвая генерация без проверки честности это иллюзия пирамиды.
дальше после входа
Урок целиком открыт всем, кто вошёл. Войди по своему email, чтобы читать дальше.
Вход пока по приглашению. Если хочешь учиться, напиши Vassiliy.