Цель статьи: объяснить с чего начать применение теории тестирования на практике, попутно раскидывая всё по полочкам. Это не истина в последней инстанции, ибо информации тонны на вкус и цвет для каждого, но именно из-за неё и каши в головах новичков и появилась статья в качестве краткого руководства, потому что большинство говорят ЧТО нужно сделать, а не КАК это сделать. Кто-то и так все это знает, а кому-то уже надо начинать тестировать, ведь от тебя уже ждут результатов, желательно, вчера. Пишется это все для тестировщика, у которого ничего нет: документации/онбординга/один или новичок на проекте/вообще без опыта/мне бы чисто black box и т.д. Для меня лично, выбранная здесь терминология, на сей день лучше всего передает суть происходящего в тестировании. Правда я не смогу указать авторов идей и высказываний, т.к. приходилось сортировать горы информации, чтобы отсеять лишнее, да и подобная статья не планировалась вовсе, поэтому выписывались только идеи

Тестирование — проверка соответствия фактических и ожидаемых результатов поведения ПО, проводимая на конечном наборе тестов, выбранных определённым образом

Задача тестирования — предоставить информацию о том, как работает ПО

Верификация — проверка ПО на соответствие требованиям. Проводит тестировщик. Результат верификации — это ответ на вопрос «Соответствует ли продукт требованиям?»

Валидация — проверка ПО на соответствие потребностям пользователей. Проводит заказчик. Результат валидации — это ответ на вопрос «Можно ли использовать продукт под определенные цели?»

Для понимания разницы: verification — проверка, validation — придание законной силы. Например, выпускается лекарство, и оно соответствует заданным требованиям, но только врач может подтвердить: подходит ли оно для больного в его конкретной ситуации или нет?

С чего начать?


Вообще, выспись. Сон для тебя теперь дороже всего :) А потом с STLC. Ах, да… у нас же ничего нет

1. Определить, что именно тестируется

Иначе велика вероятность потратить кучу времени на совершенно ненужные вещи. Например, если говорят протестировать ручку, первым вопросом должно быть: “Что это за ручка?”. Вопрос не кажется таким уж и глупым, когда ты написал документацию и автотесты на шариковую ручку, о которой сейчас подумал, а она оказалась дверной… Или от пакета

2. Собрать максимум информации

Тестирование – это в первую очередь про сбор максимального количества информации о ПО и разработке и только потом верификация. Так ты узнаешь: на каком стеке работает проект, кто владеет всей информацией, чего от тебя вообще ждут, а в конце будет понимание: какой объем работ предстоит. Для получения как можно большей информации, задаем открытые вопросы.
Например:
— Функционал работает? – закрытый вопрос, предполагающий только однозначный ответ
— Как именно работает этот функционал? – открытый вопрос, предполагающий развернутый ответ
Чтобы понять какой вопрос задаёшь, протестируй его. Если предполагается развернутый ответ – это то, что надо. А то еще и сам себе на вопрос ответишь в процессе размышлений


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

правила хорошего тона при переписке
  • Сначала определи: можно ли этот вопрос задать гуглу. Если нет, переходи к п.2
  • Пробуй решить проблему самостоятельно около 20 минут и только потом иди за помощью (исключение составляет нечто безотлагательное)
  • Если команда проекта большая или ты новичок на проекте, представься после приветствия (в иных случаях представляться не обязательно)
  • Теперь вкратце пиши контекст:
    a. Суть проблемы
    b. Что хочу и зачем?
    c. Что уже попробовал сам сделать для решения проблемы?
  • Если вопросов много для одного раза или переписка по проблеме выйдет или уже вышла за 20 сообщений, лучше созвониться. Если задать вопросы пачкой в переписке – в итоге оба запутаетесь


3. Уточнять, не додумывая самостоятельно
В тестировании нет никаких “Ну, это ж и так очевидно!”. Нет, не очевидно. Понимание одного и того же предложения у всех может быть разным. Отсюда и реализация. Не заданный вовремя, кажущийся глупым, вопрос, часто имеет плачевные последствия

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

Пример
  • Ты определил, что тестируется

    Например, это благотворительная организация (сайт/приложение). Её основная цель (функционал): помощь
  • Сбор информации

    … и понеслись вопросы: кто целевая аудитория? Как именно осуществляется помощь? Как организован сбор пожертвований? А мы сами проводим транзакции и у нас есть на это лицензия или это контракт со сторонней фирмой? А как осуществляется безопасность данных пользователей? И так далее. Всё это приведет тебя к людям, владеющим информацией. От которых ты можешь узнать не только “где тут столовая?” и “када буит многа деняк?”, но и как работает проект
  • Уточнять

    И вот ты собрал вроде бы всю информацию, но проект не стоит на месте и появляются новые задачи и функционал. Здесь ты узнаёшь: как именно это будет работать? Какой старый функционал может задеть новый? А точно ли у нас у всех общее понимание задачи? Не является ли функционал излишним для пользователей? Какие проблемы пользователя решает? И так далее
  • 4 пункт – уже просто аксиома

    Да и к этому времени ты уже понимаешь, что ожидается от тестирования и идешь писать документацию


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


