Показаны сообщения с ярлыком тестирование. Показать все сообщения
Показаны сообщения с ярлыком тестирование. Показать все сообщения

вторник, 21 октября 2014 г.

Проклятие знания


Главная проблема объяснения — проклятие знания. Мы работаем с чем-то достаточно давно, разбираемся во всех тонкостях, поэтому искренне не понимаем, как можно этого не знать. "Это же элементарно!". Да. Для нас.

Посмотрим на проявления этого феномена в разных ситуациях.

Junior тестировщик


Наша система умеет работать по протоколу SOAP. Матерые тестировщики давно к этому привыкли. И вот на проект выходит junior qa. Ему даются на проверку самые простые баги, "отправить запрос, выверить ответ по документации". Только выглядят они примерно так:

Отправить SOAP-запрос {тело запроса}.
В ответе получаем А, а ожидаем В.

Делов на 1 минуту.

Но у начинающего от такой постановки начинается паника "какой запрос? Что такое SOAP? Как отправлять такие запросы?!".

При этом, если он задаст вопрос "как отправить запрос?", коллега, подверженный проклятию знания, пожмет плечами "через SOAP UI". Только что такое объяснение даст новичку?

В такой ситуации проявляется умение начинающего коллеги гуглить (кстати, по SOAP рекомендую эту статью). Потому что если он найдет минимум информации, скачает и установит себе SOAP UI, ему останется только спросить у коллеги "А где мне взять WDSL? И какие логин-пароль использовать?".

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

Замыленный взгляд


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

Поэтому когда приходит новый человек и говорит "я не пониманию, как мне сохранить файл", мы сильно удивляемся. Как так? Это же так просто!

Нет, это не просто. Просто мы уже привыкли. Именно поэтому, когда на проекте появляется новый человек, важно выслушивать все его претензии к удобству использования программы или чтению документации.

Точно так же потом и пользователь не поймет, что ему делать. Только пользователи жалуются далеко не всегда. Часто они не могут понять, что делать, плюют и уходят с сайта к конкурентам. А все "проклятие знания" и, как следствие, "замыленный взгляд"!

Описание новой фичи


Когда к нам приходит Заказчик и говорит "прикрутите мне вот сюда синенькую кнопочку", всегда стоит задать вопрос "а зачем?".

Иногда ответ кажется нам слишком очевидным. Поэтому мы не задаем вопросы, а просто делаем, как нам кажется правильным. И это большая ошибка!

НИКОГДА не додумывайте требования! Задача тестировщика - уточнить все моменты, которые могут быть восприняты двояко, которые не описаны в документации.

Просто Заказчик, когда просит что-то сделать, дает мало информации. Ведь он погружен в контекст проблемы. Поэтому он говорит нам "отправьте SOAP-запрос", предполагая, что мы тоже в контексте и прекрасно понимаем, о чем идет речь.

Додумывание требований приводит к страшным последствиям. Вплоть до того, что разрабатывается система, которая вообще не решает проблему Заказчика (вот отличный пример).

Иногда мы угадываем, да. Но иногда Заказчик страдает от какой-то проблемы и думает, что "синенькая кнопочка" все исправит. Если мы просто реализуем кнопочку, Заказчик быстро поймет, что проблема не решена, она была глубже и поверхностное исправление только все испортило.

Но если мы выяснили, для чего нужна эта кнопочка, какую проблему хочет решить Заказчик с ее появлением, то мы, как тестировщики, на этапе тестирования требований сможем сказать "ага! А вот про это то вы и забыли! А что будет с этим отчетом?".

Иногда уточнение информации по вопросам тестировщика может сильно удивить. Если исходно требования додумали и додумали неправильно. Именно поэтому так важно начинать тестирование на ранних стадиях разработки новой фичи. И ничего не принимать на веру. Все уточнять и прояснять!

Кто, если не мы? Smile :)

Поэтому всегда при тестировании документации помните о проклятии знания. И задавайте вопросы. Не додумывайте, не надо. Пусть додумывают остальные. Задача тестировщика - найти корень зла. Для этого иногда приходится 5 раз задать вопрос "почему?", но оно того стоит!

четверг, 11 сентября 2014 г.

Отзывы участников тренинга "Онлайн-интенсив для начинающих тестировщиков"-4


Совсем быстро пролетела неделя очередного интенсивного обучения для начинающих.

Что это за курс? Это быстрый старт для тех, кто прочитал книжки и хочет применить знания. Тебя закидывают на реальный проект и целую неделю ты оттачиваешь на нем новые навыки под чутким присмотром тренера.

Попадают к нам на курс по-разному. Кто-то сам находит его на портале http://software-testing.ru/, а кого-то направляет старший по званию.
– Как вы узнали о курсе?
– Ген. директор сказал, что со следующей недели у меня начинается интенсивное обучение, так и узнал)

Smile :)

Каждые сутки интенсива посвящены отдельной теме:
  1. Тестирование в жизненном цикле ПО.
  2. Проектирование тестов: когда и как писать тест-кейсы и чек-листы
  3. Поиск, локализация и оформление багов.
  4. Классы эквивалентности и граничные значения.
  5. Как выполнить анализ требований и что делать, когда их нет.
  6. Как найти и проверить всю документацию на проекте.
  7. Зачем нужно регрессионное тестирование и как его оптимизировать.

К концу курса участники осваивают мастерство описания багов в баг-трекере и кунг-фу разбиения данных на классы эквивалентности.

Сколько времени занимает в день? 
Дофига Smile :). Но это окупается! Тяжело в учении — легко в бою. Рассчитывайте выделять от четырех часов в сутки на выполнение и доработку домашних заданий. Опыт показывает, что первые четыре дня — самые напряженные.

Насколько это полезно карьере?
Тем, кто уже работает тестировщиком, успел набить пару шишек и хочет знать про другие грабли, курс поможет упорядочить знания и резко улучшить навыки тест-дизайна и описания ошибок, ведь Синьор отличается от Джуниора именно тем, как он описывает ошибки!
Начинающие свою карьеру в тестировании за неделю интенсивной работы получат необходимые начальные знания в новой профессии и ответ на вопрос, а подойдет ли мне это.

Как я получу фидбэк при online-формате? 
Через скайп, комментарии к домашним заданиям и багам в Мантисе с утра и до глубокой ночи.

Пойму ли я материал?
Курс совмещает все виды обучения: теорию в лекциях и статьях, практику на реальном проекте, большое количество наглядных примеров, ссылки на литературу для самостоятельного изучения.

Какое время занятий?
Время вы выбираете сами! В системе дистанционного обучения выкладывается видеозапись с лекцией, а потом у вас есть 24 часа на выполнение задания. Когда именно его делать — решать вам!

Следующий курс стартует 22 сентября, а ниже отзывы участников только что закончившегося семидневного марафона:

