Наверное, нет сейчас человека, который бы не ругался на разработчиков софта из-за ошибок при поиске или фильтрации данных. Вам надо что-то найти, а приложение либо показывает не то что надо, либо выдает какие-то ошибки. В этом случае вы говорите: "Программисты опять накосячили." Хочу перефразировать: "Тестеры не до тестировали", т.к. программист имеет право на ошибку, а вот тестер уже нет. Он - последний оплот качества :) Ладно, перейдем от слов к делу.
Для начала рассмотрим багу из жизни. Решил я поискать себе квартирку, пошел на сайт, задал значения фильтра и получил не совсем то, что ожидал.
Сайт 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. Написали баги, если нашли :)
К выходу продукта в свет, ни одного открытого на фильтры бага не было...
Удачного тестирования,
Да пребудет с Вами Качество...
Читать далее...