Функциональное тестирование на примерах: цели, виды, инструменты и трудности
Функциональное тестирование — это ключевая часть процесса контроля качества программного обеспечения. Оно помогает убедиться, что продукт выполняет главные функции, заявленные в требованиях. То, для чего это приложение, сайт или другой электронный сервис был создан. В ходе проверки нужно убедиться, что в приложении доставки действительно можно выбрать и заказать товар, в агрегаторе медицинских услуг — записаться к врачу, а на сайте кинотеатра — забронировать места на удобный сеанс.
Цель функционального тестирования — проверить, соответствует ли работа приложения ожиданиям конечных пользователей и спецификациям, предоставленным разработчикам.
Функциональное тестирование фокусируется только на том, выполняет ли система свои целевые функции. Вопрос стоит такой: работает или не работает? А как работает (достаточно ли быстро, удобно, стабильно) — это проверит нефункциональное тестирование.
В статье:
Основные задачи функционального тестирования
Можно выделить следующие:
1. Проверка соответствия системы заявленным требованиям
Все, что указано в спецификациях и необходимо для осуществления клиентом целевого действия (покупки, открытия счета, бронирования и т.д.), должно работать.
Пример: при тестировании интернет-магазина важно проверить, что кнопка "Добавить в корзину" действительно добавляет товары в корзину, а при оформлении заказа все элементы работают, как ожидается. Если это не так, пользователи могут столкнуться с проблемами, что приведет к потерям клиентов и дохода.
2. Проверка корректной работы всех функций программы
Функциональное тестирование проверяет, как каждая отдельная часть программы выполняет свою работу. Важно протестировать не только основные сценарии использования, но и редкие или сложные случаи, которые могут возникнуть в процессе работы.
Пример: при регистрации нового пользователя на сайте нужно убедиться, что все поля формы корректно принимают данные и правильно их обрабатывают. Например, если пользователь вводит неверный адрес электронной почты, система должна вывести соответствующее сообщение об ошибке. Если уже на этапе регистрации возникают ошибки, дальше пользователь не пройдет, ничего не закажет и не забронирует, то есть бизнес потеряет клиента.
3. Обеспечение безошибочной работы программного продукта в реальных условиях
Это означает, что приложение должно быть устойчивым к изменяющимся факторам, таким как различные устройства, операционные системы и возможные проблемы с сетью.
Пример: при тестировании мобильного приложения для онлайн-банкинга нужно проверить, как оно работает на разных устройствах и операционных системах, а также как справляется с большим числом пользователей. Если приложение не будет выдерживать изначально прописанную в характеристиках нагрузку или будет плохо работать при низкой скорости интернета, это сильно повлияет на пользовательский опыт.
Функциональное тестирование помогает убедиться, что приложение выполняет свои основные функции удовлетворительно и стабильно в разных условиях. Это базовый этап проверки программного продукта, чтобы обеспечить удовлетворенность пользователей.
Этапы функционального тестирования
Просто зайти в приложение, собрать корзину продуктов и оформить заказ — недостаточно, чтобы быть уверенным в работе сервиса доставки. Люди идут к одной цели (заказ продуктов, например) очень разными путями. Поэтому важно проверить разные сценарии и не упустить проверку мелких, но значимых для успешного конечного результата функций. Вот почему функциональное тестирование стоит выстраивать последовательно по следующим шагам:
1. Подготовка
Тестировщик готовит все необходимые материалы и ресурсы для начала тестирования.
- Разработка плана тестирования. Здесь определяются цели тестирования, тестируемые функции и способы их проверки. Важно понимать, какие сценарии нужно протестировать, чтобы удостовериться, что программа выполняет все заявленные задачи. Например, если вы тестируете форму регистрации на сайте, нужно проверить все поля ввода, их корректность и правильность вывода сообщений об ошибках.
- Создание тест-кейсов. Это документ, в котором подробно описаны шаги для тестирования. Каждый тест-кейс включает в себя:
1) Описание действия, которое должен выполнить пользователь.
2) Ожидаемый результат.
3) Дополнительные условия (например, тестирование в определенном браузере или с заданными данными). Например, для тестирования формы "Вход" тест-кейс будет содержать шаги: ввести правильный логин и пароль, нажать кнопку "Войти", проверить, что пользователь попадает на главную страницу.
2. Исполнение тестов
После подготовки тестов наступает этап их исполнения, где важно точно следовать подготовленным сценариям.
- Запуск тестов. Тестировщик выполняет тесты в выбранной среде, будь то мобильное приложение, веб-приложение или другая платформа. Важно протестировать систему на разных устройствах, чтобы убедиться, что она работает на всех поддерживаемых платформах.
3. Оценка
На этом этапе тестировщик анализирует результаты и оформляет отчет о тестировании.
- Сравнение фактических и ожидаемых результатов. Все ошибки и несоответствия фиксируются в отчете. Например, если при нажатии кнопки "Оформить заказ" появляется не та страница, это критическое отклонение от требований.
- Документирование дефектов. Каждая выявленная ошибка должна быть описана, чтобы команда разработчиков могла её исправить. Отчет должен содержать точное описание проблемы и шаги для её воспроизведения.
После того как все тесты выполнены, и ошибки зафиксированы, тестировщик подводит итог. Важно определить, соответствует ли система требованиям, и насколько программный продукт готов к использованию. Например, если после исправления ошибок повторное тестирование показало, что система работает корректно, можно завершить тестирование.
Виды функционального тестирования
Функциональное тестирование включает несколько видов, каждый из которых решает свою задачу. Рассмотрим основные из них.
1. Модульное тестирование (Unit Testing)
Это проверка отдельных модулей программы, то есть маленьких частей, которые выполняют конкретные функции. Этап позволяет выявить ошибки на самом раннем этапе разработки.
Например, если в программе есть функция, которая рассчитывает цену товара с учетом скидки, модульное тестирование будет проверять, правильно ли эта функция обрабатывает все входные данные и выводит результат в соответствии с требованиями.
2. Интеграционное тестирование (Integration Testing)
После того как модули программы проверены, можно соединить их друг с другом. Интеграционное тестирование помогает удостовериться, что все части системы работают вместе корректно.
Пример: после того как покупатель интернет-магазина добавил товар в корзину, необходимо проверить, как данные о товаре передаются в систему оплаты и доставку. Тестировщик проверяет, правильно ли работают все интеграции между модулями.
3. Системное тестирование (System Testing)
Системное тестирование — это проверка всей системы в целом. После того как все модули и их взаимодействие протестированы, важно убедиться, что приложение в целом от входа в него и до совершения желаемого действия соответствует требованиям и работает как ожидается.
Для веб-приложения это может включать проверку всех функций сайта: регистрация пользователей, добавление товаров в корзину, оформление заказа, а также корректное отображение страницы на разных устройствах и браузерах.
4. Приемочное тестирование (Acceptance Testing)
Приемочное тестирование проверяет, готов ли продукт для использования конечными пользователями. Это своего рода финальная проверка перед выпуском продукта.
Задача тестировщика — убедиться, что система соответствует заявленным требованиям и готова к эксплуатации. Например, в случае с сайтом электронной коммерции приемочное тестирование проверяет, все ли процессы покупки работают правильно, а сайт удовлетворяет потребности клиентов.
5. Регрессионное тестирование (Regression Testing)
Регрессионное тестирование важно после внесения изменений в программу. Оно помогает убедиться, что новые функции не нарушили работу уже существующих. Например, если в приложение добавили новый платежный метод, важно протестировать, не нарушилась ли работа уже существующих способов оплаты.
Этот вид тестирования помогает избежать появления новых ошибок в старых функциях программы после обновлений или исправлений.
Каждый из видов функционального тестирования применяется на соответствующем ему этапе разработки программного продукта.
Методы функционального тестирования
Функциональное тестирование может иметь свои особенности в зависимости от условий проведения и выбранного подхода. Так выделяются следующие методы.
1. Черный ящик (Black-box testing)
Метод черного ящика подразумевает, что тестировщик не имеет доступа к внутренней структуре программы. Он проверяет, как система реагирует на входные данные, но не смотрит на то, как именно эти данные обрабатываются внутри.
Пример: тестирование функции поиска на сайте. Тестировщик вводит запрос, например, название товара, и проверяет, что система правильно находит нужный продукт и отображает его на странице. При этом он не анализирует, как реализована логика поиска, а только проверяет результат.
2. Белый ящик (White-box testing)
Белый ящик позволяет тестировщику анализировать исходный код программы. Здесь тестирование включает в себя проверку кода, алгоритмов и логики работы приложения.
Пример: в системе обработки платежей важно, чтобы транзакции проверялись на наличие ошибок. Тестировщик будет проверять сам алгоритм работы с транзакциями, а не только конечный результат, чтобы убедиться, что все данные обрабатываются правильно и соответствуют логике, прописанной в коде.
3. Серый ящик (Gray-box testing)
Серый ящик сочетает в себе методы черного и белого ящиков. Тестировщик имеет частичное представление о внутренней логике программы, что позволяет ему проводить тестирование как с внешней, так частично с внутренней стороны.
Пример: если тестировать функционал регистрации на сайте, тестировщик может знать, как система проверяет введенные данные, но не имеет полного доступа к коду. Он может проверять, правильно ли система работает с формами регистрации и базой данных.
4. Положительное тестирование
Положительное тестирование фокусируется на сценариях, когда система работает так, как ожидалось. Здесь тестировщик проверяет, выполняются ли все функции программы в стандартных условиях.
Пример: на сайте для бронирования билетов положительное тестирование проверит, что пользователь может правильно выбрать дату, время, билет и успешно оформить заказ.
5. Негативное тестирование
Негативное тестирование проверяет, как система реагирует на ошибочные, некорректные данные или нестандартные ситуации.
Пример: на сайте, где пользователи могут бронировать жилье, негативное тестирование проверит, как система отреагирует на ввод некорректных данных, например, даты, которая уже прошла, или неправильный формат номера телефона.
6. Техники тест-дизайна
Техники тест-дизайна помогают оптимизировать создание тестов, делая их более эффективными и экономя время.
- Классы эквивалентности. Этот метод делит входные данные на несколько групп, где результат работы системы будет одинаковым для всех данных в одной группе. Например, для формы ввода почтового индекса можно протестировать несколько валидных значений (например, 10101, 20202), но не проверять каждый возможный индекс.
- Метод граничных значений. Ошибки часто возникают на границах диапазонов. Например, если в системе скидки на товары начинаются с 10 единиц, важно протестировать, как система будет работать с количеством 9, 10 и 11 товаров, чтобы избежать ошибок на стыке классов.
- Техника состояния переходов. Этот метод используется для тестирования объектов, которые проходят через разные состояния. Например, в приложении для отслеживания посылок важно протестировать все возможные стадии, через которые проходит заказ (например, «заказано», «отправлено», «доставлено»), и убедиться, что переходы между ними проходят корректно.
- Попарное тестирование. Этот метод помогает протестировать все возможные комбинации двух параметров. Пример: в системе бронирования билетов есть поля для выбора маршрута, даты и типа билета. Попарное тестирование позволит протестировать все возможные сочетания маршрутов и типов билетов, не проверяя все комбинации всех параметров.
Сочетание разных методов функционального тестирования повышает качество проверки, позволяет сэкономить ресурсы и время.
Примеры функциональных тестов
Давайте рассмотрим несколько реальных примеров, которые помогут понять, как это работает.
Проверка логики работы корзины в интернет-магазине
Представьте, что вы покупаете товар в интернет-магазине. После того как товар добавлен в корзину, система должна правильно посчитать итоговую сумму с учётом скидок, налогов и доставки.
Пример: Тестировщик проверяет, как система считает стоимость при добавлении нескольких товаров в корзину. Допустим, на сайте есть скидка 10% на второй товар, и бесплатная доставка при заказе на сумму от 5000 рублей. Тестировщик должен проверить, что система правильно применяет скидки и рассчитывает стоимость, а при превышении порога в 5000 рублей доставка становится бесплатной.
Если в какой-то момент программа неправильно считает итоговую сумму, это может привести к тому, что пользователи не смогут правильно оплачивать свои заказы — а это сразу же снизит качество работы системы.
Тестирование формы регистрации на сайте
Еще один тип функционального теста — проверка работы формы регистрации на сайте. Важно, чтобы вся логика взаимодействия с пользователем работала корректно.
Пример: тестировщик вводит в форму регистрации невалидные данные: например, email с ошибками в домене или короткий пароль. Система должна отклонить такие данные и выдать сообщение об ошибке. Это тестирование помогает убедиться, что система не принимает неправильную информацию и не пропускает пользователей с ошибками в форме.
Кроме того, стоит проверить, что при успешной регистрации пользователь получает письмо с подтверждением, а его данные правильно сохраняются в базе данных.
Проверка логики оформления заказа в приложении
В мобильных приложениях функциональное тестирование проверяет, как работает оформление заказа, включая оплату и выбор способа доставки.
Пример: тестировщик открывает приложение для заказа еды и проверяет, что при добавлении нескольких блюд в корзину система правильно отображает информацию о каждом товаре, пересчитывает сумму и не делает ошибок при добавлении промокодов. При попытке оплатить заказ, если данные карты введены неверно, система должна указать на ошибку и предложить ввести данные снова. Это позволяет убедиться, что пользователи не столкнутся с проблемами при платежах.
Проверка работы системы учёта баллов в лояльности
Многие магазины или сервисы используют систему лояльности, где пользователи могут накопить бонусы и использовать их для получения скидок.
Пример: если пользователь зарабатывает баллы за покупку товаров, тестировщик должен проверить, что баллы правильно начисляются и что система верно вычисляет, сколько баллов нужно для получения скидки. Важно убедиться, что система не допускает ошибок, например, когда пользователи получают больше баллов, чем должны, или наоборот — не получают их вообще. Эта функция влияет на доверие клиентов.
Тестирование логики взаимодействия с API
Многие веб-сервисы используют API для обмена данными между системами. Проверка правильности работы этих взаимодействий также является частью функционального тестирования.
Пример: приложение для бронирования авиабилетов должно отправлять запросы к API для получения актуальных данных о рейсах и ценах. Тестировщик проверяет, что запросы к API правильно обрабатываются, а данные (например, стоимость билетов, доступные места) отображаются корректно. При ошибке в запросе система должна выдать понятное сообщение об ошибке, а не показывать пустую страницу или ошибку сервера.
Тестирование калькулятора расчёта налогов
Многие онлайн-сервисы, включая магазины и бухгалтерские программы, предоставляют калькуляторы, которые помогают пользователям рассчитать налоги или стоимость товаров с учётом разных налоговых ставок.
Пример: в калькуляторе расчёта налогов важно проверить, правильно ли программа считает итоговую сумму с учётом региона пользователя (например, НДС в разных странах может отличаться). Тестировщик должен проверить различные сценарии: например, введение неправильной ставки налога, чтобы система не приняла такие данные или проверку расчёта для разных валют.
Как видно из примеров, функциональное тестирование охватывает различные аспекты работы системы. Важно не только проверить, как приложение работает в стандартных условиях, но и убедиться, что оно адекватно реагирует на нестандартные сценарии.
Инструменты для функционального тестирования
1. Selenium — автоматизация тестирования веб-приложений
Selenium — один из самых популярных инструментов для тестирования веб-приложений. Он позволяет автоматизировать проверку функциональности веб-сайтов в разных браузерах и на разных операционных системах. Selenium работает с основными браузерами, такими как Chrome, Firefox, Internet Explorer, Safari, и поддерживает такие языки программирования, как Java, Python и C#.
Пример: тестировщик может использовать Selenium для автоматизации процесса проверки формы регистрации на сайте. Нужно убедиться, что при вводе некорректных данных (например, неправильного email) система выдает ошибку. Это можно сделать, написав тест в Selenium, который будет автоматически заполнять форму, вводить данные и проверять корректность работы.
2. JUnit и TestNG — инструменты для модульного тестирования
JUnit и TestNG — это фреймворки, которые предназначены для модульного тестирования в языках Java. Эти инструменты позволяют создавать тесты, которые проверяют работу отдельных функций программы.
Пример: Например, при разработке приложения для интернет-магазина, можно использовать JUnit для тестирования работы корзины. Нужно проверить, правильно ли система добавляет товары в корзину, а также пересчитывает стоимость заказа, включая скидки.
TestNG отличается от JUnit расширенными возможностями для параллельного тестирования, более гибкими параметрами конфигурации и возможностью группировки тестов. Это особенно полезно при тестировании сложных приложений, которые требуют проверки множества сценариев.
3. Postman — тестирование API
Postman — это инструмент для тестирования API, который используется для проверки взаимодействия различных компонентов системы через интерфейс программирования приложений (API). С его помощью можно тестировать запросы, ответы, а также проверить правильность работы различных методов API, таких как GET, POST, PUT, DELETE.
Пример: если у вас есть API для управления аккаунтами пользователей в приложении, можно использовать Postman для отправки запросов на создание, редактирование или удаление аккаунта пользователя. Тестировщик проверяет, что сервер правильно обрабатывает запросы и возвращает правильный статус и данные.
4. Appium — тестирование мобильных приложений
Если вы работаете с мобильными приложениями, то Appium — это инструмент, который поможет вам автоматизировать функциональное тестирование как для Android, так и для iOS. Appium поддерживает разные языки программирования (Java, Python, Ruby, и другие) и позволяет проводить тесты на реальных устройствах и эмуляторах.
Пример: Appium можно использовать для проверки формы авторизации в мобильном приложении. Тестировщик может написать тест, который будет проверять, что приложение корректно реагирует на правильные и неправильные данные для входа, например, при вводе неверного пароля, оно должно показать ошибку.
5. Cucumber — поведенческое тестирование
Cucumber — это инструмент для поведенческого тестирования (Behavior Driven Development, BDD). Он позволяет создавать тесты, которые описывают поведение приложения на естественном языке, понятном не только разработчикам, но и бизнес-аналитикам или клиентам.
Пример: Для интернет-магазина можно использовать Cucumber, чтобы протестировать процесс оформления заказа. Вместо того, чтобы писать сложный код, тестировщик может описать сценарий на обычном английском, например: «Когда пользователь добавляет товар в корзину, он должен увидеть кнопку "Оформить заказ"». Этот тест будет выполнен автоматически, проверяя, соответствует ли поведение системы описанию.
6. Jenkins — автоматизация процесса тестирования
Jenkins — это инструмент для автоматизации процессов, включая тестирование. Он используется для настройки непрерывной интеграции (CI) и непрерывного тестирования (CD). С помощью Jenkins можно настроить автоматическое выполнение тестов при каждом изменении в коде или при добавлении новых функций.
Пример: Каждый раз, когда разработчики вносят изменения в код приложения, Jenkins автоматически запускает все тесты. Это гарантирует, что код продолжает работать корректно, и помогает быстро выявить ошибки.
Инструменты для функционального тестирования позволяют автоматизировать и повысить эффективность процесса проверки. В зависимости от типа приложения, цели тестирования и ресурсов, есть наиболее подходящие инструменты, который помогут в сжатые сроки выявить баги, повысить качество сервиса и убедиться, что система работает так, как задумано.
Проблемы и вызовы в функциональном тестировании
Давайте рассмотрим основные трудности процесса:
1. Создание тест-кейсов и их поддержка
Одной из главных задач при функциональном тестировании является создание тест-кейсов. Это описания сценариев, по которым будет проводиться проверка. Например, для интернет-магазина тестировщик должен разработать кейс, в котором описывается, как пользователь добавляет товар в корзину и оформляет заказ. Но на практике часто возникает проблема с созданием полных и корректных тестов.
Проблема заключается в том, что тесты часто требуют корректировки из-за изменения спецификаций системы или новых функций, добавленных разработчиками. Поэтому поддержка тестов становится задачей на постоянной основе. Если система обновляется, тестировщикам приходится модифицировать уже существующие тесты, что требует дополнительных ресурсов и времени.
2. Тестирование всех возможных сценариев
Каждый продукт или приложение имеет множество сценариев использования, которые можно и нужно тестировать. Однако трудно проверить действительно все из них на практике. Это особенно касается сложных систем с множеством вариантов взаимодействий.
Например, для онлайн-банкинга, где пользователь может провести десятки различных операций, создать тесты для всех возможных сценариев будет крайне сложно. Не всегда удаётся протестировать все сценарии, что увеличивает вероятность появления багов или дефектов.
Решение заключается в использовании методов тест-дизайна, таких как классы эквивалентности и метод граничных значений, чтобы ограничить количество тестов, но при этом обеспечить достаточное покрытие возможных ситуаций.
3. Интеграция тестов на разных уровнях
При функциональном тестировании необходимо не только проверять отдельные модули или компоненты, но и их взаимодействие. Интеграционное тестирование проверяет, как несколько частей системы работают вместе. Например, как база данных взаимодействует с пользовательским интерфейсом или как веб-приложение интегрируется с API.
Проблема возникает, когда эти компоненты невозможно протестировать в изоляции или когда у разработчиков нет достаточного количества ресурсов для создания отдельных тестов для каждого уровня. В таких случаях важно предусмотреть использование подходов, которые позволяют тестировать интеграции на разных уровнях.
4. Невозможность тестирования всех условий в реальных условиях
Зачастую тестировщикам приходится работать в искусственно созданных условиях — например, на локальных серверах или в тестовых средах, которые не всегда точно воспроизводят реальные условия. Поэтому важно, чтобы тесты учитывали реальные сценарии.
Пример: тестирование работы мобильного приложения может отличаться в зависимости от устройства, на котором оно запускается. Разные устройства могут иметь различные операционные системы, разрешение экрана и аппаратные особенности, что затрудняет создание идеальных тестов, которые бы покрывали все эти аспекты.
5. Высокие требования к качеству и производительности
Тестировщики часто сталкиваются с необходимостью не только проверять корректность работы системы, но и ее производительность. Важной частью функционального тестирования является проверка, как система работает при нагрузке, например, при большом количестве одновременных пользователей.
Проблема в том, что не всегда есть возможность провести такие тесты в условиях, приближенных к реальной эксплуатации, или же тестирование требует значительных ресурсов. Это может включать в себя настройку сервера, создание специальной нагрузки или использование дополнительных инструментов для проверки производительности, таких как JMeter.
6. Проблемы с поддержкой тестов после релиза
После выпуска новой версии программного продукта тестирование не заканчивается. Даже если функциональность работает корректно, могут возникать проблемы из-за изменений в системах или в средах, где продукт используется. Это может потребовать дополнительной работы по обновлению тестов или добавлению новых, чтобы они соответствовали новым требованиям.
Кроме того, некоторые баги могут быть обнаружены уже в процессе эксплуатации, когда пользователи начинают активно использовать программу. Важно иметь механизм для быстрого реагирования и обновления тестов для новых функций и устранения дефектов.
Подведем итог
Функциональное тестирование критически важно для обеспечения надежности и удобства работы с программными продуктами. Этот процесс помогает выявить и устранить ошибки, которые могут повлиять на работу системы, удовлетворенность пользователей и прибыльность бизнеса.
Если вы хотите углубить свои знания в этой области и научиться проводить тестирование с использованием популярных инструментов, таких как Selenium, PyTest или JUnit, начните с бесплатного вводного практикума в школе автоматизации тестирования QA.GURU. Здесь люди из совершенно разных сфер деятельности получают профессию QA-инженера.
Вы сможете освоить автоматизацию тестирования за 3-4 месяца, независимо от того, имеете ли вы опыт в программировании. Школа обучает новичков и тех, кто уже работает в IT, но хочет апгрейда в навыках, должности и зарплате. Вы научитесь автоматизировать тесты на Java, Python или JavaScript и получите практические кейсы для вашего портфолио.
Карьерный центр QA.GURU поможет найти первую работу в сфере тестирования или получить оффер более высокого грейда (Middle, Senior, Lead — в зависимости от амбиций).
Записаться на бесплатное занятие и подробнее узнать о программе курсов можно на сайте школы:
функциональное и нефункциональное тестирование | поиск и анализ функциональных багов | интеграционное функциональное тестирование | функциональное тестирование мобильных приложений | тестирование пользовательского интерфейса | функциональное тестирование веб сервисов | functional testing | qa тест функциональности программного обеспечения | кейсы функционального тестирования | разработка автотестов | qa без программирования | функциональное тестирование на основе бизнес требований
Привет, ребята! Сегодня поговорим о том, как сделать тестирование пользовательского интерфейса (UI) максимально гладким и избежать распространенных ошибок.
Разбираемся, зачем нужны тесты приложений, какие виды тестирования бывают и чем может помочь мобильная ферма Selectel.
В статье разберу, как протестировать интерактивные прототипы с помощью Pathway. Это относительно новый сервис, который уже внедрили дизайнеры ВкусВилл, Циан и VK.
Тестировщик ПО — это специалист, который тестирует программы, игры и приложения. Его задача — проверить, работает ли ИТ-продукт так, как было задумано. А при обнаружении ошибки — зафиксировать её и передать информацию в отдел разработки. В статье рассмотрели, что должен знать и уметь тестировщик, как им стать.