Тестовое покрытие тестовый сценарий тестовый пакет

Работа по теме: Диплом Курочкина. Глава: 2.4. Тестовое покрытие и качество системы тестов. ВУЗ: СПбГЭТУ.

Для того чтобы понять достаточно ли
разработано тестов, необходимо

измерять
полноту тестирования, которое называется
тестовое покрытие.

Структурное: степень покрытия тестами
структуры – кода, подсистемы или
компонентов — в системе, предназначенной
для тестирования.

Поведенческое: степень покрытия тестами
поведения – рисков качества, режимов
работы, функций, акивностей и прочего
применения – системы предназначенной
для тестирования.

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

  1. Разработка общих алгоритмов тестирования

3.1. Тестовые сценарии и их выполнение

Test
Case
(пер. с англ. «Тестовый случай») –
последовательность шагов, которые
необходимо выполнить.

Test Suite
(пер. с англ. «Тестовый набор») – набор
логически связанных тестовых сценариев
[14].

Алгоритм тестирования — это набор Tast
Case
, другими словами Test Suite. Ниже
представлены таблицы разбитые по
выработанным критериям тестирования,
каждая из которых содержит обобщенный
набор Test Case.

  • Функциональность.

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

Таблица
2 – Тестовые сценарии функциональности

Название

Описание проверки

Ожидание на
выходе

Идентификация

1.Вход
в систему с различными данными.

2.Права
доступа к различным ресурсам.

3.Истечение
срока действия пароля или лицензии.

1.Корректный
вход/не вход в систему.

2.Доступность/недоступность
тех или иных ресурсов системы.

3.Предупреждение
об истечение каких-либо временных
данных.

Информационные
печатные модули

1.Доступ
к информации.

2.Отображение
информации.

3.Переходы
между информационными блоками.

4.Работа
всех подключаемых технологий: флеш,
Ajax, JS и т.д.

1.Возможность
просматривать информацию в соответствии
с правами доступа пользователя.

2.Правильное
отображение, кодировки, языки и т.д.

3.Возможность
перехода между всеми разрешенными
правами информационными блоками.

4.Корректное
отображение всех технологий, или
использование заглушек.

Продолжение
таблицы 2

Название

Описание проверки

Ожидание на
выходе

Информационные
видео модули

1.Доступ
к информации.

2.Отображение
информации.

3.Возможность
замены видео- информации.

1.Возможность
просматривать информацию в соответствии
с правами доступа пользователя.

2.Варианты
использования проигрывателей или
использование встроенного проигрывателя.

3.Проверка
использования альтернативных вариантов
замены видео-модуля.

Модули
проверки знаний.

1.Подключения
к тестам или другим модулям проверки
знаний.

2.Прохождение
тестов.

3.Проверка
результатов тестов.

4.Временные
и количественные характеристики.

1.Подключение
к тестовым заданиям при политике,
используемой в данном электронном
курсе.

2.Варинты
навигации по тестам, варианты ответов
и их изменение и т.д.

3.Отображение
результатов теста, проверка подсказок
или возможность перепроверки знаний.

4.Ограничения
по времени и количествам прохождения
теста.

Действия
с информацией.

1.Загрузка
данных на ПК.

2.Копирование
информации.

1.Проверка
возможности/невозможности загрузки
данных на ПК.

2.Возможность,невозможность
реализации копирования информации.

Продолжение
таблицы 2

Название

Описание проверки

Ожидание на
выходе

Соответствие
требованиям.

1.
Соотнесение требований и функционала.

1.
Проверка однозначного и полного
выполнения всех начальных требований.

  • Нагрузка.

Так как большинство электронных курсов
используют либо Internet, либо Intranet, то не
обойтись без нагрузочного тестирования
количества подключаемых пользователей.
Некоторые варианты тестирования
представлены в таблице 3.

Таблица
3 – Тестовые сценарии нагрузочного
тестирования

Название

Описание проверки

Ожидание на выходе

Нагрузки
подключений.

1.Подключение
от 0-50 пользователей.

2.Подключение
от 50-200 пользователей.

3.Поключение
от 200-1000.

4.Подключение
свыше 1000.

Среднестатистическая
система обязана корректно работать
в диапазоне от 0-200 такой нагрузки.

Не
выдерживание каких-либо нагрузок
должна корректно предупреждать об
этом пользователей.

Поведение
при пиковых нагрузках.

1.Количество
пользователей достигло предела.

2.Падение
сервера.

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

2.Обработка
вариантов падение сервера.

Продолжение
таблицы 3

Название

Описание проверки

Ожидание на выходе

Транзакции.

1.Большое
число подключений с посылом каких-либо
данных.

1.Сохранность
всех данных, обработка в пределах
допустимого времени всех транзакций.

  • Обработка
    дат и времени.

Правильная обработка всех математических
составляющих электронных курсов таблица
4.

Таблица
4 – Тестовые сценарии по обработке дат
и времени

Название

Описание проверки

Ожидание на выходе

Работа
с временем.

1.Временные
ограничения на выполнение.

2.Формат
представления времени.

3.Различные
часовые пояса.

1.Проверка
выполнения временных ограничений на
подключения или их отсутствие.

2.Единый
формат представление времени.

3.Использование
электронных курсов в различных странах.
Отображение времени.

Продолжение
таблицы 4

Название

Описание проверки

Ожидание на выходе

Работа
с математическими данными.

1.Математические
действия.

2.Использования
различных вариантов ввода мат. операций.

3.Использование
различных типов данных.

1.Правильная
реализация всех математических
действий, если того требует система.

2.Варианты
ввода с клавиатуры или использование
встроенного калькулятора с ограниченным
или расширенным набором действий.

3.Проверка
на обработку различного представления
данных (нпрм.: «.» или «,»).

  • Качество
    данных.

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

Таблица
5 – Тестовые сценарии по качеству данных

Название

Описание проверки

Ожидание на выходе

Целостность
информации.

1.Переходы
между модулями информации.

1.Проверка
отображения всех модулей без пропадания
кусков.

Логическое
окончание.

1.Проверка
всех модулей информации на правильно
завершение.

1.
Логическое завершение предоставляемых
данных.

Продолжение
таблицы 5

Название

Описание проверки

Ожидание на выходе

Правдивость
информации.

Зависит
от предоставляемых курсов.

Проверяется
на этапе сбора требований. Информация
должна быть взята из проверенных
источников и тщательно проанализирована.

Сохранность
данных.

1.Экстренное
сохранение информации.

2.Варианты
сохранения результатов.

3.Варианты
отгрузки данных с сервера.

4.Постоянное
сохранение изменений.

1.Поведение
относительно сохранности информации
при пиковых нагрузках или непредвиденных
обстоятельствах поведения системы.

2.Варианты
самоличного сохранения информации.

3.Варианты
загрузки предыдущих сохранений/откаты.

4.Проверка
наличия периодического сохранения
информации системой.

  • Локализация.

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

Таблица
6 – Тестовые сценарии локализации

Название

Описание проверки

Ожидание на выходе

Кроссбраузерность.

1.Использование
различных браузеров.

2.Использование
различных версий поддерживаемого
браузера.

1.Проверка
работоспособности во всех заявленных
браузерах.

2.Использование
различных версий поддерживаемых
браузерах.

Обработка
страниц.

1.Поддержка
кодировки.

2.Языковая
составляющая.

1.
Корректное отображение информации.

2.Поддержка
языковых стандартов.

Новая
версия курса.

1.Обновление
версионности электронных курсов.

1.Корректная
работа каждой версии во всех заявленных
браузерах.

Поддержка
на различном ПО.

1.
Варианты используемго ПО.

1.
Проверка на различных машинах: Linux,
Windows, Mac.

  • Безопасность.

Тестирование безопасности очень большая
и важная тема, особенно для систем,
которые используют сеть. Для тестирования
безопасности необходимо использовать
различные сторонние продукты, но
изначально необходимо определить на
сколько в создаваемом курсе важна
безопасность.

  • Документирование.

Документирование сложных систем
происходит еще с этапа сбора требований.

Таблица
7 – Тестовые сценарии по документированию

Название

Описание проверки

Ожидание на выходе

Требования.

1.Требования
системы.

2.Проверка
соответствия.

1.
Проверка правильности требований к
ОС и другим средствам и условиям.

2. Проверка
соответствия требований продукта и
требований к системе.

Подсказки.

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

1. Проверка
всех подсказок, которые сопровождают
пользователя по всему курсу.

  • Удобство
    использования.

Последнее время все большее внимание
уделяется Usability (в пер. с
англ. «удобство использования»). Вопросы
связанные с удобством и понимание
каких-либо систем должны быть тщательно
рассмотрены, в том числе в электронных
курсах. Варианты, когда пользователь
не понимает вопросов или навигации
системы, влечет за собой отказ от данного
продукта и последующее падение престижа
и прибыли компании. В таблице 8 представлены
варианты тестовых сценариев по удобству
использования.

Таблица
8 – Тестовые сценарии по Usability

Название

Описание проверки

Ожидание на выходе

Единообразие.

1.
Проход по всем модулям.

1.
Проверка стилистического единообразие
элементов электронных курсов: кнопок,
скроллов, меню, картинок и т.д.

Продолжение
таблицы 8

Название

Описание проверки

Ожидание на выходе

Навигация.

1.Навигация
в пределах одного модуля.

2.Навигация
вне модуля.

1.
Проверка всех вариантов передвижения
по модулю. Понимание и ясность.

2. Переход
в другие модули и обратно.

Пригодность
к использованию.

С учетом
особенностей целевой аудитории.

Если
данные курсы рассчитаны на людей с
плохим зрением или с какими-то
ограничением им должно быть удобно
использовать данный курс. Увеличенные
кнопки, звуковые сигналы и т.д.

Понимание.

1.
Обратная связь.

1.
Пользователь всегда должен понимать:
где он находится, куда он может
двигаться, где посмотреть подсказку,
каких действий ждет от него система
т.д.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Тест-анализ и тест дизайн

latest update of the page: 17-01-2023, 21:53 UTC

Тест-анализ

Тест-анализ = процесс поиска и рассмотрения информации, необходимой для тестирования. Обычно она есть у людей с хорошими знаниями о системе и способах её использования, в документации (требования, спецификации, описания архитектуры и интеграции и т.п).

Такая информация нужна для составления тест-кейсов.

Исполняющему роль тест-аналитика необходимо (в общем случае):

  1. Знать, кто является причастными сторонами (т.н. стейкхолдерами): кто владелец проекта, владелец продукта, заказчики/клиенты, исполнители работ по проектированию, разработке, тестированию и сопровождению системы.

    Ибо крайне важно понимать, кто будет поставщиком информации (например, архитекторы, аналитики, разработчики, админы/девопс), а кто будет потребителем наших информационных артефактов (например, проектные/продуктовые менеджеры и тестировщики).
  2. Держать в голове для каких целей создан Продукт/Система, кто и каким образом будет его использовать.
  3. Выяснять суть реализации (общесистемной или конкретного инкремента): какова архитектура, какие компоненты дорабатываются.
  4. Определять необходимое и возможное тестовое покрытие (что будем тестировать и на какую «глубину»), необходимые виды тестирования.
  5. (опционально) Определить риски тестирования. Они способны серьёзно повлиять на оценку сроков тестирования.
  6. (опционально) Составить Матрицу трассировки требований

Тестовое покрытие

Тестовое покрытие = покрытие тестами требований к продукту/системе, выраженное в численном либо процентном соотношении. Тестовое покрытие является одной из основных метрик качества продукта.

Иногда под тестовым покрытием имеют в виду покрытие критериев приёмки, покрытие кода. Кто-то считает покрытие только автотестами.

Тестовое покрытие говорит о добротности тестирования, о степени доверия к производимому продукту, о наличие и масштабах «белых пятен», где выше риск пропуска ошибок.

Процесс определения покрытия кратко картинкой:

Как определить тестовое покрытие

скачать схему в формате diagrams.net (бывший draw.io)

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

Теперь надо определиться с объёмом тестирования и видами тестирования.

Проводим логическую декомпозицию Системы, определяя:

  1. сущности (задействованные чаще всего, самые важные), связи сущностей, модель их статусов/состояний, возможные действия с сущностями (CRUD, фильтрация, сортировка, поиск, экспорт, импорт, валидация, парсинг, копирование).
  2. бизнес-процессы, use cases (user scenarios, system scenarios), проходящие в продукте.
  3. входящую и исходящую интеграции, каким способом она происходит (ETL, RPC, REST API, file, MQ и т.д.) и с чем.
  4. ролевая модель — какие роли с какими правами; на какие бизнес-процессы, use cases и на работу с какими сущностями она распространяется.
  5. UI как те или иные виды экранных форм в web-, desktop-, mobile-приложении. Или даже TUI.
  6. CLI (command-line interface) и возможные команды приложению посредством командной строки.
  7. Варианты конфигурации приложения.

Теперь прикидываем какими видами тестирования с какими тест-сценариями это счастье можно покрыть:

Вид тестирования Примеры тестов
Функциональное позитивное (в т.ч. безопасности)
  1. Тесты на основе уже определённых и описанных системными и бизнес-аналитиками критериев приёмки функций/свойств Системы;
  2. Позитивные проверки всего и вся:

    • E2E-тесты по бизнес-процессам, use case, user story
    • тесты на корректную работу системы с сущностями (данными)
    • UI-тесты

      • состояние и содержимое UI-элементов на странице
      • логика отображения и поведения UI-элементов
      • маски на полях, допустимая длина вводимых данных
    • (все вышеперечисленные) тесты в различных браузерах (если приложение кросс-браузерно)
    • API-тесты (не забывая проверять соблюдение SLA)
    • интеграционные тесты, если в скоуп входит несколько Систем (сервисов). Часто совмещаются с API-тестами.
    • (все вышеперечисленные) тесты в различном окружении (если приложение кросс-платформенно)
    • тесты на команды приложению в CLI (при наличии такого интерфейса)
  3. Позитивные тесты безопасности:

    • возможность получения токенов, ключей, сертификатов в предусмотренных условиях с корректными запросами
    • E2E и UI-тесты под предусмотренными ролевой моделью ролями, работа с формами и сущностями (данными)
