← Назад к вопросам

Что такое абстракция?

2.0 Middle🔥 182 комментариев
#Архитектура приложений#Теория тестирования

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое абстракция в программировании

Абстракция — это фундаментальный принцип объектно-ориентированного программирования (ООП), который позволяет скрыть сложную внутреннюю реализацию системы или объекта, предоставляя пользователю только существенные и необходимые детали для взаимодействия. По сути, это "управление сложностью" через разделение "что делает объект" и "как он это делает".

Ключевая идея и аналогия из реального мира

Представьте, что вы водите автомобиль. Для управления им вам не нужно знать детали работы двигателя, топливной системы или трансмиссии. Вы взаимодействуете с абстрактным интерфейсом: руль, педали, рычаг коробки передач. Как именно нажатие на педаль газа увеличивает обороты двигателя — это скрытая от вас реализация. Эта же логика применяется в программировании.

Абстракция в контексте автоматизации тестирования (QA Automation)

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

Основные цели и преимущества:

  • Сокрытие сложности: Инкапсуляция низкоуровневых вызовов Selenium WebDriver, API-запросов или операций с базой данных за простыми, понятными методами.
  • Повышение читаемости тестов: Тестовые сценарии (test cases) описываются на языке бизнес-логики, а не на языке технических команд.
  • Упрощение поддержки: При изменении UI элемента (например, селектора) правка вносится в одном месте — в классе абстракции (Page Object), а не в сотнях тестов.
  • Разделение ответственности: Тест-инженеры, пишущие сценарии, могут не углубляться в технические детали, сосредоточившись на логике проверки.

Практическая реализация: паттерн Page Object

Самый наглядный пример абстракции в автоматизации UI-тестов — это паттерн Page Object Model (POM). Каждая страница или значимый виджет приложения представляется в виде класса. Внутренняя структура страницы (локаторы элементов) скрыта, а наружу выставлены методы, отражающие пользовательские действия.

Пример без абстракции (плохая практика):

# test_login_bad.py
def test_login(driver):
    driver.get("https://example.com/login")
    driver.find_element(By.ID, "username").send_keys("test_user")
    driver.find_element(By.ID, "password").send_keys("pass123")
    driver.find_element(By.XPATH, "//button[@type='submit']").click()
    # ... проверки

Здесь тест перегружен техническими деталями: URL, селекторы, низкоуровневые команды WebDriver. При изменении любого селектора придется обновлять все тесты, где он используется.

Пример с абстракцией (Page Object):

# pages/login_page.py
class LoginPage:
    def __init__(self, driver):
        self.driver = driver
        self.url = "https://example.com/login"

    def open(self):
        self.driver.get(self.url)
        return self

    def enter_username(self, username):
        self.driver.find_element(By.ID, "username").send_keys(username)
        return self

    def enter_password(self, password):
        self.driver.find_element(By.ID, "password").send_keys(password)
        return self

    def submit(self):
        self.driver.find_element(By.XPATH, "//button[@type='submit']").click()
        return DashboardPage(self.driver)  # Возвращаем абстракцию следующей страницы

# tests/test_login_good.py
def test_login_with_abstraction(driver):
    login_page = LoginPage(driver)
    dashboard_page = login_page.open().enter_username("test_user").enter_password("pass123").submit()
    # Дальнейшие проверки через dashboard_page
    assert dashboard_page.is_loaded()

Другие примеры абстракции в QA Automation:

  1. API Client Abstraction: Класс, скрывающий детали HTTP-запросов (настройки заголовков, обработку сессий, парсинг JSON), предоставляя методы типа user_client.create_user(name, email).
  2. Database Abstraction: Слой, который инкапсулирует SQL-запросы и соединение с БД, предлагая методы типа user_repository.get_active_users().
  3. Actions Abstraction: Выделение сложных составных действий (например, "добавить товар в корзину и перейти к оформлению") в отдельные сущности, чтобы избежать дублирования кода в тестах.

Итог

Для QA Automation инженера понимание и применение абстракции — критически важный навык. Это прямой путь от написания хрупких, линейных скриптов к построению профессионального тестового фреймворка, который легко адаптируется к изменениям в продукте, позволяет эффективно сотрудничать в команде и значительно снижает стоимость поддержки автотестов в долгосрочной перспективе. Абстракция превращает код автоматизации из набора инструкций в модель предметной области, которую понимают как разработчики, так и тестировщики.

Что такое абстракция? | PrepBro