Тестирование ПО

Юнит-тесты, интеграционные тесты, E2E тестирование. Автоматизация тестирования, TDD, BDD.

📖4 мин чтения📊Уровень 5🗺️8 подтем📅16 апреля 2026 г.

Загрузка карты...

Код без тестов — это бомба с неизвестным таймером

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

Пирамида тестирования

Снизу вверх по стоимости и скорости: Unit-тесты (модульные) — тестируют отдельную функцию или класс в изоляции. Быстрые, дешёвые, их должно быть больше всего. Интеграционные тесты — проверяют взаимодействие модулей (API + БД, сервис + сервис). E2E-тесты (end-to-end) — имитируют действия пользователя в браузере (Cypress, Playwright). Медленные и дорогие, их меньше. Ручное тестирование — находит нестандартные баги, но не масштабируется.

Типы тестирования

Функциональное: «работает ли фича как задумано?» Нагрузочное (performance): как ведёт себя система под нагрузкой? (k6, Apache JMeter, Locust). Безопасности: SQL-инъекции, XSS, OWASP Top 10. Регрессионное: не сломали ли новые изменения старое? Приёмочное (UAT): пользователи проверяют, соответствует ли продукт их ожиданиям. Smoke-тест: базовая проверка перед полным тестированием.

TDD и BDD

TDD (Test-Driven Development): пиши тест → видишь красный → пиши код → видишь зелёный → рефакторинг. Цикл «красный-зелёный-рефакторинг». Тесты становятся спецификацией. BDD (Behavior-Driven Development): тесты пишутся в формате «Given-When-Then» на понятном языке (Gherkin, Cucumber). Помогает выстроить общий язык между разработчиками и бизнесом.

Инструменты

Unit: Jest (JavaScript), pytest (Python), JUnit (Java), RSpec (Ruby). E2E: Playwright, Cypress, Selenium. API: Postman, Newman, REST Assured. Покрытие кода: Istanbul, nyc. Багтрекинг: Jira, Linear, YouTrack, GitHub Issues. Метрика покрытия кода (code coverage) — процент строк, выполненных тестами. 80% — хороший ориентир, но 100% не гарантирует отсутствие багов.

Роль QA-инженера

QA (Quality Assurance) — шире, чем тестирование: это культура качества во всей команде. Современный QA: тест-анализ требований, разработка тест-планов и тест-кейсов, автоматизация, участие в ревью кода, мониторинг в продакшне. Ручное тестирование остаётся важным для юзабилити, доступности (accessibility) и исследовательского тестирования.