понедельник, 1 августа 2011 г.

Решение задачи: Палиндром

Добрый день, уважаемые коллеги!
Сегодня разберем задачу про палиндромы. Нам на почту поступило несколько решений.
Задача на первый взгляд достаточно простая, но с множеством нюансов. Естественно, как тестировщики, мы проверяем лишь черный ящик, а о реализации лишь можем предположить. Хотя особо интересно было б реализовать самим программу и затем протестировать.
Давайте посмотрим, как можно было решить задачу.

Шаг 1. Задать уточняющие вопросы.
Очень важно перед началом тестирования понять, как работает программа. Для этого задать уточняющие вопросы тому, кто в теме (заказчику, ПМу, аналитику). Так что молодцы, кто так делает. Это верный шаг. На худой конец Вы всегда можете записать свои вопрос (в виде тест-кейса), и исследовать поведение программы.

  • Скобки поворачиваем? Т.е. в зеркальном отображении открывающая должна превратиться в закрывающую? – Нет. В данном случае это не важно.
  • Считается ли симметричный текст палиндромом? – Да.
  • Считается ли один символ палиндромом? – Да.
  • Иероглифы и им подобные символы национальных азбук анализируются фонетически или по внешнему виду? – В иероглифах не силен. J Здесь потребуется помощь специалистов по восточным языкам. Так что не будем рассматривать этот случай, а как дополнительный тест-кейс себе отметим.
  • Считаются ли корректными излишние с точки зрения грамматики знаки препинания и пробелы? – Грамматику здесь не будем проверять. Всякие скобочки (пробелы и другие спец. символы) просто игнорируются.
  • Является ли определяющим признаком палиндрома осмысленность текста? – Бессмысленный набор символов будем считать буквосочетанием.
Шаг 2. Проверить работоспособность программы.
Тестирование необходимо начать с проверки, а работает ли программа так, как задумывалось. Другими словами, умеет ли она, верно определять палиндромы.
Прежде всего обратимся к спецификации вспомним определение. Чем же является палиндром?

Палиндром – это
  • Число
  • Буквосочетание
  • Слово
  • Текст
… одинаково читающиеся в обоих направлениях.

Под буквосочетанием давайте будем понимать некое выражение, состоящее из набора букв и цифр.
Итак, у нас есть 4 сущности, которые надо будет проверить. Лучше взять характерные реальные примеры палиндромов. А не просто начать вводить какие-то однобуквенные слова или пустые строки.

  • Так типичное число-палиндром это «404» или «666»; слово, например, «шалаш» и «ДОХОД»; текст – «А роза упала на лапу Азора.»; буквосочетание – «18 или 81?».
  • Текст может быть написан латиницей. Проверяем: «saippuakauppias» и «Don’t nod».
  • Помним, что заглавные и строчные буквы в палиндромах не различаются.

Шаг 3. Провести граничные, исследовательские и негативные тесты.

  • Самая короткая строка. Проверяем строки из одного символа: «5» и «Я».
  • Длинная строка: «Коростели летели, летели-летели, летели-летели, … , летели лет сорок.»
    • Подумайте, почему может быть плох, как тест, палиндром «Я дядя! А я тётя! А я дядя! А я тётя! А я дядя! …»
    • И второй вопрос каким должен быть негативный тест с длинной строкой, где лучше разместить символы с ошибкой?
  • Особый случай – это буквы Е и Ё: «Ужас — ангел лёг на сажу.»
  • Буквы с ударениями тоже встречаются: «Fešná paní volá: Má málo vína pan šéf?»
  • Проверим и перевод строки:
    • «Им я
    • иранец
    • со сценариями,
    • имя
    • и ранец
    • со сцен ариями.»
  • Арабский или иероглифы – запишем для галочки.
  • Одинаково пишущиеся символы из разных языков.

Проверим и следующие кейсы (для каждого может быть несколько примеров – не выписываю для краткости):
  • Пустая строка
  • Пробелы
  • Спецсимволы
  • Плохие символы ( )
  • Кодировка

Самое интересное решение прислал Ф. Терехов. С разрешения автора размещаю его решение.

До новых встреч!

5 комментариев:

  1. В уточняющих вопросах отсутствует вопрос о том, различаются или нет строчные и прописные буквы. Ну и в зависимости от ответа - соответствующий тест.

    ОтветитьУдалить
  2. Пля, Саня, давай я тебе лучше код программки покажу. :)

    ОтветитьУдалить
  3. Да на кой мне код, я его сам написать могу. Тема ж не про код, а про тестирование. Я просто обратил внимание, что у тебя в списке вопросов один важный отсутствует, и дописал его в комментарий.

    ОтветитьУдалить
  4. Саша, надеюсь ты продолжишь читать и коментить наш блог, даже после отъезда за бугор?

    ОтветитьУдалить