Какие основные виды тестирования вы знаете?

Ответ

Виды тестирования классифицируются по целям и уровню детализации. В своей работе я регулярно сталкиваюсь со следующими:

1. По уровню (пирамида тестирования):

  • Модульное (Unit): Проверка отдельных функций или методов. Пишутся разработчиками или тестировщиками. Пример на Java/JUnit:
    @Test
    public void testCalculateDiscount() {
        Cart cart = new Cart();
        cart.addItem(new Item("Book", 100));
        double discount = cart.calculateDiscount();
        assertEquals(10.0, discount, 0.01); // Проверка скидки 10%
    }
  • Интеграционное: Проверка взаимодействия между модулями, сервисами или БД.
  • Системное (End-to-End / E2E): Проверка работы всей системы как единого целого (например, через Selenium).

2. По целям:

  • Функциональное: Проверка соответствия требованиям (Smoke, Регрессионное, Приемочное).
  • Нефункциональное:
    • Нагрузочное/Производительности: Оценка поведения под нагрузкой (использую JMeter, k6).
    • Безопасность: Поиск уязвимостей (SQL-инъекции, XSS).
    • Юзабилити: Удобство интерфейса для пользователя.
    • Совместимость: Работа в разных браузерах, ОС, устройствах.

3. По степени автоматизации: Ручное, автоматизированное (автотесты на Python/pytest, Java/Selenium) и полуавтоматическое.

Ответ 18+ 🔞

Слушай, а давай я тебе про тестирование расскажу, но не как в этих скучных учебниках, а по-человечески. Вот сидишь ты, пишешь код, и кажется, что всё летает. А потом приходит этот самый момент «ёперный театр», когда всё накрывается медным тазом. Чтобы этого не было, мы, тестировщики, и существуем, со своим арсеналом.

В общем, виды тестирования — это как инструменты в ящике. Одним гвоздь забить, другим — систему целиком проверить, чтобы она не развалилась, когда пользователи налетят, как гомосеки на халявный бар.

1. По уровню, или, как умные говорят, «пирамида».

  • Модульное (Unit): Это когда ты берешь одну маленькую функцию и начинаешь её вздрачивать со всех сторон. Типа, «а что если сюда ноль передать? А отрицательное число? А строку, ты чё, дурак?». Часто разработчики сами это пишут, но иногда и мы подключаемся. Смотри, пример:

    @Test
    public void testCalculateDiscount() {
        Cart cart = new Cart();
        cart.addItem(new Item("Book", 100));
        double discount = cart.calculateDiscount();
        assertEquals(10.0, discount, 0.01); // Ждём скидку 10%, а не хуй с горы
    }

    Вот тут мы проверяем, что корзина не обманывает и скидку считает правильно. Если тест падает — сразу понятно, где искать пиздопроебибну.

  • Интеграционное: А вот это уже интереснее. Тут мы смотрим, как эти самые модули друг с другом общаются. Один сервис данные шлёт, другой их принимает, третий в БД пишет. И вот тут часто вылезает, что один другому впендюрил не тот формат данных, и всё, приехали. Доверия ебать ноль между компонентами, пока не проверишь.

  • Системное (E2E): Это уже полный овердохуища тест. Представь: ты открываешь сайт, логинишься, добавляешь товар в корзину, оплачиваешь — и всё это делает скрипт, например, на Selenium. Проверяем, что вся цепочка работает. Медленно, хрупко, но если проходит — можно выдохнуть. Почти.

2. По целям. Тут два больших лагеря.

  • Функциональное: Самое очевидное. Программа делает то, что должна? Соответствует требованиям? Тут у нас и «дымовое» (smoke) — быстрая проверка, что система вообще запустилась, а не пизда рулю. И регрессионное — чтобы новая фича не сломала то, что работало сто лет. И приёмочное — когда заказчик говорит «да, ок, я это хочу».
  • Нефункциональное: А вот тут начинается магия. Программа-то может работать, но как?
    • Нагрузочное: А что будет, если не 10 человек зайдут, а 10 000? Не ляжет ли всё, как смерд пердящий? Для этого юзаем JMeter, k6 — нагружаем и смотрим, где трещит.
    • Безопасность: Самый любимый пункт для параноиков. Ищем дыры: SQL-инъекции (чтобы какой-нибудь распиздяй не сломал базу), XSS (чтобы в чужих браузерах скрипты не выполнялись). Подозрение ебать чувствую ко всем полям ввода.
    • Юзабилити: А удобно ли пользоваться? Кнопки не с хуем в пальто размером? Меню логичное? Часто самый субъективный и спорный вид.
    • Совместимость: А в Хроме работает? А в этом старом Firefox? А на телефоне бабки? Вот тут и выясняется, что твой шедевр выглядит как манда с ушами на Internet Explorer.

3. По автоматизации. Тут всё просто.

  • Ручное: Берем руки, глаза, мозг и начинаем тыкать. Медленно, зато можно найти неочевидные хитрые жопы.
  • Автоматизированное: Пишем скрипты (на Python/pytest, Java/Selenium), которые всё делают за нас. Быстро, можно гонять хоть каждую ночь. Но написать их — тоже ебушки-воробушки.
  • Полуавтоматическое: Что-то делает скрипт, а что-то — человек. Компромисс, короче.

Вот так, чувак. Без этого всего выкатывать фичу — это как идти по охуенно тонкому льду. Может, пронесёт, а может, и вилкой в глаз.

Видео-ответы