Самые главные вопросы, которые задаются постоянно, пока проходит SDLC (потому что ПО развивается и вводится новый или меняется старый функционал):

  1. Какие проблемы пользователя решает внедряемый функционал?

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

    Этот вопрос задается себе неоднократно и по ответу на него станет понятно: какой объем работы тебя ожидает на основе уже полученной информации. Также его можно задать один-два раза заказчику/продакт оунеру. И это будет либо простое “нууууу, чтобы все работало”, либо “надо предоставить отчёт по критам и блокерам в текущем релизе в графике и ёмким описанием почему это произошло со ссылкой на Sentry/Kibana”. Но чаще всего ты будешь получать первый вариант

Документация


Начинается с оценки того, что дали тестировать:

1. Определив элементы с повторяющимся функционалом, выносишь их в чит-лист

2. Функционал элемента, который имеет некоторую логику, заносишь в расширенный чек-лист, который составляется на основе чит-листа

Например, есть некоторое поле ввода, которое имеет небольшую логику. Тогда чек-лист будет таким:
— Обязательное
— По умолчанию — Пустое
— При указании числа вне диапазона от 1 до 99 / сохранении пустого поля
> Подсвечивать поле красным
> Выводить под полем текст с ошибкой «Неверный диапазон. Введите число от 1 до 99»


В расширенный чек-лист вносится только заложенная логика. Глянув на такой чек-лист, можно быстрее определить правила работы элемента. И если что-то не записано – значит не предусматривалось. Например, не надо заносить в чек-лист ограничение по количеству символов в поле, если оно не было предусмотрено, т.к. это ты и так проверишь с помощью чит-листа и укажешь на это. В примере выше нет пунктов типа “введите 0” или “введите больше 2 цифр”, потому что это и так проверяется третьим пунктом, что делает чек-лист ёмче и проще для восприятия. И прежде, чем составлять тест-кейсы, подумай: сможет ли чек-лист описать логику работы быстрее, чем ТК? Потому что чек-лист используется не только как список покупок для декомпозированных элементов

Пример чек-листа для работы с шаблонами
Отсутствие шаблонов:
— Отображать кнопку Сохранить как шаблон
— Отображать плейсхолдер «Заполните данные протокола и нажать кнопку “Сохранить как шаблон“»

Сохранить как шаблон:
— При пустом поле выбранного блока
> Выводится попап с ошибкой «Требуется внести корректные данные в поле»

Название шаблона:
— Обязательное
— Ограничение в 30 символов
— Если длиннее > под полем высвечивается ошибка об ограничении в 30 символов, после нажатия кнопки Сохранить
— При нажатии на кнопку Сохранить проверяется наличие дублирующих названий шаблона:
— Если есть > выводится модалка с предложением обновления
— Если нет > шаблон сохраняется и выводится попап об успешном сохранении
— Если не удалось проверить дублирующее название или сохранить шаблон > выводится попап с ошибкой «Не удалось создать шаблон»

Поиск:
— Отображается только при наличии хотя бы одного сохраненного шаблона
— Доступен от 1 символа
— Если нет шаблонов, удовлетворяющих условию поиска, выводится плейсхолдер «Измените текст запроса»

Список шаблонов:
— По умолчанию выводится 10 шаблонов; для просмотра всех шаблонов используется скролл
— При наведении на наименование шаблона выводится тултип с полным названием

Применение шаблона:
— При выборе шаблона в поле выбранного блока подставляется сохраненный текст
— Применить ранее сохраненный шаблон, дополнить поле новым текстом и нажать крестик в списке шаблонов:
> Выводится модалка «При отмене шаблона будут удалены заполненные данные»
> При применении новые данные не сохраняются
> Наименование шаблона удаляется из списка
— Ввести текст в поле выбранного блока и применить шаблон:
> Выводится модалка «При применении шаблона будут удалены ранее введенные данные»
> При применении данные затираются данными из шаблона
> Наименование шаблона закрепляется в списке; Ширина поля списка фиксируется

Удаление шаблона:
— После подтверждения удаления ВЫБРАННОГО шаблона:
> Удаляется шаблон из списка шаблонов
> Заменяется наименование выбранного шаблона на Выбрать шаблон
> Выводится попап с успехом «Шаблон успешно удален»
— Если шаблон был применен до удаления, то текст не удаляется из поля

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

