Архивы для Ноябрь, 2010

«Хорошие» идеи, которые могут плохо закончиться

Казалось бы абсурдным, что хорошая идея может принести вред. Но это то, что чаще всего случается, когда подобные идеи появляются в вашем проекте. Они способны запросто «убить» ваш проект, причем «смерть» будет медленной и мучительной. Давайте рассмотрим на примере. Предположим на секунду, что в вашем проекте все протекает без проблем: вы успеваете завершить все задачи в срок, уровень качества кода на высоте, демонстрации в конце итерации приводят заказчика в восторг. Довольно смелое предположение, не правда ли? ;) И тут у кого-то из членов команды появляется она, «хорошая» идея:

  • Почему бы нам не перейти на новую версию Hibernate?
  • Было бы здорово начать использовать NoSql базу данных для хранения определенной информации?
  • А может сделаем показ панели со статистикой на AJAX?

Парадокс в том, что идея то «хорошая», потому что плохие идеи отсеялись бы командой или менеджером. И вот автор идеи презентует ее команде и просит «пару дней» для ее реализации. Так как на проекте все хорошо, то это время выделяется. И тут начинаются проблемы. Изменения оказываются не так просты, новые версии библиотек отказываются взаимодействовать с существующими, появляются скрытые дефекты, реализация идеи начинает отрицательно влиять на существующую функциональность. И, если вовремя не остановиться, эти проблемы будут приводить к незаконченным итерациям, пропущенным релизам, цунами из дефектов. Как распознать такую идею? Это очень просто – она обычно не несет в себе никакой выгоды с точки зрения требуемой функциональности системы. Легко сказать, но не так легко сделать. Поэтому запомните несколько шаблонов для быстрого определения «хороших» идей:

  • «Было бы классно, если бы …». Вместо слова «классно» можно подставить синонимы наподобие «прикольно», «здорово», «клево». Эти слова заранее намекают нам на опасность всего, сказанного далее.
  • «На прошлой неделе библиотека XXX выпустила новую версию. Мне кажется нам нужно на нее перейти!». Обычно в таких предложениях не указывается конкретная причина перехода, к примеру, исправление важного дефекта или новая удобная функциональность для старых проблем.
  • «Так как я буду заниматься рефакторингом модуля XXX, заодно внесу изменения в YYY.». Такие изменения не вносятся «заодно», потому что раздувают объем задачи и увеличивают риск ее невыполнения в срок.
  • «Технология XXX выглядит просто супер! А в сочетании с новым языком YYY она может нам очень сильно пригодиться!». Не всегда новые технологии работают так, как это описано в документации или презентации их возможностей. На практике у них почти всегда оказывается множество ограничений и проблем.
  • «Я вот тут поразмыслил и пришел к выводу, что нам нужно сделать несколько изменений в архитектуре …». Изменения в архитектуре могут быть сделаны необдуманно, не видя общей картины происходящего, определенных особенностей системы. Размышляя только в контексте одной проблемы, можно придти к необдуманным решениям.

Опасайтесь «хороших» идей, многие из них способны разрушить ваш проект!

Презентация с семинара «Записки о рисках»

Как мы и обещали, выкладываем презентацию с семинара Сергея Поволяшко «Записки о рисках», проходившего 27 ноября в Киеве:

Также напоминаем, что 18 декабря пройдет полноценный тренинг на тему «Управление рисками в IT проектах». Цель тренинга – глубже рассмотреть принципы и методики управления рисками, а также возможности по их применению на практике. Практическая ориентированность тренинга позволяет не только освоить теоретический материал, но и проверить его эффективность. Это необходимо для профессионалов, технических и проектных менеджеров и тех, кто хочет ими стать. Полезен тренинг будет и для опытных руководителей, которые открыты для получения знаний и улучшения своих навыков. Подробности можно узнать из детальной программы тренинга. Регистрация уже открыта и продлится до 13 декабря. Стоимость участия 1000 гривен за участника (обед включен). При регистрации от трех человек скидка 10%. Всем участникам семинара предоставляется скидка 15%. Торопитесь, количество мест ограничено!