Функциональное негативное (в т.ч. безопасности)
  1. Тесты на основе уже определённых и описанных системными и бизнес-аналитиками критериев приёмки функций/свойств;
  2. попытка «скормить» данные не предусмотренного типа, не того который ожидается
  3. попытка «скормить» данные не в той структуре (не в том формате), которая ожидается
  4. попытка работать с несуществующими сущностями
  5. попытка работать с удалёнными сущностями
  6. попытка совершить переход сущности в состояние, не предусмотренное к достижению из текущего состояния
  7. попытка совершить переход сущности из текущего состояния в это же (проверяем что не совершается «лишних» действий, не появляются дубликаты данных, не происходит перезапись данных и т.п.)
  8. негативные тесты на безопасности:

    • невозможность получения токенов, ключей, сертификатов с некорректными условиями/запросами
    • невозможность работы с формами и сущностями (данными) от лица роли, доступа к ним для которой запрещена согласно ролевой модели
    • тестирование на проникновение
Нефункциональное:

  1. нагрузочное тестирование
  2. стресс-тестирование
  3. тестирование стабильности или надёжности
  4. тестирование выносливости
  5. объёмное тестирование
  6. тестирование установки
  7. тестирование удобства пользования
  8. тестирование на отказ и восстановление
  9. тестирование конфигураций
  10. тестирование совместимости
  11. тестирование безопасности
  1. Тесты на основе уже определённых и описанных системными и бизнес-аналитиками критериев приёмки
  2. обычные нагрузочные тесты, стресс-тесты, тесты на отказоустойчивость и т.п.
  3. обычные тесты на корректную работу (запуск) в различных предусмотренных конфигурациях
  4. обычные тесты на корректный запуск приложения в различном environment и ОС
  5. обычные тесты на установку приложения с соблюдением SLA
  6. симуляция недоступности БД в процессе работы
  7. симуляция потери данных в процессе работы (удаление файлов, сущностей в БД)
  8. симуляция потери доступа к транспорту
  9. симуляция недоступности необходимых для работы портов и ресурсов
  10. симуляция стопора в очереди в транспорте (недоступность Kafka/RabbitMQ, снижение пропускной способности)
  11. используются ли в межсервисном взаимодействии нужные протоколы, сертификаты, шифрование
  12. корректно ли замаскированы данные в БД

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

Уже становится ПРИМЕРНО виден объём возможного тестирования, можно ПРИМЕРНО прикинуть сколько времени займёт как тест-дизайн по этим черновикам (детализация тест-кейсов), так и время прохождения всех этих тестов.

Заодно можно прикинуть какие из этих тест-кейсов целесообразно пустить потом в автоматизацию.

Трассировка требований и тест-кейсов

Матрица трассируемости требований (Requirement Traceability Matrix) = двумерная таблица, содержащая соответствие требований (user/business requirements, software requirements) и подготовленных тест-кейсов (test cases).

Основное её предназначение в отображении степени покрытия требований тест-кейсами.

Матрица может включать в себя параметры в зависимости от ваших нужд на проекте

  • ID Бизнес-Требования (BR, Business Requirement) или Бизнес Варианта Использования (Business Use Case);
  • суть Бизнес-Требования;
  • (опционально) приоритет Бизнес-Требования;
  • (опционально) приёмочный критерий Требования (acceptance criteria);
  • (опционально) ID Функционального требования (FR, functional requirement) из Спецификации к Требованиям ПО (SRS) или ID Варианта Использования (UC, Use Case);
  • (опционально) описание Функционального требования или Варианта Использования;
  • ID тестового артефакта (Тест-кейса);
  • (опционально) ожидаемый результат Тест-кейса (expected result);
  • (опционально) номер Задачи на разработку из таск-трекера + её описание;
  • (опционально) логический блок / модуль, к которому принадлежит Задача/Требование;

Примеры Матриц Трассировки:

  • # Block of feature Issue for development Acceptance criteria Priority Test-case
    1 Create Creating User should be able to create new document High Test #1: Create document
    2 User should not be able to create new document, if he has role = «Reviewer» High Test #14: Reviewer should not be able to create new doc
    3 Print Document printing User should be able to print a document High Test #2: Print a document
    4 .doc, .pdf, .docx, .rtf formats of a document should be able to be printed High Test #4: Check-list for doc formats
    N Low / Medium / High link to TC
  • Пример Матрицы Трассировки номер 1

    (скачать таблицу в формате XLSX)

Для каждого Бизнес-Требования будет одно или несколько Функциональных (Системных) Требований, его реализующих. Соответственно, каждое системное требование должно иметь критерии приёмки, которые должны быть покрыты тестами.

Пример рабочего процесса, в котором присутствует создание Матрицы Трассировки:

Пример рабочего процесса, в котором присутствует создание Матрицы Трассировки

скачать схему в формате diagrams.net (бывший draw.io)

Если вы используете таск-трекер Jira (и её плагины Zephyr Scale (Zephyr Squad) — Test Management for Jira) для тестовой документации и систему управления требованиями Сonfluence, то JIRA-таски и Confluence-страницы можно привязывать к тест-кейсам, в JIRA-тасках создавать связи с тестовыми прогонами, и такая трассируемость позволяет:

  • визуализировать актуальное состояние реализации;
  • разбивать требования на более атомарные и структурировать их;
  • отслеживать, есть ли требования, на которые еще не запланирована разработка (пропуск реализации);
  • отслеживать, реализовано ли требование в данный момент;
  • отслеживать, покрыто ли требование тест-кейсом (пропуск тестирования);
  • наглядно отображать приоритизацию требований.

Соотношение привязки Требования и Тест-кейса может быть:

  • 1 к 1 (атомарное требование, которое покрывается одним тест-кейсом, данный тест-кейс покрывает только это требование);
  • 1 к n (требование, которое покрывается несколькими тест-кейсами, данные тест-кейсы покрывают только это требование);

    когда одно требование в матрице трассируемости покрывается несколькими тестами, это может говорить об избыточности тестирования. В таком случае надо проанализировать, насколько требование атомарно.
  • n к n (требование, которое покрывается несколькими тест-кейсами, данные тест-кейсы покрывают это и другие требования).

Программные комплексы для управления требованиями:

  • (очень платное) IBM Rational DOORS
  • (платное)(есть trial на 14 дней) Cradle
  • (платное) DevProm Requirements. Один из функциональных блоков программного продукта Devprom ALM
  • (платный) плагин RMsis для Atlassian JIRA
  • (платный) плагин R4J для Atlassian JIRA

Риски качества

Риск качества (Quality risk) — потенциальный вид ошибки, способ поведения системы, при котором она, вероятно, не соответствует обоснованным ожиданиям качества системы, имеющимся у пользователя или заказчика. Это потенциальный, а не обязательный результат.

Общие категории рисков качества
Функциональность Проблемы, в результате которых не работают конкретные функции
Нагрузка, производительность, объём Проблемы обработки ожидаемых пиковых нагрузок при параллельной работе нескольких пользователей
Надёжность, стабильность работы Проблемы, при которых система слишком часто зависает или долго не восстанавливается
Перегрузки, обработка ошибок и восстановление Проблемы, возникающие ввиду превышения допустимых пиковых нагрузок или из-за обработки недопустимых условий (например, побочный эффект от сознательного внесения ошибок)
Обработка времени и дат Ошибки в математических действиях с датами и временем, в их форматировании, в планируемых событиях и других операциях, зависящих от времени
Качество данных Ошибки в обработке, извлечении и хранении данных
Производительность проблемы с временем завершения задач при ожидаемой нагрузке
Локализация проблемы, связанные с локализацией продукта, в том числе в обработке страницы символов, языковой поддержке, в использовании грамматики, словаря, а также в сообщениях об ошибках и файлах помощи
Безопасность проблемы в защите системы и охраняемых данных от мошеннического и злонамеренного использования
Установка/перенос ошибки, которые препятствуют поставке системы
Документирование ошибки в руководствах по установке и работе с системой для пользователей и системных администраторов

Из этого также следует вывод о том, насколько важно изучить требования заказчика, придерживаться их и здравого смысла (заказчик не всегда прав, иногда полезно намекнуть ему о потенциальных рисках в результате реализации какого-либо из его легкомысленных требований).

Риски тестирования

Основные риски тестирования:

  1. Проектные — связанные с коммуникациями участников команды, инфраструктурой:

    — изменение скоупа тестирования после проверки основных тест-кейсов

  2. Продуктовые — связанные только с тестируемыми функциями и тестовыми средам:

    — отсутствие тестовых зон с заданной конфигурацей (медленные БД, (не)обезличенные БД, отсутствие каких-то тестовых данных)

    — недопустимое время на ожидание подготовки тестовых зон со стороны Администраторов / DevOps

Тест дизайн

Проектирование тестов (test design) = процесс проектирования и создания тест-кейсов (тестовых случаев/сценариев/дел, case — юр. «дело»), в соответствии с определёнными ранее критериями качества, целями тестирования, критериями приёмки.

Тест-кейс

Тестовый случай (Test Case) = артефакт, описывающий совокупность шагов, конкретных условий и параметров, необходимых для проверки реализации тестируемой функции или её части.

Этимология слова case восходит к юридиспруденции. Case — дело, случай.

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

assurance case

скачать схему в формате diagrams.net (бывший draw.io)

Исчерпывающий формат тест-кейса

  1. Название (subject)
  2. Описание (description) — что проверяем, некие важные подробности
  3. Трассировка (tracing) — ссылки на таск и страницу с требованиями к проверяемой тест-кейсом функциональности, юзкейс, юзерстори ссылки на бегрепорты по тест-кейсу
  4. Предусловия (preconditions), например:

    • Учётные записи и настройки ролей: имеется такая-то учётная запись, JWT, так-то настроена аутентификация и авторизация, учётной записи назначены такие-то права/роли.
    • Развёрнуто и настроено: развёрнуто A,B,C, перечисление критически важных для теста атрибутов конфигурации.

      Возможно, ссылка на репозиторий, регистр с контейнерами скрипты деплоя и инструкции при наличии
    • Данные: в Системах A,B,C (их БД) созданы такие-то экземпляры сущностей / имеются такие-то данные, которые понадобятся в процессе теста.
  5. «Тело» тест-кейса, обычно в виде таблицы такого вида:

    № п/п Действие Ожидаемый результат Результат
    1 Делаем вот это Видим вот это, это и это <успех / неудача, комментарий с подробностями фактического результата при неудаче>
    N

Методы разработки тестов

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

Причина / Следствие (Cause/Effect)

Простая проверка действий и их результата. Как правило, ввод комбинаций условий (Причин) для получения ответа от системы (Следствие).

Например, вы проверяете возможность добавлять клиента, используя определённую экранную форму. Пользователю необходимо заполнить несколько полей — «Имя», «Адрес», «Номер Телефона» — а затем нажать кнопку «Добавить». Это Причина. После нажатия кнопки «Добавить» система добавляет клиента в БД и показывает его номер на экране — это Следствие.

Примерный алгоритм:

  1. Выискиваем и связываем причины и следствия в спецификации
  2. Учитываем «невозможные» сочетания причин и следствий
  3. Составляем «таблицу решений», где в каждом столбце указана комбинация входов и выходов, т.е. каждый столбец это готовый тестовый сценарий
  4. Приоритизируем решения.

Тестирование смены состояний (State Transition Testing)

Когда в Системе есть сущности (объекты), которые могут принимать различные состояния, то неплохо бы проверить, что предусмотренные требованиями переходы возможны к осуществлению, а непредусмотренные — невозможны.

Пример:

Тестирование состояния сущностей</b> (State Transition Testing — STT)

скачать схему в формате diagrams.net (бывший draw.io)

Подробнее: Тестирование на основе диаграмм состояний сущности (2015).

Таблица решений (Decision Table Testing)

Способ компактного представления модели со сложной логикой. Устанавливает связь между условиями (входными параметрами) и результатом (действиями Системы). Определить/записать все условия. Просчитать возможное количество комбинаций условий. Заполнить комбинации. Записать действия. Убрать лишние комбинации.

Например:

Таблица решений (Decision Table Testing — DTT)

Чуть подробнее: Decision Table Testing: Learn with Example

Тестирование путей (Path Testing)

Часто под ним имеется в виду метод тестирования белого ящика Control Flow Testing (тестирование управляемого потока), в котором тест-кейсами покрываются все логические потоки ПО. Подробнее можно прочитать здесь:

  • Path Testing & Basis Path Testing with EXAMPLES
  • Control Flow Testing

Однако, его же можно использовать для покрытия тестами логики тестируемой системы, если у нас имеются BPMN-диаграммы и UML activity-диаграммы, описывающие процессы, проходящие в ней.

Количество сценариев будет зависеть от количества логических узлов ветвлений. Если условия ветвлений зависят от значений каких-то данных, то скорее всего, для каждого тест-сценария необходимо, опираясь на диаграмму, определить набор входных данных.

Очень упрощённо:

Path testing simple example

Посмотреть/послушать о такого рода применении метода можно здесь Где логика?! История тестирования одного микросервиса (Денис Кудряшов, Leroy Merlin, 2020), где докладчик скомбинировал этот метод с вышеупомянутой таблицей решений (Decision Table Testing).

Определение классов эквивалентности (Equivalence Partitioning)
и Анализ Граничных Значений (Boundary Value Analysis)

  • Если область определения параметра — диапазон каких-то упорядоченных данных, то имеет смысл выделение трёх т.н. классов эквивалентности: «слева» от диапазона (невалидные значения), «внутри» диапазона (валидные значения) и «справа» от диапазона (снова невалидные). При выделении классов нужно использовать включающие границы с целью однозначности и точности: одно и то же значение не может относиться к двум классам одновременно.

    Анализ граничных значений может быть применен к полям, записям, файлам, или к любого рода сущностям имеющим ограничения.
  • Если область определения это набор неупорядоченных данных, то всегда можно выделить как минимум два класса — валидные и невалидные значения.

    Полученное разбиение можно «дробить» дальше. Например, множество латинских букв можно разбить на два подмножества: латинница в верхнем и нижнем регистре.

Пример:

Пример применения метода определения классов эквивалентности

Попарное тестирование (Pairwise Testing)

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

Пример оптимизации количества тестов этим методом:

Попарное тестирование (Pairwise Testing — PT)

Подробнее: ПОПАРНОЕ ТЕСТИРОВАНИЕ (PAIRWISE TESTING) (2018).

Предугадывание ошибки (Error Guessing)

Это когда тест-аналитик/тестировщик использует свои знания системы и способность к интерпретации спецификации на предмет того, чтобы «предугадать» при каких входных условиях система может выдать ошибку. Например, спецификация говорит: «здесь пользователь должен ввести код». Тест-аналитик выдвигает предположения: «Что, если я не введу код?», «Что, если я введу неправильный код?» и так далее. Это и есть предугадывание ошибки.

