> For the complete documentation index, see [llms.txt](https://docs.system-analyst-base.ru/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.system-analyst-base.ru/hard-skills/qa-for-sa.md).

# QA for SA

Тестированием продукта занимается специальный член IT команды - QA, как и говорилось в самом начале в разделе "Роли в IT продукте". Однако системный аналитик должен иметь представления об отдельно взятых методах тестирования, которые отмечены :warning:.

Все виды тестирование можно поделить на две основные части: функциональное и нефункциональное тестирование.

## Функциональное тестирование

Функциональное тестирование делится на подвиды:

* **Юнит-тестирование (Модульное тестирование)** — проводится для тестирования какого-либо одного логически выделенного и изолированного элемента (модуля) системы в коде. Проводится самими разработчиками, так как предполагает полный доступ к коду.
* :warning: **Тестирование API** — это процесс проверки корректности работы интерфейса между двумя приложениями или между приложением и внешней системой. Целью тестирования API является проверка соответствия функциональных возможностей, производительности, безопасности и надежности разработанного API.
* **Интеграционное тестирование или интеграционно-функциональное (ИФТ)** — тестирование, направленное на проверку корректности взаимодействия нескольких модулей, объединенных в единое целое.
* **Системное тестирование** — процесс тестирования системы, на котором проводится не только функциональное тестирование, но и оценка характеристик качества системы — ее устойчивости, надежности, безопасности и производительности.
* :warning: **Приёмочное тестирование** — проверяет соответствие системы потребностям, требованиям и бизнес-процессам пользователя. Системному аналитику зачастую приходиться иметь дело с данным типом тестирования.

## Нефункциональное тестирование

Нефункциональное тестирование делится на подвиды:

* :warning: **Нагрузочное тестирование** — для проверки производительности приложения под нагрузкой. Во время теста программа подвергается нагрузке: тестировщик, например, увеличивает число пользователей или операций и проверяет, как она будет работать.
* **Тестирование на проникновение** — для проверки уровня безопасности. Этот вид тестирования проводится, чтобы узнать, насколько безопасна программа или веб-сайт от потенциальных кибератак и несанкционированного доступа. Тестировщики, как настоящие хакеры, используют различные методы, чтобы проверить защиту программы и предотвратить возможные угрозы для безопасности данных.
* **Тестирование совместимости**. На этом этапе тестировщики проверяют работу программы на различных платформах, устройствах и браузерах, чтобы убедиться в их совместимости.
* **Стресс-тестирование** — этот вид тестирования помогает выявить уязвимости и слабые места в системе, которые могут проявиться при больших нагрузках.
* **Тестирование на отказоустойчивость** — помогает удостовериться, что приложение может успешно справляться с различными неполадками, такими как сбои серверов, потеря связи или другие неблагоприятные события, и продолжать функционировать нормально без значительных нарушений или потери данных.
* :warning: **Тестирование интерфейса пользователя** — подразумевает проверку удобства, доступности и правильности работы пользовательского интерфейса программы.
* **Тестирование на восстановление**. В ходе этого тестирования создаются различные сценарии отказов: отключение серверов или потеря связи, чтобы убедиться, что приложение может быстро и корректно восстановиться и продолжить работу без значительных проблем.

## Инструменты тестирования API

* Postman (полноценный API-клиент)
* Insomnia (полноценный API-клиент)
* Swagger (проверка endpoints[^1])

Про каждый из инструментов поговорим немного подробнее в следующих разделах.&#x20;

Источник: <https://ru.hexlet.io/blog/posts/vidy-testirovaniya>

[^1]: Endpoint (конечные точки) - это интерфейсы, через которые сервисы предоставляют свои функциональные возможности. Они представляют собой URL-адреса, к которым можно обратиться, чтобы получить данные или выполнить определенные действия.