Отчет о мероприятиях 27 ноября

27 ноября в Киеве состоялось множество интересных мероприятий: мастер-класс Владимира Агафонкина «Современная разработка с JavaScript», конференция MageConf & ZFConf Ukraine, тренинг «Игры в IT» от Александра Орлова и Славы Панкратова. Мы также внесли свой вклад и провели сразу два мероприятия: тренинг «Тестирование веб приложений с Selenium» и семинар «Записки о рисках».

Тренинг по Selenium как обычно собрал аудиторию с различным уровнем опыта и знаний. Очень радует постоянный интерес к этому инструменту, который позволяет быстро и качественно автоматизировать тестирование веб приложений. Участники смогли убедиться в этом на практике, предварительно ознакомившись со всем спектром возможностей инструмента. Тренинг содержит огромное количество полезного материала, поэтому участникам будет чем заняться в качестве «домашнего задания». Техники, подходы, дизайн решения, интеграция с другими инструментами – это то, что делает мир Selenium таким интересным и насыщенным. Надеюсь, посещение данного тренинга сильно поможет участникам в их работе.

GL-Club любезно согласился на проведение открытого семинара Сергея Поволяшко «Записки о рисках». Участие в семинаре было бесплатным по предварительной регистрации. Как и ожидалось, зарегистрировалось очень много людей, больше, чем мог вместить GL-Club. По опыту проведения подобных мероприятий мы знали, что придут далеко не все из зарегистрировавшихся. Поэтому мы пригласили большее количество человек. Статистика полностью подтвердилась и на семинар пришло чуть больше половины приглашенных. Люди, для чего вы тогда регистрируетесь? Ведь на ваше место мог бы придти действительно заинтересованный человек! Те, кто все таки пришел, чувствовали себя комфортно, места хватало всем. Семинар проходил очень живо, было много общения с аудиторией. По результатам ответов на вопросы к участникам Сергей разыграл несколько призов. Это были две книжки Хенрика Книберга «Scrum and XP from trenches» в переводе на русский язык, а также главный приз – посещение любого нашего тренинга со скидкой 80%. Его выиграл Виталий Ткаченко. Поздравляем Виталия и ждем на наших тренингах. Для тех, кто не попал на семинар или просто заинтересовался темой семинара, мы проведем полноценный тренинг «Управление рисками в IT проектах» в декабре. Окончательно дата проведения еще не назначена, но вероятнее всего это будет 18 декабря. Для участников семинара предоставляется скидка 15%.

Небольшой фотоотчет с семинара:

Записки о рисках

В продолжение темы рисков мы решили организовать еще одно мероприятие. Это будет открытый семинар нашего тренера Сергея Поволяшко под названием «Записки о рисках». Пройдет данное мероприятие в Киеве в субботу 27 ноября с 11:00 до 14:00. С одной стороны, область знаний по управлению рисками хорошо описана и понятна. Но давайте посмотрим шире, немного со стороны, на разнообразие практик, наблюдений, связанных с рисками. В общем, записки о рисках:

  • Записка 1. Поразмышляем что же такое риск. И риск ли это вообще? И какие около рисковые (смежные) области задействованы? Сравним риск и факт. Поговорим о шаблонах поведения. Рассмотрим пользу исторических данных.
  • Записка 2. Методологический экскурс. Рассмотрим какие подходы рекомендуют разные методологии. И поштурмуем вопрос о том, почему в Agile/SCRUM ничего не говорится об управлении рисками.
  • Записка 3. Визуальное управление рисками. Рассмотрим простой и понятный инструментарий представления информации о рисках, ясность ситуации за секунды. 100%-ная понятность информации.
  • Важное дополнение – призы!