Пустовалов Иван Витальевич:
Огромное спасибо преподавателям за отлично организованную практику! Курс помог стереть границу между теоретическими знаниями и их практическим применением и понять все прочитанное и изученное до него в совершенно ином ракурсе. Было напряженно, но интересно! В работе мы чувствовали себя не учениками, а коллегами )
Строкопытов Иван:
Что, ожидал, то и  получил. Практика на реальном проекте - бесценный опыт, общение  с профессионалами, их советы и наставление, да и просто хорошее настроение. Получил неискаженное представление о том, кто такой тестировщик, "с чем его едят". Не хватало времени в некоторых моментах, да и самодисциплины местами. Можно предложить добавить ЕЩЕ больше примеров и статей с конкретной теорией для выполнения заданий, потому что перелопачивать горы информации не всегда быстро и качественно, хотя и бывает полезно =)
Колесник Марина Анатольевна:
Прочитав описание, зарегистрировалась сразу.
Во-первых, дали "пощупать" настоящий проект.
Во-вторых, замечательные тренеры и атмосфера коучинга.
В-третьих, списать невозможно, поэтому вы будете делать и переделывать, пока не придут понимание с просветлением.
В-четвертых, Ольга и Павел вкладывают в каждого ученика гораздо больше, чем обещано в курсе. Может, именно поэтому уровень группы быстро растет, "гугл-дока" с домашками зеленеет, а на учебный багтрекер приходит осень [придете на курс - поймете о чем, я].
march-sunflower(c)
Титов Денис Дмитриевич, тестировщик ПО в компании "Документовед":
Ожидания от тренинга полностью оправдались. Да, он был интенсивный и требовал затрат сил и времени, но грамотный материал и квалифицированные тренеры сделали этот курс действительно необходимым для каждого начинающего тестировщика.
Журба Алина
Больше всего меня интересовали вопросы: - А что же на самом деле делает тестировщик? - А будет ли мне это интересно?
В результате занятий я не только нашла ответы на свои вопросы, я получила практический опыт работы над настоящим проектом и полностью переосмыслила теоретические знания, которые получила из книжек и статей. В дополнение теперь я знаю куда мне двигаться дальше, что еще нужно почитать и подтянуть.
Да, курс не просто называется «Интенсив». Нужно понимать, что работы будет много, а времени всегда мало.
И в конце я хотела бы поблагодарить наших тренеров Ольгу и Павла за практически круглосуточную помощь, интересные примеры и просто возможность получить развернутые объяснения от таких специалистов как они.
 Участник тренинга (отзыв анонимный)
Замечательный курс для тех, кто только начал работать в тестировании, или планирует в ближайшем будущем. Довольно сложно сформулировать все те чувства, которые возникли после прохождения курса, но они отлично вписываются в ""Вооу, это было круто!"". Те знания, которые уже были до начала курса, в процессе прохождения разложились по полочкам. Всегда было что-то новое и интересное. Спасибо тренерам за оперативную помощь в решении проблем, возникших при выполнении заданий.
Не надо размышлять на тему того, стоит или нет участвовать в интенсиве. Однозначно стоит!

Спасибо ребятам за отзывы!

Мы постарались учесть все пожелания и сделать следующий курс еще интереснее!
У вас еще есть шанс записаться самим или записать своих junior-ов Wink ;)

вторник, 12 августа 2014 г.

Где начинающим тестировщикам получать опыт?

Все начинающие тестировщики задаются вопросом - где набраться опыта? Где применять полученные знания? А ведь способов то много!


1. Работаем за еду, то есть за опыт


Самый лучший способ получения опыта - устроиться на работу. Но так как это "привет, капитан очевидность", то данный пункт будет явно не в начале списка. На работу ведь не берут как раз из-за отсутствия опыта. Что же делать?

Можно работать бесплатно, получая опыт и проходя обучение на реальном проекте. Такие проекты, как правило, open source и времени просят всего по 6+ часов в неделю. Можно совмещать с основной работой, получая драгоценный опыт и не теряя свой заработок.

Open source проект, которому нужны тестировщики - полезная ссылка.
Хомячки — проект, направленный специально на получение опыта начинающими.

Бесплатная практика в тестировании — тема на форуме, которая пополняется ссылками, там сейчас как раз open-source проект и «Хомячки».
Теория и практика для студентов — бесплатная школа в Питере, очная.

А еще можно написать в телеграмм Галине @qait007. Она работает как фрилансер и у нее бывают задачи для стажеров вида «проверить на таком-то телефоне». Вы тестируете, получаете фидбек и опыт. Ну а если хорошо себя покажете, то есть шанс самому начать зарабатывать на фрилансе =)

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

Регистрация по EMAIL


Нерушимое правило

Тестировщикам, особенно начинающим, важно всегда помнить следующий принцип:

Никогда не используйте "левые" email'ы для тестирования.

Не должно быть вымышленных email'ов или email'ов, которые не принадлежат вам, если система рассылает по ним почту. Потому что вы один раз зарегистрировались, а система будет слать туда письма.

Допустим, форма регистрации следующая:


Чтобы ее протестировать, надо ввести N уникальных значений почты:

  • Можно ли оставить имя пустым?
  • Можно ли ввести "Ольга"?
  • А "Олечка"?
  • А "Olga"?
  • А "Киселева-Иванова Раисия Ивановна"?
  • А "%:;*Ц;(*;?%"?
  • А можно ли создать пароль в 1 символ?
  • А можно ли ... ?
Статья не о принципах тест-дизайна, поэтому остановимся на данном списке. Но понятно, что он будет больше раз в 10. И каждый раз регистрировать новый email? Да ну-у-у-у... Если формат эл. почты не проверяется, можно и "123" туда записывать, пока тестируются другие поля. А если проверяется, то "123@mail.ru".

Чем это плохо?

  1. Система на каждый такой "левый" адрес высылает почту, то есть фактически спамит mail.ru по несуществующим адресам. Mail.ru банит такого отправителя как злостного спамера. А менеджер проекта уже отрывает руки тому вредителю, благодаря которому их занесли в черные списки. Вы же не хотите быть таким вредителем, правда? Smile :)
  2. Тексты писем, которые отправляются пользователям, тоже надо тестировать. Если все время вбивать в поле всякую фигню, почту мы в итоге не получим и не сможем ее проверить.
Поэтому неважно, работаете вы на проекте или просто учитесь (в рамках курса для тестировщиков или просто для самообразования выбрали сайт), не портите карму создателям, помните правило!

А разработчики программ должны, вообще говоря, учитывать то, что на тестовом стенде будут вбивать всяко-разное и подготовиться заранее. Например, отправлять все письма с тестового стенда на конкретную почту - и пусть тестировщики там тексты смотрят. А на production уже проверят, что письма идут туда, куда им было указано...

