Тестирование программного обеспечения – это процесс, направленный на выявление потенциальных ошибок и дефектов в приложении до его выпуска. Есть четыре уровня тестирования:
- Модульное тестирование. Заключается в проверке каждой отдельной составляющей программного продукта. Обычно выполняется программистами еще на стадии разработки.
- Интеграционное тестирование. Следующий этап, в рамках которого протестированные модули объединяются, а тестировщики проверяют их взаимосвязи. На этом уровне выявляются ошибки, возникающие вследствие взаимодействия модулей друг с другом.
- Системное тестирование. Проводится после объединения всех компонентов в единую систему для проверки работы программы с точки зрения пользователя.
- Приемочное тестирование. Финальный этап, на котором небольшая группа реальных пользователей или организованная самой компанией команда проверяет, соответствует ли продукт всем заданным требованиям.
В этой статье мы подробно рассмотрим системное тестирование.
БЕСПЛАТНО СКАЧАТЬ КНИГИ в телеграм канале "Библиотека тестировщика"
Определение системного тестирования
Системное тестирование — это вид тестирования программного обеспечения, при котором проверяется работа продукта в целом, его соответствие функциональным и нефункциональным требованиям. Оно оценивает, как полностью интегрированное приложение работает и справляется со своими задачами.
Основная цель этого типа тестирования — убедиться, что все компоненты программы действуют совместно без ошибок, выполняют свои функции и отвечают заданным требованиям. При этом проверяется дизайн, поведение и соответствие продукта ожиданиям пользователей.
Системное тестирование выполняется командой QA после интеграционного тестирования и перед приемочным. Оно проводится в среде, максимально приближенной к рабочей (продакшену). Этот тип тестирования относится к тестированию “черного ящика”, так как тестировщики не имеют доступа к внутренней структуре ПО.
Системному тестированию подлежат модули, которые успешно прошли интеграционное тестирование. Интеграционное тестирование выявляет ошибки во взаимодействии между объединенными модулями. А системное находит проблемы во взаимодействии этих модулей с системой в целом.
Проще говоря, этот вид тестирования проверяет всю систему.
Пример системного тестирования
Рассмотрим пример из реальной жизни. Представьте процесс производства автомобиля. Сначала производитель создает отдельные детали, такие как тормоза, двигатель, сиденья, руль, колеса и прочее. Затем каждую деталь проверяют отдельно — это похоже на модульное тестирование в разработке программ.
Когда все детали проверены по отдельности, их объединяют в одно целое. После этого убеждаются, что их совместная работа не привела к неполадкам и не помешала работе отдельных частей. Такой подход можно назвать аналогом интеграционного тестирования.
После того, как установлено, что все части машины работают совместно без сбоев, проводится проверка всей машины целиком. Это и есть системное тестирование. Мы убеждаемся, что машина едет плавно, а все ее элементы, такие как тормоза, коробка передач и колеса, работают исправно и в соответствии с требованиями.
Очевидно, что потребитель скорее всего приобретет автомобиль, который полностью отвечает его ожиданиям.
Для чего необходимо системное тестирование?
- Даже после успешного модульного и интеграционного тестирования могут оставаться скрытые дефекты. Системное тестирование как раз и помогает их выявить.
- Оно проверяет программное обеспечение на соответствие функциональным и нефункциональным требованиям. Эта операция проводится впервые за весь цикл разработки. Таким образом, проверяются архитектура, дизайн и соответствие бизнес-требованиям.
- Среда тестирования максимально похожа на рабочее окружение. Поэтому успешное системное тестирование вызывает уверенность в качестве готового продукта.
Что проверяется в рамках системного тестирования?
Этот вид тестирования оценивает программное обеспечение по следующим аспектам:
- Взаимодействие между компонентами программы, включая внешние устройства. Проверяется работа всей системы. Это сценарий сквозного тестирования (end-to-end testing).
- Соответствие получаемых результатов работы программы ожидаемым.
- Соответствие функциональным и нефункциональным требованиям.
- Пользовательский опыт при взаимодействии с программным обеспечением.
Мы перечислили несколько важных критериев. Однако системное тестирование охватывает проверку многих других аспектов. Для того, чтобы проверить работу ПО “снаружи” (без анализа его внутреннего устройства), необходимо разработать подробные тест-кейсы и тестовые наборы.
Критерии входа и выхода для системного тестирования
Давайте разберем, когда можно приступать к системному тестированию и как можно понять, что пора переходить к следующему этапу.
Критерии входа:
- Программа прошла интеграционное тестирование. Все тест-кейсы выполнены. Отсутствуют критичные и серьезные баги.
- Тест-план утвержден и подписан.
- Тест-кейсы, тестовые наборы и автоматизированные тестовые скрипты подготовлены к выполнению.
- Тестовая среда настроена.
- Четко определены нефункциональные требования.
Критерии выхода:
- Все намеченные для системного тестирования тест-кейсы выполнены.
- Отсутствуют серьезные дефекты. Если остались открытые баги средней или низкой приоритетности, можно переходить к следующему этапу — приемочному тестированию.
- Подготовлен отчет о тестировании.
Типы системного тестирования
Как уже упоминалось, системное тестирование проверяет софт на соответствие функциональным и нефункциональным требованиям. Следовательно, для оценки системы целиком и ее отдельных частей необходимо применять разнообразные техники.
Ниже приведены основные типы системного тестирования.
- Функциональное тестирование. Рассматривает каждую функциональность на работоспособность и соответствие заявленным требованиям. Если что-то отсутствует, тестировщики сообщают об этом разработчикам. Также они могут предложить новые функции для улучшения программы.
- Тестирование производительности. Это вид нефункционального тестирования. Проверяет стабильность, масштабируемость, быстроту отклика и скорость системы под нагрузкой.
- Тестирование удобства использования. Также относится к нефункциональному тестированию. Проверяет, насколько программа удобна и эффективна для пользователя. Проще говоря, оценивается, насколько легко пользователям работать с программой и использовать ее функции.
- Тестирование надежности. Исследует, работает ли программа корректно и стабильно в заданных условиях в течение определенного периода времени.
- Тестирование безопасности. Выявляет риски и уязвимости в программе. А также проверяет, чтобы она не допускала несанкционированного доступа к данным и ресурсам.
- Тестирование масштабируемости. Анализирует, как программа работает при увеличении или уменьшении числа пользователей.
- Тестирование восстанавливаемости. Диагностирует способность программы восстанавливаться после сбоев и ошибок.
- Тестирование совместимости. Проверяет, насколько хорошо программа взаимодействует со своими компонентами и сторонними продуктами.
- Регрессионное тестирование. Позволяет убедиться, что изменения в коде не нарушили уже работающие функции. Гарантирует стабильность программы при интеграции подсистем и выполнении доработок.
Процесс системного тестирования
Системное тестирование проводится поэтапно:
- Настройка тестовой среды. Первый шаг заключается в создании качественной тестовой среды, которая соответствует рабочему окружению. Настройка включает в себя выбор языков программирования, фреймворков и инструментов тестирования, а также выбор необходимых параметров и конфигураций.
- Создание тест-кейсов. Следующий шаг — создание тест-кейсов для всестороннего тестирования. Также нужно подготовить форму тестового отчета, в котором будет указано количество пройденных и проваленных тест-кейсов.
- Разработка тестовых данных. На этом этапе собираются тестовые данные. Они должны содержать всю необходимую информацию и поля для ввода. Нужно определить благоприятные и неблагоприятные комбинации вводимых и выводимых данных.
- Выполнение тестов. Запуск тест-кейсов с подготовленными данными.
- Выявление багов и дефектов. Если найдены ошибки, их нужно записать в тестовый отчет, созданный на втором этапе.
- Регрессионное тестирование. Разработчики исправляют баги, внося изменения в код. Затем тестировщики проверяют, что эти изменения не нарушили уже работающие функции программы.
- Повторное тестирование. Если во время регрессионного тестирования обнаруживаются неполадки, о них сообщают разработчикам. Тестирование продолжается, пока программный продукт не будет готов к передаче в продакшен.
Достоинства и недостатки системного тестирования
Можно выделить следующие основные плюсы и минусы системного тестирования.
Достоинства:
- Не требует от тестировщиков умения программировать.
- Проверяет продукт целиком и и выявляет ошибки и дефекты, которые не были обнаружены на уровне модульного и интеграционного тестирования.
- Тестовая среда аналогична продакшен-среде.
- Тщательное тестирование ПО приводит к его высокому качеству.
- Улучшает общую производительность, поддерживаемость и надежность системы.
- Поскольку тестирование выявляет все возможные баги и ошибки, команды разработчиков и тестировщиков могут быть уверены в готовности продукта к релизу.
Недостатки
- Затратно по времени.
- Требует наличия высококвалифицированных специалистов по тестированию.
- Сложно реализуется в крупных и комплексных проектах.
- Тестировщики не имеют доступа к исходному коду программы.
- Никакое тестирование не может обнаружить абсолютно все дефекты. Баги могут остаться даже после системного тестирования.
Сравнение системного и приемочного тестирования
Давайте рассмотрим основные различия между системным и приемочным тестированием.
Системное тестирование | Приемочное тестирование |
---|---|
Тестирует программный продукт в целом и проверяет его на соответствие функциональным и нефункциональным требованиям. | Небольшая группа пользователей тестирует программный продукт на соответствие требованиям потребителей. |
Включает в себя функциональное и нефункциональное тестирование. | Включает в себя только функциональное тестирование. |
Проводится после интеграционного тестирования. | Проводится после системного тестирования. |
Использует тестовые данные, созданные тестировщиками. | Использует случайные данные, вводимые пользователями. |
Обнаруженные дефекты можно исправить. | Обнаруженные дефекты считаются браком продукта. |
Учитывает как положительные, так и отрицательные сценарии. | Учитывает только положительные сценарии. |
Смотрите также: “Что такое приемочное тестирование (Acceptance Testing)?”
Заключение
Системное тестирование – очень важный этап в разработке программного обеспечения. В ходе системного тестирования продукт проверяется на соответствие функциональным и нефункциональным требованиям. При правильном выполнении повышается качество, производительность, поддерживаемость и надежность. В противном случае невыявленные ошибки могут проявиться уже после запуска.
Перевод статьи «System Testing».