> For the complete documentation index, see [llms.txt](https://igor-19.gitbook.io/qa/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://igor-19.gitbook.io/qa/teoriya-testirovaniya/osnovnye-vidy-testirovaniya-po.md).

# Основные виды тестирования ПО

— это совокупность активностей, направленных на тестирование заданных характеристик системы или её части, основанная на конкретных целях.

![](https://2199266820-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjLS7kUc1aR2S56nZreKO%2Fuploads%2FjuR0TAowm0z2HjE2wqpO%2Fimage.png?alt=media\&token=665f72cb-fac1-40e1-a37f-710bf625848f)

* **Классификация по запуску кода на исполнение:**
  * **Статическое тестирование** — процесс тестирования, который проводится для верификации практически любого артефакта разработки: программного кода компонент, требований, системных спецификаций, функциональных спецификаций, документов проектирования и архитектуры программных систем и их компонентов.
  * **Динамическое тестирование** — тестирование проводится на работающей системе, не может быть осуществлено без запуска программного кода приложения.
* **Классификация по доступу к коду и архитектуре:**
  * **Тестирование белого ящика** — метод тестирования ПО, который предполагает полный доступ к коду проекта.
  * **Тестирование серого ящика** — метод тестирования ПО, который предполагает частичный доступ к коду проекта (комбинация White Box и Black Box методов).
  * **Тестирование чёрного ящика** — метод тестирования ПО, который не предполагает доступа (полного или частичного) к системе. Основывается на работе исключительно с внешним интерфейсом тестируемой системы.
* **Классификация по уровню детализации приложения:**
  * **Модульное тестирование** — проводится для тестирования какого-либо одного логически выделенного и изолированного элемента (модуля) системы в коде. Проводится самими разработчиками, так как предполагает полный доступ к коду.
  * **Интеграционное тестирование** — тестирование, направленное на проверку корректности взаимодействия нескольких модулей, объединенных в единое целое.
  * **Системное тестирование** — процесс тестирования системы, на котором проводится не только функциональное тестирование, но и оценка характеристик качества системы — ее устойчивости, надежности, безопасности и производительности.
  * **Приёмочное тестирование** — проверяет соответствие системы потребностям, требованиям и бизнес-процессам пользователя.
* **Классификация по степени автоматизации:**
  * Ручное тестирование.
  * Автоматизированное тестирование.
* **Классификация по принципам работы с приложением**
  * **Позитивное тестирование** — тестирование, при котором используются только корректные данные.
  * **Негативное тестирование** — тестирование приложения, при котором используются некорректные данные и выполняются некорректные операции.
* **Классификация по уровню функционального тестирования:**
  * **Дымовое тестирование (smoke test)** — тестирование, выполняемое на новой сборке, с целью подтверждения того, что программное обеспечение стартует и выполняет основные для бизнеса функции.
  * **Тестирование критического пути (critical path)** — направлено для проверки функциональности, используемой обычными пользователями во время их повседневной деятельности.
  * **Расширенное тестирование (extended)** — направлено на исследование всей заявленной в требованиях функциональности.
* **Классификация в зависимости от исполнителей:**
  * **Альфа-тестирование** — является ранней версией программного продукта. Может выполняться внутри организации-разработчика с возможным частичным привлечением конечных пользователей.
  * **Бета-тестирование** — программное обеспечение, выпускаемое для ограниченного количества пользователей. Главная цель — получить отзывы клиентов о продукте и внести соответствующие изменения.
* **Классификация в зависимости от целей тестирования:**
  * **Функциональное тестирование (functional testing)** — направлено на проверку корректности работы функциональности приложения.
  * **Нефункциональное тестирование (non-functional testing)** — тестирование атрибутов компонента или системы, не относящихся к функциональности.
    1. **Тестирование производительности (performance testing)** — определение стабильности и потребления ресурсов в условиях различных сценариев использования и нагрузок.
    2. **Нагрузочное тестирование (load testing)** — определение или сбор показателей производительности и времени отклика программно-технической системы или устройства в ответ на внешний запрос с целью установления соответствия требованиям, предъявляемым к данной системе (устройству).
    3. **Тестирование масштабируемости (scalability testing)** — тестирование, которое измеряет производительность сети или системы, когда количество пользовательских запросов увеличивается или уменьшается.
    4. **Объёмное тестирование (volume testing)** — это тип тестирования программного обеспечения, которое проводится для тестирования программного приложения с определенным объемом данных.
    5. **Стрессовое тестирование (stress testing)** — тип тестирования направленный для проверки, как система обращается с нарастающей нагрузкой (количеством одновременных пользователей).
    6. **Инсталляционное тестирование (installation testing)** — тестирование, направленное на проверку успешной установки и настройки, обновления или удаления приложения.
    7. **Тестирование интерфейса (GUI/UI testing)** — проверка требований к пользовательскому интерфейсу.
    8. **Тестирование удобства использования (usability testing)** — это метод тестирования, направленный на установление степени удобства использования, понятности и привлекательности для пользователей разрабатываемого продукта в контексте заданных условий.
    9. **Тестирование локализации (localization testing)** — проверка адаптации программного обеспечения для определенной аудитории в соответствии с ее культурными особенностями.
    10. **Тестирование безопасности (security testing)** — это стратегия тестирования, используемая для проверки безопасности системы, а также для анализа рисков, связанных с обеспечением целостного подхода к защите приложения, атак хакеров, вирусов, несанкционированного доступа к конфиденциальным данным.
    11. **Тестирование надёжности (reliability testing)** — один из видов нефункционального тестирования ПО, целью которого является проверка работоспособности приложения при длительном тестировании с ожидаемым уровнем нагрузки.
    12. **Регрессионное тестирование (regression testing)** — тестирование уже проверенной ранее функциональности после внесения изменений в код приложения, для уверенности в том, что эти изменения не внесли ошибки в областях, которые не подверглись изменениям.
    13. **Повторное/подтверждающее тестирование (re-testing/confirmation testing)** — тестирование, во время которого исполняются тестовые сценарии, выявившие ошибки во время последнего запуска, для подтверждения успешности исправления этих ошибок.