Но, если вы не знаете точно, есть такое или нет - следуйте правилу, не указывайте "левые" email`ы!

А что же тогда делать?

Страдать!


На самом деле не надо страдать, есть выход Smile :)
И даже не надо каждый раз заводить новую почту!


У gmail есть хинт - берете свою почту и добавляете к ней часть с плюсиком.

Например, myMail@gmail.com - это моя почта, так вот
  • myMail+1@gmail.com
  • myMail+2@gmail.com
  • myMail+10@gmail.com
  • maMail+test@gmail.com
будет приходит на myMail@gmail.com.

Пользуйтесь на здоровье и берегите нервы своих менеджеров! Smile :)

PS - Уже скоро стартует мой курс "Онлайн-интенсив для начинающих тестировщиков", в котором мы будем злыми менеджерами, отрывающими головы за невыполнение этого правила Wink ;) Записаться на курс 1-7 сентября.

среда, 21 мая 2014 г.

Проверка удаления данных - что происходит с системой?

Что самое важное, что мы проверяем во время первого тестирования системы, регрессионного или smoke на PROD-е?

Операции CRUD - create, edit, update, delete. Это базовая функциональность многих приложений. И, если она у вас есть, обязательно ее проверяйте!

А мы сейчас, как вы, наверное, уже догадались, остановимся на операции delete.


Как ее нужно тестировать? Что проверять?

  • Само удаление - минимальная проверка.
  • Влияние на связанные сущности - интеграционная проверка. Был ли с чем-то связан удаленный объект? Не перекосило ли зависимую карточку?
  • Логирование (если есть) - запись действия в лог файл.
То есть, допустим, я некий провайдер, который обслуживает определенный район. У меня в системе учета есть карточки моих клиентов, которым я делаю рассылку счетов и акций по email, и карточки зданий, в которых есть мой интернет.

Так вот, в здании А у меня подключен только Иванов. И вот он приходит ко мне и говорит "Не хочу больше у вас интернет брать, я уезжаю в Штаты на ПМЖ". Я его карточку удаляю (ну вот такая у меня система, нету списка "бывших", всех удалять надо).

Что мы проверяем? Мы проверяем, что карточка Иванова действительно удалилась, то есть:
  1. Выполняем действия на открытой заранее карточке (открываем ее в двух вкладках браузера, в одной удаляем, во второй пытаемся что-то сделать) - прямая проверка удаленной сущности.
  2. Пытаемся открыть карточку по прямой ссылке, которая вела туда раньше - тоже прямая проверка.
  3. Поиск по фамилии Иванов - если он был один в системе, должен вернуть пустоту. Это уже косвенная проверка зависимой сущности - списка клиентов. Удаленная карточка была связана со списком, в котором отображалась, так что проверяем его обязательно.
  4. Проверка карточки здания - если у нас не может быть в системе здания, к которому никто не привязан, оно должно удалиться. Если может, то должно корректно отображаться без ошибок. Тоже косвенная проверка зависимой сущности (карточка клиента была связана с карточкой здания)
  5. Проверка того, что следующая рассылка почты НЕ уйдет на почту удаленного клиента. А то вдруг мы список для рассылки в другом месте храним, получается еще одна сущность, зависимая от карточек клиентов. И тоже косвенная проверка, но мега важная! Потому что клиент, разорвавший с нами контракт, врядли порадуется пришедшему ему счету за интернет Smile :)
Ну и в завершение этого поста-напоминалки расскажу историю из жизни (не зря же здесь стоит тег "повсюду баги"). Вчера удалила свой твит, на который ответили или ретвитнули. Сегодня наслаждаюсь залипанием уведомления. Оно горит "у тебя есть одно", переключаюсь на уведомления, там ничего нового. Возвращаюсь обратно, снова появляется "у тебя есть уведомление", вот, можно посмотреть на 11-секундном видео.

Так что, ребята, баги - они повсюду! Иногда даже не надо специально искать Smile :)
Поэтому отмазка начинающих "не знаю, где применить свои навыки" ни разу не отмазка - да везде!

вторник, 4 марта 2014 г.

Всегда ли нужна ручная регрессия? Жизнь_боль как двигатель прогресса

Всегда ли нужна ручная регрессия?

Ответ простой - да, всегда. Тестировщик - последний фланг перед передачей продукта пользователю. Ему надо убедиться, что система ведет себя так, как планировалось, что ничего нигде не сломается при нажатии на одну лишь кнопку.

Автоматизация - это круто. Но даже если все тесты проходят, это не дает 100% гарантии, что и вручную все будет работать. Поэтому и нужна такая проверка. Представляем себя пользователем и идем проверять его сценарии. Вручную!


Но в каком объеме проводить ручную регрессию?

Я сейчас читаю Как тестируют в google и там сквозь всю книжку проходит мысль - Нас мало и это здорово! Нам постоянно не хватает людей. Но зато в условиях нехватки времени отсеивается все лишнее, инженеры сосредатачиваются только на том, что действительно важно и не тратят время на ненужные тесты. Дефицит порождает оптимизацию!

А нам сейчас тоже вечно не хватает людей. А может, оно и к лучшему? Smile :)

Хочу поведать о нашей оптимизации времени, которое тратится на регрессию. Которая возникла как раз из-за нехватки ресурсов!

Немного предисловия - мы разрабатываем продукт, кастомизируемый под каждого Заказчика. То есть есть main часть проекта и есть проекты Заказчиков. Когда разработчик или тестировщик хочет собрать билд, он собирает сначала main билд, потом уже какой-то конкретный.

У нас много автоматизированных тестов на уровне API, которые покрывают (или стараются покрывать) всю основную функциональность продукта. Про наши тесты я рассказывала на SQA Days 14, там можно посмотреть подробнее.

Однако наличие автотестов не освобождает от ручной регрессии. И вот почему:
  • Автотеста на баг может не быть - когда тестировщик проверяет вручную, он исследует продукт. У нас есть на это время как раз за счет автотестов, нам не надо каждый раз выполнять одни и те же нудные операции с разными комбинациями входных данных. Все это уже покрыто в тестах. Так что достаточно пройтись по основным позитивным сценариям, а дальше искать там, куда приведет вдохновение. Бывает, что находятся ошибки, а проверка кода показывает - такого теста еще нет.
  • Автотест есть, он даже проходит. А вручную падает! Тесты на уровне API - это хорошо и практично, но они проверяют работу сервера, а сломаться может клиент.
  • Проверка GUI - вытекает из прошлого пункта. На отображение GUI автотестов как раз нет (дорого и пока того не стоит). Баги там находятся очень редко, поэтому проще прокликать 1 раз в 3 недели, чем пытаться заавтоматизировать.
Таким образом, что нам дает автоматизация - вместо того, чтобы 2 полноценных дня тестировщик сидел и начинал тихо ненавидеть повторяющиеся из раза в раз обязательные сценарии, он занимается более интересными делами. Рутину на себя берет робот, а тестировщик тратит на нее пару часов, а дальше начинает исследовать. Что, конечно, гораздо интереснее!

Подход себя полностью оправдывал... До определенного момента. Что же случилось?

Итак, у нас есть около 3 Заказчиков и примерно столько же тестировщиков. Подходит время выпуска релиза, тестировщики делят регрессию и погнали! День потестили и начались поставки. С учетом всяких рисков - 2 дня, ок.

Вроде бы нормально. Однако время не стоит на месте и количество Заказчиков только растет. А тестировщиков, увы, уменьшается. Кто-то переходит в разработку. Кто-то во внедрение... И вот мы уже тратим по 3-4 дня на ручную (!) регрессию. При этом "мы" - это два замыленных тестировщика, которые пытаются все-все-все успеть и очень сожалеют, что им не хватает времени.

Так пришел дефицит. Мучились мы, мучились. Как-то надоело. Посмотрели внимательнее на наши проекты - а ведь во многом они похожи! Конечно, везде своя специфика, но общие части есть! Ага, хорошо.

А что у нас с выхлопом? Посмотрели мы на баги, которые заводятся на регрессии - а их почти нет! Бывает, конечно, что документацию кто-то не дописал или совсем все сломалось, но это фиксится тут же и просто делается перепоставка.

А вот отдельная задача - таких очень мало. По результатам регрессии заводится мало запросов на улучшение, мало ошибок, да и те в основном с минорным приоритетом. А времени тратится все больше и больше. И это с учетом автоматизации!

Похоже, пора принимать риски. И уделять тестированию меньше времени. Или пусть один тестирует много (весь день), а остальные регрессии будем проводить быстрее, по паре часов. Тогда вроде и все проверили, по специфике прошлись, и времени не так много потеряли.

Осталось решить, на каком билде проводить полную регрессию. Сначала мы приняли решение меняться. Сегодня на А, завтра на Б, так потихоньку и охват будет шире и глаз менее замылен!

Однако уже тогда зародилась идея о создании Демо-Заказчика. Тем более, что это нужно не только для регрессий, но и для демонстраций, так почему бы и нет? Почему бы не создать свой собственный, внутренний билд, который будет аккамулировать в себе все-все-все фичи Заказчиков?

Вот его и будем проверять! Сразу выявятся все косяки интеграции, если они есть. Сразу все фичи и проверим. А потом уже на остальный быстрый smoke + написание документации + подготовка сборки к поставке.

Конечно, воплощение идеи в реальность заняло какое-то время. Тогда еще это было примерно как "в первый раз в первый класс" и создание нового Заказчика занимало много времени. Ведь это делается не так часто. А тратить драгоценное время коллег, которые и так очень сильно загружены?

Какое-то время идея была идеей, но мы уже стремились к ней и внедрили метод "тестируем одного полностью, остальные ждут отмашки, потом приступают". Потом потихонечку-полегонечку мы начали воплощать эту идею в реальность...

А теперь Заказчиков стало еще больше и мы уже слабо представляем себе, как бы мы жили и дальше без нашего волшебного Демо-Заказчика!

Так что, как оказалось, дефицит и правда пошел нам на пользу. Хотя вначале всегда кажется наоборот, именно ситуации в стиле жизнь_боль двигают нас в правильном направлении Smile :)

Вот, например, когда я редко пишу определенную группу тестов, я молчу. Терплю и подчиняюсь всем их неудобствам. Но если я с ней работаю долго и мучительно, натыкаясь на какие-то косяки и тратя кучу времени на лишнюю работу, тогда рождаются статьи во внутренней вики "как это все грустно и печально и как бы мы могли сделать мир лучше". 

Пару таких идей мы уже внедрили и я даже не представляю уже, как мы жили без них! А если размышлять в терминах новых внедрений, то это уже столько сэкономленных сил и энергии! 

Потому что если что-то делаешь один раз, можно смириться. Но если из раза в раз ты повторяешь одно и то же, возникает желание это что-то заавтоматизировать. Или упростить. Ну хоть что-то с этим сделать! И делаем. А потом наслаждаемся результатами. Результатами оптимизации из-за дефицита!

Лень - двигатель прогреса, что ни говори!
А если вы сейчас очень страдает от дефицита тестировщиков, то задумайтесь, может, оно и к лучшему, а? Wink ;)

понедельник, 10 февраля 2014 г.

Позитивное и негативное тестирование

На своих курсах по обучению начинающих тестировщиков я предлагаю им написать позитивные и негативные тесты на:
  1. Функцию вычисления корня в калькуляторе.
  2. Работу с корзиной (добавление / удаление / редактирование) в интернет-магазине.
И вот что я заметила - с позитивным тестированием все хорошо, ребята придумывают разные виды тестов (потому что задача назвать несколько, а не перечислить все-все-все, поэтому, даже работая в команде, можно не повторяться). А вот с негативным у многих возникают проблемы, просят пояснить, потому что "ничего кроме ввода символов в числовое значение числа товаров в корзине да вычисления корня из отрицательного числа на ум не приходит".


Поэтому я решила написать поясняющую статью.

Позитивное тестирование

Тестировщик - это человек, который предоставляет команде информацию о продукте. Вот решили мы сделать тот же самый интернет-магазин, продумали концепцию, написали код и теперь задача тестирования - рассказать, работает ли все так, как нам нужно.

И конечно же, огромное значение имеют именно позитивные тесты. Если пользователь зайдет к нам на сайт и не сможет положить товар в корзину, то ему будет глубоко наплевать, что при вводе всяких спецсимволов или sql-инъекций мы пишем красивые сообщения об ошибке. 

Не работает основной сценарий, зачем дальше вообще что-то проверять? Так магазин и теряет пользователей.

вторник, 3 декабря 2013 г.

Мутационное тестирование

Что такое мутационное тестирование? Если вкратце, то это когда мы меняем в коде "равно" на "не равно" и смотрим, какие тесты отвалятся. То есть проверяют ли они то, что и должны.


Я, кстати, это определение услышала на #yatest (Конференция Яндекса Тестовая Среда). Хотя что-то знакомое, я его явно слышала и раньше, просто успела забыть, что же это такое.

Так вот, на конференции ребята справедливо заметили, что если его просто взять и применить, то будет ой-ей. Представляете, код гигантского модуля реверснуть?

Но, с другой стороны, сразу вспомнила историю из жизни, и вот что я хочу сказать — да, на большом проекте или большом модуле такое тестирование не применимо в полном объеме. Но взять кусочек и посмотреть на него с зеркальной стороны бывает ну о-о-о-очень полезно.

Есть у нас в системе некие правила, которые говорят "если А сработало, ничего не делай", то есть оставь систему в исходном состоянии. Ну. как если на кнопку "Отмена" нажать (турецкий маркет — это простой маркет! Только на турецком... (с) Тестовая среда).

Есть автотесты, которые написаны по этому правилу и честно проверяют, что состояние системы не изменилось. В начальном состоянии базы мы указываем поле n_1, зная по конфигу, что n_1  это артикул товара, например.

Уже тогда смущало то, что ничего не показывает, отработал тест как должен или он в принципе не сработал, вот состояние и не изменилось. Но ведь автотесты проверяет коллега, проводя ревью, это просматривается вручную, а раз все работает- то и ок. А делать проверку на то, что что-то случилось, "дорого" (по ресурсам), не стоит оно того. Ну ладно.

Понадобилось мне тут похожую проверку сделать. С нуля писать не хочется, захожу я в модуль, где она точно есть, копирую себе. Потом, чтобы докрутить настройки, лезу в конфиг модуля, откуда копировала и смотрю, а что там значит n_1? А там этого поля... Нет!

То есть сначала тесты были правильные, но в какой-то момент времени конфиг поменялся, а тесты - нет. Но они продолжали работать, показывая "зеленый" результат. Почему? Потому что уже ничего не проверяли. Не нашел поле? И ладно, значит, ничего не буду делать, состояние базы не меняется, а тест того и ждет.

Вот тут-то мы и задумались о мутационном тестировании. Поправить автотест и проверить близлежащие? Ага, а вдруг такие еще где-то есть? Надо ведь не последствия исправлять, а думать, как искоренить причину, чтобы такого не было. Да и как найти все последствия, вручную проверять?

Вот и сделали проверку: если параметра нет в конфиге, значит, автотест подозрительный, вряд ли он что-то проверяет. Столько тестов попадало сразу! Вот так результат. В процентном соотношении, конечно, не много, но нашлись такие и в других модулях.

Это заставило задуматься о том. что:
  1. Настройка слишком сложная, раз в ней так легко ошибиться, надо упрощать.
  2. Мутационное тестирование — это мега-полезно! Главное, применять по чуть-чуть, чтобы сразу увидеть результаты.
Нет, конечно, до конференции яндекса я не знала (или не помнила?) этого умного названия "мутационное тестирование". Но вот что-то гложет, гложет. И теперь я понимаю, что.

Ребята! Посмотрите внимательно на свои тесты! Если система большая, их уже накопилось довольно много. И, возможно, часть из них устарела, а вы даже и не в курсе. Посидите, подумайте, можно ли где-то включить инверсию и посмотреть, что получится. Упадут ли те тесты, которые вы ожидаете? Результаты могут вас удивить! Тесты могут остаться "зелеными". А вот это уже сигнал — что-то тут не так.

И я считаю, что "мутационное тестирование" — это как свежий взгляд на систему. Как знаете, нанимаешь нового сотрудника и смотришь, как он реагирует на продукт, что удобно, а что нет. Ведь ты уже привык, что это работает именно так и можешь даже не замечать, насколько это сложно и неудобно. Также и с тестами. Сам же писал! Значит, хорошие Smile :) Но иногда и для них нужен свежий взгляд, очень помогает...

пятница, 29 ноября 2013 г.

Нет доступа к коду? Проверяй все!

Недавно выступала на Education Day в нашей компании, рассказывала о тест-дизайне на примере треугольника. Какие тесты можно написать? В частности, можно логически прикинуть, что треугольники бывают разные - равнобедренные, равносторонние, разносторонние.

И в конце один разработчик спросил "А зачем нам проверять, равносторонний треугольник или разносторонний, если нам площадь нужна? Это же одинаковые тесты". Иногда - да. Но, когда мы тестируем черный ящик, мы никогда не знаем заранее, а программистам, как известно, верить нельзя Smile :)


Расскажу историю из жизни, подтвердившую эту теорию не далее как сегодня.

Есть у нас, значит, некий калькулятор. Не в смысле виндового калькулятора, а просто есть 8 разных атрибутов (а1, а2, а3... а8), у каждого свой вес и общий должен быть равен 100%.

Атрибутика имеет свои типы и мы хотим, чтобы было неважно, сколько у нас атрибутов типа а4, если у него вес 40, то он будет 40, будет у нас один а4, два или больше.

Такой вот алгоритм. В требованиях указываем эти веса, отдаем разработчику. Он выполняет, передает задачу мне.

Как будем тестировать? В моем случае - автоматизировать.

  • Сначала выполняем модульные тесты, дергаем каждый атрибут в отдельности и убеждаемся, что у калькулятор выдает вес данного конкретного атрибута. 
  • Потом проверяем, что если вобьем парочку, будет сумма. 
  • Потом проверяем, что сумма всех-всех-всех будет 100%. 
  • Потом проверяем, что если у нас 2 атрибута а4, то результат его вес учитывается 1 раз.
  • Потом проверяем негативные тесты (если нюансы в алгоритме).
Ну вот примерный список на алгоритм. А реализация алгоритма тоже разная. Можно создать разными способами, можно отредактировать, можно удалить атрибуты...

Но начать, конечно, надо с простых проверок алгоритма. И вот я начинаю писать тесты:
  • Только а1
  • Только а2
  • Только а3
Потом у меня возникает некий вопрос в реализации и я обращаюсь к разработчику:

Ольга Киселева: Привет! Слушай, имеет ли смысл тестировать вот это и это в обоих методах, или они примерно одинаковы, пишем основные тесты в одном месте, а во втором парочку базовых, чтобы не копипастить лишнего? Отличаются ли эти методы?
Разработчик: Помни что формула расчета полностью покрывается юнит-тестами. 
Разработчик: Не сильно, все рассчитывается в одном месте.

Упс, думаю я, то есть я тут начала лишнюю работу делать, раз алгоритм уже покрыт. И правда, сам алгоритм можно оставить на уровне unit-тестов. 

А мне уже ограничиться парой базовых тестов на алгоритм (потому что API-тесты на уровне выше и там уже все почти по-честному, надо все-таки проверить, что логика в принципе работает на этом уровне), а потом начать извращаться с реализацией...

Но интересно жеж! Дай-ка, думаю, посмотрю, что ты там понаписал. Благо, в JIRA есть у нас закладка Mercurial Commits и я могу отследить, что там разработчик накоммитил. Смотрю, ага! CalcTest.java - то, что надо.

Открываю, начинаю читать... И что я там вижу? Каких-то жалких 3 теста!!!

Один на одиночный атрибут а1, второй на сумму а1 + а2 + а3 и полная сумма, 100%.

Разговариваем дальше:

Ольга Киселева: и это ВСЕ? О_О
Ольга Киселева: 3 тестика?!
Ольга Киселева: то есть мне основные тесты в этот класс написать, да?  В API парочку, чтобы на верхнем уровне тоже поймать, да?
Разработчик: ага
Разработчик: много тестов не значит хорошо
Разработчик: эти 3 теста все покрывают))
Ольга Киселева: 3 тестика!!!
Ольга Киселева: ничего они не покрывают) у тебя четкие требования на каждый атрибут 1 число, а ты 1 число проверил и пошел сумму фигачить
Ольга Киселева: сумма тоже важна
Ольга Киселева: но отдельно каждое число
Ольга Киселева: отдельно сумма ]:)
Ольга Киселева: сама напишу)
Разработчик: пиши, но ваще сумма такая весчь, она слагается из кусочков

Вот так вот отдавать проверку алгоритма на откуп разработчика. А если бы у меня не было доступа к коду? Если бы я тестировала вручную, допустим? Вот поверишь, что весь алгоритм уже покрыт, не проверишь и все... 

А это запросто - разработчики у нас классные, продвинутые, код пишут хорошо, быстро и качественно. И unit-тесты пишут сами, а не из-под палки. И ничего. Так что я почти поверила, что мне алгоритм тестировать не нужно...

Нет, оно, конечно, работает. Но автотесты зачем нужны? Чтобы ты потом внес изменение и у тебя отъехали тесты, показав, что ты задел эту часть, этот модуль.

А ведь мы можем изменить код так, чтобы у нас ничего не упало. Например, перепутать коэффициенты а3 и а2. У нас написан тест на а1 + а2 + а3. И он пройдет, все же хорошо, от перемены мест слагаемых сумма не меняется.

Чувствуете, да? Мы вносим изменения, может быть, даже ломаем где-то алгоритм, и ни один тест не упал. Что это значит? Что наши изменения ничего не сломали, вручную можно даже не проверять. И только потом, на регрессии кто-нибудь случайно ткнет и обнаружит ошибку. А может, и не ткнет, покрыто ж автотестами...

Нерадостная перспективка Sad :(

Отсюда делаем вывод - разработчикам верить нельзя!! Особенно, когда они говорят "это полностью покрыто unit-тестами", ага, полностью... Вот сижу сейчас и наслаждаюсь, что могу на нижнем уровне нафигачить тестов, без всяких дополнительных параметров. А там ведь даже сам алгоритм можно и так повернуть, и сяк, и вот так! Ух! Так интересно Smile :) А они - 3 тестика...

вторник, 8 октября 2013 г.

В требованиях должна быть проблема, цель, задача! Решение вторично

Требования - вещь такая... То они есть, а то их и нет. Зависит от проекта.
Ну а если они вдруг и есть, то обычно описывают те функции, которые умеет выполнять продукт.



А, казалось бы, что еще надо то?
У Алана Купера в "Психбольнице" есть замечательный пример на тему того, почему это неправильно.

Для нашего зациклившегося на функциях мира мысль, наверное, непривычная - вы не достигните своих целей, используя набор функций как инструмент. Можно замечательно реализовать все функции из утвержденного набора и все равно попасть в беду. Для доказательства этого тезиса проектировщик взаимодейтсвий Скотт Мак-Грегор на своих занятиях использует такой вот замечательный тест.

Он описывает продукт с помощью перечня функций и просит слушателей записать, что это за продукт, как только они догадаются. Он перечисляет:
  1. Двигатель внутреннего сгорания.
  2. Четыре колеса с резиновыми покрышками.
  3. Трансмиссия, связывающая двигатель с ведущими колесами.
  4. Трансмиссия и двигатель смонтированы на ходовой части.
  5. Рулевое колесо.
На этот момент времени каждый слушатель уже записал, что это автомобиль,


но здесь Скотт перестает описывать особенности продукта и вместо этого называет пару задач потенциального пользователя:

6. Быстро и легко срезает траву.
7. На этом удобно сидеть.

На основании 5 функций-подсказок ни один слушатель не может догадаться, что это минитрактор-газонокосилка.


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

Ну что, тестировщики, кто правильно угадал продукт по одним только функциям?
Wink ;)

Но задумываемся ли мы об этом, когда привычно изучаем техническую документацию? Там же написано, как оно должно работать - значит, именно так и должно! А вот будет ли это самое "должно" нужно пользователям, уже дело десятое. Хотя должно бы быть первое. В конце концов, не для себя стараемся, а для потребителей.

И когда мы тестируем документацию, особенно пользовательскую, надо обращать внимание именно на то, насколько она проста и понятна, а также очевидна для пользователя. Что он сразу может найти в ней свою проблему и оттуда уже перейти по ссылочке на решение. Что он сразу видит свою цель и по ссылочке уже находит пути достижения цели... Ну и т.д.

Да даже если мы тестируем свою, техническую, документацию. Все равно. Остановитесь и задумайтесь - а кто наш пользователь? А как он будет с этим работать? А что ему вообще нужно, какие проблемы он будет решать при помощи нашего ПО? Есть в доке хоть слово об этом? Уже хорошо!

Кстати, в данной ситуации очень хорошо помогают варианты использования, по Коберну. Они включают в себя и краткую цель в названии, и способ ее достижения с точки зрения пользователя, и даже реакцию системы на все эти действия. Но. опять таки, помните, что это все равно решение проблемы, а решение вторично. Чтобы протестировать логику работы программы, в первую очередь нам нужно понимать - для чего, для каких целей она создана.

Не додумывайте автомобиль, читая требования к газонокосилке!

воскресенье, 11 августа 2013 г.

Как применять свои таланты в тестировании?

Читаю сейчас книжку "Сначала нарушьте все правила", интересные вещи узнаю, о себе в частности.

Например, вы знаете, что талант - это возобновляемая модель мышления, чувств или действий, которая может продуктивно использоваться?

И на самом деле, в каждом из нас есть много талантов. Но далеко не все они нужны нам в нашей должности, а значит, не могут быть продуктивно использованы.

Хотя, с другой стороны, вот если задуматься, "ага, вот у меня есть талант, как он может помочь?", то можно и найти ему применение в позитивном русле.

Вот например, самый бросающийся в глаза мой талант - графоманство. До этого блога у меня была своя тема на форуме, но в итоге я перевела свое стремление писать в более полезное русло - я стала писать на темы тестирования. При этом я стала записывать в блог новую информацию, а это мне очень помогало, когда я, например, писала свои статьи про SQL, то во время написания пошаговой инструкции я ясно видела свои пробелы в познаниях и сразу же их уточняла. И записывала, чтобы потом не забыть.

Это все хорошо, но как быть с работой? Я вот, почитав книжку, внезапно задумалась и поняла, что я пытаюсь это и в работе внедрить. Например, есть принцип "5 почему?", о котором очень здорово рассказала Наташа Руколь на конференции SQA Days 10. Но у меня не получается просто сидеть и медитировать - ага, вот бага нашлась, а почему она нашлась сейчас? Почему мы пропустили ее раньше? Врядли я к чему-нибудь приду, таким образом размышляя. Нет, бывает. конечно, но редко.

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

Такая вот мини-ретроспектива для самой себя. У кого-то есть талант прочитать, внутренне визуализировать и все, выход нашелся. Кому-то надо записать, чтобы структурировать информацию, кому-то зарисовать... Ищите в себе таланты, а потом смотрите, можно ли использовать их продуктивно на вашем месте работы. И даже если на первый взгляд нельзя, если копнуть поглубже, может быть и можно Smile :)

четверг, 8 августа 2013 г.

При оформлении бага критикуйте проблему, не людей!

Как оформлять баг-репорт?

Много копий сломано на эту тему, но я сейчас хочу поговорить даже не о всяких красивостях, а о словах, которые мы пишем.

Представьте себе, открываете Вы сайт, который Вам срочно срочно нужен для покупки очень важной вещи, например. Выбираете все, проходите все шаги и тут... Ошибка! Причем неизвестная. И давай по новой. Заполняя повторно все данные, тяжело оставаться равнодушным.

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

Эмоциональные ребята сразу поднимут крик "Ай-яй-яй! Ты что! Так нельзя, посмотри, какую багу ты тут сделал!! Позор тебе и порицание!"


Но, ребята - так ведь тоже нельзя.
Надо просто приложить ситуацию к себе - что будет, если к тебе придет друг \ сосед \ коллега и начнет в чем-то обвинять? Да даже если ты правда виноват, первая реакция на нападение - это защита. Хочется оправдаться, рассказать, почему именно так, а не иначе. Или вообще сказать, что "я не я, корова не моя".

А если коллега настаивает? Внутри появляется явное неодобрение этого самого коллеги. И работать бок о бок будет уже тяжело. У Вас остается в голове некий эмоциональный "якорь" - ага, вон Петя, он только ломать и может, а сейчас еще и оправдываться начнет, фи.

И у Пети будет такой же негативный якорь - О боже, опять этот Вася со своими претензиями. Иди попробуй лучше код написать, тут же не все так просто. Но разве этот будет слушать? Только обвинять и горазд...

Как будет происходить общение между Васей и Петей? Врядли сильно по-дружески... Конечно, обиды проходят, отношения налаживаются, но зачем вообще доводить до обид?

Есть отличное правило - когда оформляете баг-репорт, забудьте про эмоции. Никогда, никогда не обвиняйте ни в чем людей. Критикуйте не работу коллеги (ты сделал ошибку!), а саму проблему (у нас тут есть проблема).

Поверьте, от этого всем только лучше станет.

Написать этот блог-пост меня натолкнул такой интересный случай из жизни начинающих тестировщиков. Как известно, у Тани на курсе практического обучения ребята подключаются к реальным проектам и их тестируют.

Один студент написал ошибку, красивым языком, все правильно. Покритиковал слоган сайта, вот, так и так, по правилам русского языка - все хорошо! Но вот название... "Серьезная семантическая ошибка в тексте страницы во фразе..." И описание - "Установлен высокий приоритет, так как ошибка серьезная с точки зрения русского языка, и ее надо править по всему сайту. Однако, по влиянию на функционирование сайта, такие ошибки можно отнести к приоритету низкий."...

Кажется вполне очевидным, что ошибка (ошибка ли?) на самом деле явно не критическая, ведь сайт выпущен в PROD. И серьезную ошибку бы наверняка заметили. А слоган - так он так и задуман. И если сайт уже столько времени существует - это значит, что все хорошо, все по плану.

А критичный дефект - это когда надо бросать все свои текущие задачи и бежать исправлять дефект. Быстрее, быстрее! Пока пользователи не заметили.

А здесь разве тот случай? Ой сильно врядли... Интересной была реакция на feedback от группы разработки ("так и задумано"):

Кем задумано-то? Если те, кто задумывал, русского не знают, это не значит, что так и надо делать. Кому-то и мат в разговоре норма, значит, теперь все будем на мат переходить?

Читая такой комментарий, поневоле поражаешься, он настолько странно звучит!
Я уверена, что и сам автор комментария, увидя его спустя время, поймет, о чем идет речь.

Нельзя быть эмоциональным, когда пишешь комментарий к баге.
Это сложно осознать, когда ты увидел проблему, а тебе ее еще и завернули со статусом Won`t fix, хотя ты то уверен, что это ошибка, причем серьезная ошибка!!!

