Тестирование — это искусство находить неизвестное в известном, подчиненное строгим правилам и глубоким знаниям. Понимание различий между QA и QC, уровней и методов тестирования является краеугольным камнем профессии. Но как превратить эти знания в успешную карьеру? Данная статья — краткий гид к профессионализму. Тут расскрыты ключевые правила, которые должен помнить каждый тестировщик. Собранны вопросы, которые звучат на собеседованиях чаще всего, снабжённые четкими и лаконичными ответами для уверенной победы. Часть 1: начало пути.
Тестирование ПО
Тестировщик ПО (Software Tester) или Инженер QA (QA Engineer) — это специалист, который проверяет программное обеспечение на наличие ошибок. Он моделирует поведение пользователя, чтобы найти дефекты, несоответствия требованиям и проблемы с удобством до того, как продукт увидит конечный потребитель. Его главная задача — не просто найти баги, а обеспечить качество продукта, его стабильность и соответствие ожиданиям заказчика. Фактически, тестировщик выступает в роли первого и самого критичного пользователя, защищая репутацию компании и кошелёк клиента от дорогостоящих сбоев.
ПО для тестировщика — это не просто программа, а комплексный объект для исследования. Он состоит из функциональности, которую нужно проверить на соответствие требованиям, интерфейсов (UI, API) для взаимодействия и данных, которые нужно валидировать. Его главная цель — не доказать, что ПО работает, а найти ситуации, в которых оно сломается, чтобы обеспечить его надежность и качество для пользователя.
Ручной тестировщик — это исследователь. Он вручную, как пользователь, проверяет работу программы, полагаясь на свою интуицию и опыт для поиска непредвиденных багов и оценки удобства.
Автоматизированный тестировщик — это практически программист. Он пишет скрипты (код), которые автоматически выполняют необходимые проверки плюс умеет всё, что и ручной «тестер».
Тестирование программного обеспечения (Software Testing ) — проверка соответствия реального поведения ПО с ожидаемым, осуществляемая на конечном наборе тестов выбранным определенным образом.
Качество ПО (Quality Control, QC) — степень соответствия продукта требованиям и ожиданиям заказчика, а также принятым стандартам.
Обеспечение качества ПО (Quality Assurance, QA) совокупность процессов и работ, направленных на максимальное отсутствие серьёзных ошибок на конечных этапах тестирования ПО.
Дефект / баг / дефект репорт (Bug Report) – это документ, описывающий ситуацию или последовательность действий, ставшую причиной некорректной работы объекта тестирования. В этом документе указываются причина, а также фактический и ожидаемый результаты.
Цели тестирования — определить условия, приводящие к проявлению дефектов системы. А также: проверка соответсвия ПО требованиям, оценка надежности и производительности, проверка нефункцианальных характеристик ( удобство, безопасность, совместимость), предотвращение регрессий.
Цикл тестирования ПО Software Testing Life Cycle (STLC) — это структурированный процесс в разработке ПО, определяющий последовательность этапов тестирования от анализа требований до завершения, чтобы обеспечить качество, выявить дефекты и соответствие продукта ожиданиям, поэтапно:
- Планирование: Определение стратегии тестирования, объема, ресурсов, сроков, рисков и критериев успеха/выхода в Test Plan для эффективного управления процессом.
- Мониторинг и контроль: Отслеживание прогресса тестирования, сравнение фактических результатов с планом, корректировка отклонений и управление рисками в реальном времени.
- Проектирование и анализ: Анализ требований, идентификация тест-условий, проектирование тест-кейсов и сценариев на основе рисков и покрытия (например, с использованием RTM).
- Реализация и выполнение тестов: Создание тест-данных, настройка среды, запуск тестов (ручных/автоматизированных), фиксация результатов и логирование дефектов.
- Создание отчётности: Сбор метрик (покрытие, дефекты, статус), подготовка промежуточных и финальных отчетов для заинтересованных сторон о качестве ПО.
- Завершение и подведение итогов: Закрытие задач, архивация артефактов, анализ уроков (lessons learned), оценка достижения целей и подготовка к следующему циклу.
Уровни тестирования ПО
Тестирование ПО проходит по уровням — от мелких частей к целой системе. Это помогает находить ошибки на ранних этапах. Вот основные уровни (по модели V-модели):
- Компонентное (Unit Testing), или модульное тестирование: Проверяем отдельные модули или компоненты (например, одну функцию или класс) в изоляции. Цель — убедиться, что каждый «кирпичик» работает правильно сам по себе. Тестировщик (часто разработчик) использует драйверы/стабы для имитации окружения. Пример: тест на функцию расчёта суммы — вводим данные, проверяем вывод. Важно: фокус на коде, выявляет 60–70% багов рано.
- Интеграционное тестирование (Integration Testing): Соединяем протестированные модули и проверяем их взаимодействие (интерфейсы, данные между ними). Цель — поймать проблемы на стыках, как несовместимость или ошибки передачи данных. Подходы: big bang (все сразу), топ-даун/боттом-ап. Пример: модуль базы данных + модуль UI — проверяем, передаётся ли запрос правильно. Достоверно: здесь находят баги, которые одиночные тесты пропустили.
- Системное тестирование (System Testing): Тестируем всю систему как единое целое в реальной среде (с ОС, hardware). Цель — проверить, соответствует ли продукт требованиям (функциональность, производительность, безопасность). Включает функциональное/нефункциональное тестирование. Пример: полная CRM-система — от логина до отчётов. Проводит независимая команда, имитируя реальное использование.
- Приёмочное тестирование (Acceptance Testing): Финальная проверка заказчиком или пользователями: «Годится ли продукт для работы?». Цель — подтвердить, что система решает бизнес-задачи, соответствует контракту. Типы: альфа (внутренняя), бета (реальные пользователи). Пример: клиент тестирует app на удобство и точность. Если OK — сдаём в эксплуатацию. Фокус на пользовательском опыте, а не на коде.
Виды тестирования
Виды могут быть как функциональные так и нет, всё зависит от задач, целей и вопросов.
Функциональное тестирование (Functional Testing) фокусируется на проверке ЧТО делает система по требованиям: бизнес-логика, ввод/вывод данных, поведение функций. Оно отвечает на вопрос «Соответствует ли продукт спецификациям?»
Нефункциональное тестирование Non-functional testing Это тестирование того, КАК система работает, а не того, ЧТО она делает. Оно проверяет характеристики системы: производительность, надежность, удобство использования и т.д. Основные виды внутри нефункционального тестирования можно выделить: удобство, производительность, безопасность.
Если сомневаешься: Спроси «Это ломает функцию (функциональное) или ухудшает качество (нефункциональное)?»
Тестирование пользовательского интерфейса. UI Testing (User Interface Testing) — это проверка того, что графический интерфейс приложения (кнопки, меню, шрифты, поля ввода) корректно отображается так, как ожидает пользователь. Простыми словами: Это ответ на вопрос «Верно ли отображается интерфейс для пользователя?».
Тестирование производительности (Performance testing) выполняется для оценки производительности программного продукта. К его основным направлениям относятся:
Нагрузочное тестирование (Load testing): Оценка поведения системы при возрастающей нагрузке (количество одновременных пользователей и/или транзакций) с целью определения максимально допустимого уровня нагрузки.
Объёмное тестирование (Volume testing): Проверка системы при работе с большими объемами данных (например, в базах данных).
Стрессовое тестирование (Stress testing): Оценка работы системы на граничных значениях нагрузки или за их пределами при ограниченных ресурсах (память, доступ к серверу).
Тестирование удобства пользования (Usability testing / UX) определяет, насколько разрабатываемый продукт является удобным в использовании, легким для освоения, понятным и привлекательным для конечных пользователей в рамках заданных условий.
Тестирование безопасности (Safety testing) (Сэйфти Тэстинг) — это проверка программного продукта с целью оценки его уровня защищенности. Помимо этого, оно включает анализ рисков, тестирование на устойчивость к хакерским атакам, вирусам и несанкционированному доступу к конфиденциальным данным.
Санитарное тестирование (Sanity testing) (Сэнити Тэстинг), также называемое проверкой согласованности или исправности, представляет собой узконаправленную проверку. Её достаточно, чтобы доказать соответствие конкретной функции требованиям, заявленным в спецификации.
Тестирование сборки (Build Verification Test) определяет соответствие выпущенной версии критериям качества, необходимым для начала тестирования. По своим целям оно является аналогом дымового тестирования, проводимого для приемки новой версии в дальнейшее тестирование или эксплуатацию.
Дымовое тестирование (Smoke testing) представляет собой короткий цикл проверок, выполняемых для подтверждения того, что после сборки нового или исправленного кода приложение успешно запускается и выполняет свои основные функции.
Регрессионное тестирование (Regression testing) — это вид тестирования, направленный на проверку изменений в приложении или его окружении (исправление дефектов, слияние кода, миграция на другую ОС или базу данных). Его цель — подтвердить, что ранее работающая функциональность продолжает функционировать корректно.
Тестирование установки (Installation testing) проверяет успешность инсталляции, настройки, а также процессов обновления и удаления программного обеспечения. Например, сборка мобильного приложения может работать самостоятельно, но при установке поверх предыдущей версии из App Store возникают внутренние конфликты, препятствующие её запуску.
Тестирование локализации (Localization testing) оценивает корректность версии программного продукта с точки зрения языковых и культурных аспектов. В процессе проверяется работа приложения для конкретных регионов, включая отображение языков, строк, чисел, дат, валют и других локализованных элементов.
Конфигурационное тестирование (Configuration testing) проверяет работу программного обеспечения на различных конфигурациях системы, включая заявленные платформы, поддерживаемые драйверы и различные комплектации компьютеров.
- Клиентское тестирование
- Серверное тестирование
Тестирование доступности (Accessibility testing) — это проверка приложения на соответствие рекомендациям документа W3C, а именно стандарту Web Content Accessibility (WCAG) 2.1. Специалисты оценивают, насколько приложение доступно для людей с ограниченными возможностями.
Кросс браузерное тестирование проверяет корректность отображения и функционирования веб-приложения в разных браузерах и их версиях. Его цель — обеспечить единообразный пользовательский опыт независимо от выбранного браузера.
Тестирование баз данных (Database Testing). Проверяет целостность данных, выполнение запросов, производительность СУБД и соответствие схемы данных требованиям.
Менее популярные виды тестирования
Тестирование совместимости (Compatibility Testing). Проверяет, как приложение работает в разных окружениях, таких как различные браузеры, устройства, операционные системы, сети или оборудование. Это более широкое понятие, чем кросс браузерное тестирование.
Тестирование на отказ и восстановление (Failover & Recovery Testing). Оценивает, как система восстанавливается после сбоев (например, отказ сервера или разрыв сети) и продолжает ли она работать в деградированном режиме.
Тестирование интернационализации (Internationalization Testing — i18n). Проверяет, готов ли код приложения к локализации (например, поддержка Unicode, отделение строк от кода, адаптация под разные языки).
Тестирование документации (Documentation Testing). Проверяет точность и полноту пользовательской документации, руководств и справки.
Тестирование API (API Testing). Проверяет бизнес-логику на уровне прикладного программируемого интерфейса (API), без использования графического интерфейса.
Тестирование удобства сопровождения (Maintainability Testing). Оценивает, насколько легко можно вносить изменения в код, исправлять ошибки и адаптировать систему к новым требованиям.
Тестирование масштабируемости (Scalability Testing). Определяет, как система справляется с увеличением нагрузки (пользователей, данных, транзакций) и можно ли легко наращивать ее мощности.
Пользовательское тестирование (User Testing). Проводится реальными пользователями в условиях, максимально приближенных к реальным, для оценки удобства и практичности продукта.
A/B тестирование (A/B Testing). Сравнивает две версии функции или интерфейса, чтобы определить, какая из них лучше достигает поставленных целей.
Итог 1 части
Первый шаг к карьере в QA успешно пройден: вы теперь знаете основы, главные отличия и как презентовать эти знания на интервью. Вы научились давать четкие, лаконичные ответы, и это — огромное преимущество. Но что отличает рядового специалиста от ведущего? Глубина погружения и умение решать нестандартные задачи. В следующей части мы выйдем за рамки учебников и сосредоточимся на развитии именно этих навыков. Мы поговорим о том, как тестировать то, что не имеет инструкций, и как ваш образ мышления становится главным инструментом в создании безупречного продукта. Переключайтесь на часть 2, впереди — самое интересное!
Часть 2 —>