Сергей имеет 15 лет стажа в IT. Работал по нескольким IT специальностям (разработчик, системный администратор, тестировщик). Он имеет многолетний практический опыт эффективного применения разнообразных методологий и инженерных практик на стыке интересов проектной команды, компании и заказчика. Этим опытом он хочет поделиться с вами! Приходите, будет интересно!

Мероприятие абсолютно бесплатное, но по предварительной регистрации. Место проведения – GL-Club. Время проведения – 27 ноября с 11:00 до 14:00. Торопитесь, количество мест ограничено!

А вы все еще моете посуду руками?

Вы, наверное, задаетесь вопросом при чем тут посуда. Просто мне пришла в голому мысль о том, что процесс мытья посуды очень похож на процесс ручного тестирования. Первое сходство – никто не любит это делать. Я еще ни разу не встречал человека, который бы с упоением мыл посуду или с неподдельным удовольствием каждый день проходил вручную одни и те же тестовые сценарии. И я поддерживаю эту точку зрения, пересиливая себя при необходимости выполнять описанные действия. Второе сходство – работа это неблагодарная. Тестировщиков, осуществляющих ручное тестирование, часто называют «обезьянками», «мануальщиками» и прочими обидными словами. С посудой все так же, только терминология изменяется – «посудомойка», «домохозяйка», и т.д. Третье сходство заключается в том, что как бы кто не относился, а делать это все равно нужно. Посуда имеет свойство очень быстро заканчиваться, а без нее жить становится тяжело. Без тестирования тоже тяжело представить проект, количество функциональности все время растет и изменения неизбежны, а хочется быть уверенным в том, что продукт по прежнему удовлетворяет требованиям.

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

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

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

Должны ли тестировщики уметь программировать?

Часто мне задают вопрос, должны ли уметь программировать тестировщики. Поставим вопрос немного шире: «Должны ли тестировщики обладать техническими навыками и какими?». В основном, мы руководствуемся в ответе на этот вопрос требованиями работодателей, потому что они устанавливают «правила игры». Если ты с ними не согласен, то тебе тяжело найти работу. Анализ требований на рынке показывает, что от тестировщика действительно требуются технические навыки. В основном это работа с базами данных, инструментами для автоматизации тестирования, понимание веб-протоколов и, зачастую, знание некоторых языков программирования. Получается, что тестировщик должен сделать полшага в направлении специальности разработчика, но при этом обладать кучей навыков и знаний, специфичных для тестирования. Не слишком ли много для одного человека? Обычно делать несколько разных вещей действительно хорошо могут только талантливые люди, да и то если им это нравится. Проблема в том, что их не так много. Я бы сказал, что их предельно мало для того, чтобы покрыть потребности IT компаний.

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

А как же инструменты для автоматизации тестирования? На мой взгляд, это требование не является столь критичным и далеко не всегда требует навыков программирования. У большинства подобных инструментов есть часть для работы непосредственно с тестовыми сценариями (запись, запуск, отладка и прочие функции), часть для интеграции сценариев с приложением (некий исполнитель команд, контроллер приложения и т.д.) и часть для «программирования» (среда для написания сценариев вручную, отладки сценариев, IDE). Так вот, мне видится основная работа тестировщика с первой частью. Конечно, было бы очень здорово, если бы тестировщик также неплохо разбирался в оставшихся частях, но это совершенно не критично. Ведь в команде есть технические специалисты, которые могут помочь с выполнением такого рода задач. Я бы выделил отдельную роль «технический инженер по вопросам тестирования» (software technical engineer). Эту роль может выполнять любой член команды, который обладает достаточными навыками и знаниями. Это может быть выделенный человек в команде на помощь тестировщикам (часто в компаниях такая роль называется «эксперт по автоматизации тестирования»). Важно помнить, что разделение ролей накладывает разделение требований к кандидату на каждую роль.