Иногда, под этим методом имеется в виду своеобразная «чуйка» у хорошо знающего систему тест-аналитика/тестировщика, когда при проверке функциональности X он даже неосознанно (опыт!) решает «на всякий случай» проверить дополнительно ещё функциональность Y, где могут «всплывать» ошибки.

Тесно связано с понятием импакт-анализа.

Исчерпывающее тестирование (Exhaustive Testing)

Бескомпромиссный случай — в пределах этой техники вы должны проверить реакцию Системы на все возможные комбинации входных значений, и в принципе, это должно найти все проблемы. На практике применение этого метода часто не представляется возможным, из-за огромного количества входных значений.

Тестовые сценарии (Test case), тестовые варианты. Оформление результатов тестирования.

ТЕРМИНОЛОГИЯ И ОБЩИЕ СВЕДЕНИЯ

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

Во главе всего лежит термин «тест». Официальное определение звучит так.

Тест — набор из одного или нескольких тест-кейсов.

Поскольку среди всех прочих терминов этот легче и быстрее всего произносить, в зависимости от контекста под ним могут понимать и отдельный пункт чек-листа, и отдельный шаг в тест-кейсе, и сам тест-кейс, и набор тест-кейсов и… продолжать можно долго. Главное здесь одно: если вы слышите или видите слово «тест», воспринимайте его в контексте.

Теперь рассмотрим самый главный для нас термин — «тест-кейс».

Тест-кейс — набор входных данных, условий выполнения и ожидаемых
результатов, разработанный с целью проверки того или иного свойства или поведения программного средства.

Под тест-кейсом также может пониматься соответствующий документ, представляющий формальную запись тест-кейса.

Мы ещё вернёмся к этой мысли, но уже сейчас критически важно понять и запомнить: если у тест-кейса не указаны входные данные, условия выполнения и ожидаемые результаты, и/или не ясна цель тест-кейса — это плохой тест-кейс (иногда он не имеет смысла, иногда его и
вовсе невозможно выполнить).

Иногда термин «test case» на русский язык переводят как «тестовый случай». Это вполне адекватный перевод, но из-за того, что «тест-кейс» короче произносить, наибольшее распространение получил именно этот вариант.

Высокоуровневый тест-кейс — тест-кейс без конкретных входных дан-
ных и ожидаемых результатов.

Как правило, ограничивается общими идеями и операциями, схож по своей сути с подробно описанным пунктом чек-листа. Достаточно часто встречается в интеграционном тестировании и системном тестировании, а также на уровне дымового тестирования. Может служить отправной точкой для проведения исследовательского тестирования или для создания низкоуровневых тест-кейсов.

Низкоуровневый тест-кейс — тест-кейс с конкретными входными дан-
ными и ожидаемыми результатами.

Представляет собой «полностью готовый к выполнению» тест-кейс и вообще является наиболее классическим видом тест-кейсов. Начинающих тестировщиков чаще всего учат писать именно такие тесты, т.к. прописать все данные подробно — намного проще, чем понять, какой
информацией можно пренебречь, при этом не снизив ценность тест-кейса.

Спецификация тест-кейса — документ, описывающий набор
тест-кейсов (включая их цели, входные данные, условия и шаги выполнения, ожидаемые результаты) для тестируемого элемента.

Спецификация теста — документ, состоящий из спецификации тест-дизайна, спецификации тест-кейса и/или спецификации тест-процедуры.

Тест-сценарий — документ, описывающий последовательность действий по выполнению теста (также известен как «тест-скрипт»).

ЦЕЛЬ НАПИСАНИЯ ТЕСТ-КЕЙСОВ

Тестирование можно проводить и без тест-кейсов (не нужно, но можно; да, эффективность такого подхода варьируется в очень широком диапазоне в зависимости от множества факторов).

Наличие же тест-кейсов позволяет:

  • Структурировать и систематизировать подход к тестированию (без чего крупный проект почти гарантированно обречён на провал).
  • Вычислять метрики тестового покрытия (test coverage 296 metrics) и принимать меры по его увеличению (тест-кейсы здесь являются главным источником информации, без которого существование подобных метрик теряет смысл).
  • Отслеживать соответствие текущей ситуации плану (сколько примерно понадобится тест-кейсов, сколько уже есть, сколько выполнено из запланированного на данном этапе количества и т.д.).
  • Уточнить взаимопонимание между заказчиком, разработчиками и тестировщиками (тест-кейсы зачастую намного более наглядно показывают поведение приложения, чем это отражено в требованиях).
  • Хранить информацию для длительного использования и обмена опытом между сотрудниками и командами (или как минимум — не пытаться удержать в голове сотни страниц текста).
  • Проводить регрессионное тестирование и повторное тестирование (которые без тест-кейсов было бы вообще невозможно выполнить).
  • Повышать качество требований (мы это уже рассматривали: написание чек-листов и тест-кейсов — хорошая техника тестирования требований).
  • Быстро вводить в курс дела нового сотрудника, недавно подключившегося к проекту.

ЖИЗНЕННЫЙ ЦИКЛ ТЕСТ-КЕЙСА

В отличие от отчёта о дефекте, у которого есть полноценный развитый жизненный цикл, для тест-кейса речь скорее идёт о наборе состояний, в которых он может находиться (жирным шрифтом отмечены наиболее важные состояния).

  • Создан — типичное начальное состояние практически любого артефакта. Тест-кейс автоматически переходит в это состояние после создания.
  • Запланирован — в этом состоянии тест-кейс находится, когда он
    или явно включён в план ближайшей итерации тестирования, или как минимум готов для выполнения.
  • Не выполнен — в некоторых системах управления тест-кейсами это состояние заменяет собой предыдущее («запланирован»). Нахождение тест-кейса в данном состоянии означает, что он готов к выполнению, но ещё не был выполнен.
  • Выполняется — если тест-кейс требует длительного времени на выполнение, он может быть переведён в это состояние для подчёркивания того факта, что работа идёт, и скоро можно ожидать её результатов. Если выполнение тест-кейса занимает мало времени, это состояние, как правило, пропускается, а тест-кейс сразу переводится в одно из трёх следующих состояний — «провален», «пройден успешно» или «заблокирован».
  • Пропущен — бывают ситуации, когда выполнение тест-кейса отменяется по соображениям нехватки времени или изменения логики тестирования.
  • Провален — данное состояние означает, что в процессе выполнения тест-кейса был обнаружен дефект, заключающийся в том, что ожидаемый результат по как минимум одному шагу тест-кейса не совпадает с фактическим результатом. Если в процессе выполнения тест-кейса был «случайно» обнаружен дефект, никак не связанный с шагами тест-кейса и их ожидаемыми результатами, тест-кейс считается пройденным успешно (при этом, естественно, по обнаруженному дефекту создаётся отчёт о дефекте).
  • Пройден успешно — данное состояние означает, что в процессе выполнения тест-кейса не было обнаружено дефектов, связанных с расхождением ожидаемых и фактических результатов его шагов.
  • Заблокирован — данное состояние означает, что по какой-то причине выполнение тест-кейса невозможно (как правило, такой причиной является наличие дефекта, не позволяющего реализовать некий пользовательский сценарий).
  • Закрыт — очень редкий случай, т.к. тест-кейс, как правило, оставляют в состояниях «провален / пройден успешно / заблокирован / пропущен». В данное состояние в некоторых системах управления тест-кейс переводят, чтобы подчеркнуть тот факт, что на данной итерации тестирования все действия с ним завершены.
  • Требует доработки — как видно из схемы, в это состояние (и из него) тест-кейс может быть преведён в любой момент времени, если в нём будет обнаружена ошибка, если изменятся требования, по которым он был написан, или наступит иная ситуация, не позволяющая считать тест-кейс пригодным для выполнения и перевода в иные состояния.

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

Атрибуты (поля) тест-кейса.

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

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

Общий вид всей структуры тест-кейса представлен ниже:

Теперь рассмотрим каждый атрибут подробно.

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

Приоритет показывает важность тест-кейса. Он может быть выражен буквами (A, B, C, D, E), цифрами (1, 2, 3, 4, 5), словами («крайне высокий», «высокий», «средний», «низкий», «крайне низкий») или иным удобным способом. Количество градаций также не фиксировано, но чаще всего лежит в диапазоне от трёх до пяти.

Приоритет тест-кейса может коррелировать с:

  • важностью требования, пользовательского сценария или функции, с которыми связан тест-кейс;
  • потенциальной важностью дефекта, на поиск которого направлен тест-кейс;
  • степенью риска, связанного с проверяемым тест-кейсом требованием, сценарием или функцией.

Основная задача этого атрибута — упрощение распределения внимания и усилий команды (более высокоприоритетные тест-кейсы получают их больше), а также упрощение планирования и принятия решения о том, чем можно пожертвовать в некоей форс-мажорной ситуации, не позволяющей выполнить все запланированные тест-кейсы.

Связанное с тест-кейсом требование показывает то основное требование, проверке выполнения которого посвящён тест-кейс (основное — потому, что один тест-кейс может затрагивать несколько требований). Наличие этого поля улучшает такое свойство тест-кейса,
как прослеживаемость.

Частые вопросы, связанные с заполнением этого поля, таковы:

  • Можно ли его оставить пустым? Да. Тест-кейс вполне мог разрабатываться вне прямой привязки к требованиям, и (пока?) значение этого поля определить сложно. Хоть такой вариант и не считается хорошим, он достаточно распространён.
  • Можно ли в этом поле указывать несколько требований? Да, но чаще всего стараются выбрать одно самое главное или «более высокоуровневое» (например, вместо того, чтобы перечислять R56.1, R56.2, R56.3 и т.д., можно просто написать R56). Чаще всего в инструментах управления тестами это поле представляет собой выпадающий список, где можно выбрать только одно значение, и этот вопрос становится неактуальным. К тому же многие тест-кейсы всё же направлены на проверку строго одного требования, и для них этот вопрос также неактуален.

Модуль и подмодуль приложения указывают на части приложения,
к которым относится тест-кейс, и позволяют лучше понять его цель.
Идея деления приложения на модули и подмодули проистекает из того, что в сложных системах практически невозможно охватить взглядом весь проект целиком, и вопрос «как протестировать это приложение» становится недопустимо сложным. Тогда приложение логически разде-
ляется на компоненты (модули), а те, в свою очередь, на более мелкие компоненты (подмодули).
И вот уже для таких небольших частей приложения придумать чек-листы и создать хорошие тест-кейсы становится намного проще.

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

Теперь — самое сложное: как выбираются модули и подмодули. В реальности проще всего отталкиваться от архитектуры и дизайна приложения. Например, в уже знакомом нам приложении можно выделить такую иерархию модулей и подмодулей:

  • Механизм запуска:

    • механизм анализа параметров;
    • механизм сборки приложения;
    • механизм обработки ошибочных ситуаций.
  • Механизм взаимодействия с файловой системой:

    • механизм обхода дерева SOURCE_DIR;
    • механизм обработки ошибочных ситуаций.
  • Механизм преобразования файлов:

    • механизм определения кодировок;
    • механизм преобразования кодировок;
    • механизм обработки ошибочных ситуаций.
  • Механизм ведения журнала:

    • механизм записи журнала;
    • механизм отображения журнала в консоли;
    • механизм обработки ошибочных ситуаций.

Согласитесь, что такие длинные названия с постоянно повторяющимся словом «механизм» читать и запоминать сложно. Перепишем:

  • Стартер:
    • анализатор параметров;
    • сборщик приложения;
    • обработчик ошибок.
  • Сканер:
    • обходчик;
    • обработчик ошибок.
  • Преобразователь:
    • детектор;
    • конвертер;
    • обработчик ошибок.
  • Регистратор:
    • дисковый регистратор;
    • консольный регистратор;
    • обработчик ошибок.

Но что делать, если мы не знаем «внутренностей» приложения (или не очень разбираемся в программировании)? Модули и подмодули можно выделять на основе графического интерфейса пользователя (крупные области и элементы внутри них), на основе решаемых приложением
задач и подзадач и т.д. Главное, чтобы эта логика была одинаковым образом применена ко всему приложению.

Внимание! Частая ошибка! Модуль и подмодуль приложения — это НЕ действия, это именно структурные части, «куски» приложения. В заблуждение вас могут ввести такие названия, как, например, «печать, настройка принтера» (но здесь имеются в виду именно части приложения, отвечающие за печать и за настройку принтера (и названы
они отглагольными существительными), а не процесс печати или настройки принтера).

Сравните (на примере человека): «дыхательная система, лёгкие» — это модуль и подмодуль, а «дыхание», «сопение», «чихание» — нет; «голова, мозг» — это модуль и подмодуль, а «кивание», «думание» — нет.

Наличие полей «Модуль» и «Подмодуль» улучшает такое свойство тест-кейса, как прослеживаемость.

Заглавие тест-кейса призвано упростить и ускорить понимание основной идеи (цели) тест-кейса без обращения к его остальным атрибутам. Именно это поле является наиболее информативным при просмотре списка тест-кейсов.

Сравните.

Плохо Хорошо
Тест 1 Запуск, одна копия, верные параметры
Тест 2 Запуск одной копии с неверными путями
Тест 78 (улучшенный) Запуск, много копий, без конфликтов
Остановка Остановка по Ctrl+C
Закрытие Остановка закрытием консоли

Заглавие тест-кейса может быть полноценным предложением, фразой, набором словосочетаний — главное, чтобы выполнялись следующие условия:

  • Информативность.
  • Хотя бы относительная уникальность (чтобы не путать разные тест-кейсы).

Внимание! Частая ошибка! Если инструмент управления тест-кейсами не требует писать заглавие, его всё равно надо писать. Тест-кейсы без заглавий превращаются в мешанину информации, использование которой сопряжено с колоссальными и совершенно бессмысленными затратами.

И ещё одна небольшая мысль, которая может помочь лучше формулировать заглавия. В дословном переводе с английского «test case» обозначает «тестовый случай (ситуация)». Так вот, заглавие как раз и описывает этот случай (ситуацию), т.е. что происходит в тест-кейсе, какую
ситуацию он проверяет.

Исходные данные, необходимые для выполнения тест-кейса, позволяют описать всё то, что должно быть подготовлено до начала выполнения тест-кейса, например:

  • Состояние базы данных.
  • Состояние файловой системы и её объектов.
  • Состояние серверов и сетевой инфраструктуры.

