Вы находитесь на странице: 1из 32

Федосеева А.А.

ТЕСТИРОВАНИЕ ПО
ТЕСТИРОВАНИЕ ПО

Тестирование программного обеспечения (Software


Testing) - проверка соответствия между реальным и
ожидаемым поведением программы, осуществляемая
на конечном наборе тестов, выбранном определенным
образом. 
Согласно [IEEE Guide to Software Engineering Body of
Knowledge, SWEBOK].
В более широком смысле, тестирование - это одна из
техник контроля качества, включающая в себя
активности по планированию работ (Test
Management), проектированию тестов (Test Design),
выполнению тестирования (Test Execution) и анализу
полученных результатов (Test Analysis).
План Тестирования (Test Plan) - это документ, описывающий весь
объем работ по тестированию, начиная с описания объекта, стратегии,
расписания, критериев начала и окончания тестирования, до
необходимого в процессе работы оборудования, специальных знаний, а
также оценки рисков с вариантами их разрешения.
Тест дизайн (Test Design) - это этап процесса тестирования
ПО, на котором проектируются и создаются тестовые
случаи (тест кейсы), в соответствии с определёнными
ранее критериями качества и целями тестирования.
Тестовый случай (Test Case) - это артефакт, описывающий
совокупность шагов, конкретных условий и параметров,
необходимых для проверки реализации тестируемой
функции или её части.

ТЕСТИРОВАНИЕ ПО
 Баг/Дефект Репорт (Bug Report) - это документ, описывающий
ситуацию или последовательность действий приведшую к
некорректной работе объекта тестирования, с указанием причин и
ожидаемого результата.
 Тестовое Покрытие (Test Coverage) - это одна из метрик оценки
качества тестирования, представляющая из себя плотность
покрытия тестами требований либо исполняемого кода.
 Детализация Тест Кейсов (Test Case Specification) - это уровень
детализации описания тестовых шагов и требуемого результата,
при котором обеспечивается разумное соотношение времени
прохождения к тестовому покрытию
 Время Прохождения Тест Кейса (Test Case Pass Time) - это
время от начала прохождения шагов тест кейса до получения
результата теста.

ТЕСТИРОВАНИЕ ПО
ВИДЫ ТЕСТИРОВАНИЯ
По целевому признаку:
 Функциональные

 Нефункциональные

 Связанные с изменениями

Функциональные тесты базируются на функциях и особенностях, а


также взаимодействии с другими системами, и могут быть представлены
на всех уровнях тестирования:
- компонентном или модульном (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)

СВЯЗАННЫЕ С ИЗМЕНЕНИЯМИ ВИДЫ ТЕСТИРОВАНИЯ


ФУНКЦИОНАЛЬНЫЕ ВИДЫ
ТЕСТИРОВАНИЯ
ФУНКЦИОНАЛЬНОЕ ТЕСТИРОВАНИЕ
задача такого тестирования – установить соответствие разработанного
ПО исходным функциональным требованиям заказчика.
• проведение функционального тестирования позволяет проверить
способность информационной системы в определенных условиях решать
задачи, нужные пользователям.
В зависимости от цели, функциональное тестирование может проводиться:
 • на основе функциональных требований, указанных в спецификации
требований. При этом для тестирования создаются тестовые случаи (test-
cases), составление которых учитывает приоритетность функций ПО,
которые необходимо покрыть тестами. Таким образом мы можем убедиться
в том, что все функции разрабатываемого продукта работают корректно при
различных типах входных данных, их комбинаций, количества и т.д.
 • на основе бизнес-процессов, которые должно обеспечить приложение. В
этом случае, нас интересует не так работоспособность отдельных функций
ПО, как корректность выполняемых операций, с точки зрения сценариев
использования системы. Таким образом, тестирование в данном случае
будет основываться на вариантах использования системы (use-cases).
Функциональное тестирование ПО:
 полностью имитирует фактическое использование
системы.
 позволяет своевременно выявить системные ошибки
ПО и, тем самым, избежать множества проблем при
работе с ним в дальнейшем.
 экономия времени за счет исправления ошибок на
более раннем этапе жизненного цикла ПО
ОСНОВНЫЕ ЭТАПЫ ФУНКЦИОНАЛЬНОГО ТЕСТИРОВАНИЯ
 Подготовка 
