# Нефункциональное тестирование (Non-Functional testing)

Нефункциональное тестирование проводится для проверки нефункциональных требований приложения, таких как производительность, безопасность, совместимость, надежность, удобство использования и т. д. В большинстве случаев это выполняется методом black box testing. Оно проверяет, соответствует ли поведение системы требованиям по всем аспектам, не охваченные функциональным тестированием. В нашем повседневном тестировании много внимания уделяется функциональному тестированию и функциональным требованиям и клиенты также заинтересованы в выполнении функциональных требований, которые напрямую связаны с функциональностью приложения, но когда ПО выходит на рынок и используется реальными конечными пользователями, у них есть шансы столкнуться с проблемами. Эти проблемы не связаны с функциональностью системы, но могут негативно повлиять на пользовательский опыт.

**Нефункциональные требования могут быть отражены как**:

* Пользовательские / Технические истории (User /Technical Stories): запись нефункциональных требований в виде пользовательской истории такая же, как и запись любых других требований. Единственная разница между пользователем и технической историей заключается в том, что пользовательская история требует обсуждения и имеет видимость (? visibility);
* В критериях приемки (Acceptance criteria): это точка, которая определяется для принятия продукта заказчиком. Нефункциональное требование должно быть включено в критерии приемки, но иногда невозможно проверить нефункциональные требования с каждой историей, то есть с каждой итерацией. Следовательно, требования следует добавлять или тестировать только с соответствующей итерацией;
* В артефактах (Artifact): для нефункциональных требований следует подготовить отдельный артефакт, это, в свою очередь, поможет лучше понять, что нужно тестировать и как это можно делать в итерациях;

**Документ подхода к тестированию (Approach Document)**:

Разработайте конкретный подход к этапу тестирования, уточнив общую стратегию тестирования. Этот подход к тестированию помогает при планировании и выполнении всех задач тестирования:

* Объем испытаний (Test Scope);
* Метрики тестирования;
* Инструменты тестирования;
* Основные даты и результаты;

**Виды нефункционального тестирования (список не полный)**:

* Тестирование производительности (Performance Testing)
* Нагрузочное тестирование (Load Testing)
* Стрессовое тестирование (Stress Testing)
* Объемное тестирование (Volume Testing)
* Тестирование восстановления (Recovery Testing)
* Тестирование отказоустойчивости (Failover Testing)
* Тестирование эффективности (Efficiency Testing)
* Тестирование аварийного восстановления (Disaster Recovery Testing)
* Тестирование установки (Installation Testing)
* Тестирование документации (Documentation Testing)
* Тестирование на удобство использования (Usability Testing)
* Тестирование графического интерфейса пользователя (User Interface Testing)
* Тестирование совместимости (Compatibility Testing)
* Тестирование обслуживаемости (Maintainability Testing)
* Тестирование безопасности (Security Testing)
* Тестирование масштабируемости (Scalability Testing)
* Тестирование выносливости (Endurance Testing)
* Тестирование надежности (Reliability Testing)
* Тестирование соответствия (Compliance Testing)
* Тестирование локализации (Localization Testing)
* Тестирование интернационализации (Internationalization Testing)
* Тестирование переносимости (Portability Testing)
* Тестирование на основе базового уровня (Baseline Testing)

**Примеры чек-листов**:

Тестирование производительности:

* Время отклика (The response time) приложения, то есть сколько времени требуется для загрузки приложения, за какое время любой ввод, предоставленный приложению, обеспечивает вывод, время обновления браузера и т. д.;
* Пропускную способность (Throughput) следует проверять по количеству транзакций, завершенных во время нагрузочного теста;
* Настройка среды (Environment) должна быть такой же, как и в реальной среде, иначе результаты не будут такими же;
* Время процесса (Process time) - такие действия, как импорт и экспорт Excel, любые вычисления в приложении должны быть протестированы;
* Совместимость (Interoperability) должна быть проверена, т.е. программное обеспечение должно иметь возможность взаимодействовать с другим программным обеспечением или системами;
* Необходимо проверить время ETL, то есть время, затраченное на извлечение, преобразование и загрузку данных из одной базы данных в другую;
* Необходимо проверить возрастающую нагрузку (Load) на приложение;

Тестирование безопасности:

* Аутентификация (Authentication): только достоверный пользователь может войти в систему;
* Авторизация (Authorized): пользователь должен иметь возможность входить в те модули, для которых он авторизован или к которым пользователю был предоставлен доступ;
* Пароль: Требование пароля должно быть подтверждено, т.е. пароль должен соответствовать тому, как это требование определяется, то есть длине, специальным символам, числам и т. д.;
* Тайм-аут: если приложение неактивно, оно должно истечь по таймауту в указанное время;
* Резервное копирование данных: резервное копирование данных должно быть выполнено в указанное время и данные должны быть скопированы в безопасное место;
* Внутренние ссылки на веб-приложение не должны быть доступны, если размещены непосредственно в браузере;
* Вся коммуникация должна быть зашифрована;

Тестирование документации:

* Пользовательская и системная документация;
* Документы для учебных целей;

Источник: [A Complete Non-Functional Testing Guide For Beginners](https://www.softwaretestinghelp.com/what-is-non-functional-testing/)
