среда, 6 мая 2009 г.

Фильтровать не перефильтровать или как тестировать поиск

Наверное, нет сейчас человека, который бы не ругался на разработчиков софта из-за ошибок при поиске или фильтрации данных. Вам надо что-то найти, а приложение либо показывает не то что надо, либо выдает какие-то ошибки. В этом случае вы говорите: "Программисты опять накосячили." Хочу перефразировать: "Тестеры не до тестировали", т.к. программист имеет право на ошибку, а вот тестер уже нет. Он - последний оплот качества :) Ладно, перейдем от слов к делу.

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



Сайт realt.by
Пример неправильной работе фильтра на странице "Квартиры в новостройках, долевое строительство квартир":

Краткое Описание:
Неправильно реализован поиск по условию "Срок сдачи: до"

Пример:
1. выбираем Срок сдачи: до 3 квартал 2009
2. Нажимаем "Начать Поиск"

Результат:
Список объектов со сроком сдачи 3 квартал 2009

Ожидаемый Результат:
Список объектов со сроком сдачи, начиная с сегодняшнего дня до 3 квартала 2009


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

Пример 1. Поиск пользователя


Имеющийся фильтр: Имя, Фамилия, Возраст, Место работы.
Тестовый пользователь: Иван, Иванов, 25, Смольный.

Случаи тестирования
1. Заполните в фильтре все поля, соответственно. В результате вы должны получить только одну запись, а именно тестового пользователя: Иванова Ивана. Если вы получили ни одного или несколько пользователей, и кто-то из них не Иванов Иван 25ти лет, работающий в Смольном, значит это бага.
2. Поиск по отдельным полям. Введите в фильтре только имя "Иван". В результате вы получаете список пользователей с именем "Иван", причем это должны быть все пользователи с этим именем, а не только некоторые из них. Повторите тоже самое с остальными полями фильтра.
3. Поиск используя комбинации полей. Введите в фильтре имя "Иван" и фамилию "Иванов". В результате вы получаете список всех пользователей с именем "Иван" и фамилией "Иванов". Повторите тоже самое варьируя комбинациями полей фильтра, например: (имя, возраст), (фамилия, место работы), (фамилия, возраст, место работы) и т.д.

Примечание: Если какое-либо поле содержит специальные (ASCII) символы, то это не должно искажать результаты поиска, как в функциональном плане, так и при выводе их на экран (XSS и SQL Injections).

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


Здесь хочется просто дать всем совет:
- Внимательно читайте требования к фильтрам, обращая внимание на границы поиска, а именно: границы включены (=, >=, <=) или не включены (<, >).

Пример 2.1. Поиск места работы по дате:
Имеющийся фильтр: Имя, Фамилия, Дата работы (границы включены - =, >=, <=)

Тестовый пользователь:

ИмяИван
ФамилияИванов
Дата трудоустройства30/10/2007
Дата увольнения (последний рабочий день)30/10/2008
Место работыСмольный

В данном примере, помимо проверок из примера 1, Вам придется обратить внимание на тестирование фильтров по границам дат трудоустройства и увольнения.
Случаи тестирования:
Имя и ФамилияДата работыОписаниеОжидаемый результат
Иван, Иванов30/10/2007= левой границе,
< правой границы
Место работы Смольный
Иван, Иванов30/10/2008> левой границы,
= правой границе
Место работы Смольный
Иван, Иванов29/10/2007< левой границы,
< правой границы
Место работы не определено
Иван, Иванов31/10/2007> левой границы,
< правой границе
Место работы Смольный
Иван, Иванов31/10/2008> левой границы,
> правой границе
Место работы не определено


Пример 2.2. Поиск места работы по дате:
Имеющийся фильтр: Имя, Фамилия, Дата работы (границы НЕ включены - <, >)
Тестовый пользователь:

ИмяИван
ФамилияИванов
Дата трудоустройства30/10/2007
Дата увольнения (день, с которого сотрудник считается уволенным)30/10/2008
Место работыСмольный

Случаи тестирования:
Имя и ФамилияДата работыОписаниеОжидаемый результат
Иван, Иванов30/10/2007= левой границе,
< правой границы
Место работы Смольный
Иван, Иванов30/10/2008> левой границы,
= правой границе
Место работы не определено
Иван, Иванов29/10/2007< левой границы,
< правой границы
Место работы не определено
Иван, Иванов31/10/2007> левой границы,
< правой границе
Место работы Смольный
Иван, Иванов31/10/2008> левой границы,
> правой границе
Место работы не определено


Пример 3. Использование Wildcard символов


Наиболее распространенными wildcard символами являются "*" и "?".
* - включает любое число произвольных символов либо не включает ничего :)
? - включает ниодного или один произвольный символ

Тестовый пользователь: Иван, Иванов
Фильтр по фамилии с разрешенными Wildcard-ами
Случаи тестирования (*):
ФильтрРезультат
*ивановиванов, а также все фамилии заканчивающиеся на "иванов": криванов, ливанов и т.д
иванов*иванов, а также все фамилии начинающиеся на "иванов": иванович, иванова и т.д.
ив*овиванов, а также все фамилии начинающиеся на "ив" и оканчивающиеся на "ов": иваньков, ивченков и т.д.
*иванов*иванов, а также все фамилии имеющие в середине сочетание "иванов": диванович, иванович, диванов и т.д.

Случаи тестирования (?):
ФильтрРезультат
?ивановиванов, а также все фамилии заканчивающиеся на "иванов": диванов, ливанов и т.д
иванов?иванов, а также все фамилии начинающиеся на "иванов": ивановъ, иванова и т.д.
ив?новиванов, а также все фамилии начинающиеся на "ив" и оканчивающиеся на "нов": иванов, ивенов и т.д.
?иванов?иванов, а также все фамилии имеющие в середине сочетание "иванов": диванова, ивановъ, диванов и т.д.

Примеры с совместным использованием wildcard придумайте сами, не так это и сложно.

* * *

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

Напоследок расскажу, как мы автоматизированно тестировали правильность поиска на одном японском сайте:
1. Выкачали из базы все необходимые данные
2. Создали список кейвордов для поиска
3. Задали фильтры, используя заготовленные кейворды
4. Сверили наши данные с теми, что получили от приложения
5. Написали баги, если нашли :)

К выходу продукта в свет, ни одного открытого на фильтры бага не было...

Удачного тестирования,
Да пребудет с Вами Качество...

Отправить комментарий

Условия копирования публикаций:

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