Проводится анализ исходных документов о системе: функциональные и
бизнес-требования, техническое задание, паспорт проекта. Также происходят
разработка и согласование плана тестирования, тест-кейсов, согласование
проектных сроков, числа итераций, оценка возможных рисков. Задачи по
этому этапу выполняются совместно с представителями заказчика.
 Проведение 
Функциональное тестирование ведется вручную по подготовленным заранее
тестовым сценариям с занесением всех найденных ошибок в багтрекинговую
систему. В случае отсутствия такой системы у компании клиента, компания
модератор краудтестинга может: предоставить систему управления
тестированием на своей площадке; поставить компании клиенту лицензии;
использовать имеющиеся у компании клиента средства; обходиться только
офисным пакетом; поставить процесс тестирования у компании клиента на
основе бесплатных средств.
 Отчет 
Происходит разработка и согласование отчетов о проведенном тестировании
со списком обнаруженных отклонений и рекомендациями по улучшению
системы. Если необходимо, проводится обучение пользователей.
ТЕСТИРОВАНИЕ ВЗАИМОДЕЙСТВИЯ
(INTEROPERABILITY TESTING)
функциональное тестирование, проверяющее
способность приложения взаимодействовать с одним и
более компонентами или системами и включающее в
себя тестирование совместимости (compatibility testing)
и интеграционное тестирование (integration testing).
ТЕСТИРОВАНИЕ БЕЗОПАСНОСТИ
 это стратегия тестирования, используемая для проверки безопасности системы, а
также для анализа рисков, связанных с обеспечением целостного подхода к
защите приложения, атак хакеров, вирусов, несанкционированного доступа к
конфиденциальным данным.
Принципы безопасности программного обеспечения
 Конфиденциальность - это сокрытие определенных ресурсов или информации.
Под конфиденциальностью можно понимать ограничение доступа к ресурсу
некоторой категории пользователей, или другими словами, при каких условиях
пользователь авторизован получить доступ к данному ресурсу
 Целостность
 Доступность - требования о том, что ресурсы должны быть доступны
авторизованному пользователю, внутреннему объекту или устройству. Как
правило, чем более критичен ресурс тем выше уровень доступности должен быть
Существует два основных критерия при определении понятия целостности:
 Доверие. Ожидается, что ресурс будет изменен только соответствующим
способом определенной группой пользователей.
 Повреждение и восстановление. В случае когда данные повреждаются или
неправильно меняются авторизованным или не авторизованным пользователем,
вы должны определить на сколько важной является процедура восстановления
данных.
НЕФУНКЦИОНАЛЬНЫЕ ВИДЫ
ТЕСТИРОВАНИЯ
Нагрузочное тестирование или тестирование производительности -
это автоматизированное тестирование, имитирующее работу
определенного количества бизнес пользователей на каком-либо общем
(разделяемом ими) ресурсе.
Задачей тестирования производительности является определение
масштабируемости приложения под нагрузкой, при этом происходит:
 измерение времени выполнения выбранных операций при
определенных интенсивностях выполнения этих операций
 определение количества пользователей, одновременно работающих с
приложением
 определение границ приемлемой производительности при увеличении
нагрузки (при увеличении интенсивности выполнения этих операций)
 исследование производительности на высоких, предельных,
стрессовых нагрузках.

НАГРУЗОЧНОЕ ТЕСТИРОВАНИЕ ИЛИ ТЕСТИРОВАНИЕ


ПРОИЗВОДИТЕЛЬНОСТИ
ТЕСТИРОВАНИЕ УДОБСТВА ИСПОЛЬЗОВАНИЯ

 проводится при создании нового ПО и его доработке.


 цель - поиск решений наиболее дружелюбного интерфейса
программы для уменьшения времени на решение задач пользователей.
 Результат - пожелания по улучшению объекта тестирования,
например, изменение расположения кнопок или добавление новых
для быстрого выполнения какой-либо команды, заполнение значений
по умолчанию, добавление горячих клавиш  и т.д.
Ключевые преимущества
 обеспечат положительные отзывы пользователей системы в будущем.

 Если система предназначена для регулярного использования,


например, сотрудниками call-центра, операционистами в банке или
продавцами-консультантами в магазине, эргономичность системы
снизит их трудозатраты на выполнение  повседневных операций.
 Если система предназначена для обслуживания клиентов, например,