Конечно, хочется рвать и метать, бежать доказывать коллегам свою точку зрения. Ну так и бегите! Коллеги не звери, они все поймут Smile :)

А в комментарии уже пишем сухо, только факты. Знаю, что сложно, но сразу вспоминается собственный опыт.

Иногда приходится обращаться к ранее закрытым задачам - посмотреть, как задача решалась, какой был статус итд итп.

И вот представьте, открываешь ты задачу в баг-трекере, читаешь комментарии, чтобы понять, что там неправильно было и видишь эмоциональный комментарий в духе "Да как так можно!!! Кошмар и ужас!". И это кажется таким неестественным. Ведь это тогда ты был на эмоциях и так и писал. А сейчас уже столько времени прошло и тебе нужна именно информация, никак не эмоции.

Так что, на самом деле - все приходит с опытом. Наткнется такой пока еще студент (а ему тяжелее, в реале не прибежишь не поспоришь с разработчиками, ты ведь не в офисе сидишь, а удаленнно ДЗ выполняешь) на свой собственный комментарий спустя пару месяцев, увидит, как он неуместно смотрится, и перестанет так писать.

Я вот сейчас всегда себя одергиваю, вспоминая как раз такие моменты. Но иногда хочется же Smile :) Поэтому порой встречаешь небольшой участок флуда с веселыми смайликами в задаче. Это уже лучше - ну и что, что увидишь потом? Просто позитива добавится!

