Нефункциональное тестирование (Non-Functional Testing) является одной из ключевых областей тестирования программного обеспечения. Оно относится к тестированию не функциональных характеристик системы, таких как производительность, масштабируемость, надежность, безопасность, удобство использования и т.д. От функционального тестирования нефункциональное тестирование отличается тем, что оно не проверяет правильность работы функций системы, а скорее оценивает качество ее работы в целом.
Виды нефункциональных тестов
Существует несколько видов нефункциональных тестов, которые могут быть использованы для оценки качества работы системы:
- Производительность: оценка скорости и эффективности работы системы в условиях максимальных нагрузок и нагрузочного тестирования.
- Надежность: оценка способности системы функционировать без сбоев в течение длительного времени и при длительной нагрузке.
- Безопасность: оценка способности системы защитить данные и предотвратить несанкционированный доступ к ним.
- Удобство использования: оценка удобства использования системы пользователем и эргономики интерфейса.
- Совместимость: оценка способности системы работать вместе с другими программами и аппаратными средствами.
Нефункциональные требования
Нефункциональные требования описывают, каким должно быть качество работы системы и каким должен быть ее ресурсный потенциал. Эти требования описываются в документе «Требования к качеству» (Quality Requirements Document) и могут включать в себя следующие параметры:
- Производительность: описывает, как быстро должна работать система и какое количество пользователей она должна обслуживать.
- Надежность: описывает, как часто может возникать сбой системы и как быстро она должна восстанавливаться после него.
- Безопасность: описывает, какие меры защиты должны быть реализованы в системе для защиты данных.
- Удобство использования: описывает, каким должен быть интерфейс системы и как легко пользователь должен с ним работать.
- Совместимость: описывает, какие программы и аппаратные средства должны быть совместимы с системой.
Чем отличаются функциональные и нефункциональные виды тестирования?
Функциональное тестирование проверяет, соответствует ли программа спецификации и выполняет ли она все заданные функции, а нефункциональное тестирование проверяет, как хорошо программа работает, то есть насколько она быстро, надежно и безопасно выполняет свои функции.
Функциональное тестирование является более общим понятием, чем нефункциональное тестирование, поскольку функциональные тесты являются обязательными для того, чтобы убедиться в корректной работе программы, в то время как нефункциональные тесты не всегда обязательны, но их проведение может значительно улучшить качество программы.
Нефункциональное тестирование также отличается от функционального тестирования по тому, что оно ориентировано на качественные аспекты программы, такие как производительность, надежность, безопасность, масштабируемость, доступность и т. д., в то время как функциональное тестирование проверяет, работает ли программа согласно заданной спецификации.
Когда проводится нефункциональное тестирование?
Оно проводится во время разных этапов жизненного цикла программного обеспечения, включая:
- На этапе планирования проекта: на этом этапе определяются требования к качеству программного обеспечения, и включаются нефункциональные требования в план тестирования.
- На этапе проектирования: на этом этапе определяются архитектура и дизайн программного обеспечения, и проверяется соответствие нефункциональных требований этой архитектуре и дизайну.
- На этапе разработки: на этом этапе проводятся различные тесты, включая модульные тесты, интеграционные тесты и системные тесты, для проверки соответствия нефункциональных требований коду.
- На этапе эксплуатации: на этом этапе проводятся тесты производительности, надежности и безопасности для обеспечения надлежащей работы программного обеспечения в реальных условиях эксплуатации.
На каком уровне тестирования можно проводить нефункциональное тестирование?
Нефункциональное тестирование может проводиться на всех уровнях тестирования — модульном, интеграционном, системном и приемочном. Однако, уровень тестирования, на котором проводится нефункциональное тестирование, зависит от типа нефункционального требования.
Важно понимать, что нефункциональное тестирование не является отдельным типом тестирования, а скорее подходом к тестированию, который может применяться на всех уровнях тестирования в зависимости от требований проекта.
В каких видах тестирования применяется нефункциональное тестирование
Оно может быть полезно и применяться в различных видах тестирования, но в некоторых случаях оно может быть особенно важным.
Например, при тестировании системы с высокой нагрузкой (нагрузочное тестирование), необходимо проверить, как система работает при определенных объемах данных, запросов и пользователей. В этом случае нефункциональные тесты могут помочь определить производительность, масштабируемость, устойчивость к нагрузке и другие характеристики системы.
При тестировании безопасности (тестирование на проникновение), необходимо проверить, насколько система устойчива к различным видам атак. Здесь нефункциональное тестирование может помочь определить уязвимости в системе, а также проверить, как система реагирует на различные виды атак и какие меры безопасности в ней реализованы.
Также нефункциональное тестирование может быть полезно при тестировании интерфейсов и взаимодействия между компонентами системы (интеграционное тестирование), тестировании совместимости (compatibility testing), тестировании доступности (accessibility testing) и т.д.
Как правило, нефункциональные тесты используются в сочетании с функциональными тестами для обеспечения полной проверки системы и ее соответствия требованиям.