интернет-магазин или  интернет-банк, удобство и простота системы
оставят положительные воспоминания о работе с ней, что сохранит
клиентов и привлечет новых.
Основные задачи
Задачей тестирования удобства использования является определение уровня
 удобства и простоты решения задач пользователем, для выполнения которых
продукт был создан.
В рамках данной задачи оценивается:
⦁ Сколько шагов нужно сделать для выполнения задачи?
⦁ Сколько времени требуется на выполнение задачи?
⦁ Сколько ошибок делает пользователь-новичок при выполнении задачи?
⦁ Какое впечатление осталось у пользователя от работы с программой?
⦁ Эмоции пользователя во время выполнения задачи.
Проверка юзабилити приложения заключается в:
• Оценке соответствия дизайна приложения к его функциональности, заданной
заказчиком.
• Анализе используемых графических элементов, цветового оформления с точки
зрения восприятия.
• Оценке удобства навигации и ссылочной структуре.
• Анализе текстового наполнения сайта.
• Оценке удобства использования функциями приложения (сервисами, если это
сайт).
• Анализ шрифтового оформления текста.
Стрессовое тестирование (Stress Testing) позволяет проверить
насколько приложение и система в целом работоспособны в условиях
стресса и также оценить способность системы к регенерации, т.е. к
возвращению к нормальному состоянию после прекращения воздействия
стресса. Стрессом в данном контексте может быть повышение
интенсивности выполнения операций до очень высоких значений или
аварийное изменение конфигурации сервера. Также одной из задач при
стрессовом тестировании может быть оценка деградации
производительности, таким образом цели стрессового тестирования
могут пересекаться с целями тестирования производительности.
Объемное тестирование (Volume Testing) состоит в получении
оценки производительности при увеличении объемов данных в базе
данных приложения, при этом происходит:
 измерение времени выполнения выбранных операций при
определенных интенсивностях выполнения этих операций
 может производиться определение количества пользователей,
одновременно работающих с приложением
Тестирование стабильности или надежности (Stability /
Reliability Testing). Его задачей является проверка
работоспособности приложения при длительном
(многочасовом) тестировании со средним уровнем нагрузки.
Время выполнения операций может играть в данном виде
тестирования второстепенную роль. При этом на первое
место выходит отсутствие утечек памяти (недостаточно
памяти для завершения операции), перезапусков серверов
под нагрузкой и другие аспекты влияющие именно на
стабильность работы