Так что позитив оставляем (но редко!! Баг-трекер не чатик, флудить постоянно там нельзя), негатив убираем. И все будут довольны, и отношения хорошие!

PS - комментарий студента приведен с согласия автора

 

понедельник, 10 июня 2013 г.

А у нас Летняя Школа, а у вас??

Всем большуший привет из солнечного Крыма и второй Летней Школы Тестировщиков!!!

Готовы погрузиться в наш мир? Smile :)

Итак, вопроса о том, "ехать или не ехать", даже не стояло. Да, я единственная из всех в компании, которая уже слушала тренинг, по мотивам которого подготовлена школа, но разве это причина отказываться от такого замечательного отдыха?!!


Мы решили пойти по уже проторенной тропинке и сняли все те же коттеджи, что и прошлый раз. И я думаю, что и в следующий раз мы снова приедем сюда же, к этим гостеприимным хозяевам, всегда готовым вам помочь...

Наталья и Алексей Баранцевы приехали раньше всех, чтобы встретить, обустроить и решить возникшие проблемы прямо на месте. Я прилетела за день, вечером 7-ого числа, но в школу попала вечером 8-ого. Не могла же я пропустить жареные кабачки crafted by Tatiana Zinchenko, в самом то деле?!

Таня, как организатор такси, ехала самая последняя, ну и я вместе с ней. Кстати, небольшой лайфхак, обмен валюты:
  • 2,42 покупка гривен за рубли
  • 2,5
