
- •I. По объекту тестирования:
- •Типичные вопросы тестирования производительности:
- •II. По полноте информации о системе:
- •Методы стратегии чёрного ящика:
- •По степени автоматизации:
- •По степени изолированности компонентов:
- •По времени проведения тестирования:
- •По признаку позитивности сценариев:
- •По степени подготовленности к тестированию:
- •По уровню тестирования:
- •По стратегии тестирования:
По степени автоматизации:
Ручное тестирование — проведение тестов при прямом (непосредственном) участии человека, как правило, в течение продолжительного времени, отличающееся субъективностью при принятии решений.
Автоматизированное тестирование использует программные средства для выполнения тестов и проверки результатов выполнения, что помогает сократить время тестирования и упростить его процесс. Существует два основных подхода к автоматизации тестирования: тестирование на уровне кода и GUI-тестирование.
К первому типу относится, в частности, модульное тестирование.
Ко второму - имитация действий пользователя с помощью специальных тестовых фреймворков.
Наиболее распространенной формой автоматизации является тестирование приложений через графический пользовательский интерфейс. Популярность такого вида тестирования объясняется двумя факторами: во-первых, приложение тестируется тем же способом, которым его будет использовать человек, во-вторых, можно тестировать приложение, не имея при этом доступа к исходному коду.
Одной из главных проблем автоматизированного тестирования является его трудоемкость: несмотря на то, что оно позволяет устранить часть рутинных операций и ускорить выполнение тестов, большие ресурсы могут тратиться на обновление самих тестов. Это относится к обоим видам автоматизации.
Часто бывает необходимо обновить и модульные тесты, и изменение кода тестов может занять столько же времени, сколько и изменение основного кода. С другой стороны, при изменении интерфейса приложения необходимо заново переписать все тесты, которые связаны с обновленными окнами, что при большом количестве тестов может отнять значительные ресурсы.
Для автоматизации тестирования существует большое количество приложений. Наиболее популярные:
HP QuickTest Professional, HP LoadRunner, HP Quality Center
Segue SilkPerformer
IBM Rational FunctionalTester, IBM Rational PerformanceTester, IBM Rational TestStudio
AutomatedQA TestComplete
Использование этих инструментов помогает тестировщикам автоматизировать следующие задачи:
установка продукта;
создание тестовых данных;
GUI взаимодействие;
определение проблемы.
Однако автоматические тесты не могут полностью заменить ручное тестирование. Автоматизация всех испытаний — очень дорогой процесс, и потому автоматическое тестирование является лишь дополнением ручного тестирования. Наилучший вариант использования автоматических тестов — регрессионное тестирование.
Полуавтоматизированное тестирование — комбинированный метод.
По степени изолированности компонентов:
Компонентное (модульное) тестирование или юнит-тестирование — процесс, позволяющий проверить на корректность отдельные модули исходного кода программы. Идея состоит в том, чтобы писать тесты для каждой нетривиальной функции или метода. Это позволяет достаточно быстро проверить, не привело ли очередное изменение кода к регрессии, то есть к появлению ошибок в уже оттестированных местах программы, а также облегчает обнаружение и устранение таких ошибок.
Цель модульного тестирования — изолировать отдельные части программы и показать, что по отдельности эти части работоспособны. Этот тип тестирования обычно выполняется программистами.
Преимущества этого метода:
Поощрение изменений. Модульное тестирование позволяет программистам проводить рефакторинг (процесс изменения внутренней структуры программы, не затрагивающий её внешнего поведения и имеющий целью облегчить понимание её работы), будучи уверенными, что модуль по-прежнему работает корректно (регрессионное тестирование). Это поощряет программистов к изменениям кода, поскольку достаточно легко проверить, что код работает и после изменений.
Упрощение интеграции. Модульное тестирование помогает устранить сомнения по поводу отдельных модулей и может быть использовано для подхода к тестированию «снизу вверх»: сначала тестируются отдельные части программы, затем программа в целом.
Документирование кода. Модульные тесты можно рассматривать как «живой документ» для тестируемого класса.
Отделение интерфейса от реализации. Поскольку некоторые классы могут использовать другие классы, тестирование отдельного класса часто распространяется на связанные с ним классы. Например, класс пользуется базой данных; в ходе написания теста программист обнаруживает, что тесту приходится взаимодействовать с базой. Это ошибка, поскольку тест не должен выходить за границу класса. В результате разработчик абстрагируется от соединения с базой данных и реализует этот интерфейс, используя свой собственный объект-заглушку. Это приводит к менее связанному коду, минимизируя зависимости в системе.
Приложения модульного тестирования - экстремальное, которое предполагает как один из постулатов использование инструментов автоматического модульного тестирования. Этот инструментарий может быть создан либо третьей стороной, либо группой разработчиков данного приложения. В экстремальном программировании используются модульные тесты для разработки через тестирование. Для этого разработчик до написания кода пишет тесты, отражающие требования к модулю. Очевидно, ни один из этих тестов до написания кода работать не должен. Дальнейший процесс сводится к написанию кратчайшего кода, удовлетворяющего данному набору тестов.
Интеграционное тестирование — это одна из фаз тестирования программного обеспечения, при котором отдельные программные модули объединяются и тестируются в группе. Обычно интеграционное тестирование проводится после модульного тестирования и предшествует системному тестированию.
Интеграционное тестирование в качестве входных данных использует модули, над которыми было проведено модульное тестирование, группирует их в более крупные множества, выполняет тесты, определённые в плане тестирования для этих множеств, и представляет их в качестве выходных данных и входных для последующего системного тестирования.
Целью интеграционного тестирования является проверка соответствия проектируемых единиц функциональным, приёмным и требованиям надежности. Тестирование этих проектируемых единиц — объединения, множества или группа модулей — выполняются через их интерфейс, используя тестирование «чёрного ящика».
Для автоматизации интеграционного тестирования применяются системы непрерывной интеграции (CIS). Принцип действия таких систем состоит в следующем:
CIS производит мониторинг системы контроля версий;
При изменении исходных кодов в репозитарии (хранилище данных) производится обновление локального хранилища;
Выполняются необходимые проверки и модульные тесты;
Исходные коды компилируются в готовые выполняемые модули;
Выполняются тесты интеграционного уровня;
Генерируется отчет о тестировании.
Таким образом, автоматические интеграционные тесты выполняются сразу же после внесения изменений, что позволяет обнаруживать и устранять ошибки в короткие сроки.
Системное тестирование — это тестирование программного обеспечения (ПО), выполняемое на полной, интегрированной системе, с целью проверки соответствия системы исходным требованиям. Системное тестирование относится к методам тестирования чёрного ящика, и, тем самым, не требует знаний о внутреннем устройстве системы.
Основной задачей системного тестирования является проверка как функциональных, так и не функциональных требований в системе в целом. При этом выявляются дефекты, такие как неверное использование ресурсов системы, непредусмотренные комбинации данных пользовательского уровня, несовместимость с окружением, непредусмотренные сценарии использования, отсутствующая или неверная функциональность, неудобство использования и т.д. Для минимизации рисков, связанных с особенностями поведения в системы в той или иной среде, во время тестирования рекомендуется использовать окружение максимально приближенное к тому, на которое будет установлен продукт после выдачи.
Можно выделить два подхода к системному тестированию:
на базе требований (для каждого требования пишутся тестовые случаи (тест-кейсы), проверяющие выполнение данного требования);
на базе случаев использования (альфа-тестирование и бета-тестирование являются подкатегориями системного тестирования).