Ответ
Задачи тестирования классифицируются по нескольким ключевым критериям:
1. По уровню тестирования (уровню изоляции):
- Модульное (Unit) — тестирование отдельных функций/методов.
- Интеграционное — проверка взаимодействия между модулями или системами.
- Системное (End-to-End) — тестирование всей системы как единого целого.
- Приемочное (UAT) — проверка соответствия бизнес-требованиям пользователем.
2. По целям проверки:
- Функциональное — проверка соответствия функциональным требованиям.
- Нефункциональное — проверка качества: производительность, безопасность, удобство использования.
- Регрессионное — проверка, что новые изменения не сломали существующий функционал.
- Дымовое (Smoke) — поверхностная проверка ключевых функций для оценки готовности к более глубокому тестированию.
3. По степени автоматизации:
- Ручное — выполняется тестировщиком вручную.
- Автоматизированное — выполняется с помощью скриптов/фреймворков.
- Полуавтоматизированное — комбинация ручных и автоматических шагов.
4. По времени и объему выполнения:
- Дымовое (Smoke) — быстрое, после сборки.
- Санитарное (Sanity) — узконаправленное, после исправления дефекта.
- Полное регрессионное (Full Regression) — полная проверка системы.
Пример модульного теста на Python (pytest):
def test_calculate_discount():
# Unit-тест для проверки логики расчета скидки
from shop import calculate_discount
assert calculate_discount(100, 10) == 90 # 10% скидка
assert calculate_discount(50, 0) == 50 # Без скидки Ответ 18+ 🔞
Давай разберём эту всю классификацию тестирования, а то как посмотришь на эти списки — волнение ебать, терпения ноль. Но на самом деле всё просто, если по полочкам, без этой академической пурги.
1. По уровню, где мы тыкаем палкой (уровень изоляции):
- Модульное (Unit) — это когда ты берёшь одну мелкую функцию, отсаживаешь её от всех соседей и начинаешь мучать: «А ну-ка, сука, посчитай мне скидку! А если я тебе ноль подам? А если отрицательное число?». Никого вокруг, только она и ты.
- Интеграционное — а вот тут уже начинается веселье. Ты соединяешь две этих функции, которые по отдельности работали, и смотришь, как они друг друга ебут. Одна данные шлёт, другая их жрёт, а в итоге — пиздец, null pointer exception на ровном месте.
- Системное (End-to-End) — это уже полный цирк с конями. Запускаешь всю систему, как будто реальный пользователь: нажал кнопку, пошёл запрос на сервер, там база данных, там ещё какая-то хуйня, и в конце должен прийти правильный ответ. Если что-то сломалось — ищи иголку в стоге сена, блядь.
- Приемочное (UAT) — это когда ты уже всё проверил, а потом приходит какой-нибудь менеджер Петрович, тыкает в интерфейс пальцем и говорит: «А я хотел не так. Это нихуя не работает». И всё, приехали.
2. По тому, ЧТО именно мы проверяем (цели):
- Функциональное — самая понятная хуйня. Требования говорят: «При нажатии на кнопку «Купить» должен создаться заказ». Мы нажимаем. Создался? Молодец. Не создался? Иди нахуй, чини.
- Нефункциональное — это уже про то, КАК оно работает. Быстро ли? Не упадёт ли, если 1000 человек одновременно начнут тыкать? Удобно ли? Безопасно ли? Можно ли туда впендюрить SQL-инъекцию? Вот это всё.
- Регрессионное — святое дело. Пофиксили баг с оплатой. А мы теперь должны проверить, что эта фикса не разъебала вдруг корзину, каталог и личный кабинет. Потому что бывает так — один чинишь, десять ломаешь.
- Дымовое (Smoke) — это быстрая проверка на вшивость после каждой новой сборки. Запустился ли вообще сервер? Открывается ли главная страница? Можно ли залогиниться? Если даже это не работает — дальше можно не проверять, всё, пизда сборке, несите следующую.
3. Кто это делает — человек или железный раб (автоматизация):
- Ручное — это когда ты, бедолага-тестировщик, сидишь и вручную тыкаешь в интерфейс, заполняешь формы, сверяешь результаты. Скучно, долго, но для первого раза или сложных кейсов — необходимо.
- Автоматизированное — это когда ты написал скрипт, и теперь этот скрипт — твой верный пёс. Нажал кнопку «Пуск», и он сам всё проверит за тебя, быстрее и без перекуров. Красота.
- Полуавтоматизированное — обычно какая-то хитрая жопа, где часть шагов делает скрипт, а потом тебе говорит: «А теперь, хозяин, посмотри вот на этот экран и скажи, всё ли правильно?». И ты смотришь.
4. Когда и сколько мы это делаем (время и объём):
- Дымовое (Smoke) — мы уже говорили, быстро и по верхам. Сразу после сборки.
- Санитарное (Sanity) — это когда пофиксили конкретный баг. Мы не проверяем всю систему, а только ту самую фичу и то, что с ней напрямую связано. Узко, но точно.
- Полное регрессионное (Full Regression) — это пиздец и апокалипсис. Берёшь ВСЕ тест-кейсы, которые у тебя есть, и гоняешь их по всей системе. Делается это обычно перед крупным релизом. Долго, нудно, но необходимо.
А вот пример того самого модульного теста, где мы мучаем одну функцию:
def test_calculate_discount():
# Unit-тест для проверки логики расчета скидки
from shop import calculate_discount
assert calculate_discount(100, 10) == 90 # 10% скидка
assert calculate_discount(50, 0) == 50 # Без скидки
Смотри, что тут происходит: мы импортируем одну функцию calculate_discount и начинаем её дрочить вопросами. «На 100 рублей дай 10% скидки!» — должна вернуть 90. Возвращает? Отлично. «А теперь дай 0% скидки на 50!» — должна вернуть 50. Если оба утверждения (assert) не взрываются — значит, функция в рамках этих условий работает. Если взорвалось — значит, где-то в логике просчёт, иди разбирайся, мудак.
Вот и вся магия. Не так страшен чёрт, как его малюют в этих заумных статьях. Главное — понимать, для чего каждая штука нужна, а не просто зубрить классификации.