Тут лучше тот курс, который больше, то есть 2,5. А то мы думали, думали, и подумали, что лучше тот, который меньше - если делить на 2,42, это выгоднее. А оказалось, что это не делить, это умножить на 0,242. Но это я так, на будущее для тех, кто приедет из России и будет думать, как же деньги менять.

И вот, мы приехали - как раз к ужину и знакомству. Во время дороги в Симферопле и Береговом был дождь, поэтому качельки, стоявшие во дворе, унесли под навес и надо было их вернуть.

А мы знали, что одна из участниц прошлой школы приехала "+1" - с мужем. И только что, стоя на кухне, она разрешила нам его поэкспуатировать как мужчину - в переносе качелек обратно.

И вот стоим мы во дворе и видим, как по лестнице к нам спускается парнишка.
Таня уверенно тыкает в него пальчиком и громко заявляет:

- Ты идешь с нами, нам твоя жена разрешила!!

Бедный парнишка аж споткнулся, а Наташа (которая Баранцева, а то у нас в этот раз много тезок, 2 Наташи, 2 Тани, и аж 3 Ани...) сказала:

- Не пугай его, он вообще не женат.
- Ну все, значит, скоро будет!

Тут Таня вовремя припомнила, что ровно год назад к ней в гости заезжала Дилара - перед школой заскочила, а та ее покормила заодно. Диларе неудобно было и она встала посуду мыть. Таня умилилась и сказала, что теперь обязана на ней жениться. Сама, конечно, не женилась, но вот прошел год и сейчас у Дилары с Эмилем свадьба вот-вот прогремит, познакомились в школе.