То, что описывается в этом поле, готовится БЕЗ использования тестируемого приложения, и таким образом, если здесь возникают проблемы, нельзя писать отчёт о дефекте в приложении.
Эта мысль очень и очень важна, потому поясним её простым жизненным примером. Представьте, что вы дегустируете конфеты. В поле «исходные данные» можно прописать «купить конфеты таких-то сортов в таком-то количестве». Если таких конфет нет в продаже, если закрыт магазин,
если не хватило денег и т. д. — всё это НЕ проблемы вкуса конфет, и нельзя писать отчёт о дефекте конфет вида «конфеты невкусные потому, что закрыт магазин».

Некоторые авторы не следуют этой логике и допускают в приготовлениях работу с тестируемым приложением. И здесь нет «правильного варианта» — просто в одной традиции решено одним образом, в другой — другим. Во многом это — ещё и терминологическая проблема: «preparation», «initial data» и «setup» вполне логично выполнять без участия тестируемого приложения, в то время как «precondition» по смыслу ближе к описанию состояния тестируемого приложения. В реальной рабочей обстановке вам достаточно будет прочитать несколько тест-кейсов, уже созданных вашими коллегами,
чтобы понять, какой точки зрения на данный вопрос они придерживаются.

Шаги тест-кейса описывают последовательность действий, которые необходимо реализовать в процессе выполнения тест-кейса. Общие рекомендации по написанию шагов таковы:

  • начинайте с понятного и очевидного места, не пишите лишних начальных шагов (запуск приложения, очевидные операции с интерфейсом и т. п.);
  • даже если в тест-кейсе всего один шаг, нумеруйте его (иначе возрастает вероятность в будущем случайно «приклеить» описание этого шага к новому тексту);
  • если вы пишете на русском языке, используйте безличную форму (например, «открыть», «ввести», «добавить» вместо «откройте», «введите», «добавьте»), в английском языке не надо использовать частицу «to» (т.е. «запустить приложение» будет «start application», не «to start application»);
  • соотносите степень детализации шагов и их параметров с целью тест-кейса, его сложностью, уровнем и т. д. — в зависимости от этих и многих других факторов степень детализации может варьироваться от общих идей до предельно чётко прописанных значений и указаний;
  • ссылайтесь на предыдущие шаги и их диапазоны для сокращения объёма текста (например, «повторить шаги 3–5 со значением…»);
  • пишите шаги последовательно, без условных конструкций вида «если… то…».

Внимание! Частая ошибка! Категорически запрещено ссылаться на шаги из других тест-кейсов и другие тест-кейсы целиком: если те, другие тест-кейсы будут изменены или удалены, ваш тест-кейс начнёт ссылаться на неверные данные или в пустоту, а если в процессе выполнения те, другие тест-кейсы или шаги приведут к возникновению
ошибки, вы не сможете закончить выполнение вашего тест-кейса.

Ожидаемые результаты по каждому шагу тест-кейса описывают реакцию
приложения на действия, описанные в поле «шаги тест-кейса». Номер шага соответствует номеру результата.

По написанию ожидаемых результатов можно порекомендовать следующее:

  • описывайте поведение системы так, чтобы исключить субъективное толкование (например, «приложение работает верно» — плохо, «появляется окно с надписью…» — хорошо);
  • пишите ожидаемый результат по всем шагам без исключения, если у вас есть хоть малейшие сомнения в том, что результат некоего шага будет совершенно тривиальным и очевидным (если вы всё же пропускаете ожидаемый результат для какого-то тривиального действия,
    лучше оставить в списке ожидаемых результатов пустую строку — это облегчает восприятие);
  • пишите кратко, но не в ущерб информативности;
  • избегайте условных конструкций вида «если… то…».

Внимание! Частая ошибка! В ожидаемых результатах ВСЕГДА описывается КОРРЕКТНАЯ работа приложения. Нет и не может быть ожидаемого результата в виде «приложение вызывает ошибку в операционной системе и аварийно завершается с потерей всех пользовательских данных».

При этом корректная работа приложения вполне может предполагать отображение сообщений о неверных действиях пользователя или неких критических ситуациях. Так, сообщение «Невозможно сохранить файл по указанному пути: на целевом носителе недостаточно свободного места» — это не ошибка приложения, это его совершенно нормальная и правильная работа. Ошибкой приложения (в этой же ситуации) было бы
отсутствие такого сообщения, и/или повреждение, или потеря записываемых данных.

Для более глубокого понимания принципов оформления тест-кейсов рекомендуется прямо сейчас ознакомиться с главой «Типичные ошибки при разработке чек-листов, тест-кейсов и наборов тест-кейсов».

Свойства качественных тест-кейсов

Даже правильно оформленный тест-кейс может оказаться некачественным, если в нём нарушено одно из следующих свойств.

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

  • пишите лаконично, но понятно;
  • используйте безличную форму глаголов (например, «открыть» вместо «откройте»);
  • обязательно указывайте точные имена и технически верные названия элементов приложения;
  • не объясняйте базовые принципы работы с компьютером (предполагается, что ваши коллеги знают, что такое, например, «пункт меню» и как с ним работать);
  • везде называйте одни и те же вещи одинаково (например, нельзя в одном тест-кейсе некий режим работы приложения назвать «графическое представление», а в другом тот же режим — «визуальное отображение», т.к. многие люди могут подумать, что речь идёт о разных вещах);
  • следуйте принятому на проекте стандарту оформления и написания тест-кейсов (иногда такие стандарты могут быть весьма жёсткими: вплоть до регламентации того, названия каких элементов должны быть приведены в двойных кавычках, а каких — в одинарных).

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

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

Тест-кейс 1:

Шаги Ожидаемые результаты
Конвертация из всех поддерживаемых кодировок
Приготовления:
— Создать папки C:/A, C:/B, C:/C, C:/D.
— Разместить в папке C:/D файлы 1.html, 2.txt, 3.md из прилагаемого архива.
1. Запустить приложение, выполнив команду php converter.php c:/a c:/b c:/c/converter.log.
2. Скопировать файлы 1.html, 2.txt, 3.md из папки C:/D в папку C:/A.
3. Остановить приложение нажатием Crtl+C.
1. Отображается консольный журнал приложения с сообщением «текущее_время started, source dir c:/a, destination dir c:/b, log file c:/c/converter.log», в папке C:/C появляется файл converter.log, в котором появляется запись «текущее_время started, source dir c:/a, destination dir c:/b, log file c:/c/converter.log».
2. Файлы 1.html, 2.txt, 3.md появляются в папке C:/A, затем пропадают оттуда и появляются в папке C:/B. В консольном журнале и файле C:/C/converter.log появляются сообщения (записи) «текущее_время processing 1.html (KOI8-R)», «текущее_время processing 2.txt (CP-1251)», «текущее_время processing 3.md (CP-866)».
3. В файле C:/C/converter.log появляется запись «текущее_время closed». Приложение завершает работу.

Тест-кейс 2:

Шаги Ожидаемые результаты
Конвертация из всех поддерживаемых кодировок
1. Выполнить конвертацию трёх файлов до пустимого размера в трёх разных кодировках всех трёх допустимых форматов.
1. Файлы перемещаются в папку-приёмник, кодировка всех файлов меняется на UTF-8.

Если вернуться к вопросу «какой тест-кейс вы бы посчитали хорошим, а какой — плохим и почему», то ответ таков: оба тест-кейса плохие потому, что первый является слишком специфичным, а второй — слишком общим. Можно сказать, что здесь до абсурда доведены идеи низкоуровневых и высокоуровневых тест-кейсов.

Почему плоха излишняя специфичность (тест-кейс 1):

  • при повторных выполнениях тест-кейса всегда будут выполняться строго одни и те же действия со строго одними и теми же данными, что снижает вероятность обнаружения ошибки;
  • возрастает время написания, доработки и даже просто прочтения тест-кейса;
  • в случае выполнения тривиальных действий опытные специалисты тратят дополнительные мыслительные ресурсы в попытках понять, что же они упустили из виду, т. к. они привыкли, что так описываются только самые сложные и неочевидные ситуации.

Почему плоха излишняя общность (тест-кейс 2):

  • тест-кейс сложен для выполнения начинающими тестировщиками или даже опытными специалистами, лишь недавно подключившимися к проекту;
  • недобросовестные сотрудники склонны халатно относиться к таким тест-кейсам;
  • тестировщик, выполняющий тест-кейс, может понять его иначе, чем было задумано автором (и в итоге будет выполнен фактически совсем другой тест-кейс).

Выход из этой ситуации состоит в том, чтобы придерживаться золотой середины (хотя, конечно же, какие-то тесты будут чуть более специфичными, какие-то — чуть более общими).

Вот пример такого срединного подхода:

Тест-кейс 3:

Шаги Ожидаемые результаты
Конвертация из всех поддерживаемых кодировок
Приготовления:
— Создать в корне любого диска четыре отдельные папки для входных файлов, выходных файлов, файла журнала и временного хранения тестовых файлов.
— Распаковать содержимое прилагаемого архива в папку для временного хранения тестовых файлов.
1. Запустить приложение, указав в параметрах соответствующие пути из приготовления к тесту (имя файла журнала — произвольное).
2. Скопировать файлы из папки для временного хранения в папку для входных файлов.
3. Остановить приложение.
1. Приложение запускается и выводит сообщение о своём запуске в консоль и файл журнала.
2. Файлы из папки для входных файлов перемещаются в папку для выходных файлов, в консоли и файле журнала отображаются сообщения о конвертации каждого из файлов с указанием его исходной кодировки.
3. Приложение выводит сообщение о завершении работы в файл журнала и завершает работу.

В этом тест-кейсе есть всё необходимое для понимания и выполнения, но при этом он стал короче и проще для выполнения, а отсутствие строго указанных значений приводит к тому, что
при многократном выполнении тест-кейса (особенно — разными тестировщиками) конкретные параметры будут менять свои значения, что увеличивает вероятность обнаружения ошибки.

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

Баланс между простотой и сложностью. Здесь не существует академических определений, но принято считать, что простой тест-кейс оперирует одним объектом (или в нём явно виден
главный объект), а также содержит небольшое количество тривиальных действий; сложный тест-кейс оперирует несколькими равноправными объектами и содержит много нетривиальных
действий.

Преимущества простых тест-кейсов:

  • их можно быстро прочесть, легко понять и выполнить;
  • они понятны начинающим тестировщикам и новым людям на проекте;
  • они делают наличие ошибки очевидным (как правило, в них предполагается выполнение повседневных тривиальных действий, проблемы с которыми видны невооружённым взглядом и не вызывают дискуссий);
  • они упрощают начальную диагностику ошибки, т.к. сужают круг поиска.

Преимущества сложных тест-кейсов:

  • при взаимодействии многих объектов повышается вероятность возникновения ошибки;
  • пользователи, как правило, используют сложные сценарии, а потому сложные тесты более полноценно эмулируют работу пользователей;
  • программисты редко проверяют такие сложные случаи (и они совершенно не обязаны это делать).

Рассмотрим примеры.

Шаблон тестового сценария по стандартам WorldSkills (демо-экзамен) с комментариями

Для выполнения процедуры тестирования удаления товаров Вам нужно описать пять сценариев.

Удаление может быть выполнимо, а может быть отклонено согласно требованиям предметной области.

Необходимо, чтобы варианты тестирования демонстрировали различные исходы работы алгоритма. Для описания тестовых сценариев в ресурсах предоставлен шаблон testing-template.docx (есть в этом репозитории в каталоге docs).

Расшифровка тестовых информационных полей:

Поле Описание
Название проекта Название тестируемого проекта
Рабочая версия Версия проекта/программного обеспечения (первый тест считается 1.0).
Имя тестирующего Имя того, кто проводил тесты
Дата(ы) теста Дата(ы) проведения тестов – это один или несколько дней. Если тесты проводились в более протяженный период времени, нужно отметить отдельную дату для каждого теста.
Тестовый пример # Уникальный ID для каждого тестового примера. Следуйте некоторым конвенциям, чтобы указать типы тестов. Например,‘TC_UI_1′ означает‘user interface test case #1′ ( ТС_ПИ_1: тестовый случай пользовательского интерфейса#1)
Приоритет тестирования (Низкий/Средний/Высокий) Насколько важен каждый тест. Приоритет тестирования для бизнес-правил и функциональных тестовых случаев может быть средним или высоким, в то время как незначительные случаи пользовательского интерфейса могут иметь низкий приоритет.
Заголовок/название теста Название тестового случая. Например, Подтвердите страницу авторизации с действительным именем пользователя и паролем.
Краткое изложение теста Описание того, что должен достичь тест.
Этапы теста Перечислите все этапы теста подробно. Запишите этапы теста в том порядке, в котором они должны быть реализованы. Предоставьте как можно больше подробностей и разъяснений. Пронумерованный список – хорошая идея.
Тестовые данные Перечислите/опишите все тестовые данные, используемые для данного тестового случая. Так, фактические используемые входные данные можно отслеживать по результатам тестирования. Например, Имя пользователя и пароль для подтверждения входа.
Ожидаемый результат Каким должен быть вывод системы после выполнения теста? Подробно опишите ожидаемый результат, включая все сообщения/ошибки, которые должны отображаться на экране.
Фактический результат Каким должен быть фактический результат после выполнения теста? Опишите любое релевантное поведение системы после выполнения теста.
Предварительное условие Любые предварительные условия, которые должны быть выполнены до выполнения теста. Перечислите все предварительные условия для выполнения этого тестового случая.
Постусловие Каким должно быть состояние системы после выполнения теста?
Статус (Зачет/Незачет) Если фактический результат не соответствует ожидаемому результату, отметьте тест как неудачный. В ином случае обновление пройдено.
Примечания/комментарии Используйте эту область для любых дополнительных заметок/комментариев/вопросов. Эта область предназначена для поддержки вышеуказанных полей (например, если есть некоторые особые условия, которые не могут быть описаны в любом из вышеуказанных полей, или если есть вопросы, связанные с ожидаемыми или фактическими результатами).

Аннотация теста

    Мои комментарии
Название проекта DoeduSam
Рабочая версия 1.0 Эту версию не плохо бы вписать в свойства проекта
Имя тестирующего DEMO_xx
Дата(ы) теста 21.12.2020 текущая

Тестовый пример #1:

    Мои комментарии