.
Тестирование Установки или Installation Testing
Тестирование установки направлено на проверку успешной инсталляции и настройки,
а также обновления или удаления программного обеспечения.
В настоящий момент наиболее распространена установка ПО при
помощи инсталляторов (специальных программ, которые сами по себе так же требуют
надлежащего тестирования,).
В реальных условиях инсталляторов может не быть. В этом случае придется
самостоятельно выполнять установку программного обеспечения, используя
документацию в виде инструкций или readme файлов, шаг за шагом описывающих все
необходимые действия и проверки.
В распределенных системах, где приложение разворачивается на уже работающем
окружении, простого набора инструкций может быть мало. Для этого, зачастую, пишется
план установки (Deployment Plan), включающий не только шаги по инсталляции
приложения, но и шаги отката (roll-back) к предыдущей версии, в случае неудачи. Сам по
себе план установки также должен пройти процедуру тестирования для избежания
проблем при выдаче в реальную эксплуатацию. Особенно это актуально, если установка
выполняется на системы, где каждая минута простоя - это потеря репутации и большого
количества средств, например: банки, финансовые компании или даже баннерные сети.
Поэтому тестирование установки можно назвать одной из важнейших задач по
обеспечению качества программного обеспечения.
Именно такой комплексный подход с написанием планов, пошаговой проверкой
установки и отката инсталляции, полноправно можно назвать тестированием
установки или Installation Testing.
ВИДЫ ТЕСТИРОВАНИЯ, СВЯЗАННЫЕ С
ИЗМЕНЕНИЯМИ
Понятие дымовое тестирование пошло из инженерной среды:
«При вводе в эксплуатацию нового оборудования ("железа") считалось,
что тестирование прошло удачно, если из установки не пошел дым»
В области же программного обеспечения, дымовое тестирование
рассматривается как короткий цикл тестов, выполняемый для
подтверждения того, что после сборки кода (нового или исправленного)
устанавливаемое приложение, стартует и выполняет основные функции.
Вывод о работоспособности основных функций делается на основании
результатов поверхностного тестирования наиболее важных модулей
приложения на предмет возможности выполнения требуемых задач и
наличия быстронаходимых критических и блокирующих дефектов. В
случае отсутствия таковых дефектов дымовое тестирование объявляется
пройденным, и приложение передается для проведения полного цикла
тестирования, в противном случае, дымовое тестирование объявляется
проваленным, и приложение уходит на доработку.
Аналогами дымового тестирования являются Build Verification
Testing и Acceptance Testing, выполняемые на функциональном уровне
командой тестирования, по результатам которых делается вывод о том,
принимается или нет установленная версия программного обеспечения в
тестирование, эксплуатацию или на поставку заказчику.
Санитарное тестирование - это узконаправленное тестирование
достаточное для доказательства того, что конкретная функция работает
согласно заявленным в спецификации требованиям. Является
подмножеством регрессионного тестирования. Используется для
определения работоспособности определенной части приложения после
изменений произведенных в ней или окружающей среде. Обычно
выполняется вручную.
Отличие санитарного тестирования от дымового (Sanity vs Smoke
testing)
В некоторых источниках ошибочно полагают, что санитарное
и дымовое тестирование - это одно и тоже. Эти виды тестирования
имеют "векторы движения", направления в разные стороны. В отличии от
дымового (Smoke testing), санитарное тестирование (Sanity
testing) направлено вглубь проверяемой функции, в то время
как дымовое направлено вширь, для покрытия тестами как можно
большего функционала в кратчайшие сроки.
Регрессионное тестирование - это вид тестирования направленный на проверку
изменений, сделанных в приложении или окружающей среде (устранение дефекта,
слияние кода, миграция на другую операционную систему, базу данных, веб сервер или
сервер приложения), для подтверждения того факта, что существующая ранее
функциональность работает как и прежде. Регрессионными могут быть
как функциональные, так и нефункциональные тесты.
Как правило, для регрессионного тестирования используются тест кейсы,
написанные на ранних стадиях разработки и тестирования. Это дает гарантию того,
что изменения в новой версии приложения не повредили уже существующую
функциональность. Рекомендуется делать автоматизацию регрессионных тестов, для
ускорения последующего процесса тестирования и обнаружения дефектов на ранних
стадиях разработки программного обеспечения.
 Сам по себе термин "Регрессионное тестирование", в зависимости от контекста
использования может иметь разный смысл. Сэм Канер, к примеру, описал 3 основных
типа регрессионного тестирования:
 Регрессия багов (Bug regression) - попытка доказать, что исправленная ошибка на
самом деле не исправлена
 Регрессия старых багов (Old bugs regression) - попытка доказать, что недавнее
изменение кода или данных сломало исправление старых ошибок, т.е. старые баги
стали снова воспроизводиться.
 Регрессия побочного эффекта (Side effect regression) - попытка доказать, что недавнее
изменение кода или данных сломало другие части разрабатываемого приложения
ПОДХОДЫ К ТЕСТИРОВАНИЮ
ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
 Формальное тестирование
 Неформальное тестирование
ФОРМАЛЬНОЕ ТЕСТИРОВАНИЕ
 тщательно спланированный процесс c полной формализацией
действий всей команды тестировщиков. Важно не отклоняться от
выбранных тестовых наборов.
Преимущества:
 Тестируемые функции и свойства известны.

 Тесты могут быть автоматизированы

 Выполнение теста можно отслеживать и измерять.

 Известны критерии приемлемости.

Недостатки:
 Обладает высокой трудоемкостью и требует планирования.

 Тесты могут оказаться лишь повторением системных тестов.

 Тестирование может не показать всех недостатков программного


обеспечения, так как происходит поиск определенных недостатков.
НЕФОРМАЛЬНОЕ ТЕСТИРОВАНИЕ
 интуитивное тестирование, основанное на интуиции и практическом
опыте тестировщика. При неформальном тестировании процедуры
тестирования не планируются тщательно. Проводится в случаях, когда
это предусмотрено стратегией тестирования, методологией процесса
разработки ПО.
Преимущества:
 Тесты могут оказаться лишь повторением системных тестов

 Будет обнаружено большее количество недостатков, зависящих от


пользователя, чем при формальном приемочном тестировании.
 Недостатки:

 Требуются ресурсы, планирование и управление ими.

 Нельзя задавать определенные тестовые наборы.

 Пользователи могут привыкнуть к системе и не увидеть недостатков.

 Пользователи могут увлечься поиском новшеств в новой версии, а не