Теперь Таня считает, что, на кого она пальчиком покажет, найдет себе пару и через годик того, окольцуется Smile :)

Мне она, кстати, сказала, что я вообще никогда замуж не выйду, надо будет ей через годик посуду то помыть...

Так вот, парнишка, оправившись от шока, помог таки нам с качельками, на которые мы и уселись. Подтянулись остальные студенты и мы стали знакомиться. Причем рассказывая какой-нибудь каверзный факт помимо своей основной работы.


Например, один парнишка (тот самый, которому теперь жениться придется), сказал, что он одинок последнее время, имея в виду работу - работает единственным тестировщиком - но разве его кто-то слушал?

Мы поспешили его успокоить, ведь он приехал в летнюю школу и теперь он не одинок! И вообще пущай жену тут ищет, зря, чтоли, ехал...

Так прошлись по всем. Мне, кстати, даже не дали рассказать, кем я работаю, сказали, что получилась реклама собственной фирмы. Ну ваще, похвастаться не дадут...

Приятно порадовало, что половина участников - знакомые еще с прошлой школы лица.
Одна из наших тестировщиц приехала с парнем, который решил прямо на вечере встречи рассказать всем о том, что он - разработчик. Зря он так сразу Smile :)

Но ничего, еще живет...

В общем, весело было! А еще веселее было чуть позже. Представляете, в этот раз тут такие активные товарищи - мы собрались играть в свинтуса, постепенно нас собралось 8 человек.

А когда мы закончили и спустились вниз, увидели, что еще 8 веловек играет в Алиас. Круто! В прошлом году нас в среднем было 8-10, а тут вон как разошлись, мне нравится!

Ну а сегодня, сегодня у нас уже начались занятия.

Сегодня мы уже обсуждали понятие бага. В частности, мы прошлись по всем участникам, спрашивая о недавно найденном баге, желательно, интересном. А потом нам Алексей Баранцев рассказал, что он очень любит слушать такие, "сырые" рассказы о багах.

Потому что тестировщики - такой народ. Они изучают мир через аномалии. Это разработчики, увидят, что что-то пошло не так и у них мозг работает в направлении "а что надо сделать, чтобы работало правильно?". А у тестировщик послушает-послушает такие "сырые" истории (которые не были оформлены в статьи с готовыми выводами) и у него внутри включатся какие-то такие "крючочки" внутри - "а что, если и мне сделать также?".

А что еще можно сделать, чтобы сломать еще больше? В общем, у нас другое мышление - и это здорово, и это круто!

Но больше я вам ничего не скажу, сами на тренинг приходите Smile :)

Хотя нет, скажу, вечернее занятие уже прошло - и это было МЕГА КЛЕВО!!! Вот все, кто не приехал, кусайте локти, Наташа Руколь зажгла всех, ну и наша команда, само собой победила, мы же задроты те еще Smile :)

Вот, например, все нормальные люди в Крыму купаются, а мы... Мы книжки читаем, причем умные, а не абы что!

 
PS - За все фотографии благодарю нашего замечательного фотографа Екатерину Михееву!! Фотки классные!! Smile :)

среда, 29 мая 2013 г.

Тестирование простого негативного сценария

Не далее чем вчера прочитала о том, что читать про простые, "не заковыристые" баги скучно и неинтересно, и вообще потеря времени. И не далее чем сегодня убедилась в том, что как раз о простых вещах никогда не стоит забывать Smile :)

Не всегда фикс в бранче - это фикс бага. Иногда это просто некая фича, которая нужна "здесь и сейчас". И вот мы имеем некую функцию, которая умеет работать со списком. То есть мы передали ей на вход список элементов, которые мы хотим изменить и она их модифицирует.

Сейчас эта функция очень пригодилась - надо было написать патч, временно изменяющий поведение системы, прогнать в нем эту функцию и вернуть все обратно.

Задачка элементарнейшая, поправить которую - ну 5 минут от силы! В коде... Но как-то так получилось, что она заняла у меня много времени. Ведь это поправить 5 минут, а проверить?

Надо поднять билд без патча, подготовить данные, создать отдельную (желательно) БД, потом поднять патч, проверить функцию... И, кстати, делается это все не зря, потому что первый раз я поправила не то, что надо было ))

Но неважно, когда вот так тратишь время на одну задачу, особенно ту, которая кажется очень простой, начинаешь немного нервничать. И можешь что-то упустить. Вот, допустим, сама функция уже была протестирована ранее - то, что она в принципе работает.

Соответственно, мне надо только проверить свою кастомизацию. Подняла патч, прогнала функцию, элементы изменились? Изменились! Счастье счастье, радость радость! Нет бы в логи посмотреть...

Патч был передан для интеграционного тестирования на приближенные к реальным данные. И через пару часов мы почувствовали подвох...

Обратимся еще раз к условию - на вход мы передаем список элементов, которые мы хотим модифицировать. Какие самые главные позитивные и негативные сценарии возникают у нас в голове?

+ Передать список элементов, проверить, что они модифицировались.
-  Проверить, что элементы, не попавшие в список, не были модифицированы.

Причем функция такая не одна, и на другие я точно помню, были подобные негативные тесты - а что, если элемента в списке нет, будет ли он изменен?

Но угадайте с 3-х раз, на какую функцию не был написан такой тест и где в итоге обнаружилась бага? Smile :)

Причем по данным бага некритичная, модификация нигде ничего не ломает. Просто выполняется дольше, чем ожидалось...

Вот читаешь, читаешь всякие книжки по тайм-менеджменту и прочим радостям жизни. Но самые главный закон - СЯДЬ И ПОДУМАЙ!

Я его, кстати, запомнила со своей первой встречи с MSTC
Там еще выступала Третьяк Анастасия, так зажигательно выступала, что до сих пор помню!

А так здорово сформулированный девиз до сих пор повторяю, особенно после очередного подтверждения, как же он все-таки прав.