3. И только то, что действительно не укладывается в чек-лист, выносится в тест-кейсы
Это те самые пользовательские сценарии с подробным описанием сложных проверок. И если у тебя на проекте настолько ничего нет, что нет даже TMS, то смело открывай Excel. Только помни про

необходимые поля
Идентификатор — уникальный номер (можешь сам сгенерировать, например, по акрониму страницы, которую тестируешь + цифры в порядке возрастания)
Название — краткое, понятное и ёмкое описание сути проверки
Предусловия (если необходимо) — действия, которые необходимо предварительно выполнить или учесть перед основной проверкой. Их чаще всего не бывает, но внести поле желательно
Шаги проверки — последовательность действий, которые необходимо выполнить для проверки
Ожидаемый результат — проверка, которая устанавливает, что мы ожидаем получить, после выполнения определённых действий в соответствующем шаге
Автор — понятно, что ты. Это на случай, если на проект еще одного тестировщика возьмут
Приоритет — очередность выполнения в порядке важности. Чтобы быстро собрать smoke/sanity

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

Общие требования при создании ТК
1. Один ТК проверяет одну функцию
Всегда есть соблазн описать «заодно» еще что-нибудь, чтобы не создавать для этого лишний ТК, но это некорректно
2. Описание должно быть понятно широкому кругу пользователей
Выполнить проверку по ТК должен суметь вообще любой человек
3. Описание должно быть обезличено
В едином стиле, используя глаголы (Открыть сайт, нажать кнопку, ввести в поле и т.п.)
4. Можно автоматизировать
Образно, это пошаговый скрипт для разработчика
5. Содержит максимум 10 шагов
Если в одном ТК уже больше 20 шагов — что-то пошло не так. Декомпозируй
6. Максимальная независимость от других ТК
Лучшая практика — не ссылаться на другие ТК вообще. Исключения обычно составляют статичные ТК (например, в Предусловиях ссылка на ТК для авторизации в системе)
7. 20% ТК должны покрывать 80% функционала
Не стоит бездумно писать ТК на все подряд. Сложно будет поддерживать документацию

На практике же эти требования гибкие и исключение можно создать для любого из них, но надо быть твёрдо уверенным, что оно необходимо. Иерархию ТК можешь выстроить от GUI (если сайт/приложение простое и не имеет или мало повторяющегося функционала в разных местах) или по функционалу (если есть повторяющийся функционал. Например, при авторизации есть три типа пользователей – администратор, модератор, пользователь. Создаешь папку вида “права пользователей”, внутри неё можешь положить ТК по общему функционалу, а также создать три тест-сьюта, которые уже будут содержать различия между администратором, модератором и пользователями). Комбинировать тоже не запрещено

Багги


Отклонение фактического результата от ожидаемого — самое распространённое определение. Да вот только у нас нет документации. Откуда ж у нас ожидаемый результат? Что же тогда такое “баг”? А это проблема для тех, чье мнение имеет значение для проекта
И вот ты находишь дефект и вспоминаешь: как же там учили их заводить? Вроде бы суть должно отражать. Ок. “Не работает стейдж” (и докажи мне, что это неправильное название). Открываешь свою эксельку (боже, беги с этого проекта. Заводить баги и ТК в excel уже лютая дичь. 21 век на дворе) и пробуешь составить баг-репорт

по некоторым правилам
Идентификатор — уникальный номер (можешь сам сгенерировать, например, BUG + акроним страницы, которую тестируешь + цифры в порядке возрастания)
Название — краткое, понятное и ёмкое описание сути дефекта. По системе ЧГК (Что? Где? Как именно? сломалось). И пиши его так, чтобы можно было скопипастить название в фактический и ожидаемый результаты, только в ожидаемый копируешь с припиской НЕ
Предусловия (если необходимо) — описывает предусловия, которые нужно выполнить перед Сценарием воспроизведения
Сценарий воспроизведения — подробно описывает пошаговое воспроизведения дефекта, с обязательным указанием стенда и пользователя
Фактический результат — понятно описывает результат Сценария воспроизведения, а именно — в чем заключается дефект. В этот блок прикрепляются скриншоты/видео/логи (если это необходимо)
Ожидаемый результат — описывает результат, который требуется видеть согласно постановке. В этот блок прикрепляются ссылки на постановки/дизайн (если это необходимо)
Автор — понятно, что ты
Исполнитель — ответственный за фикс дефекта
Severity — степень ущерба, которую наносит проекту существование дефекта

Упрощённое объяснение статусам Severity
Blocker (нет workaround’a)
  • Блокирует разработку и/или тестирование
  • Работа с выпущенной версией невозможна

Critical/High (есть workaround)
  • Аварийная остановка работы
  • Потеря данных
  • Серьезные проблемы производительности и/или безопасности
  • Не работающая область приложения или отсутствующая критичная для бизнеса функциональность