Тестовый пример # TC_DP_1 расшифровывается: TestCase_DeleteProduct_x
Приоритет тестирования средний бизнес-правило
Заголовок/название теста Удаление товара без продаж и дополнительных товаров
Краткое изложение теста Товар должен без ошибок удалиться из таблицы товаров
Этапы теста 1. Очистить таблицы продаж, дополнительных товаров, дополнительных картинок и товаров. 2. Добавить тестовый товар в таблицу Products
3. Вызвать метод удаления товара
4. Проверить наличие удаленной записи в таблице
Тестовые данные Название: Моторное масло Motor Oil KE900-90042-R
Изображение: Товары автосервиса8FE07916.jpg
Производитель: Nissan
Активен: да
Цена: 2060
Тут нужно вставить содержимое любой записи из products_a_import
Ожидаемый результат Запись должна быть удалена из таблицы без ошибок и исключений
Фактический результат Запись удалена
Статус зачет
Предварительное условие В базу должны быть загружен тестовый продукт
Постусловие Таблица товаров должна быть пустой
Примечания/комментарии Т.к. мы добавили только товар без продаж и дополнительных товаров, то ошибок в принципе быть не может ни по вине кода ни по ограничениям базы

Что еще можно проверить

  • №2 — удаление товара с дополнительными товарами. Если ограничения настроены правильно (каскадное удаление), то тоже долно удаляться нормально.

  • №3 — удаление товара с дополнительными картинками. Аналогично №2.

  • №4 — удаление товара с продажами. Вариант без предварительной проверки — база должна вернуть ошибку, приложение это исключение должно перехватить и выдать сообщение, что удалять нельзя.

  • №5 — удаление товара с продажами. Вариант с предварительной проверкой — в коде нужно проверить есть ли у товара продажи и при наличии продаж вывести сообщение, что удалять товар нельзя.

Тестовые сценарии довольно расплывчаты и охватывают широкий спектр возможностей. Тестирование — это очень специфично.

Для тестового сценария : Проверьте функциональность входа в систему существует много возможных тестовых случаев:

Это всего лишь тестовый пример.

Нажмите здесь, если видео не доступно

Как создать тестовый набор

Давайте создадим тестовый сценарий для сценария: Проверка функциональности входа

Тестовый анализ V Модель тестирования

Шаг 1) Простой тестовый сценарий для сценария будет

Прецедент # Описание теста
1 Проверьте ответ при вводе действительного адреса электронной почты и пароля

Шаг 2) Чтобы выполнить тестовый пример, вам понадобятся тестовые данные. Добавляя это ниже

Прецедент # Описание теста Тестовые данные
1 Проверьте ответ при вводе действительного адреса электронной почты и пароля Электронная почта: guru99@email.com Пароль: lNf9 ^ Oti7 ^ 2h

Идентификация тестовых данных может занимать много времени и иногда может потребовать создания тестовых данных заново. Причину этого нужно документировать.

Шаг 3) Чтобы выполнить тестовый пример, тестер должен выполнить определенный набор действий над AUT. Это задокументировано как ниже:

Прецедент # Описание теста Тестовые шаги Тестовые данные
1 Проверьте ответ при вводе действительного адреса электронной почты и пароля

1) Введите адрес электронной почты

2) Введите пароль

3) Нажмите Войти

Электронная почта: guru99@email.com

Пароль: lNf9 ^ Oti7 ^ 2h

Часто тестовые шаги не так просты, как указано выше, поэтому им нужна документация. Кроме того, автор тестового примера может покинуть организацию или уйти в отпуск, он болен и не работает, или очень занят другими важными задачами. Недавно нанятого человека могут попросить выполнить контрольный пример. Документированные шаги помогут ему, а также облегчат обзоры другими заинтересованными сторонами.

Шаг 4) Целью тестовых случаев является проверка поведения AUT на ожидаемый результат. Это должно быть задокументировано как ниже

Прецедент # Описание теста Тестовые данные ожидаемый результат
1 Проверьте ответ при вводе действительного адреса электронной почты и пароля Электронная почта: guru99@email.com
Пароль: lNf9 ^ Oti7 ^ 2h
Логин должен быть успешным

Во время выполнения теста, тестер будет проверять ожидаемые результаты по сравнению с реальными результатами и назначать статус прохождения или сбоя

Прецедент # Описание теста Тестовые данные ожидаемый результат Фактический результат Pass / Fail
1 Проверьте ответ при вводе действительного адреса электронной почты и пароля Электронная почта: guru99@email.com Пароль: lNf9 ^ Oti7 ^ 2h Логин должен быть успешным Вход был успешным Проходить

Шаг 5) Кроме того, в вашем тестовом случае может быть поле типа Pre-Condition, в котором указаны вещи, которые должны быть выполнены до запуска теста. Для нашего тестового примера предварительным условием было бы установить браузер для доступа к тестируемому сайту. Тестовый набор также может включать в себя постусловия, в которых указывается все, что применяется после его завершения. Для нашего тестового примера постусловием будет время и дата входа в систему, хранящиеся в базе данных.

Формат стандартных тестовых случаев

Ниже приведен формат стандартного логина Test case

Идентификатор теста Тестовый сценарий Тестовые шаги Тестовые данные Ожидаемые результаты Фактические результаты Pass / Fail
TU01 Проверьте логин клиента с действительными данными
  1. Перейти на сайт http://demo.guru99.com
  2. Введите идентификатор пользователя
  3. Введите пароль
  4. Нажмите Отправить
ID пользователя = guru99 Пароль = pass99 Пользователь должен войти в приложение Как и ожидалось Проходить
TU02 Проверьте логин клиента с неверными данными
  1. Перейти на сайт http://demo.guru99.com
  2. Введите идентификатор пользователя
  3. Введите пароль
  4. Нажмите Отправить
ID пользователя = guru99 Пароль = glass99 Пользователь не должен Войти в приложение Как и ожидалось Проходить

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

При составлении контрольного примера, чтобы включить следующую информацию

  • Описание того, что требование проверяется
  • Объяснение того, как система будет тестироваться
  • Настройка теста, такая как версия тестируемого приложения, программное обеспечение, файлы данных, операционная система, оборудование, доступ к безопасности, физическая или логическая дата, время дня, предварительные условия, такие как другие тесты, и любая другая информация о настройке, относящаяся к тестируемым требованиям.
  • Входы и выходы или действия и ожидаемые результаты
  • Любые доказательства или вложения
  • Используйте активный язык кейсов
  • Тестовый кейс не должен быть более 15 шагов
  • Скрипт автоматизированного теста комментируется с входными данными, целью и ожидаемыми результатами
  • Установка предлагает альтернативу предварительным тестам
  • С другими тестами это должен быть неправильный порядок бизнес-сценария

Лучшая практика для написания хорошего примера теста.

1. Тестовые случаи должны быть простыми и прозрачными:

Создайте тестовые случаи, которые настолько просты, насколько это возможно. Они должны быть четкими и краткими, поскольку автор теста не может выполнить их.

Используйте утвердительный язык, например, перейдите на домашнюю страницу, введите данные, нажмите на это и так далее. Это облегчает понимание этапов тестирования и ускоряет выполнение тестов.

2. Создайте контрольный пример, помня конечного пользователя

Конечная цель любого программного проекта — создать тестовые наборы, которые отвечают требованиям клиентов, просты в использовании и эксплуатации. Тестер должен создавать контрольные примеры с учетом перспективы конечного пользователя

3. Избегайте повторения тестовых случаев.

Не повторяйте контрольные примеры. Если для выполнения какого-либо другого теста требуется тестовый случай, вызовите тестовый пример по его идентификатору в столбце предварительного условия

4. Не предполагайте

Не принимайте во внимание функциональность и возможности вашего программного приложения при подготовке тестового примера. Придерживайтесь спецификации документов.

5. Обеспечить 100% охват

Убедитесь, что вы пишете контрольные примеры, чтобы проверить все требования к программному обеспечению, упомянутые в документе спецификации. Используйте Traceability Matrix, чтобы гарантировать, что никакие функции / условия не останутся непроверенными.

6. Тестовые случаи должны быть опознаваемыми.

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

7. Внедрить методы тестирования

Невозможно проверить все возможные условия в вашем программном приложении. Методы тестирования программного обеспечения помогут вам выбрать несколько тестовых случаев с максимальной вероятностью обнаружения дефекта.

  • Анализ граничных значений (BVA). Как следует из названия, это метод, который определяет тестирование границ для указанного диапазона значений.
  • Разделение эквивалентности (EP): этот метод разбивает диапазон на равные части / группы, которые имеют одинаковое поведение.
  • Техника перехода между состояниями : этот метод используется, когда поведение программного обеспечения изменяется от одного состояния к другому после определенного действия.
  • Техника угадывания ошибок: это угадывание / ожидание ошибки, которая может возникнуть при выполнении ручного тестирования. Это не формальный метод и использует опыт тестера с приложением

8. Самоочищающийся

Созданный вами тестовый пример должен вернуть тестовую среду в состояние предварительного тестирования и не должен делать тестовую среду непригодной для использования. Это особенно верно для тестирования конфигурации.

9. Повторяемость и самостоятельность

Тестовый пример должен давать одинаковые результаты каждый раз, независимо от того, кто его тестирует

10. Рецензирование.

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

Инструменты управления тест-кейсами

Инструменты управления тестами — это инструменты автоматизации, которые помогают управлять и поддерживать тестовые случаи. Основные характеристики инструмента управления тестовыми сценариями:

  1. Для документирования тестовых случаев: с помощью инструментов вы можете ускорить создание тестового набора с использованием шаблонов
  2. Выполните контрольный пример и запишите результаты: контрольный пример можно выполнить с помощью инструментов, а полученные результаты легко записать.
  3. Автоматизация отслеживания дефектов. Неудачные тесты автоматически связываются с системой отслеживания ошибок, которая, в свою очередь, может быть назначена разработчикам и отслеживаться посредством уведомлений по электронной почте.
  4. Прослеживаемость: требования, тестовые случаи, выполнение тестовых случаев — все они связаны через инструменты, и каждый случай может быть прослежен друг к другу, чтобы проверить покрытие теста.
  5. Защита тестовых случаев: тестовые случаи должны быть многоразовыми и должны быть защищены от потери или повреждения из-за плохого контроля версий. Инструменты управления тест-кейсами предлагают такие функции, как
  • Соглашения об именах и нумерации
  • Versioning
  • Хранение только для чтения
  • Контролируемый доступ
  • Резервное копирование вне сайта

Популярные инструменты управления тестированием: Quality Center и JIRA

Ресурсы

  • Обратите внимание, что используемый шаблон будет отличаться от проекта к проекту. Прочтите это руководство, чтобы изучить шаблон тестового примера с объяснением важных полей.

Загрузите приведенный выше шаблон тестового примера Excel (.xls)

What exactly is test coverage?

In software testing, test coverage is defined as a statistic that indicates the quantity of testing completed by a collection of tests. It will entail obtaining information about which sections of a program are executed when the test suite is performed in order to establish whether conditional statement branches have been taken.

It is a way for making sure that your tests are testing your code or how much of your code you exercised by running the test.

Code Coverage and Test Coverage

Code coverage and test coverage are frequently mistaken. Even while the basic concepts are the same, they are not the same.

  • Code Coverage refers to unit testing procedures that must target all parts of the code at least once and are performed by developers.

  • Test Coverage, on the other hand, entails testing every requirement at least once and is clearly the responsibility of the QA team.

What truly counts as a covered need is determined by each team’s perspective.

Some teams, for example, consider a requirement covered if it has at least one test case against it. It is occasionally covered if at least one team member is assigned to it. Alternatively, if all of the test cases connected with it are run.

If there are 10 requirements and 100 tests are written, we call this appropriate testing coverage at the design level if the 100 tests target all of the 10 criteria and do not leave any out.

When just 80 of the prepared tests are performed and only 6 of the requirements are targeted. Despite the fact that 80 percent of testing has been completed, we claim that four standards have not been met. This is coverage data at the execution level.

When only 90 tests related to 8 requirements have testers assigned to them and the remainder do not, we say the test assignment coverage is 80%. (8 out of 10 requirements).

It is also critical to know when to compute coverage.

If you do this too early in the process, you will see a lot of gaps since items are still missing. As a result, it is typically recommended to wait until the Last Build, often known as the Final Regression Build. This ensures that the Tests run for the supplied Requirements are correctly covered.

What is the purpose of Test Coverage?

  • Identifying the region of a requirement that is not covered by a collection of test cases

  • It aids in the creation of new test cases in order to enhance coverage.

  • Developing a quantifiable metric of test coverage as an indirect technique of quality control

  • Identifying useless test scenarios that do not contribute to increased coverage

How is Test Coverage Achievable?

  • Test coverage may be achieved by the use of static review techniques such as peer reviews, inspections, and walkthroughs.

  • By converting ad hoc flaws into executable test cases

  • Test coverage may be done at the code or unit test level by using automated code coverage or unit test coverage technologies.

  • Functional test coverage may be accomplished with the assistance of appropriate test management technologies.

Advantages of Test Coverage

  • It can ensure the test’s quality.

  • It can aid in determining whether parts of the code were actually modified for release or repair.

  • It can aid in identifying untested pathways in your application.

  • Prevent the spread of flaws.

  • Time, scope, and cost may all be managed.

  • Prevention of defects at an early point of the project’s lifetime

  • It can determine all of the application’s decision points and pathways, allowing you to enhance test coverage.

  • Gaps in requirements, test cases, and problems at the unit and code levels may be easily identified.

How should a good Test Coverage technique be implemented?

Everything revolves around awareness −

  • First and foremost, the QA team must understand the scope of the project and the status of the design activities. They will be notified if further tests are introduced in this manner. You might utilize an RTM to do this, as is common practice.

  • Second, look into the resource assignment and test execution procedures to ensure that everything is tested as quickly as feasible.

How can you ensure that everything has been tested?

  • Every tester should be knowledgeable of the requirements as well as the testing procedures.

  • Prioritize your needs and direct your efforts where it is most required.

  • Be aware of how a particular release differs from prior ones so that you may more precisely identify important needs and focus on maximum positive coverage

  • Modify Test Automation

  • Use test management tools to ensure that you are constantly up to date.

  • Assignment of intelligent work- Concentrate your finest personnel on important tasks and allow new testers to explore more from a different viewpoint.

  • Keeping a checklist for all jobs and other activities

  • Interact more with your Dev/Scrum/BA teams to have a better understanding of the application’s behavior.

  • Maintain a record of all your build cycles and fixes.

  • Be aware of how a particular release differs from prior ones so that you may more precisely identify important needs and focus on maximum positive coverage.

  • Use test management tools to ensure that you are constantly up to date.

  • Assignment of intelligent work- Concentrate your finest personnel on important tasks and allow new testers to explore more from a different viewpoint.

  • Keeping a checklist for all jobs and other activities

  • Interact more with your Dev/Scrum/BA teams to have a better understanding of the application’s behavior.

  • Maintain a record of all your build cycles and fixes.

