
- •Тестирование программного обеспечения - основные понятия и определения
- •Тестирование программного обеспечения[править | править вики-текст]
- •Виды Тестирования Программного Обеспечения
- •Функциональные виды тестирования
- •Нефункциональные виды тестирования
- •Связанные с изменениями виды тестирования
- •Техники дест дизайна (Test Design Technics)
- •Практическое применение техник тест дизайна при разработке тест кейсов
- •1. Анализ требований
- •2.Определение набора тестовых данных
- •2.1 Выбор тестовых данных для каждого отдельно взятого поля
- •3. Разрабатываем шаблон теста
- •4. Написание тест кейсов на основании первоначальных требований, тестовых данных и шаблона теста
- •Тестирование программного обеспечения
Виды Тестирования Программного Обеспечения
Все виды тестирования программного обеспечения, в зависимости от преследуемых целей, можно условно разделить на следующие группы:
Функциональные
Нефункциональные
Связанные с изменениями
Далее, мы постараемся более подробно рассказать о каждом отдельном виде тестирования, его назначении и использовании при тестировании программного обеспечения.
Функциональные виды тестирования
Функциональные тесты базируются на функциях и особенностях, а также взаимодействии с другими системами, и могут быть представлены на всехуровнях тестирования: компонентном или модульном (Component/Unit testing), интеграционном (Integration testing), системном (System testing) и приемочном (Acceptance testing). Функциональные виды тестирования рассматривают внешнее поведение системы. Далее перечислены одни из самых распространенных видов функциональных тестов:
Функциональное тестирование (Functional testing)
Тестирование безопасности (Security and Access Control Testing)
Тестирование взаимодействия (Interoperability Testing)
Нефункциональные виды тестирования
Нефункциональное тестирование описывает тесты, необходимые для определения характеристик программного обеспечения, которые могут быть измерены различными величинами. В целом, это тестирование того, "Как" система работает. Далее перечислены основные виды нефункциональных тестов:
Все виды тестирования производительности:
нагрузочное тестирование (Performance and Load Testing)
стрессовое тестирование (Stress Testing)
тестирование стабильности или надежности (Stability / Reliability Testing)
объемное тестирование (Volume Testing)
Тестирование установки (Installation testing)
Тестирование удобства пользования (Usability Testing)
Тестирование на отказ и восстановление (Failover and Recovery Testing)
Конфигурационное тестирование (Configuration Testing)
Связанные с изменениями виды тестирования
После проведения необходимых изменений, таких как исправление бага/дефекта, программное обеспечение должно быть пере тестировано для подтверждения того факта, что проблема была действительно решена. Ниже перечислены виды тестирования, которые необходимо проводить после установки программного обеспечения, для подтверждения работоспособности приложения или правильности осуществленного исправления дефекта:
Дымовое тестирование (Smoke Testing)
Регрессионное тестирование (Regression Testing)
Тестирование сборки (Build Verification Test)
Санитарное тестирование или проверка согласованности/исправности (Sanity Testing)
Уровни Тестирования Программного Обеспечения
Тестирование на разных уровнях производится на протяжении всего жизненного цикла разработки и сопровождения программного обеспечения. Уровень тестирования определяет то, над чем производятся тесты: над отдельным модулем, группой модулей или системой, в целом. Проведение тестирования на всех уровнях системы - это залог успешной реализации и сдачи проекта.
Уровни Тестирования
Компонентное или Модульное тестирование (Component Testing or Unit Testing)
Интеграционное тестирование (Integration Testing)
Системное тестирование (System Testing)
Приемочное тестирование (Acceptance Testing)
Уровни тестирования
Модульное тестирование (юнит-тестирование) — тестируется минимально возможный для тестирования компонент, например, отдельный класс или функция. Часто модульное тестирование осуществляется разработчиками ПО.
Интеграционное тестирование — тестируются интерфейсы между компонентами, подсистемами или системами. При наличии резерва времени на данной стадии тестирование ведётся итерационно, с постепенным подключением последующих подсистем.
Системное тестирование — тестируется интегрированная система на её соответствие требованиям.
Альфа-тестирование — имитация реальной работы с системой штатными разработчиками, либо реальная работа с системой потенциальными пользователями/заказчиком. Чаще всего альфа-тестирование проводится на ранней стадии разработки продукта, но в некоторых случаях может применяться для законченного продукта в качестве внутреннего приёмочного тестирования. Иногда альфа-тестирование выполняется под отладчиком или с использованием окружения, которое помогает быстро выявлять найденные ошибки. Обнаруженные ошибки могут быть переданы тестировщикам для дополнительного исследования в окружении, подобном тому, в котором будет использоваться ПО.
Бета-тестирование — в некоторых случаях выполняется распространение предварительной версии (в случае проприетарного ПО иногда с ограничениями по функциональности или времени работы) для некоторой большей группы лиц с тем, чтобы убедиться, что продукт содержит достаточно мало ошибок. Иногда бета-тестирование выполняется для того, чтобы получить обратную связь о продукте от его будущих пользователей.
Часто для свободного/открытого ПО стадия альфа-тестирования характеризует функциональное наполнение кода, а бета-тестирования — стадию исправления ошибок. При этом как правило на каждом этапе разработки промежуточные результаты работы доступны конечным пользователям.
Основные принципы тестирования "Серого ящика"
Тестирование «черного ящика» направлено на проверку поведения программного обеспечения и его внешних проявлений. Оно нацелено на проверку ожидаемого поведения приложения или программы с точки зрения конечного пользователя.
Для тестирования «белого ящика» необходимы знания структуры данных, логики ПО, алгоритмов работы программы, архитектуры программного кода. Данный анализ проводится с точки зрения разработчика.
Тестирование «белого ящика» и тестирование «черного ящика» являются неотъемлемой частью всего процесса тестирования программного обеспечения. По отдельности, они не дают предельно хороших результатов для сбалансированной работы компании по тестированию.
Тестирование «черного ящика» может быть менее эффективным при поиске ошибок, связанных с потоком данных на уровне исходного кода. А тестирование «белого ящика» менее эффективно в нахождении макро-уровневых ошибок в операционной системе, а также ошибок совместимости.
Тестирование «серого ящика» - это сочетание тестирования «черного» и «белого ящика». Тестирование «серого ящика» используется для оценки проекта в рамках взаимодействия его индивидуальных компонентов.
Тестирование «серого ящика» наиболее подходит для тестирования веб-приложений, потому что для него необходимы высокоуровневая разработка, операционное окружение и условия совместимости.
Во время проведения анализа черного или белого ящика более сложно определить проблемы, связанные с непрерывным потоком данных. Специфические контекстные проблемы тестирования веб сайтов легче всего найти во время проверки серого ящика.
Веб-приложения состоят из множества элементов, как на программном, так и аппаратном уровне. Эти компоненты должны быть проверены в контексте разработки системы для оценивания их взаимодействия и функциональности.
Для тестирования «серого ящика» используются инструменты, нацеленные на понимание свойств приложения и окружения, с которым оно взаимодействует. Такой подход может быть использован для проверки «черного ящика» с целью увеличения продуктивности тестирования и производительности анализа багов.
С другой стороны, проверка «серого ящика» - это использование неполной или предполагаемой информации о структуре или дизайне для дальнейшей концентрации или расширения анализа «черного ящика».
Помните, что тестирование программного обеспечения более эффективно с хорошим пониманием поведения системы и ее архитектуры, процесса разработки продукта, требований приложения, типов ошибок.