Тестирование является важным этапом разработки программного обеспечения, которое позволяет обеспечить качество и стабильность продукта. Существует множество различных видов и методов тестирования, которые могут использоваться в зависимости от типа тестируемого продукта и целей тестирования.
Виды тестирования
Обычно когда говорят о теории тестирования выделяют: функциональные и нефункциональные виды тестирования. Функциональные виды тестирования позволяют нам понять, что все функции, разрабатываемого приложения работают корректно. Нефункциональное тестирование - это виды тестирования, которые служат для проверки нефункциональных требований к системе, таких как производительность, тестирование нагрузки, тестирование на совместимость, безопасность, устойчивость и человеческий фактор.
Функциональные виды тестирования
Юнит-тестирование(или модульное тестирование). Этот метод предназначен для тестирования небольших частей программного обеспечения, таких как функции или методы, на уровне исходного кода. Например, если разрабатывается приложение для вычисления среднего значения списка чисел, то юнит-тесты могут быть написаны для проверки работы функции, которая реализует эту логику. Юнит тесты обычно пишут разработчики для проверки исходного кода, хотя, иногда этим могут и заниматься тестировщики. Так же мы можем поделить тестируемую систему на отдельные юниты и перенести эту логику на тестирование отдельных частей приложения.
Тестирование функциональности - это метод, который служит для проверки того, что система работает так, как предполагалось, и что все функции работают корректно. Например, если разрабатывается мобильное приложение, то тестирование функциональности может включать в себя тестирование всех функций приложения, таких как отправка сообщений, добавление контактов и т.д. При тестировании функциональности обычно так же тестируют бизнес логику приложения или существующие пользовательские сценарии.
Системное тестирование (End to end тестирование) - направлено на тестирование всей системы в целом. Этот метод используется для проверки того, что система работает согласно требованиям и спецификациям. Например, если разрабатывается интернет магазин, то системное тестирование может включать в себя тестирование сквозных сценариев от момента регистрации пользователя до совершения покупки на сайте.
Интеграционное тестирование. Этот метод направлен на тестирование того, как различные части программного обеспечения работают вместе. Например, если у нас есть приложение, состоящее из нескольких модулей, то интеграционное тестирование может быть использовано для проверки того, что модули работают вместе корректно. Так же интеграционное тестирование помогает определить, что система работает корректно при передаче данных в другую систему, обычно это происходит при помощи API(Application Programming Interface).
Нефункциональные виды тестирования
Тестирование безопасности - это метод тестирования, который служит для проверки того, что система защищена от несанкционированного доступа и взлома. Например, если разрабатывается интернет-банк, то тестирование безопасности может включать в себя проверку того, что система способна защитить передаваемые данные от несанкционированного доступа. При тестировании безопасности так же проверяют, что пользовательские данные обезличены при необходимости и сторонний пользователь не сможет получить к ним доступ. Так же проверяют отдельные компоненты системы на различные типы атак, например man in the middle - для этой атаки характерен перехват и изменение пользовательских данных.
Тестирование производительности - это метод, который служит для измерения скорости работы системы и ее работы под нагрузкой. Например, если разрабатывается база данных, то тестирование производительности может включать в себя измерение времени обработки запросов к базе данных с разным количеством данных. Для различных интернет сайтов это может быть тестирование множественных одновременных подключений, насколько стабильным остаётся работа сайта, испытывают ли пользователи затруднения при увеличении количества одновременных пользовательских сессий.
Тестирование на устойчивость - это метод, который служит для проверки того, что система устойчива к различным непредвиденным событиям и ошибкам. Например, если разрабатывается серверное приложение, то тестирование на устойчивость может включать в себя проверку того, что сервер не падает при ошибках в базе данных, при отказе других сервисов, с которыми он работает, или при нагрузке, превышающей его максимальную возможность. Также тестирование на устойчивость может включать в себя проверку того, что система устойчива к различным внешним факторам, таким как вирусы или хакерские атаки.
Тестирование на совместимость - это метод, который служит для проверки того, что система может работать с различными операционными системами, браузерами и устройствами. Например, если разрабатывается мобильное приложение, то тестирование на совместимость может включать в себя проверку работоспособности приложения на различных моделях телефонов с разными версиями операционных систем.
Тестирование человеческого фактора (UX/UI тестирование) - этот метод служит для проверки того, что интерфейс системы удобен и понятен для пользователей. Например, если разрабатывается мобильное приложение, тестирование человеческого фактора может включать в себя проверку того, что кнопки на экране размещены так, чтобы они были удобно доступны, а также тестирование текста, отображаемого на экране, на уровень понятности для пользователя.
Методы тестирования
Black box (тестирование методом чёрного ящика) - это метод тестирования, при котором тестируемое программное обеспечение трактуется как черный ящик, т.е. тестировщик не имеет информации о том, как устроено внутреннее устройство программы. Он тестирует программу, используя только ее внешний интерфейс, предоставляя входные данные и проверяя, что полученные результаты соответствуют ожидаемым.
Gray box (тестирование методом серого ящика)- это метод тестирования, который сочетает в себе элементы black box и white box тестирования. Тестировщик имеет некоторую, но не полную информацию о том, как устроено внутреннее устройство программы. Например, тестировщик может иметь доступ к логам приложения. Иметь описание архитектуры или использовать другие артефакты и документацию к системе.
White box (тестирование методом белого ящика) - это метод тестирования, при котором тестировщик имеет полную информацию о том, как устроено внутреннее устройство программы. Он тестирует программу, используя не только ее внешний интерфейс, но и имея доступ к ее исходному коду. White box testing позволяет тестирующему проверять каждую строку кода и покрывать все сценарии тестирования, которые он считает необходимыми.
Smoke testing (дымовое тестирование) - это метод тестирования, который предназначен для проверки основных функций программного обеспечения. Он направлен на обнаружение существенных ошибок, которые мешают работе программы. Смоук-тестирование обычно выполняется на самых ранних этапах разработки программного обеспечения, чтобы убедиться, что основные функции работают корректно, и программа не имеет критических ошибок. Так же смоук тестирование обычно выполняется при поставке новой версии приложения на продакшн среду.
Regression testing (регрессионное тестирование) - это метод тестирования, который направлен на проверку того, что некоторое изменение в программном обеспечении (например, исправление ошибки или добавление новой функции) не привело к нарушению работоспособности уже существующего функционала. Регрессивное тестирование обычно выполняется после того, как изменение было внесено в программное обеспечение, чтобы убедиться, что это изменение не повлияло на уже работающие функции. Оно помогает уверенно вносить изменения в программное обеспечение, так как позволяет убедиться, что уже существующий функционал не будет сломан в результате этих изменений.
Sanity testing (также называемое проверкой целостности) - это метод тестирования, который направлен на проверку того, что основные функции программного обеспечения работают корректно. Он предназначен для быстрого определения того, стоит ли продолжать тестирование или же нужно исправить ошибки, которые препятствуют дальнейшему тестированию. Sanity testing часто используется на самых ранних этапах тестирования, чтобы быстро оценить качество программного обеспечения и принять решение о дальнейших действиях.
~Resume:
Как правило этой теоретической базы должно хватить для прохождения собеседования на позицию Manual или Automation QA. Чаще всего собеседущий не будет выходить за рамки методов и видов описанных в статье. Так же вопросы по методам и видам тестирования может задать hr при скрининг собеседовании для того, чтобы принять решение о том стоит ли показывать кандидата заказчику или команде. Рекомендую перечитывать данную статью перед прохождением собеседований, пока теория не отложилась в памяти.
Если статьи оказались полезными, можно выразить благодарность автору:
Тинькофф: 2200700450607428
BTC: 19ccJXj1nvZ24hticGfKhv2nQWp89U36mE
TON: UQBO5i-liuCOMTQ5j1dKUSomFXjtqQmEYCxSMgOMhZe-SBAV