Areas and techniques for efficient testing that are critical

  • Resource jumbling − Distribute duties among your team members. This improves engagement while preventing information focus.

  • Compatibility coverage − Ensure that you are aware of and include the various browsers and systems while testing your application.

  • Ownership − Hold testers accountable and give them complete autonomy (with monitoring and assistance, of course) over the module/task they are working on. This fosters responsibility and allows them to experiment with new approaches rather than sticking to the tried-and-true.

  • Deadlines − Knowing the release deadlines before the testing process begins aids inefficient planning.

  • Communication − Keep in touch with the development and other teams in between release cycles to stay up to date on what’s going on.

  • Maintain an RTM − Serves as a good derivative to stakeholders or clients, allowing the release schedule to be confirmed.

Test Coverage Calculation Formula

To determine test coverage, follow the methods outlined below −

  • Step 1 − The total number of lines of code in the program quality you are assessing.

  • Step 2 −The total amount of lines of code that all test cases are presently executing.

You must now multiply (X divided by Y) by 100. This computation yields your test coverage percentage.

As an example −

If you have 500 lines of code in a system component and 50 lines run across all current test cases, your test coverage is −

10% = (50 / 500) * 100

Product coverage – Which parts of the product did you examine?

Yes, while measuring testing coverage in terms of product, the primary topic to focus on is — which sections of the product have you tested and which remain untested?

  • Example #1 − If you’re testing a «knife,» don’t worry about whether or not it slices the vegetables/fruits properly. Other factors to consider are the user’s ability to handle it comfortably.

  • Example #2 − Checking relevant features is a requirement if you are evaluating an application called «notepad.» Other considerations include: the application responding properly while using other applications at the same time, the application not crashing when the user tries to do something unusual, the user receiving proper warning/error messages, the user being able to understand and use the application easily, and the availability of help content when needed. You cannot say that the application’s testing coverage is comprehensive unless you investigate the aforementioned scenarios.

Risk Coverage – What risks have you checked for?

Another component of having comprehensive testing coverage is risk coverage. You cannot label a product or application as «tested» until you have also tested the related hazards. Coverage of related hazards is a critical component of total testing coverage.

  • Example #1 − What would your reaction be if, when testing an airplane, a tester told you that he/she had completely examined the internal system of the airplane and that it was operating properly, but that only the flying capacity of the airplane had not been covered during testing? That is, after all, what risk coverage entails. Identifying risks specific to the application/product and properly testing it is always a smart approach.

  • Example #2 − While testing an e-commerce site, the tester assessed every effective feature but failed to account for the potential of a huge number of consumers accessing the website at the same time, which proved to be a major error on Super OFFER day.

Coverage of requirements – What requirements have you tested for?

If a product or application is well-developed but does not meet the needs of the client, it is useless. Product coverage is just as essential as requirement coverage during testing.

  • Example #1 − You requested the tailor to sew your dress and add those peacock blue display buttons on the neckline since you were excited about the family gathering. While stitching the garment, the tailor decided that putting those buttons on the neckline would be unappealing, so he embroidered a golden border instead. Certainly, on the trial day, the dissatisfied customer yelled at the tailor for not adhering to the specifications.

  • Example #2 − While testing a chat application, the tester took care of all the important points, such as multiple users chatting in a group, two users chatting independently, all types of emoticons available, updates sent to the user immediately, and so on, but forgot to look at the requirement document, which clearly stated that when two users chat independently, the video call option should be enabled. The client advertised the chat program as allowing calling while two people talk independently. You can picture what would have happened to the chat application if this had occurred.

Cons

Because there are no tools to automate most of the activities in the test coverage manual. As a result, it requires a significant amount of time to assess the requirements and develop test cases.

Test coverage allows you to count features and then compare them to many tests. However, there is always room for blunders in judgment.

What exactly is test coverage?

In software testing, test coverage is defined as a statistic that indicates the quantity of testing completed by a collection of tests. It will entail obtaining information about which sections of a program are executed when the test suite is performed in order to establish whether conditional statement branches have been taken.

It is a way for making sure that your tests are testing your code or how much of your code you exercised by running the test.

Code Coverage and Test Coverage

Code coverage and test coverage are frequently mistaken. Even while the basic concepts are the same, they are not the same.

  • Code Coverage refers to unit testing procedures that must target all parts of the code at least once and are performed by developers.

  • Test Coverage, on the other hand, entails testing every requirement at least once and is clearly the responsibility of the QA team.

What truly counts as a covered need is determined by each team’s perspective.

Some teams, for example, consider a requirement covered if it has at least one test case against it. It is occasionally covered if at least one team member is assigned to it. Alternatively, if all of the test cases connected with it are run.

If there are 10 requirements and 100 tests are written, we call this appropriate testing coverage at the design level if the 100 tests target all of the 10 criteria and do not leave any out.

When just 80 of the prepared tests are performed and only 6 of the requirements are targeted. Despite the fact that 80 percent of testing has been completed, we claim that four standards have not been met. This is coverage data at the execution level.

When only 90 tests related to 8 requirements have testers assigned to them and the remainder do not, we say the test assignment coverage is 80%. (8 out of 10 requirements).

It is also critical to know when to compute coverage.

If you do this too early in the process, you will see a lot of gaps since items are still missing. As a result, it is typically recommended to wait until the Last Build, often known as the Final Regression Build. This ensures that the Tests run for the supplied Requirements are correctly covered.

What is the purpose of Test Coverage?

  • Identifying the region of a requirement that is not covered by a collection of test cases

  • It aids in the creation of new test cases in order to enhance coverage.

  • Developing a quantifiable metric of test coverage as an indirect technique of quality control

  • Identifying useless test scenarios that do not contribute to increased coverage

How is Test Coverage Achievable?

  • Test coverage may be achieved by the use of static review techniques such as peer reviews, inspections, and walkthroughs.

  • By converting ad hoc flaws into executable test cases

  • Test coverage may be done at the code or unit test level by using automated code coverage or unit test coverage technologies.

  • Functional test coverage may be accomplished with the assistance of appropriate test management technologies.

Advantages of Test Coverage

  • It can ensure the test’s quality.

  • It can aid in determining whether parts of the code were actually modified for release or repair.

  • It can aid in identifying untested pathways in your application.

  • Prevent the spread of flaws.

  • Time, scope, and cost may all be managed.

  • Prevention of defects at an early point of the project’s lifetime

  • It can determine all of the application’s decision points and pathways, allowing you to enhance test coverage.

  • Gaps in requirements, test cases, and problems at the unit and code levels may be easily identified.

How should a good Test Coverage technique be implemented?

Everything revolves around awareness −

  • First and foremost, the QA team must understand the scope of the project and the status of the design activities. They will be notified if further tests are introduced in this manner. You might utilize an RTM to do this, as is common practice.

  • Second, look into the resource assignment and test execution procedures to ensure that everything is tested as quickly as feasible.

How can you ensure that everything has been tested?

  • Every tester should be knowledgeable of the requirements as well as the testing procedures.

  • Prioritize your needs and direct your efforts where it is most required.

  • Be aware of how a particular release differs from prior ones so that you may more precisely identify important needs and focus on maximum positive coverage

  • Modify Test Automation

  • Use test management tools to ensure that you are constantly up to date.

  • Assignment of intelligent work- Concentrate your finest personnel on important tasks and allow new testers to explore more from a different viewpoint.

  • Keeping a checklist for all jobs and other activities

  • Interact more with your Dev/Scrum/BA teams to have a better understanding of the application’s behavior.

  • Maintain a record of all your build cycles and fixes.

  • Be aware of how a particular release differs from prior ones so that you may more precisely identify important needs and focus on maximum positive coverage.

  • Use test management tools to ensure that you are constantly up to date.

  • Assignment of intelligent work- Concentrate your finest personnel on important tasks and allow new testers to explore more from a different viewpoint.

  • Keeping a checklist for all jobs and other activities

  • Interact more with your Dev/Scrum/BA teams to have a better understanding of the application’s behavior.

  • Maintain a record of all your build cycles and fixes.

Areas and techniques for efficient testing that are critical

  • Resource jumbling − Distribute duties among your team members. This improves engagement while preventing information focus.

  • Compatibility coverage − Ensure that you are aware of and include the various browsers and systems while testing your application.

  • Ownership − Hold testers accountable and give them complete autonomy (with monitoring and assistance, of course) over the module/task they are working on. This fosters responsibility and allows them to experiment with new approaches rather than sticking to the tried-and-true.

  • Deadlines − Knowing the release deadlines before the testing process begins aids inefficient planning.

  • Communication − Keep in touch with the development and other teams in between release cycles to stay up to date on what’s going on.

  • Maintain an RTM − Serves as a good derivative to stakeholders or clients, allowing the release schedule to be confirmed.

Test Coverage Calculation Formula

To determine test coverage, follow the methods outlined below −

  • Step 1 − The total number of lines of code in the program quality you are assessing.

  • Step 2 −The total amount of lines of code that all test cases are presently executing.

You must now multiply (X divided by Y) by 100. This computation yields your test coverage percentage.

As an example −

If you have 500 lines of code in a system component and 50 lines run across all current test cases, your test coverage is −

10% = (50 / 500) * 100

Product coverage – Which parts of the product did you examine?

Yes, while measuring testing coverage in terms of product, the primary topic to focus on is — which sections of the product have you tested and which remain untested?

  • Example #1 − If you’re testing a «knife,» don’t worry about whether or not it slices the vegetables/fruits properly. Other factors to consider are the user’s ability to handle it comfortably.

  • Example #2 − Checking relevant features is a requirement if you are evaluating an application called «notepad.» Other considerations include: the application responding properly while using other applications at the same time, the application not crashing when the user tries to do something unusual, the user receiving proper warning/error messages, the user being able to understand and use the application easily, and the availability of help content when needed. You cannot say that the application’s testing coverage is comprehensive unless you investigate the aforementioned scenarios.

Risk Coverage – What risks have you checked for?

Another component of having comprehensive testing coverage is risk coverage. You cannot label a product or application as «tested» until you have also tested the related hazards. Coverage of related hazards is a critical component of total testing coverage.

  • Example #1 − What would your reaction be if, when testing an airplane, a tester told you that he/she had completely examined the internal system of the airplane and that it was operating properly, but that only the flying capacity of the airplane had not been covered during testing? That is, after all, what risk coverage entails. Identifying risks specific to the application/product and properly testing it is always a smart approach.

  • Example #2 − While testing an e-commerce site, the tester assessed every effective feature but failed to account for the potential of a huge number of consumers accessing the website at the same time, which proved to be a major error on Super OFFER day.

Coverage of requirements – What requirements have you tested for?

If a product or application is well-developed but does not meet the needs of the client, it is useless. Product coverage is just as essential as requirement coverage during testing.

  • Example #1 − You requested the tailor to sew your dress and add those peacock blue display buttons on the neckline since you were excited about the family gathering. While stitching the garment, the tailor decided that putting those buttons on the neckline would be unappealing, so he embroidered a golden border instead. Certainly, on the trial day, the dissatisfied customer yelled at the tailor for not adhering to the specifications.

  • Example #2 − While testing a chat application, the tester took care of all the important points, such as multiple users chatting in a group, two users chatting independently, all types of emoticons available, updates sent to the user immediately, and so on, but forgot to look at the requirement document, which clearly stated that when two users chat independently, the video call option should be enabled. The client advertised the chat program as allowing calling while two people talk independently. You can picture what would have happened to the chat application if this had occurred.

Cons

Because there are no tools to automate most of the activities in the test coverage manual. As a result, it requires a significant amount of time to assess the requirements and develop test cases.

Test coverage allows you to count features and then compare them to many tests. However, there is always room for blunders in judgment.


Подборка по базе: ШАБЛОН ПАКЕТА СЕРВИСНОГО ДИЗАЙНА (SDP).docx, РП ОП.17 Пакеты прикладных программ для систем организационного , 4 44 сценарий, 4класс — копия.docx, Интегрированные пакеты MS Office.doc, Диагностический пакет дефектолога 5-11 лет.pdf, Практическое занятие №5. Формирование пакета документов организа, 2.1_9 Анализаторы сетевых пакетов.doc, 3 урок Файлы и пакеты.docx, Лекции Пакеты прикладных программ.docx


Лекционное занятие

Тема: Тестовый сценарий, тестовый пакет.

Цель: Ознакомиться с практическим применением техник тест дизайна при разработке тест кейсов. Анализом требований. Определением набора тестовых данных. Разработкой шаблона теста. Написанием тест кейсов на основании первоначальных требований, тестовых данных и шагов теста.

Оборудование: персональный компьютер, мультимедиа-проектор, MS Visio, Visual Studio, MS Office, методические рекомендации к проведению лекционных занятий, Гагарина, Л. Г. Технология разработки программного обеспечения: учеб. пособие / Л. Г. Гагарина, Е. В. Кокорева, Б. Д. Виснадул; Под ред. Л. Г. Гагариной. — М.: ФОРУМ: ИНФРА-М, 2017.-400 с., инструкционная карта для проведения лекционного занятия.
Тестирование ПО (Software Testing) — проверка соответствия между реальным и ожидаемым поведением программы, проводится на наборе тестов, который выбирается некоторым образом. Чем занимаются в тестировании:

  1. планированием работ (Test Management)
  2. проектированием тестов (Test Design) — этап, на котором создаются тестовые сценарии (тест кейсы), в соответствии с определёнными ранее критериями. Т.е., определяется, КАК будет тестироваться продукт.
  3. выполнением тестирования (Test Execution)
  4. анализом результатов (Test Analysis)

Основные цели тестирования

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

Следует уметь различать, что:

  • Error — это ошибка пользователя, то есть он пытается использовать программу иным способом (например, вводит буквы в поля, где требуется вводить цифры). В качественной программе предусмотрены такие ситуации и выдаются сообщение об ошибке (error message).
  • Bug (defect) — это ошибка программиста (или дизайнера или ещё кого, кто принимает участие в разработке), то есть когда в программе, что-то идёт не так, как планировалось. Например, внутри программа построена так, что изначально не соответствует тому, что от неё ожидается.
  • Failure — это сбой в работе компонента, всей программы или системы (может быть как аппаратным, так и вызванным дефектом).

Тестовый пакет

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