Неважно, что на вас давят сроки. Да, надо вот прям сейчас, в течении пары часов сделать, проверить и отдать. Но не позволяйте времени брать верх. Позвольте себе расслабиться и посмотреть на проблему немного со стороны - а все ли я учел, а где тут еще может выстрелить?

Для этого очень помогает пройтись мысленно по пользовательскому сценарию. Вот именно представить себя пользователем - как я буду это использовать? Что я буду нажимать? Сколько времени это займет? А то меня и написание инструкции не спасло, я смотрела на нее и видела данные, даже не думая о времени. Не торопитесь. Вы все успеете Smile :)

Позвольте себе сесть и подумать. Все ли сделано правильно, на что это еще могло повлиять и как?

пятница, 10 мая 2013 г.

TEST IT! Тестируем функции сохранения данных, часть 1

Коллеги, всем привет!! На связи TEST IT! Smile :)


И сегодня с Вами снова я, сменная ведущая Киселева Ольга с новой рубрикой "тестируем вместе". И тестируем мы сайт https://www.foodnation.ru/, ныне http://www.foodpanda.ru/

Напоминаю, что мы уже немного с ним познакомились в предыдущих статьях.
Полный список всего, протестированного на данном сайте, можно почитать тут:
Может быть, Вы помните, но я когда-то говорила о том, что пора завязывать в каждом сообщении тестировать одно и то же - проверять поля на граничные значения. Мне кажется, мы все этому уже научились. Давайте пойдем дальше.
 
Рассмотрим сегодня (если успеем) функцию сохранения.
 
Итак, предусловие - я зарегистрировалась на сайте под инициалами "Olga O". Благо при регистрации не отправляется письмо на электронную почту и мы можем сразу же залогиниться. Ну, оно и правильно, на самом деле - сами подумайте, человек пришел заказать пиццу, еще не знает, хочет ли оставаться на сайте надолго - заставишь вводить эл почту и чекать ее, можешь потерять клиента.
 
Но мы сейчас не о том. Итак! Вошли в "Мой профиль"
 
 
 
Давайте изменим свою фамилию. Например, на "D" - вводим новую фамилию и нажимаем "Сохранить".
 
 
Итак, персональная информация успешно изменен! Кхм... Подозрительное, конечно, сообщение. Уверена, подразумевалось "профиль изменен", но с учетом местарасположения надписи... В общем, мы поймали еще один минорный баг - "информация изменена", а не "изменен"! Но постойте-ка...
 
Мы же в русской версии сайта, давайте поменяем фамилию на русскую.
 
 
 
Ага, все так же - "успешно изменен". А правда изменен?
  • Выйти из системы
  • Снова войти
Да, действительно, информация не изменилась.
 
Ладно, перейдем к адресам. "Мои адреса - добавить адрес". Сразу же ловим очередную багу локализации, станцию метро разработчики забыли перевести Smile :)
 
 
Нажимаем "Создать", ничего не заполняя - тест на то, что звездочки на форме нарисованы не просто так. Ага, еще одна бага локализации
 
 
А теперь - внимание!
 
Всегда помните, особенно когда у Вас многопользовательское приложение - пользователь не будет идти четко по вашему "желаемому" сценарию. Вы можете протестировать, как он добавляет адрес, потом второй...
 
Но! Всегда помните, что последовательность действий может быть чуть ли не рандомная.
Поэтому я сейчас, аки пользователь, увидев "унылую картинку" (слишком много полей для заполнения", закрываю форму "добавить адрес" и возвращаюсь в мой профиль.
 
После чего изменяю вновь свою фамилию (ну лаааааадно, укажу настоящую - возможные мысли пользователя в этот момент)
 
И нажимаю "Сохранить"... ОМГ, ЧТО ЭТО?!!! О_О
 

А теперь еще раз внимание - самый важный сегодняший урок - увидев страшное, не надо бегом бежать к разработчику и разводить панику. Наша задача - четко локализовать проблему.

Вот что вы будете писать в баг-репорте? Программа падает, когда я изменяю фамилию и сохраняю? Да что вы? Мы пробовали выше - все сохраняется обалденно. Проблема в раскладке? Нет, мы сохраняли и на англ, и на русском (а если напоролись на этот баг случайно, то самое время проверить, проблема в сохранении фамилии или нет).

Как нам понять, в чем тогда проблема? Вспоминаем наши действия:
  1. Открываем адреса
  2. Нажимаем "Добавить новый"
  3. Нажимаем "Сохранить", видим нелепое сообщение об ошибке.
  4. Закрываем
  5. Возвращаемся в профиль
  6. Меняем фамилию
  7. Сохраняем
Ага, повторяется! Но как-то дофига шагов воспроизведения. Попробуем уменьшить? Как мы знаем, просто сохранение фамилию тут не прокатит, значит, адреса обязательны. Но нужен ли 3 пункт?
  1. Открываем адреса
  2. Нажимаем "Добавить новый"
  3. Передумали, закрываем
  4. Возвращаемся в профиль
  5. Меняем фамилию
  6. Сохраняем
Повторяется!

А 5 пункт, так ли он нужен?
  1. Открываем адреса
  2. Нажимаем "Добавить новый"
  3. Передумали, закрываем
  4. Возвращаемся в профиль
  5. Нажимаем "Сохранить"
Повторяется! Ну вот, теперь мы уже знаем, что писать в баг-репорте, какие шаги для воспроизведения. Причем, заметьте, минимальные шаги, а не полная и беспорядочная версия "ой, оно упало, я точно не понял, почему".
 
Но... Все ли так просто? Это ведь страничка в браузере... Повторится ли бага не в ИЕ? А мы с вами наверняка знаем, что тестировать надо в первую очередь в ИЕ, потому что если мы где-то и налетим на кроссбраузерные баги, то на 90% это будет именно в ИЕ.
 
Итак, для полной картины открываем mozilla и пытаемся воспроизвести там:
  1. Открываем сайт.
  2. Заходим в свой профиль.
  3. Открываем закладку "адреса".
  4. Нажимаем "Добавить новый"
  5. Передумали, закрываем, ничего не трогая.
  6. Возвращаемся на закладку "мой профиль"
  7. Нажимаем "Сохранить", ничего не меняя

Ага!
 

В фаерфоксе все не так страшно, хотя, конечно же, все равно криво работает - зачем пользователю видеть такую страницу, он же уже один раз нажал "Сохранить".

Но теперь мы точно значем, что писать в баг-репорте!

----------------------------------------------------------------------------------------------
Версия браузера - IE 10

Шаги для воспроизведения:
  1. Открываем сайт. 
  2. Заходим в свой профиль.
  3. Открываем закладку "адреса".
  4. Нажимаем "Добавить новый"
  5. Передумали, закрываем, ничего не трогая.
  6. Возвращаемся на закладку "мой профиль"
  7. Нажимаем "Сохранить", ничего не меняя
Ожидаемый результат
 
Увидим надпись "Изменения сохранены"
 
Фактический результат
 
Видим рис 1
 
Дополнительная информация
 
В других браузерах (например, фф 21 версии) мы видим рис 2.
То есть уже более читабельную версию, но она все равно не нужна, мы просто хотим остаться в профиле и увидеть надпись "изменения сохранены"
---------------------------------------------------------------------------------------------- 
 
Поздравляю, ребята! Вот сколько багов нашли, одну даже серьезную. Пожалуй, на сегодня хватит. Продолжим через неделю! 
 
На этом наше время подходит к концу, поэтому я прощаюсь с вами. До встречи, ребята! 
Мы ждем ваших писем - пишите на sprosi.testera@gmail.com, задавайте вопросы, рассказывайте истории, грустные и не очень, делитесь опытом - мы рады всем!

А, возможно, вы тоже хотите, чтобы Ваш сайт протестировали "на глазах у всех" - пишите нам! Мы не гарантируем, что сможем протестировать все сайты, которые нам пришлют, но, если протестируем, обязательно отпишемся вам о результатах. А немного свежего взгляда ведь никому не помешает, правда? Wink ;)

Пока, увидимся через неделю!