В чем разница между видами и типами тестирования ПО?

«В чем разница между видами и типами тестирования ПО?» — вопрос из категории Основы тестирования, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Виды тестирования классифицируются по цели проверки:

  1. Функциональное: Проверяет, что система делает (соответствие функциональным требованиям).
    • Пример (проверка логина):
      # pytest
      def test_login_with_valid_credentials():
          result = login(username="test_user", password="correct_pass")
          assert result.is_successful() == True
          assert result.get_session() is not None
  2. Нефункциональное: Проверяет, как система работает (качества).
    • Нагрузочное (Performance): Проверка под нагрузкой.
    • Тестирование безопасности (Security).
    • Юзабилити-тестирование.

Типы тестирования классифицируются по способу/уровню проведения:

  • По уровню (Test Levels):
    1. Модульное (Unit): Тестирование отдельных функций/классов.
      // Jest
      test('sum function adds numbers', () => {
        expect(sum(1, 2)).toBe(3);
      });
    2. Интеграционное: Тестирование взаимодействия модулей/сервисов.
      # Интеграционный тест API
      def test_create_order_flow():
          user_id = create_test_user()          # Модуль A
          item_id = add_item_to_catalog()       # Модуль B
          order = place_order(user_id, item_id) # Интеграция A и B
          assert order.status == "PAID"
    3. Системное (End-to-End, E2E): Тестирование всей системы как единого целого.
  • По доступу к коду:
    • "Белый ящик" (White-box): С знанием внутренней реализации.
    • "Черный ящик" (Black-box): Без знания реализации, только по спецификации.
    • "Серый ящик" (Gray-box): Частичное знание (например, структура БД).

Итог: Вид отвечает на вопрос "что тестируем?" (функцию или качество), а тип"как и на каком уровне?" (модуль, интеграция, E2E).