Набор тестов – это контейнер с набором тестов, который помогает тестировщикам выполнять и сообщать о состоянии выполнения теста. Может принимать любое из трех состояний: «Активно», «Выполняется» и «Завершено».
Тестовый набор может быть добавлен в несколько наборов тестов и планов тестирования. После создания плана тестирования создаются наборы тестов, которые, в свою очередь, могут иметь любое количество тестов.
Как правило, модульные тесты и тестовые конфигурации разрабатываются самими разработчиками, основная задача тестера в этом случае — организовать все тесты в упорядоченную структуру пакетов и указать, какие пакеты должны исполняться в каких условиях. Вся иерархия тестов хранится в так называемом файле метаданных, имеющем расширение vsmdi. Этот файл находится в системе контроля версий и может быть включен в решение как отдельный элемент.
Процесс тестирования

Как отмечалось ранее, в тестировании выделяются три основных уровня, или три фазы:

  1. Модульное тестирование.
  2. Интеграционное тестирование.
  3. Системное тестирование.

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

Фазы процесса тестирования

В процессе тестирования выделяют следующие фазы:

  1. Определение целей (требований к тестированию), включающее следующую конкретизацию: какие части системы будут тестироваться, какие аспекты их работы будут выбраны для проверки, каково желаемое качество и т.п.
  2. Планирование: создание графика (расписания) разработки тестов для каждой тестируемой подсистемы; оценка необходимых человеческих, программных и аппаратных ресурсов; разработка расписания тестовых циклов. Важно отметить, что расписание тестирования обязательно должно быть согласовано с расписанием разработки создаваемой системы, поскольку наличие исполняемой версии разрабатываемой системы ( Implementation Under Testing (IUT) или Application Under Testing (AUT) – часто употребляемые обозначения для тестируемой системы) является одним из необходимых условий тестирования, что создает взаимозависимость в работе команд тестировщиков и разработчиков.
  3. Разработка тестов, то есть тестового кода для тестируемой системы, если необходимо — кода системы автоматизации тестирования и тестовых процедур (выполняемых вручную).
  4. Выполнение тестов: реализация тестовых циклов.
  5. Анализ результатов.

После анализа результатов возможно повторение процесса тестирования, начиная с пунктов 3, 2 или даже 1.

Тестовый цикл

Тестовый цикл – это цикл исполнения тестов, включающий фазы 4 и 5 тестового процесса. Тестовый цикл заключается в прогоне разработанных тестов на некотором однозначно определяемом срезе системы (состоянии кода разрабатываемой системы). Обычно такой срез системы называют build. Тестовый цикл включает следующую последовательность действий:

  1. Проверка готовности системы и тестов к проведению тестового цикла включающая:
    • Проверку того, что все тесты, запланированные для исполнения на данном цикле, разработаны и помещены в систему версионного контроля.
    • Проверку того, что все подсистемы, запланированные для тестирования на данном цикле, разработаны и помещены в систему версионного контроля.
    • Проверку того, что разработана и задокументирована процедура определения и создания среза системы, или build.
    • Проверки некоторых дополнительных критериев.
  2. Подготовка тестовой машины в соответствии с требованиями, определенными на этапе планирования (например, полная очистка и переустановка системного программного обеспечения). Конфигурация тестовой машины, так же, как и срез системы, должны быть однозначно воспроизводимыми.
  3. Воспроизведение среза системы.
  4. Прогон тестов в соответствии с задокументированными процедурами.
  5. Сохранение тестовых протоколов (test log). Test log может содержать вывод системы в STDOUT, список результатов сравнения полученных при исполнении данных с эталонными или любые другие выходные данные тестов, с помощью которых можно проверить правильность работы системы.
  6. Анализ протоколов тестирования и принятие решения о том прошел или не прошел каждый из тестов ( Pass/Fail ).
  7. Анализ и документирование результатов цикла.

Последний перед выпуском продукта тестовый цикл не должен включать изменений кода build или кода продукта тестируемой системы. Этот цикл называется » финальным «. Таким образом обеспечивается ситуация, когда финальный цикл полностью повторяем, а выпускаемый продукт полностью совпадает с продуктом, который прошел тестирование. Финальный цикл необходим для гарантии достоверности результатов тестирования.
Что такое тестовый сценарий

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

Что такое тестирование сценария

Тестирование сценариев — это вариант тестирования программного обеспечения, в котором для тестирования используются сценарии. Сценарии помогают в более простом способе тестирования более сложных систем
Зачем создавать тестовые сценарии

Тестовые сценарии создаются по следующим причинам:

  • Создание тестовых сценариев обеспечивает полное покрытие тестами
  • Сценарии тестирования могут быть одобрены различными заинтересованными сторонами, такими как бизнес-аналитик, разработчики, клиенты, для обеспечения тщательного тестирования тестируемого приложения. Это гарантирует, что программное обеспечение работает для наиболее распространенных случаев использования.
  • Они служат быстрым инструментом для определения трудозатрат на тестирование и, соответственно, создают предложение для клиента или организуют рабочую силу.
  • Они помогают определить наиболее важные сквозные транзакции или реальное использование программных приложений.
  • Для изучения сквозного функционирования программы, тестовый сценарий имеет решающее значение.

Когда не создать тестовый сценарий

Тестовые сценарии не могут быть созданы, когда

  • Тестируемое приложение является сложным, нестабильным, и в проекте есть время.
  • Проекты, которые следуют Agile методологии, такие как Scrum, Kanban, могут не создавать тестовые сценарии.
  • Сценарий тестирования не может быть создан для исправления новой ошибки или регрессионного тестирования . В таких случаях сценарии тестирования должны быть уже задокументированы в предыдущих циклах тестирования. Это особенно верно для проектов технического обслуживания.

Как написать тестовые сценарии

Как тестер, вы можете выполнить следующие пять шагов для создания тестовых сценариев:

  • Шаг 1 : Прочтите документы с требованиями, такие как BRS, SRS, FRS, тестируемой системы (SUT). Вы также можете сослаться на примеры использования, книги, руководства и т. Д. Приложения, подлежащего тестированию.
  • Шаг 2 : Для каждого требования определите возможные действия и цели пользователей. Определить технические аспекты требования. Определите возможные сценарии злоупотребления системой и оцените пользователей с менталитетом хакера.
  • Шаг 3: После прочтения Документа с требованиями и проведения надлежащего анализа перечислите различные сценарии тестирования, которые проверяют каждую функцию программного обеспечения.
  • Шаг 4: После того, как вы перечислили все возможные сценарии тестирования, создается матрица отслеживания, чтобы убедиться, что каждому требованию соответствует соответствующий сценарий тестирования.
  • Шаг 5: Созданные сценарии проверяются вашим руководителем. Позже они также рассматриваются другими заинтересованными сторонами в проекте.

Советы по созданию тестовых сценариев

  • Каждый тестовый сценарий должен быть привязан как минимум к одному требованию или пользовательской истории в соответствии с методологией проекта.
  • Перед созданием тестового сценария, который проверяет несколько требований одновременно, убедитесь, что у вас есть тестовый сценарий, который проверяет это требование изолированно.
  • Избегайте создания слишком сложных тестовых сценариев, охватывающих несколько требований.
  • Количество сценариев может быть большим, и запускать их все дорого. Исходя из приоритетов клиента, запускайте только выбранные тестовые сценарии

Пример 1. Сценарий тестирования для приложения электронной коммерции

Для приложения электронной коммерции несколько тестовых сценариев

Тестовый сценарий 1: проверка функциональности входа

Чтобы помочь вам понять разницу между сценарием тестирования и тестовыми сценариями, для этого сценария тестирования будут использоваться конкретные тестовые сценарии.

  1. Проверьте поведение системы при вводе действительного адреса электронной почты и пароля.
  2. Проверьте поведение системы при вводе неверного идентификатора электронной почты и действительного пароля.
  3. Проверьте поведение системы при вводе действительного адреса электронной почты и неверного пароля.
  4. Проверьте поведение системы при вводе неверного идентификатора электронной почты и неверного пароля.
  5. Проверьте поведение системы, если адрес электронной почты и пароль оставлены пустыми и введен вход.
  6. Проверить Забыли пароль работает как положено
  7. Проверьте поведение системы при вводе действительного / недействительного номера телефона и пароля.
  8. Проверять поведение системы, когда установлен флажок «Держать меня в подписи»

Как видно, тестовые случаи являются более конкретными.
Тестовый сценарий 2. Проверка функциональности поиска


Тестовый сценарий 3: проверьте страницу описания продукта


Сценарий тестирования 4: Проверьте функциональность платежей

Тестовый сценарий 5: проверка истории заказов


Помимо этих 5 сценариев, здесь приведен список всех других сценариев.

  • Проверьте поведение домашней страницы для постоянных клиентов
  • Проверьте категорию / страницы продукта
  • Проверьте службу поддержки / контактные страницы
  • Проверьте страницы ежедневных предложений

Пример 2: Тестовые сценарии для банковского сайта

Тестовый сценарий 1 : Проверьте функциональность входа и аутентификации

Тестовый сценарий 2 : Проверить перевод денег можно

Тестовый сценарий 3. Проверьте выписку со счета.

Тестовый сценарий 4 : Проверка фиксированного депозита / периодического депозита может быть создана

И так далее…
Литература: Гагарина, Л. Г. Технология разработки программного обеспечения: учеб. пособие / Л. Г. Гагарина, Е. В. Кокорева, Б. Д. Виснадул; Под ред. Л. Г. Гагариной. — М.: ФОРУМ: ИНФРА-М, 2017.-400 с.

Привет, Хабр! Да-да, про тестирование ПО тут уже куча статей. Здесь я просто буду стараться структурировать как можно более полный охват данных из разных источников (чтобы по теории все основное было сразу в одном месте, и новичкам, например, было легче ориентироваться). При этом, чтобы статья не казалась слишком громоздкой, информация будет представлена без излишней детализации, как необходимая и достаточная для прохождения собеседования (согласно моему опыту), рассчитанное на стажеров/джунов (как вариант, эта информация может быть для общего понимания полезна ИТ-рекрутерам, которые проводят первичное собеседование и попутно задают некоторые около-технические вопросы).


ОСНОВНЫЕ ТЕРМИНЫ

Тестирование ПО (Software Testing) — проверка соответствия между реальным и ожидаемым поведением программы, проводится на наборе тестов, который выбирается некоторым образом. Чем занимаются в тестировании:

  1. планированием работ (Test Management)

  2. проектированием тестов (Test Design) — этап, на котором создаются тестовые сценарии (тест кейсы), в соответствии с определёнными ранее критериями. Т.е., определяется, КАК будет тестироваться продукт.

  3. выполнением тестирования (Test Execution)

  4. анализом результатов (Test Analysis)

Основные цели тестирования

  • техническая: предоставление актуальной информации о состоянии продукта на данный момент.

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

Верификация (verification)

Валидация (validation)

Соответствие продукта требованиям (спецификации)

Соответствие продукта потребностям пользователей

Дефект (баг) — это несоответствие фактического результата выполнения программы ожидаемому результату.

Следует уметь различать, что:

  • Error — это ошибка пользователя, то есть он пытается использовать программу иным способом (например, вводит буквы в поля, где требуется вводить цифры). В качественной программе предусмотрены такие ситуации и выдаются сообщение об ошибке (error message).

  • Bug (defect) — это ошибка программиста (или дизайнера или ещё кого, кто принимает участие в разработке), то есть когда в программе, что-то идёт не так, как планировалось. Например, внутри программа построена так, что изначально не соответствует тому, что от неё ожидается.

  • Failure — это сбой в работе компонента, всей программы или системы (может быть как аппаратным, так и вызванным дефектом).

Жизненный цикл бага

Атрибуты дефекта

  • Серьезность (Severity) — характеризует влияние дефекта на работоспособность приложения. Выставляется тестировщиком.

Градация Серьезности дефекта

  • Blocker — ошибка, приводящая приложение в нерабочее состояние, из-за которой дальнейшая работа с системой или ее ключевыми функциями становится невозможна, т.е. тестирование значительной части функциональности становится недоступно

  • Крит (Critical) — неправильно работающая ключевая бизнес-логика, дыра в системе безопасности, проблема, приведшая к временному падению сервера или приводящая в нерабочее состояние некоторую часть системы, без возможности решения проблемы, используя другие непрямые пути (workaround).

  • Значительный (Major) — часть основной бизнес логики работает некорректно, есть возможность для работы с тестируемой функцией, используя обходные пути (workaround); либо дефект с высоким visibility – обычно не сильно влияющие на функциональность дефекты дизайна, которые, однако, сразу бросаются в глаза.

  • Minor — часто ошибки GUI, которые не влияют на функциональность, но портят юзабилити или внешний вид; либо незначительная функциональная ошибка, не нарушающая бизнес-логику тестируемой части приложения.

  • Тривиальная (Trivial) — ошибка, не касающаяся бизнес-логики приложения, не оказывающая никакого влияния на общее качество продукта, например, опечатки в тексте, несоответствие шрифта и оттенка и т.д.

  • Приоритет (Priority) — указывает на очередность выполнения задачи или устранения дефекта. Чем выше приоритет, тем быстрее нужно исправлять дефект. Выставляется менеджером, тимлидом или заказчиком.

НЕКОТОРЫЕ ТЕХНИКИ ТЕСТ-ДИЗАЙНА

  1. Эквивалентное Разделение (Equivalence Partitioning) — это техника, при которой функционал (часто диапазон возможных вводимых значений) разделяется на группы эквивалентных по своему влиянию на систему значений. ПРИМЕР: есть диапазон допустимых значений от 1 до 10, выбирается одно верное значение внутри интервала (например, 5) и одно неверное значение вне интервала — 0.

  2. Анализ Граничных Значений (Boundary Value Analysis) — это техника проверки поведения продукта на крайних (граничных) значениях входных данных. Если брать выше ПРИМЕР: в качестве значений для позитивного тестирования берется минимальная и максимальная границы (1 и 10), и значения больше и меньше границ (0 и 11). BVA может применяться к полям, записям, файлам, или к любого рода сущностям имеющим ограничения.

  3. Доменный анализ (Domain Analysis Testing) — это техника основана на разбиении диапазона возможных значений переменной на поддиапазоны, с последующим выбором одного или нескольких значений из каждого домена для тестирования.

  4. Предугадывание ошибки (Error Guessing — EG). Это когда тестировщик использует свои знания системы и способность к интерпретации спецификации на предмет того, чтобы «предугадать» при каких входных условиях система может выдать ошибку.

  5. Причина / Следствие (Cause/Effect — CE). Подразумевается ввод условий, для получения ответа от системы (следствие).

  6. Сценарий использования (Use Case Testing) — Use Case описывает сценарий взаимодействия двух и более участников (как правило — пользователя и системы).

  7. Исчерпывающее тестирование (Exhaustive Testing — ET) — подразумевается проверка всех возможные комбинации входных значений. На практике не используется.

  8. Попарное тестирование (Pairwise Testing) — это техника формирования наборов тестовых данных из полного набора входных данных в системе, которая позволяет существенно сократить общее количество тест-кейсов. Используется для тестирования, например, фильтров, сортировок. Этот интересный метод заслуживает отдельного внимания и более подробно рассматривается в статье по ссылке (в конце которой упоминаются инструменты для автоматизации применения PT).

  9. Тестирование на основе состояний и переходов (State-Transition Testing) — применяется для фиксирования требований и описания дизайна приложения.

  10. Таблица принятия решений (decision table) — инструмент для упорядочения бизнес-требований, которые должны быть реализованы в продукте. Применяется для систем со сложной логикой. В таблицах решений представлен набор условий, одновременное выполнение которых приводит к определенному действию.