недостатков.
ВИДЫ ПО ВРЕМЕНИ ТЕСТИРОВАНИЯ

 Альфа-тестирование
 Бета-тестирование
Альфа-тестирование (alpha testing) – это вид тестирования, которое обычно
проводится на поздней стадии разработки продукта и включает имитацию
реального использования продукта штатными разработчиками либо командой
тестировщиков. Обычно альфа тестирование заключается в систематической
проверке всех функций программы с использованием техник тестирования
«белого ящика» и «черного ящика».
Преимущества альфа-тестирования:
 Обеспечивает лучшее представление о надежности программного
обеспечения .
 Помогает моделировать поведение пользователя и окружающую среду в
режиме реального времени.
 Обнаруживает много серьезных ошибок.

 Дает возможность раннего обнаружения ошибок в отношении дизайна и


функциональности.
Недостатки альфа-тестирования:
 Функциональность не может быть проверена на всю глубину, поскольку
программное обеспечение все еще находится на стадии разработки. Иногда
разработчики и тестировщики недовольны результатами альфа-тестирования
Бета-тестирование (beta testing) – интенсивное использование почти
готовой версии продукта с целью выявления максимального числа ошибок в
его работе для их последующего устранения перед окончательным выходом
(релизом) продукта на рынок, к массовому потребителю. Бета-тестирование
представляет собой реально работающую версию программы с полным
функционалом. И задача бета-тестов – оценить возможности и
стабильность работы программы с точки зрения ее будущих пользователей.
 В отличие от альфа-тестирования, проводимого силами штатных
разработчиков или тестировщиков, бета-тестирование предполагает
привлечение добровольцев из числа обычных будущих пользователей
продукта, которым доступна упомянутая предварительная версия
продукта (так называемая бета-версия).
Бета-тестирование может быть:
 Закрытым: Программа тестируется в небольшой группе пользователей
по приглашениям.
 Открытым: Этот вариант позволяет протестировать приложение в
большей группе и получить большой объем обратной связи. Любой
пользователь сможет присоединиться к открытому бета-тестированию и
отправить личный отзыв
ОТЛИЧИЯ МЕЖДУ АЛЬФА- И БЕТА-ТЕСТИРОВАНИЕМ
Альфа-тестирование Бета-тестирование
Что делает
Повышает качество продукта, интегрирует данные о
Повышает качество продукта и обеспечивает
клиенте в готовый продукт и обеспечивает готовность
готовность к  бета-тестированию.
к выпуску.
Когда проводится
Ближе к концу процесса разработки, когда
продукт находится в почти полностью Непосредственно перед запуском.
работоспособном состоянии.
Как долго проводится

Обычно очень долго в течении многих итераций. Обычно только несколько недель (иногда до
Альфа-тестирование нередко длится в 3-5 раз нескольких месяцев) с небольшим количеством
больше длительности бета-тестирования. основных итераций.

Что включает в себя


Обычно включает в себя маркетинг, поддержку,
Почти исключительно включает проверку
документацию, качество и инжиниринг (в основном,
качества ПО (баги, баги, баги).
всю группу продуктов).
Кто проводит
Обычно выполняется тестировщиками,
Испытано в «реальном мире» с «реальными
разработчиками, а иногда и «друзьями и семьей».
клиентами» и обратная связь может охватывать
Фокусируется на тестировании, которое будет
каждый элемент продукта.
эмулировать ~ 80% клиентов.
Отладка

Большинство известных критических Большая часть собранной обратной связи


проблем исправлены, некоторые функции рассматривается и/или применяется в будущих
могут быть изменены или добавлены в версиях продукта. Выполняются только
результате ранней обратной связи. важные/критические изменения.

Как тестируют

Тестируют по методологии, показателям Тестируют с применением реальности и


эффективности. Хороший альфа-тест воображения. Бета-тесты исследуют пределы
задает четко определенные критерии и продукта, позволяя клиентам исследовать
измеряет продукт по отношению к этим каждый элемент продукта в своей родной
ориентирам. среде.

Результат

 Есть отличное представление о том, как Есть представление о том, что ваш клиент
работает продукт и соответствует ли он думает о продукте и о том, что он может
критериям дизайна (и «бета-готов» ли он). испытывать, когда покупает его.

Что дальше
 Бета-тестирование. Выпуск.

Вам также может понравиться