Я встречал подобные ответы на вопрос об умении программировать у тестировщика: «Я считаю, что да, каждый в нашем деле должен уметь программировать. Надо уметь автоматизировать свои рутинные задачи.». Мне кажется, что гораздо важнее уметь анализировать собственную работу и находить места, требующие автоматизации, и поднимать вопрос об автоматизации этих мест в команде. Многие просто повторяют одни и те же десятки шагов каждый день и даже не задумываются, что все могло бы быть проще, быстрее и надежнее. А кто будет автоматизировать – это очень сильно зависит от вашей команды. На написание shell-скрипта или скрипта на Python у сисадмина или разработчика может уйти на порядок меньше времени, чем у тестировщика. При этом вероятность ошибки в нем будет на порядок ниже. Зачем это разработчикам или сисадминам? Да потому что помощь одному звену (часто самому слабому звену) помогает оптимизировать весь процесс целиком и сделать его гораздо более эффективным. А это нужно всей команде, вне зависимости от ролей и обязанностей.

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

Магия автоматизации тестирования

На тренингах, посвященных организации процесса тестирования в Agile или тестированию с использованием Selenium, я всегда призываю участников к максимально возможной автоматизации процесса тестирования. Причем, речь идет не только о функциональных или приемочных тестах. Нужно пытаться автоматизировать и другие активности. В качестве примера я привожу тестирование пользовательского интерфейса на отсутствие проблем с отображением в браузере (смещение элементов, отсутствие или недоступность важных частей интерфейса, наплывы текста и т.д.).

Для тестирования подобных проблем можно воспользоваться возможностью Selenium снимать изображение экрана в момент работы с приложением. Для реализации понадобится «эталонная» база данных, которая содержит необходимые данные для работы всех страниц приложения. Ее стоит продумать очень тщательно и включить как можно больше примеров реальных данных, которые влияют на отображение вашего приложения в браузере. Вторым шагом нужно построить карту вашего сайта, чтобы понять какие страницы есть на нем и как к ним можно доступиться. У карт сайта есть еще одно очень полезное свойство – они позволяют освежить видение приложение, вспомнить основные функции и потоки управления. Когда у вас есть карта сайта, нужно написать автоматизированный скрипт на Selenium, который будет на каждом важном переходе сохранять изображение экрана под определенным именем в файловую систему. Я рекомендую для этого использовать режим RC, потому что вы получаете возможность легко осуществлять файловые операции с помощью функций языка программирования. Какой язык выбрать – дело ваше, но это необязательно должен быть язык, на котором написано само приложение.

В результате выполнения указанных шагов вы получите набор картинок. Обязательно просмотрите их вручную. Обратите внимание на неожиданные элементы, они могут появиться из-за специфики браузера или других внешних факторов. Поправьте окружение, чтобы избежать появления нежелательных эффектов. В итоге, вы получили шаблон отображения вашего сайта. Сохраните его в системе контроля версий вместе с Selenium сценариями. Теперь после любого изменения в коде вашего приложения, вы можете запустить сценарии снова и сравнить полученные картинки с имеющимся шаблоном. Те картинки, которые расходятся с шаблоном требуют ручного анализа, в результате которого будет найдена проблема или же обновлен шаблон. Этот процесс очень легко автоматизировать и запускать в нужные моменты (завершение задачи, подготовка к концу итерации, подготовка к релизу и другие). Что это вам дает? Это дает вам возможность быстро понять на чем нужно сосредоточить внимание. Если ваше приложение имеет более 100 страниц, то вероятность изменений во всех страницах очень мала (когда были глобальные изменения в дизайне или функциональности). Обычно изменения будут касаться малого количества страниц, что сильно экономит ваше время.

Я описал только базовое решение. Его можно расширять дальше, делая все более полезным и удобным. К примеру, вместо полного сравнения картинок можно выделять и конфигурировать определенные регионы, представляющие интерес. Это даст возможность избежать проблем с рекламой, баннерами и прочими динамическими элементами. Также можно добавить работу со всеми поддерживаемыми браузерами, что позволит добиваться одинакового отображения в каждом из них. Чтобы не писать все с нуля, можно воспользоваться одним из существующих решений, к примеру СSS Test на Python.

