Автор: Андрей Козлов
Часто приходится видеть, как подчас даже опытные тестировщики спотыкаются на известных граблях – на составлении тест-планов. Хочу рассказать о модели ведения тест-планов, основанной на сценариях использования.
Про необходимость тест-планов писать не буду, скажу лишь, что тест-план – и это не преувеличение – является основным инструментом в работе тестировщика. Он может вестись на бумаге, в голове, в текстовом файле или в баг-трекере, но он должен быть. Хотя бы для того, чтобы сказать потом начальству, что было проверено, а что нет. На моей памяти тестирование не одного проекта было сорвано из-за отсутствия тест-планов или неудобства работы с ними.
Я предлагаю модель, которая помогает существенно снизить риски неадекватного планирования. Суть её сводится к выделению сценариев использования приложения и наполнению их конкретными данными.
Введение
Основные понятия, помимо тест-плана, которые мы будем использовать, - это юз-кейс, тест-кейс и приоритет.
Юз-кейс – сценарий использования. Последовательность действий, которую мы можем осуществлять с помощью приложения или системы. (http://ru.wikipedia.org/wiki/Сценарий_использования)
Тест-кейс – тестовый сценарий. Последовательность действий (юз-кейс) с определёнными входными данными.
Приоритет – сравнительная оценка важности юз-кейса или тест-кейса для процесса тестирования.
Тест-план – в нашем узком смысле, – это список юз-кейсов и тест-кейсов с расставленными приоритетами. Всего того, что касается оформления плана и подготовки тестовой среды мы касаться не будем.
Для наглядности пояснения я буду строить тест-план на абстрактном приложении, которое нужно для ведения базы данных домашних животных.
Предположим, что у нас есть спецификация, которая гласит, что мы должны иметь возможность через интерфейс приложения делать выборки из базы на основе фильтра по типам животных и по их именам, и мы должны иметь возможность добавлять новые записи в таблицу. Приложение должно состоять из двух форм. На первой у нас выставляются значения фильтра, и по нажатию кнопки «Найти» выводится таблица в соответствии с фильтром. На ней есть кнопка «Добавить» по нажатию на которую, появляется вторая форма, где мы выбираем вид животного, вписываем его имя и сохраняем данные. Для начала хватит.
Функциональные требования естественным образом можно поделить на части. Для начала на отдельных приложений или крупные компоненты, а затем на юз-кейсы. Наши требования – не исключение. Приложение у нас ровно одно, а в нём ы можем выделить два юз-кейса: фильтрацию и добавление. Можно сказать, что кроме этого приложение должно корректно запускаться, корректно закрываться, и это тоже будут юз-кейсы, но мы их пока в расчёт не берём из-за их неспецифичности.
Часть первая. Юз-кейсы и тест-кейсы
Для начала зафиксируем наши юз-кейсы:
- Фильтрация
- Добавление
Сейчас же искушённый читатель должен заметить то, чем грешат в своих тест-планах новички - отсутствие конкретных действий и конкретных данных. Уточним:
- Выбираем в комбо-боксе вид животного, вписываем в текст-бокс его имя, нажимаем «Найти»
- Нажимаем «Добавить», выбираем в комбо-боксе вид животного, вписываем в текст-бокс его имя, нажимаем «Сохранить»
Теперь в нашем тест-плане есть полноценные юз-кейсы, нужно наполнить их данными, чтобы получить тест-кейсы. Для того, чтобы понимать, что мы получим на выходе, мы должны знать, чем мы располагаем на момент начала тестирования. Это относится как к тестовому окружению, так и к содержимому базы данных на момент начала тестирования.
Предположим, что исходная точка, - это 5 записей: собака Тузик, попугай Тузик, кошки Васька, Мурка, Матроскин.
В юз-кейсе 1 мы варьируем как входные данные вид животного (комбо-бокс) и его имя (текст-бокс). Для каждого из вариантов имеется определённый ожидаемый результат. Для удобства составим таблицу данных. Не буду вдаваться в правила использования типов данных и граничных значений, так как большинство читателей с ними знакомо.1. Фильтрация
| Вид животного | Имя животного | Ожидаемый результат |
| Все | Отобразится таблица со всеми животными, имеющимися в базе (5 записей) | |
| Все | Тузик | Отобразятся все животные по имени Тузик (2 записи) |
| Все | ‘//>&<$test#” | Отобразится надпись «Записей не найдено» |
| Кошка | Васька | Отобразится таблица с одной записью (кошка, Васька) |
| Кошка | Отобразится таблица с тремя записями (кошка, Васька, Мурка, Матроскин) | |
| Крокодил (в таблице ещё нет ни одного крокодила) | Отобразится надпись «Записей не найдено» |
Часть вторая. Приоритеты.
Некоторые из тест-кейсов являются действительно важными, как например, поиск всех животных, или поиск животных с заданным именем, или поиск одного конкретного животного, а некоторые важны в меньшей степени, - например, тест-кейсы, проверяющие, как приложение реагирует на спец. символы и теги. Так мы постепенно приходим к понятию приоритета тестов. Приоритетов может быть столько, сколько захочет сам тестировщик, я предпочитаю три.
Когда в процессе разработки и доработки приложения, тест-план разрастается, и тестовые данные множатся, тестировать каждый раз всё, что накопилось, становится экономически неоправданно, а порой и физически невозможно. Приоритеты призваны решить как раз эту проблему. Расставив их в зависимости от важности и частоты совершения определённых действий, мы имеем полное право проверять только те тест-кейсы, которые подходят ситуации. Например, если это промежуточное тестирование, то мы будем использовать тесты высокого приоритета, если небольшой патч или релиз, то тесты высокого и среднего приоритета, если плановое полное тестирование или крупный релиз, то тесты всех приоритетов. Впрочем, этот выбор зависит уже от того, кто отвечает за стратегию тестирования.
Аналогичным образом приоритеты можно расставлять и среди самих юз-кейсов, потому как некоторые из них могут быть значительно более или менее важными, чем остальные. В моей практике были случаи, когда при срочном релизе тестировались не все юз-кейсы. Потом оказывалось, что некоторые из тех, что не были протестированы, работают с ошибками, но никто от этого не умирал, - ждали следующего релиза.
Предположим, что протестировав, мы констатировали, что приложение работает без ошибок, но после внедрения и промышленной эксплуатации выяснилось, что при некоторой последовательности действий (или некотором наборе данных) приложение ведёт себя не так, как ожидается. Эту ошибку исправляют, и она больше не воспроизводится. Тестировщики же добавляют в свой план ещё один юз-кейс (желательно после внесения дополнений в спецификацию) или тест-кейс (набор данных) с соответствующим приоритетом, и это гарантирует то, что ошибка, если она повторится, будет найдена, и никому не придётся искать её на просторах баг-трекера, когда вдруг захочется узнать, не воспроизводится ли она.
Подведение итогов
Основной тезис: тест-кейсы – это юз-кейсы, дополненные входными и выходными данными.
Итоги:
- Тест-план состоит из двух частей: списка юз-кейсов и таблиц данных
- Каждая запись в таблице данных является тест-кейсом
- Все юз- и тест-кейсы имеют приоритеты
- Таблицы неприхотливы и удобны в использовании
В рамках этой модели можно модифицировать таблицу непосредственно под конкретные задачи, добавлять или убирать столбцы, расставлять приоритеты, создавать на её основе чек-листы и автотесты. В первую очередь – это модель, которая хоть и удобна для решения проблем ведения тест-планов, но не является панацеей. Важно помнить, что никакой инструмент никогда не заменит ответственного и понимающего специалиста.












"Сейчас же искушённый читатель должен заметить то, чем грешат в своих тест-планах новички - отсутствие конкретных действий и конкретных данных. Уточним:"
Какие конкретные действия в тест плане?
"Теперь в нашем тест-плане есть полноценные юз-кейсы, нужно наполнить их данными, чтобы получить тест-кейсы. Для того, чтобы понимать, что мы получим на выходе, мы должны знать, чем мы располагаем на момент начала тестирования. Это относится как к тестовому окружению, так и к содержимому базы данных на момент начала тестирования."
Наполнить данными юз-кейсы в тест плане? Откуда вы это взяли? Укажите источники.
Навскидку, по крайней мере в двух шаблонах нет ни слова об этом:
Test Plan Template RUP
Test Plan Template IEEE 829
> Test Plan Template RUP
> Test Plan Template IEEE 829
Ну и что, что там этого нет? (я не проверял, поверю на слово :) )
Разве это означает, что так нельзя делать?
(заходите в форум, там удобнее обсуждать. ссылка в самом низу статьи)