Пример таблицы принятия решений

Пример таблицы принятия решений

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

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

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

Классификация по целям

  • Функциональное тестирование (functional testing) рассматривает заранее указанное поведение и основывается на анализе спецификации компонента или системы в целом, т.е. проверяется корректность работы функциональности приложения.

Нефункциональное тестирование (non-functional testing) — тестирование атрибутов компонента или системы, не относящихся к функциональности.

  • Тестирование пользовательского интерфейса (GUI Testing)  — проверка интерфейса на соответствие требованиям (размер, шрифт, цвет, consistent behavior).

  • Тестирование удобства использования (Usability Testing) — это метод тестирования, направленный на установление степени удобства использования, обучаемости, понятности и привлекательности для пользователей разрабатываемого продукта в контексте заданных условий. Состоит из: UX — что испытывает пользователь во время использования цифрового продукта, и UI — инструмент, позволяющий осуществлять интеракцию «пользователь — веб-ресурс».

  • Тестирование безопасности (security testing) — это стратегия тестирования, используемая для проверки безопасности системы, а также для анализа рисков, связанных с обеспечением целостного подхода к защите приложения, атак хакеров, вирусов, несанкционированного доступа к конфиденциальным данным.

  • Инсталляционное тестирование (installation testing) направленно на проверку успешной установки и настройки, а также обновления или удаления приложения.

  • Конфигурационное тестирование (Configuration Testing) — специальный вид тестирования, направленный на проверку работы программного обеспечения при различных конфигурациях системы (заявленных платформах, поддерживаемых драйверах, при различных конфигурациях компьютеров и т.д.)

  • Тестирование на отказ и восстановление (Failover and Recovery Testing) проверяет тестируемый продукт с точки зрения способности противостоять и успешно восстанавливаться, т.е. обеспечивать сохранность и целостность данных, после возможных сбоев, возникших в связи с ошибками программного обеспечения, отказами оборудования или проблемами связи (например, отказ сети).

  • Тестирование локализации (localization testing) — проверка адаптации программного обеспечения для определенной аудитории в соответствии с ее культурными особенностями.

Тестирование производительности (performance testing) — определение стабильности и потребления ресурсов в условиях различных сценариев использования и нагрузок.

  • Нагрузочное тестирование (load testing) — определение или сбор показателей производительности и времени отклика программно-технической системы или устройства в ответ на внешний запрос с целью установления соответствия требованиям, предъявляемым к данной системе (устройству).

  • Тестирование стабильности или надежности (Stability / Reliability Testing) — это проверка работоспособности приложения при длительном (многочасовом) тестировании со средним уровнем нагрузки.

  • Стрессовое тестирование (Stress Testing) позволяет проверить насколько приложение и система в целом работоспособны в условиях стресса (например, повышение интенсивности выполнения операций до очень высоких значений или аварийное изменение конфигурации сервера) и также оценить способность системы к регенерации, т.е. к возвращению к нормальному состоянию после прекращения воздействия стресса.

  • Объемное тестирование (Volume Testing) — тестирование, которое проводится для получения оценки производительности при увеличении объемов данных в базе данных приложения.

  • Тестирование масштабируемости (scalability testing) — тестирование, которое измеряет производительность сети или системы, когда количество пользовательских запросов увеличивается или уменьшается.

Классификация по позитивности сценария

  • Позитивное — тест кейс использует только корректные данные и проверяет, что приложение правильно выполнило вызываемую функцию.

  • Негативное — тест кейс оперирует как корректными так и некорректными данными (минимум 1 некорректный параметр) и ставит целью проверку исключительных ситуаций; при таком тестировании часто выполняются некорректные операции.

Классификация по знанию системы

  • Тестирование белого ящика (White Box) — метод тестирования ПО, который предполагает полный доступ к коду проекта, т.е. внутренняя структура/устройство/реализация системы известны тестировщику.

  • Тестирование серого ящика — метод тестирования ПО, который предполагает частичный доступ к коду проекта (комбинация White Box и Black Box методов).

  • Тестирование чёрного ящика (Black Box) — метод тестирования ПО, также известный как тестирование, основанное на спецификации или тестирование поведения — техника тестирования, которая не предполагает доступа (полного или частичного) к системе, т.е. основывается на работе исключительно с внешним интерфейсом тестируемой системы.

Классификация по исполнителям тестирования

  • Альфа-тестирование — является ранней версией программного продукта, тестирование которой проводится внутри организации-разработчика; может быть вероятно частичное привлечение конечных пользователей.

  • Бета-тестирование — практически готовое ПО, выпускаемое для ограниченного количества пользователей, разрабатывается в первую очередь для тестирования конечными пользователями и получения отзывов клиентов о продукте для внесения соответствующих изменений.

Классификация по уровню тестирования

  • Модульное (компонентное) тестирование (Unit Testing) проводится самими разработчиками, т.к. предполагает полный доступ к коду, для тестирования какого-либо одного логически выделенного и изолированного элемента (модуля) системы в коде, проверяет функциональность и ищет дефекты в частях приложения, которые доступны и могут быть протестированы по-отдельности (модули программ, объекты, классы, функции и т.д.).

  • Интеграционное тестирование (Integration Testing) направлено на проверку корректности взаимодействия нескольких модулей, объединенных в единое целое, т.е. проверяется взаимодействие между компонентами системы после проведения компонентного тестирования.

Подходы к интеграционному тестированию

  • Снизу вверх (Bottom Up Integration) Все низкоуровневые модули, процедуры или функции собираются воедино и затем тестируются. После чего собирается следующий уровень модулей для проведения интеграционного тестирования. Данный подход считается полезным, если все или практически все модули, разрабатываемого уровня, готовы. Также данный подход помогает определить по результатам тестирования уровень готовности приложения.

  • Сверху вниз (Top Down Integration) Вначале тестируются все высокоуровневые модули, и постепенно один за другим добавляются низкоуровневые. Все модули более низкого уровня симулируются заглушками с аналогичной функциональностью, затем по мере готовности они заменяются реальными активными компонентами.

  • Большой взрыв («Big Bang» Integration) Все или практически все разработанные модули собираются вместе в виде законченной системы или ее основной части, и затем проводится интеграционное тестирование. Такой подход очень хорош для сохранения времени. Однако если тест кейсы и их результаты записаны не верно, то сам процесс интеграции сильно осложнится, что станет преградой для команды тестирования при достижении основной цели интеграционного тестирования.

  • Системное тестирование (System Testing) — это проверка как функциональных, так и не функциональных требований в системе в целом. При этом выявляются дефекты, такие как неверное использование ресурсов системы, непредусмотренные комбинации данных пользовательского уровня, несовместимость с окружением, непредусмотренные сценарии использования и т.д., и оцениваются характеристики качества системы — ее устойчивость, надежность, безопасность и производительность.

  • Операционное тестирование (Release Testing). Даже если система удовлетворяет всем требованиям, важно убедиться в том, что она удовлетворяет нуждам пользователя и выполняет свою роль в среде своей эксплуатации. Поэтому так важно провести операционное тестирование как финальный шаг валидации. Кроме этого, тестирование в среде эксплуатации позволяет выявить и нефункциональные проблемы, такие как: конфликт с другими системами, смежными в области бизнеса или в программных и электронных окружениях и др. Очевидно, что нахождение подобных вещей на стадии внедрения — критичная и дорогостоящая проблема.

Классификация по исполнению кода

  • Статическое тестирование — процесс тестирования, который проводится для верификации практически любого артефакта разработки. Например, путем анализа кода (code review). Анализ может производиться как вручную, так и с помощью специальных инструментальных средств. Целью анализа является раннее выявление ошибок и потенциальных проблем в продукте. Также к этому виду относится тестирование требований, спецификаций и прочей документации.

  • Динамическое тестирование проводится на работающей системе, т.е. с осуществлением запуска программного кода приложения.

Классификация по хронологии выполнения

  • Повторное/подтверждающее тестирование (re-testing/confirmation testing) — тестирование, во время которого исполняются тестовые сценарии, выявившие ошибки во время последнего запуска, для подтверждения успешности исправления этих ошибок, т.е. проверяется исправление багов.

  • Регрессионное тестирование (regression testing) — это тестирование после внесения изменений в код приложения (починка дефекта, слияние кода, миграция на другую операционную систему, базу данных, веб сервер или сервер приложения), для подтверждения того факта, что эти изменения не внесли ошибки в областях, которые не подверглись изменениям, т.е. проверяется то, что исправление багов, а также любые изменения в коде приложения, не повлияли на другие модули ПО и не вызвали новых багов.

  • Приёмочное тестирование проверяет соответствие системы потребностям, требованиям и бизнес-процессам пользователя.

ДОКУМЕНТАЦИЯ

Требования — это спецификация (описание) того, что должно быть реализовано. Требования описывают то, что необходимо реализовать, без детализации технической стороны решения.

Основные атрибуты требований:

  • Полнота — в требовании должна содержаться вся необходимая для реализации функциональности информация.

  • Непротиворечивость — требование не должно содержать внутренних противоречий и противоречий другим требованиям и документам.

  • Недвусмысленность — требование должно содержать однозначные формулировки.

  • Проверяемость (тестопригодность) — формулировка требований таким образом, чтобы можно было выставить однозначный вердикт, выполнено все в соответствии с требованиями или нет.

  • Приоритетность — у каждого требования должен быть приоритет (количественная оценка степени значимости требования).

Тест план (Test Plan) — документ, описывающий весь объем работ по тестированию:

  • Что нужно тестировать?

  • Как будет проводиться тестирование?

  • Когда будет проводиться тестирование?

  • Критерии начала тестирования.

  • Критерии окончания тестирования.

Основные пункты из которых может состоять тест-план перечислены в стандарте IEEE 829.

Неотъемлемой частью тест-плана является Traceability matrix — Матрица соответствия требований (МСТ) — это таблица, содержащая соответствие функциональных требований (functional requirements) продукта и подготовленных тестовых сценариев (test cases). В заголовках колонок таблицы расположены требования, а в заголовках строк — тестовые сценарии. На пересечении — отметка, означающая, что требование текущей колонки покрыто тестовым сценарием текущей строки. МСТ используется для покрытия продукта тестами.

Тестовые сценарии

Функциональное требование 1

Функциональное требование 2

Функциональное требование 3

test case 1

+

+

test case 2

+

+

test case 3

+

+

+

+

Чек-лист (check list) — это документ, описывающий что должно быть протестировано. На сколько детальным будет чек-лист зависит от требований к отчетности, уровня знания продукта сотрудниками и сложности продукта. Чаще всего, в ЧЛ содержатся только действия, без ожидаемого результата. ЧЛ менее формализован, чем тестовый сценарий.

Тестовый сценарий (Test Case) — это документ, в котором содержатся условия, шаги и другие параметры для проверки реализации тестируемой функции или её части.

Атрибуты тест кейса:

  • Предусловия (PreConditions) используются, если предварительно систему нужно приводить к состоянию пригодному для проведения проверки; т.е. указываются либо действия, с помощью которых система оказывается в нужном состоянии, либо список условий, выполнение которых говорит о том, что система находится в нужном состоянии для основного теста.

  • Шаги (Steps) — cписок действий, переводящих систему из одного состояния в другое, для получения результата.

  • Ожидаемый результат (Expected result), на основании которого можно делать вывод о удовлетворении поставленным требованиям.

  • иногда используются Постусловия (PostConditions), как некоторое напоминание для перевода системы в первоначальное состояние, как до проведения теста (initial state)

Из тестовых сценариев, сгруппированных по некоему признаку (например, тестируемой функциональности), получаются некоторые наборы. Они могут быть как зависящими от последовательности выполнения (результат выполнения предыдущего является предварительным условием для следующего для Test script), так и независимыми (Test suite).

Отчёт о дефекте (Bug Report) — это документ, описывающий ситуацию или последовательность действий приведшую к некорректной работе функциональности.

Шапка

Название/тема: Краткое описание (Summary) некорректного поведения, составляется по схеме WWW, т.е. ЧТО ГДЕ КОГДА (при каких условиях)

Назначен на (Assigned To) сотрудника, который будет с ним разбираться

Статус (Status) бага в соответствии с workflow

Компонент приложения (Component): название тестируемой функции или ее части

Информация по сборке, на которой была найдена ошибка: Номер версии (Version), название ветки

Информация об окружении (Environment): ОС + версия, модель девайса (для мобильных устройств) и т.д.

Серьезность (Severity)

Приоритет (Priority)

Описание

Подробное описание (Description): указывается по необходимости; как правило, сюда вносятся предусловия (PreConditions) или другая дополнительная полезная информация, например, если для воспроизведения бага нужны специальные знания/данные/инструменты

Шаги воспроизведения (Steps to Reproduce), по которым воспроизводится ситуация, приведшая к ошибке

Фактический Результат (Result), полученный после прохождения шагов воспроизведения, часто может быть = теме/краткому описанию (Summary) + расшифровка чего-либо (например, ошибки по коду), если нужно

Ожидаемый результат (Expected Result): который правильный, т.е. описание того, как именно должна работать система в соответствии с требованиями

Прикрепленные файлы

Вложения (Attachment): файлы с логами, скриншот или видео каст либо их комбинация для прояснения причины ошибки


Огромное спасибо @alexlobach и @Gennadii_M за статьи! Большая часть информации взята именно оттуда.

UPD: статья пополняется. Спасибо @yakoeka

Спасибо большое всем за фидбэк, благодаря которому материал обновляется и дополняется

Понравилась статья? Поделить с друзьями:
  • Тестовая модель тестовые сценарии
  • Территория украины кто что подарил
  • Тестировщик игровых сценариев книга отзывы
  • Территория семейных праздников вместе
  • Террария хеллоуинский праздник