Major/Medium (есть workaround)
  • Серьезное нарушение функции
  • Заметная ошибка продукта, влияющая на пользовательский опыт

Minor/Low
  • Незначительные несоответствия пользовательского интерфейса
  • Иная проблема при наличии обходного пути (workaround)

Trivial/Lowest
  • Желательные изменения и/или улучшения



Еще в баг-репорт можно впихнуть окружение и версию стенда, а можно и комментарием оставить

Что дальше?


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

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

Изучай инструменты для сбора любых метрик, ибо тестировщик всегда будет крайним в большинстве команд

Ну и тест-дизайн. Понимание техник даст сокращение документации, времени на тестирование и снова подкинет идей

Итого: тестирование – это просто только тогда, когда ты понимаешь, что делаешь. Как только в голове устаканится база, можешь изучать API, 7 уровней OSI, SQL и всё то, что разом вываливают на курсах. Надеюсь, стало чуточку полегче войти в айти. Ведь правда?

Комментарии (2)


  1. Fldoff
    04.06.2023 05:39

    Я пришел не для того, чтобы ругаться.

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

    Первый вопрос.

    Про тест-кейс.

    необходимые поля

    Приоритет - smoke/sanity .

    В чем разница smoke/sanity?

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

    1) Разработчик (условно) написал код и первый раз нажал "run" для проверки работоспособности приложения, версия 1.0. Для проверяющего это будет smoke/sanity?

    2) Разработчик внес исправления (фиксы), версия 1.1 Для проверяющего это будет smoke/sanity?

    3) Разработчик внес изменения (улучшения), версия 1.2. Для проверяющего это будет smoke/sanity?

    Кто и как определяет smoke/sanity? Почему?

    Второй вопрос.

    Структура баг-репорта

    Багги

    по некоторым правилам.

    Про Severity - есть, а Priority - нет

    Почему priority нет? Забыли дописать? Не используете на практике? Считаете не надо использовать?

    Упрощённое объяснение статусам Severity

    Critical/High

    Major/Medium

    Minor/Low

    Почему в Severity используется "High Medium Low"? Эта структура из опыта, которое используется в некоторых компаниях? Если да, то можно сделать сноску, что это в определенных компаниях так используется или теперь так означают и Severity Priority?

    Еще в баг-репорт можно впихнуть окружение и версию стенда, а можно и комментарием оставить

    Пост-шпаргалка. Давайте стараться давать лучшие практики.

    Уточнение

    Открываешь свою эксельку (боже, беги с этого проекта. Заводить баги и ТК в excel уже лютая дичь. 21 век на дворе

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


  1. Eventoi Автор
    04.06.2023 05:39

    Здравствуйте. Отвечаю на ваши вопросы:
    1. В чем разница smoke/sanity?
    Можно придерживаться распространенного мнения, что Smoke направлен вширь, а Sanity вглубь проекта. Под смоками вы проверяете работоспособность проекта, что навскидку ничего не было сломанного из действующего основного функционала, не углубляясь в тестирование. Sanity делает то же самое только глубже (например, вы проверили что кнопка нажимается, но при нажатии она открывает некую форму для заполнения. Smoke - вы проверили чисто кнопку. Sanity - вы проверили еще и заполняемость формы. Пример кривой, но для понимания)
    2. Кто и как определяет smoke/sanity? Почему?

    Это определяется самим тестировщиком на основе собранной информации о новом функционале. Вы понимаете что будет задето и что было изменено. Сначала вы проверяете новую функцию (например, на дев стенде). Делаете Smoke, чтобы понять: работает ли функция? Выполняет ли свой основной функционал? Потом берете в тестирование. После проверки функционал сливается на стейджинг. Вы проверяете там: не сломал ли он еще что попутно из уже рабочего кода? Не задел ли еще чего? Затем идет слитие прод. Там можно пройтись по UAT-тестам. Пишутся тоже тестировщиками на основе полученных ранее данных

    3. Почему priority нет? Забыли дописать? Не используете на практике? Считаете не надо использовать?

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

    4. Почему в Severity используется "High Medium Low"? Эта структура из опыта, которое используется в некоторых компаниях? Если да, то можно сделать сноску, что это в определенных компаниях так используется или теперь так означают и Severity Priority?

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

    5. Пост-шпаргалка. Давайте стараться давать лучшие практики

    Учту) Но пост-шпаргалка "С чего начать", а про "окружение и версию стенда" - это просто совет

    6. Дичь не дичь, но разные бывают компании и с разными задачами.

    О, я прекрасно это понимаю) И все же есть множество TMS с бесплатными тарифами на нескольких тестировщиков, в которых можно безболезненно выполнять основной функционал тестирования