Тестирование начинается раньше программы — с текста, по которому её пишут
Требование — записанное условие, которому должна соответствовать программа. Для тестировщика требования — источник ожидаемого результата: без них на вопрос «это дефект?» нет ответа, есть только мнение.
| Вид | Что описывает | Пример: запись к врачу онлайн |
|---|---|---|
| Бизнес-требование | Зачем программа нужна заказчику | Снизить нагрузку на регистратуру: половина записей — через сайт |
| Пользовательское | Что пользователь хочет сделать | Пациент записывается к терапевту на удобное время, не звоня в поликлинику |
| Функциональное | Что именно делает программа | Сайт показывает свободные интервалы по 15 минут на 14 дней вперёд |
| Нефункциональное | Как программа это делает: скорость, удобство, защита | Расписание открывается не дольше 3 секунд; данные пациента передаются по HTTPS |
Требования бывают в техническом задании (ТЗ, по ГОСТ 34 или в свободной форме), в пользовательских историях («Как пациент, я хочу…, чтобы…»), в макетах интерфейса, в документации API, в переписке с заказчиком. Если требований нет вовсе, ожидаемый результат берут из здравого смысла, похожих программ, законов и стандартов — и записывают как предположение, которое нужно подтвердить.
Свойств в литературе называют до десятка. Для проверки хватает четырёх главных — по ним в практике этого раздела и записываются дефекты.
| Свойство | Значит | Плохо | Лучше |
|---|---|---|---|
| Полнота | Описаны все случаи, включая ошибки и границы | «Пациент может отменить запись» | «…не позже чем за 2 часа до приёма; после отмены интервал снова свободен; пациенту приходит СМС» |
| Однозначность | Понимается только одним способом | «Записи показываются за неделю» | «…на 7 календарных дней вперёд, начиная с завтрашнего» |
| Непротиворечивость | Не спорит с другими требованиями | «Интервал 15 минут» в одном пункте и «приём длится 20 минут» в другом | Одно число в одном месте, остальные ссылаются на него |
| Проверяемость | Можно придумать проверку с однозначным итогом | «Сайт работает быстро и удобно» | «Расписание открывается не дольше 3 секунд при 200 пользователях одновременно» |
Ещё полезно, чтобы требование было атомарным (одно требование — одно условие, тогда на него проще сослаться) и выполнимым («сайт работает без сбоев всегда» выполнить нельзя).
Читают дважды. Первый раз — целиком, чтобы понять, что за программа и для кого. Второй — по пунктам, задавая каждому одни и те же вопросы:
Найденное записывают таблицей, которую можно отправить аналитику или заказчику:
| № | Требование | Свойство | Что не так | Вопрос |
|---|---|---|---|---|
| 1 | 4.2 «Пациент может отменить запись» | Полнота | Не сказано, до какого момента можно отменить и что происходит с интервалом | За сколько часов до приёма отмена ещё возможна? Освобождается ли интервал для других? |
| 2 | 3.1 и 5.4 | Непротиворечивость | Интервал 15 минут, приём 20 минут | Какая длительность верна? Если 20 минут, как делится рабочий день врача? |
| 3 | 6.1 «Сайт работает быстро» | Проверяемость | Нет числа и условий | За сколько секунд должно открываться расписание и при скольких пользователях? |
Хороший вопрос экономит время обеим сторонам: на него можно ответить одной фразой, и этот ответ потом проверяется. Сравните:
| Плохо | Почему | Хорошо |
|---|---|---|
| «Требование про отмену непонятное» | Нет предмета: что именно непонятно | «Можно ли отменить запись за 30 минут до приёма?» |
| «А что будет, если что-то пойдёт не так?» | Не названа ситуация | «Что видит пациент, если интервал заняли, пока он заполнял форму?» |
| «Сделайте, пожалуйста, нормальную проверку телефона» | Это не вопрос, а требование от тестировщика | «Принимается ли телефон в формате 8 9xx…, или только +7?» |
Вопросы задают письменно, пачкой, с номерами требований. Ответы вносят в требования, а не оставляют в переписке: через месяц переписку никто не найдёт, а тест-кейсы будут ссылаться на пункт требований.
Критерии приёмки — условия, при которых функция считается сделанной. В гибких командах их пишут к каждой пользовательской истории до начала разработки, и тестировщик участвует в этом: он лучше других видит пропущенные случаи. Удобная форма — «Дано — Когда — Тогда» (в англоязычных источниках Given — When — Then):
История: как пациент, я хочу отменить запись, чтобы освободить время для других.
Критерий 1. Отмена заранее
Дано: у пациента запись к терапевту на завтра 10:00
Когда: он нажимает «Отменить запись» и подтверждает
Тогда: запись пропадает из «Мои записи», интервал 10:00 снова свободен,
пациенту приходит СМС «Запись на 10:00 отменена»
Критерий 2. Слишком поздно
Дано: до приёма осталось 1 ч 59 мин
Когда: пациент открывает запись
Тогда: кнопки «Отменить запись» нет, показан телефон регистратуры
Каждый критерий — готовая проверка: в «Дано» предусловия, в «Когда» действие, в «Тогда» ожидаемый результат, который можно сверить. Обратите внимание на критерий 2: он проверяет границу «2 часа» — к ней мы вернёмся в разделе 05.
Документы тестировщика отвечают на разные вопросы и пишутся в разное время.
| Документ | Отвечает на вопрос | Когда | Раздел курса |
|---|---|---|---|
| Тест-план | Что, как, кем и когда тестируем; когда закончим | В начале работ | 11 |
| Чек-лист | Какие проверки нужно сделать — списком, без подробных шагов | После чтения требований | 04 |
| Тест-кейс | Как именно выполнить одну проверку и что должно получиться | До прогона | 04 |
| Набор тестов (test suite) | Какие тест-кейсы проходим вместе: smoke, регресс, «Регистрация» | Перед прогоном | 04, 11 |
| Баг-репорт | Что сломано, как воспроизвести, насколько серьёзно | При прогоне | 07 |
| Тест-отчёт | Что проверено, что найдено, можно ли выпускать | В конце прогона | 11 |
Чек-лист и тест-кейс различаются подробностью. Строка чек-листа — «вход с верным логином и неверным паролем»: опытный тестировщик знает, что делать. Тест-кейс расписывает то же самое по шагам с конкретными данными и ожидаемым текстом сообщения — его пройдёт новичок или программа автотестов. В небольших проектах часто живут только чек-листы, тест-кейсы пишут на самое важное.
Поля тест-кейса:
| Поле | Пример |
|---|---|
| Идентификатор | TC-REC-07 |
| Название | Отмена записи меньше чем за 2 часа невозможна |
| Требование | 4.2 |
| Приоритет | Высокий |
| Предусловия | Пациент вошёл; есть запись, до приёма 1 ч 59 мин |
| Шаги | 1. Открыть «Мои записи». 2. Открыть запись. |
| Ожидаемый результат | Кнопки «Отменить запись» нет; показан телефон регистратуры |
| Фактический результат и статус | Заполняются при прогоне: «прошёл», «не прошёл», «заблокирован» |
Как писать тест-кейсы так, чтобы их можно было пройти без автора, — в разделе 04.
Трассировка — связь «требование → проверки → дефекты». Её ведут таблицей (матрицей трассировки):
| Требование | Тест-кейсы | Итог прогона | Дефекты |
|---|---|---|---|
| 4.1 Запись на свободный интервал | TC-REC-01…04 | 4 прошли | — |
| 4.2 Отмена записи | TC-REC-05…08 | 3 прошли, 1 не прошёл | BUG-31 |
| 6.1 Скорость | — | не проверено | — |
По ней видно, какие требования не покрыты (6.1 — потому что непроверяемое, вопрос задан), и что придётся перепроверить, если требование изменится. В небольшом проекте достаточно столбца «Требование» в таблице тест-кейсов.