Что такое тестирование программного обеспечения (Software Testing)?

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

Ответ

Тестирование программного обеспечения (Software Testing) — это процесс проверки и оценки программного продукта для выявления различий между его фактическим и ожидаемым поведением, а также для оценки качества и соответствия требованиям.

Основные цели:

  • Обнаружение дефектов (багов) до того, как их найдут пользователи.
  • Повышение уверенности в качестве и надежности продукта.
  • Обеспечение соответствия функциональным и нефункциональным требованиям.
  • Снижение рисков и затрат на поддержку.

Пример базового модульного теста на Python:

# Тестируемая функция
def calculate_discount(price, discount_percent):
    if discount_percent < 0 or discount_percent > 100:
        raise ValueError("Discount must be between 0 and 100")
    return price * (1 - discount_percent / 100)

# Тесты с использованием assert
# Тест 1: Корректный расчет скидки
assert calculate_discount(1000, 20) == 800

# Тест 2: Скидка 0%
assert calculate_discount(500, 0) == 500

# Тест 3: Скидка 100% (товар бесплатный)
assert calculate_discount(300, 100) == 0

# Тест 4: Проверка обработки некорректных входных данных (отрицательная скидка)
try:
    calculate_discount(100, -10)
except ValueError as e:
    assert str(e) == "Discount must be between 0 and 100"

Уровни тестирования (по степени изоляции компонентов):

  1. Модульное (Unit): Тестирование отдельных функций/методов.
  2. Интеграционное (Integration): Тестирование взаимодействия нескольких модулей или с внешними системами (БД, API).
  3. Системное (System/E2E): Тестирование полностью собранной системы с точки зрения конечного пользователя.

Типы тестирования (по целям):

  • Функциональное: Проверка, что функции работают согласно спецификации.
  • Нефункциональное: Проверка качества — производительность, безопасность, удобство использования (UX).
  • Регрессионное: Проверка, что новые изменения не сломали существующий функционал.