Но существует еще много других способов автоматизации тестирования отображения страниц. С помощью Selenium у вас есть доступ к HTML коду страницы, а значит вы можете отправить его на проверку существующему сервису или же собственной реализации. Валидный HTML не гарантирует вам корректного отображения, но убережет от глупых ошибок и позволит контролировать общие правила по дизайну. Точно также можно поступить и с CSS. Это даст вам дополнительный порог защиты от ошибок.

В работе с изображениями можно пойти дальше. Для этого нужно получить изображения экрана при различных настройках стилей отображения (прозрачный текст, разный цвет фона, четкие границы для картинок и т.д.) и проводить автоматический анализ. Благодаря этому анализу можно разложить картинку на составные части, выделив границы элементов, текст, картинки, элементы управления браузера. Michael Tamm разработал собственную библиотеку Fighting Layout Bugs для подобного анализа. Подробнее об использовании библиотеки и побудивших причинах ее написания он рассказал на конференции QCon. Исходные файлы библиотеки доступны и это хорошая стартовая точка, с возможностью внесения своих специфических изменений.

Как видите, автоматизированное тестирование отображения вашего сайте – это не миф, а доступная реальность. Качество и отдача от такого тестирование – это уже дело ваших рук и умений! Магия только начинается…

Планы по проведению тренингов на ноябрь

В эти выходные (30 октября) прошел очередной тренинг «Continuous Integration на практике». К сожалению, инженерным практикам на проектах уделяется не так много времени как хотелось бы. От этого страдает качество кода, а соответственно и заказчик. Только применением Scrum или Kanban делу не поможешь. Я искренне надеюсь, что участники прошедшего тренинга получили массу новых знаний и практических умений, чтобы улучшить ситуацию на своем проекте.

На конец ноября мы запланировали еще два открытых тренинга. Первый из них «Kanban для управления проектами» пройдет 20 ноября и будет посвящен набирающей популярность Agile методологии Kanban. На каждом тренинге участники так или иначе затрагивают тему использования Kanban для управления проектами, но обычно не хватает времени рассказать детально и ответить на все вопросы. Поэтому мы решили организовать отдельный тренинг, на котором будет рассматриваться Kanban со всех сторон, с детальным рассказом об основных принципах и правилах, множеством практических заданий и интересных игр. Вы сможете узнать как, когда и зачем применять Kanban, как комбинировать его с другими методологиями, какие неверные причины перехода могут сделать ситуацию только хуже и много другой полезной информации. Этот тренинг будет проводиться впервые. Торопитесь стать первыми участниками! Регистрация уже открыта и продлится до 15 ноября. Стоимость участия 1000 гривен (обед включен). Количество мест ограничено.

В последнее время происходило много событий в мире Selenium: наконец-то Selenium объединился с WebDriver и перешел на новую архитектуру, по исследованиям на рынке предложений по работе Selenium пользуется большим спросом, Sauce Labs усиленно продвигает Selenium, возобновились релизы и т.д. На фоне этой активности мы посчитали необходимым провести очередной тренинг Тестирование веб приложений с Selenium 27 ноября в Киеве. Этот тренинг является одним из самых популярных наших тренингов. Мы каждый раз обновляем его наиболее свежей и актуальной информацией, чтобы участники смогли использовать передовые разработки в данной области. Этот тренинг будет интересен не только тестировщикам, но и менеджерам проектов, а также разработчикам. Selenium – это не только инструмент тестирования, но также инструмент для работы по автоматизации активностей, связанных с веб-приложениями (сбор данных, повторяющиеся процедуры, демонстрации и прочие). На тренинге вы сможете самостоятельно испытать Selenium на практической части и получить советы от тренера по применению его на своем проекте. Регистрация на тренинг уже открыта и продлится до 23 ноября. Стоимость участия 1000 гривен (обед включен). Торопитесь, количество мест ограничено!

Ждем вас на наших тренингах!