Ответ
Алгоритм следует принципу «от общего к частному» и интеграции в процесс разработки (Shift-Left).
1. Анализ требований и дизайна (До начала разработки):
- Участвую в планировании (grooming, planning). Уточняю acceptance criteria, задаю вопросы о граничных случаях, поведении в ошибках.
- Изучаю дизайн-макеты/прототипы (UI/UX).
- Результат: Сформированное понимание, список уточнений и первые наброски тест-кейсов.
2. Проектирование тестов (Параллельно с разработкой):
- Создаю детальные тест-кейсы, используя техники тест-дизайна (классы эквивалентности, граничные значения, таблицы решений).
- Разделяю кейсы по уровням и типам:
# Пример высокоуровневого сценария (может быть в BDD-стиле) Feature: Добавление товара в корзину Scenario: Добавление доступного товара Given Пользователь авторизован и находится на странице товара When Он нажимает кнопку "Добавить в корзину" Then Товар появляется в мини-корзине с правильной ценой And Счетчик товаров в корзине увеличивается на 1 - Готовлю тестовые данные.
- Продумываю сценарии интеграционного тестирования с другими модулями.
3. Выполнение тестирования (На тестовом окружении):
- Поэтапный подход:
- Smoke/Sanity: Базовая проверка работоспособности после деплоя.
- Детальное функциональное тестирование: Прохождение всех подготовленных кейсов (позитивные, негативные, граничные).
- Интеграционное тестирование: Проверка взаимодействия (например, новый метод API → запись в БД → уведомление в очередь).
- Регрессионное тестирование: Проверка, что существующий функционал не сломан.
- Non-Functional: При необходимости — проверка UI/UX, кросс-браузерность, производительность.
- Логирование: Все действия, тестовые данные и результаты фиксирую.
4. Документирование дефектов и отчетность:
- Найденные баги заношу в трекер (Jira, YouTrack) по шаблону: Заголовок, Шаги воспроизведения, Фактический результат, Ожидаемый результат, Окружение, Приоритет/Серьезность, Скриншоты/логи.
- Формирую итоговый отчет о готовности функционала к релизу, отмечая покрытые требования и известные риски.
5. Поддержка и автоматизация (После приемки):
- Ключевые сценарии нового функционала добавляю в набор регрессионных автотестов.
- Участвую в пост-релизном мониторинге.
Ответ 18+ 🔞
Да ты посмотри, какая красота вырисовывается! Алгоритм-то, сука, классический, как швейцарские часы: от общего к частному и впихивание себя в процесс пораньше, этот самый Shift-Left, блядь. Сейчас разжую, как я это делаю, чтобы не было мучительно больно.
1. Врубаюсь на самом старте, пока код ещё не написан. Сижу на этих самых grooming'ах и planning'ах, слушаю, что за фичу выкатывают. И тут же, блядь, начинаю ковыряться в acceptance criteria, как бульдозер: «А вот это что значит? А если пользователь — конченый идиот и нажмёт сюда десять раз? А где ошибка упадёт?». Дизайн-макеты изучаю — чтобы кнопка не на лбу у аватара оказалась, понимаешь? Итог: У меня в голове уже каша из вопросов и первые намётки на тест-кейсы, пока разработчик только кофе наливает.
2. Пока код пишут, я уже тесты проектирую. Сажусь и начинаю выдумывать, как эту штуку сломать. Использую все эти ваши классы эквивалентности, граничные значения — в общем, всю свою, блядь, чёрную магию. Раскладываю кейсы по полочкам: вот это для дымовой, вот это — полный разбор на запчасти.
# Ну, типа, чтоб красиво и все поняли, о чём речь
Feature: Кинуть товар в корзину
Scenario: Кидаем то, что можно купить
Given Юзер залогинен и пялится на страницу товара
When Он долбит по кнопке «Добавить в корзину»
Then Товар материализуется в мини-корзине с правильной ценой
And Счётчик в углу подскакивает на единичку
Параллельно готовлю тестовые данные — фейковые юзеры, карточки товаров, хуй в пальто. И думаю, как эта новая хрень поладит со старыми модулями, чтобы потом не вышло, что после добавления в корзину у пользователя сгорает пароль, ёпта.
3. Окружение подняли — начинается основное веселье. Тут я действую, как сапёр, но который ищет, куда бы наступить.
- Smoke/Sanity: Быстренько пробежался — система не рухнула сразу, можно работать.
- Детальное тестирование: Вот тут я отрываюсь по полной. Прохожу ВСЕ свои кейсы. Позитивные сценарии («всё работает как надо») — это скучно. А вот негативные («а что если в поле цены вписать "абвгд"») — вот где адреналин, блядь! Находишь такое, что у разработчика волосы дыбом встают.
- Интеграционное: Смотрю, как новая фигня общается со старым добром. Вызвали новый API метод — данные в базу просочились? Событие в очередь улетело? Всё должно быть как по маслу, а не как у мартышлюшки.
- Регресс: Быстренько гоняю ключевые сценарии старого функционала — не развалили ли мы чего, пока тут новое городили.
- Non-Functional: Если надо, смотрю, не плывёт ли вёрстка в IE (да, есть ещё такие, ядрёна вошь!), не тормозит ли всё как в болоте.
И всё записываю, блядь, каждый шаг, каждый ввод. Потому что если баг вылезет, а ты не помнишь, как его повторить — это пиздец и позор.
4. Нашёл косяк — теперь надо его красиво подать. Тыкать пальцем и орать «не работает!» — не наш метод. Наш метод — это Jira, YouTrack или что там у вас. Заполняю баг-репорт по всем канонам:
- Заголовок: Коротко и ясно. «Кнопка "Купить" исчезает после третьего нажатия, если имя пользователя содержит кириллицу».
- Шаги: Разжёвано для идиота. «1. Открыть страницу. 2. Залогиниться как user_ёлка...».
- Ожидаемый vs Фактический: «Ожидалось: кнопка остаётся. Факт: кнопка испаряется в никуда».
- Окружение: Браузер, ОС, версия приложения — всё, блядь.
- Серьёзность: Решаю, это «блокер» (ничего не работает) или «тривиал» (опечатка в сообщении).
- Скриншоты/логи: Без этого вообще нихуя не докажешь, все будут делать круглые глаза.
А в конце ещё и отчёт напишу, мол, функционал в целом готов, но вот эти три бага висят, имейте в виду, выпускайте на свой страх и риск.
5. Всё зарелизили — можно расслабиться? Хуй там! Ключевые сценарии, по которым только что бегал, надо запихнуть в автотесты, чтобы они сами бегали при каждом новом коммите и орали, если что-то сломалось. И потом ещё пару дней после релиза мониторю продакшн — мало ли что всплывёт, когда на новую фичу набегут реальные пользователи, а они, уёбки, такие изобретательные бывают... Вот так, блядь, и живём.