Архивы для Февраль, 2012

Отчет о конференции Selenium Camp 2012

Selenium Camp 2012

В конце прошлой недели прошла вторая по счету конференция Selenium Camp. В этот раз конференция растянулась на два дня – 24 и 25 февраля. Первый день был целиком посвящен обучению. Мы организовали 3 потока мастер-классов и тренингов на целый день для более 50 участников. Программа получилась достаточно насыщенной: «Написание тестов с нуля на базе WebDriver и Java», «Selenium против AJAX», «Пробуем Selenium на практике», «Миграция с Selenium 1.0 на Selenium 2.0 (aka WebDriver)», «Тестирование веб приложений с WebDriver/Selenium».

Вечером того же дня ребята из automated-testing.info организовали посиделки тестировщиков. В качестве приглашенных докладчиков выступили David Burns и Алексей Баранцев. Было очень интересно послушать историю о развитии Selenium/WebDriver и получить множество полезных советов от людей, которые напрямую занимаются разработкой этого замечательного инструмента.

В это же время велась активная подготовка зала в БЦ «Парус» для основного дня конференции. А принять в гости предстояло около 350 участников. Зимой в Киеве очень мало площадок готовы принять комфортно такое количество людей. Мы приложили максимум усилий, чтобы все чувствовали себя свободно. Поэтому пришлось ограничить количество участников и отказать многим из тех, кто пытался зарегистрироваться в последнюю неделю.

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

Я открыл конференцию словами благодарности докладчикам за проделанную работу (а им пришлось пройти 4 этапа ревью), волонтерам за огромную помощь в подготовке конференции и организаторам за их огромные усилия по организации мероприятия. Украинские компании практически не поддерживают мероприятия для тестировщиков – в этот раз нас поддержала только компания SysIQ (наш постоянный партнер по различным конференциям), за что ей огромное спасибо. Я также рассказал о составе пакета участника и продемонстрировал карточки благодарности докладчикам. Это теперь обязательный атрибут каждой нашей конференции. Участники могут выбрать понравившиеся им доклады и написать слова благодарности докладчику. Вы не представляете как это приятно и сколько сил дает выступающим!

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

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

Мы старались как могли сбалансировать нагрузку в программе между тремя потоками. Но все равно маленькую и уютную сцену для мастер-классов, рассчитанную на 50 человек, то и дело участники норовили расширить дополнительными стульями. Не переживайте, все доклады записывались на видео и будут выложены на сайте конференции в течение нескольких недель. Маленькая сцена пригодилась еще раз ближе к вечеру – на ней устроили серию Lighting Talks. Нашлось 5 желающих выступить с мини-докладами. Это очень здорово, когда у участников есть чем поделиться.

У меня самого в этот день было 2 доклада, поэтому мне удалось побывать далеко не на всех выступлениях. Из увиденного очень понравились доклады David Burns «The road to a standard» и «Selenium против AJAX» от Алексея Баранцева. David рассказал о текущем состоянии дел в продвижении WebDriver в качестве стандарта W3C. Это очень важное направление, потому что оно может революционным образом облегчить жизнь всех, кто тестирует приложения в браузерах. Производители будут сами заботиться о поддержании стандарта, что сделает тестирование проще, быстрее и стабильнее. Леша отлично рассказал технический доклад о тонкостях и особенностях работы WebDriver с AJAX приложениями. Огромное количество полезных советов, идей, известных проблем и обходных маневров к ним. Отличный доклад!

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

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

Незаметно подошел момент закрытия конференции. Кроме традиционных слов благодарности докладчикам, волонтерам, организаторам, спонсорам и всем присутствующим, у нас был заготовлен розыгрыш призов. Это было чрезвычайно весело и интересно. Мы заранее огласили, что только заполненные анкеты обратной связи смогут участвовать в розыгрыше призов. Некоторые участники не вняли нашей просьбе, поэтому не всегда приз уходил с первой попытки. В общей сложности мы разыграли 3 книги, Amazon Kindle Touch и 1 сертификат на посещение любого тренинга от XP Injection. Компания SysIQ вдобавок разыграла 25 прикольных футболок, билет на конференцию SQADays 11, сертификат на курсы английского языка и лицензию на Intellij IDEA.

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

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

Мы будем рады увидеть всех в следующем году на Selenium Camp 2013 и на других наших мероприятиях!

Новый тренинг «Практики эффективного, но экономного проектирования» 13-14 апреля в Киеве

Дмитрий Ефименко

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

13-14 апреля в Киеве Дима представит свой тренинг «Практики эффективного, но экономного проектирования». В этот тренинг он постарался включить весь свой опыт и знания на тему проектирования программных продуктов, полученный за многие годы работы в IT.

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

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

Кому он нужен? Тому, кого достало частое изменение требований, ошибки в приоритетах, метания заказчика и «трудности перевода» между заказчиком и командой.

Регистрация на тренинг уже открыта. Стоимость участия составляет 1700 гривен (обед включен). Тренинг проходит в 2 дня. Торопитесь, количество участников ограничено!

Несколько вещей, которые я выучил из проекта IdeaStrike

Прежде всего, я должен сказать, что команда Code52 делает потрясающую работу. Это очень оригинальная инициатива, классные идеи и продуктивная команда. Каждый раз, когда они объявляют о начале нового проекта, во мне просыпается «продуктовая зависть» :) . Следите за их блогом и гитхаб аккаунтом, чтобы быть в курсе событий.

Мое внимание, на этот раз привлек проект IdeaStrike. Это аналог известного продукта uservoice для Open Souce (OS) коммюнити. Как всегда, первый релиз был сделан очень быстро (за неделю) и мне было очень интересно посмотреть, что внутри? Поэтому, я клонировал их репозиторий и провел небольшую хак-сессию. Я потратил пару часов, и теперь хочу поделится некоторыми интересными находками.

Билд скрипты – маленькие и понятные

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

@echo Off
set config=%1
if "%config%" == "" (
   set config=Debug
)

%WINDIR%\Microsoft.NET\Framework\v4.0.30319\msbuild build.proj /p:Configuration="%config%" /t:AppHarbor /m /v:M /fl /flp:LogFile=msbuild.log;Verbosity=Normal /nr:false

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

Использование NuGet пакетов, без добавления из в SCM

Я крайне удивился, как быстро был склонирован репозиторий! Как выяснилось, папка packages была оригинально пуста. Как известно, библиотеки зависимостей, это основной «груз», который препядствует быстрому клонированию. Как это может быть? Как я сказал в пункте.1, как только я запустил билд скрипт, то все пакеты загрузились автоматически. Как выяснилось, что фича NuGet’a, которая позволяет работать с зависимостями, без необходимости добавлять из под контроль версий. Это очень круто, особенно для больших проектов, где клонирование и бранчи могут стать более затяжной операцией. Детали реализации такого повередения, описаны в документации на NuGet сайте.

Развертывание базы данных приложения, на первом запуске

IdeaStrike использует EF 4.3 Beta 1, через Code First подход. EF Code First также включает в себя классную фичу, под названием Migrations (Миграции). Это именно та фича, которой так недоставало EF Code First, когда я первый раз пробывае его в деле. Мы опеределяем Context, DbConfiguration класс и миграционные скрипты (которые представляют собой просто C# код) и при инициализации приложения, вызываем:

private static void DoMigrations()
{
    var settings = new IdeastrikeDbConfiguration();
    var migrator = new DbMigrator(settings);
    migrator.Update();
}

Схема базы данных, будет развернута автоматически, при старте приложения.

Социальный логин с Janrain

Когда я кликнул «Sign In» кнопку, то увидел приятный диалог, с которым можно было зайти на сайт, используя свой текущий социальный аккаунт.


social login

JanRain оказался очень крутым решением. Я помню, когда-то я пытался найти, что-то подобное для ASP.NET MVC и был очень разочарован тем фактом, что не нашел ничего стоящего. Для всех существующих решений, требовалось изучать OAuth протокол и писать код. JanRain делает всю грязную работу. Как только юзер авторизован, вызывается POST по заданному URL, который содержит специальный токен. По этому токену, можно запросить все необходимые детали, по данному пользователю, как имя, електронный адрес и т.д. (смотри LoginModule.cs). У них чесные планы для хобби проектов и блоггеров.

Bootstrap для CSS и HTML

Bootstrap это не самое новое и не уникальное решение на данный момент, я как минимум знаю еще несколько хороших CSS/HTML фреймворков. Но IdeaStrike доказывает в очередной раз – нет смысла изобретать колесо. Использование результатов работы людей, которые умнее вас, это истинное правило прагматичного разработчика.

«Будующий Я», пожайлуйста, никогда больше не начинай свое приложение HTML/CSS с чистого листа, полученный результат все равно будет – фигня. Bootstrap, великолепное решение для всякого рода проектов и прототипов. Принимая во внимание количество «наблюдателей» и «форков» проекта на гитхабе, я могу ожидать новых улучшений и фич, в ближайшем будущем.

Nancy как веб фреймворк

Я слышал про Nancy несколько раз, но до этого мне не доводилось его потрогать. Для меня Nancy это просто альтернативная реальность, по сравнению с ASP.NET MVC. Не сложно понять, что делает код. Не сложно его изменять. Все довольно прозрачно: опеределяете HTTP verb, раут и действие, как лямбду. Самый главный класс в Nancy это Module, вся логика модуля расположенна в конструкторе:

public FeatureModule(IIdeaRepository ideas, IFeatureRepository features, IUserRepository users)
    : base("/idea")
{
    _ideas = ideas;
    _features = features;

    this.RequiresAuthentication();

    Post["/{idea}/feature"] = _ =>
    {
        int id = _.Idea;
        var feature = new Feature
                        {
                            Time = DateTime.UtcNow,
                            Text = Request.Form.feature,
                            User = Context.GetCurrentUser(users)
                        };
        _features.Add(id, feature);

        return Response.AsRedirect(string.Format("/idea/{0}#{1}", id, feature.Id));
    };
}

Приложения Nancy могут хостится, как ASP.NET / WCF / SelfHosted, а также на любом хосте поддерживающи OWIN. Доступны несколько View Engines (включая Razor). Больше делатей на Nancy гитхаб аккаунте.

Заключение

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

NancyFX, вероятно станет следующим фреймворком, который я буду изучать, так как мне уже пора выходить из комфортной зоны ASP.NET MVC. Я продолжаю следить за развитием IdeaStrike и уже сделал несколько важных пул реквестов. Надеюсь у проекта интересное будущее!

Оригинал статьи – http://www.beletsky.net/2012/02/few-things-i-learned-from-ideastrike.html.

Рубрика «Полезное чтиво». Выпуск 23

полезное чтиво

На прошлой неделе выпуск рубрики «Полезного чтива» не увидел свет, поэтому на этой неделе выпуск получился толще и вкуснее. Налетайте:

И немного видео для просмотра:

Читайте и набирайтесь новых знаний!

Что общего у холодильника и CMMI (ISO, PMBOK, …)

Давно собирался написать рецензию на статью моей коллеги «Мифы о CMMI, или кому и зачем она нужна». Причем, основной идеей рецензии хотелось сделать известное выражение о пользовании, например, бытовыми приборами – «если ничего не помогает, то прочитайте же наконец инструкцию». Как-то долго не складывалось, но холодильник сдвинул дело.

Так вот, начну с холодильника. Буквально неделю назад у моих родителей случилась какая-то беда с холодильником – мигает лампочкой – о помощи просит, и морозилка плохо морозит. Поставили регулятор на более низкую температуру – не помогает, та же картина. Холодильник, к слову сказать, относительно новый и хороший. Позвали [горе]мастера. Пришел, посмотрел, подул щеки, поморщил лоб, и сказал со знанием дела – холодильник мол плохой, и ремонтировать его тяжело, скорее всего выбрасывать надо, и вообще негодяи производители делают технику на срок службы 5-7 лет, чтобы, значит, на потребителях наживаться.

Не буду томить перипетиями, перейду сразу к финалу. Оказывается, если почитать инструкцию, то при пониженной температуре окружающей среды (дело было в феврале, на улице минус 20-25С, отопление не справляется, в квартире плюс 16-17С), нужно поставить регулятор температуры на более высокую температуру, и все должно быть хорошо. Так и сделали, холодильник тут же отблагодарил, отключив лампочку помощи. НО, в инструкцию-то вчиталась мама, а не [горе]мастер, которому по долгу службы надо бы знать «физику процесса»!

Вот и напрашиваются параллели:

  • Холодильник – хорошая, но зачастую недопонятая система, то ли CMMI, то ли PMBOK, то ли другая подобная.
  • Инструкция – собственно документ, описывающий систему, который надо бы читать, и иногда больше одного раза. Но что поделаешь, мы же не в сказке, напрягаться надо для понимания и корректного применения с пользой для дела. Как и рекомендовано в статье, любую сложную систему нужно начинать понимать с прочтения более легковесных, доступных материалов. Сам так делаю, помогает :) .
  • Производитель – орган, который придумал и поддерживает систему. Конечно он в том числе и денег хочет заработать, так же как и производитель холодильника. Но великая-то цель – применение на практике консолидированного опыта предыдущих поколений специалистов, написанного кстати пОтом и кровью. Иначе зачем нам холодильник? Давайте лед с северного полюса возить.
  • Лампочка с регулятором – необходимость и способы «заточить» (по-научному – tailoring) систему под ваши нужды, чтоб она никого не напрягала, работала и была полезна.
  • [Горе]мастер – без обид, это мы, делающие суждения о «работает-неработает», «плохая-хорошая» та или иная система, не разобравшись зачем она, какая к ней инструкция, и как ее правильно настроить.
  • Мама – это тоже мы, но, соответственно, разобравшиеся… И заслуживающие профессионального уважения.

Да, статья и комментарии к ней здесь, рекомендую потратить 10 минут, оно того стоит.

Успешное выступление на онлайн конференции Auto ConfeT&QA 2012

онлайн конференция Auto ConfeT&QA

13-15 февраля с 17 до 19 часов по московскому времени проходила онлайн конференция для специалистов по автоматизации тестирования – Auto ConfeT&QA. Организаторы собрали докладчиков из России, Украины и Беларуси, которые представили на суд слушателей 10 докладов. Уровень организации был достаточно высоким, докладчикам помогали подготовиться к выступлению, репетировали с ними доклады, делали ревью презентаций. В результате все выступили достойно.

Я тоже принимал участие в качестве докладчика с докладом «TDD c помощью функциональных тестов на WebDriver». Я давно хотел выступить на данную тему и как раз представилась неплохая возможность это сделать. TDD (Test Driven Development) является популярным подходом среди разработчиков. Сначала пишется тест, а только потом на основании этого теста пишется реализация. Эта практика дает много преимуществ, позволяя сосредоточиться на небольшом аспекте функциональности и автоматизировать проверку правильности его реализации. Таким образом, разработчик сразу думает о вариантах использования и реализует минимальный необходимый функционал.

TDD можно применять не только на уровне модульных тестов, но и на уровне функционального тестирования. Это дает возможность задуматься о структуре и особенностях функциональности еще до ее реализации. Вам не придется мучиться в попытках протестировать приложение, которое не задумывалось для тестирования (сложные локаторы, непонятная структура страниц, запутанные связки элементов). В качестве сопутствующего эффекта, TDD позволяет сократить время на ручную проверку разработчикам и автоматизировать 100% функциональных тестов.

Многим понятны преимущества TDD, но они не знают с чего начать. Некоторым кажется, что написание теста до появления реализации вообще невозможно. В своем докладе я рассказал не только о преимуществах и особенностях данного подхода, но и на примерах продемонстрировал, как работать с TDD на практике. Были рассмотрены варианты распределения ролей, техники написания тестов и особенности их использования. В качестве основного инструмента для тестирования использован WebDriver.

Доступен слайдкаст доклада:

Так как я показывал живую демонстрацию, то посмотреть доклад в полном объеме можно на видеозаписи:

Лично мне понравилось несколько докладов. Отлично выступил Алексей Баранцев на тему «Разработка стратегии автоматизации». Леша очень опытный докладчик, особенно в онлайн режиме. Доклад был насыщен полезными советами, которые помогут многим начать автоматизировать и снизить риски провала.

Яркий и живой доклад получился также у Ольги Киселевой, которая выступала первый раз. У нее была очень спорная тема «Можно ли писать автотесты на родном языке?», которая вызвала много споров и дискуссий. Но сам доклад никого не оставил равнодушным.

Еще я для себя отметил доклад «Обходные пути в автоматизированом тестировании», с которым выступал Дмитрий Жарий. Не всегда получается жить в идеальном мире и к нему приходится приспосабливаться. Именно о таких способах обходить препятствия и рассказывалось в докладе. Просто и со вкусом.

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

Организаторы проводили голосование среди участников за лучший доклад на конференции. Результаты опубликовали сегодня. С отрывом в один голос я занял второе место после Алексея Баранцева. Леша благородно отказался от приза по причине причастности к организации конференции. В результате, первый приз достался мне – игровая приставка Xbox 360 + сенсор Kinect. Я несказанно рад этому факту! Значит, мои усилия были интересны людям и приносят пользу. А теперь мое выступление принесло пользу и мне лично. ;)

Я буду с удовольствием выступать в очередной онлайн конференции из этой серии – Chief ConfeT&QA. На этот раз с докладом «Жизнь без тестировщиков: миф или реальность?». Не подумайте, я не против тестировщиков. Наоборот – я за то, чтобы они занимались интересной работой и приносили большую пользу проекту. Подробности можно будет услышать на моем выступлении.

Участники задавали достаточно много вопросов после доклада. Ниже вы можете найти мои ответы:

Вопрос: Какими средствами CI докладчик пользуется (советует пользоваться) наряду с TDD?

Лично я уже давно почти везде пользуюсь TeamCity (http://www.jetbrains.com/teamcity/). Отличный UI, множество уникальных фичей, отличная интеграция с различными IDE, поддержка для практически всех известных мне инструментов, классная архитектура и т.д. Бесплатная версия подойдет для большей части проектов и не вызовет проблем или нехватки чего-то. На втором месте Jenkins (http://jenkins-ci.org/). Основной аргумент за него – бесплатный с огромным сообществом, а это значит куча плагинов под все, что только можно придумать. Но UI достаточно беден и нужно конфигурировать плагины самостоятельно.

Вопрос: А если ошибки возникнут потом при эксплуатации? Те тесты, которые не предусмотрели в «чек-листе», согласованном с клиентом?

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

Вопрос: По факту все же получается, что тест пишется паралельно с реализацией?

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

Вопрос: А какую test management system посоветуете?

В идеале – никакую. Я уже говорил о дублировании усилий на поддержку тестов и тест кейсов. Я вижу этот процесс как полную автоматизацию, поэтому предлагаю избегать использования test management систем. Они заведомо склоняют нас к дублированию.

Вопрос: Авто тесты лучше писать до разработки приложения или после и кто должен за это отвечать?

Конечно же их лучше писать до разработки. В этом и есть подход TDD. Таким образом вы сможете получить весь спектр преимуществ, о которых я упоминал в докладе.

Вопрос: Что делать если UI достался от legacy проекта?

Legacy код будет проблематичным для всех, включая тестировщиков. Но TDD заставляет работать над проблемами всей командой. Разработчики будут помогать победить проблемы. Вам придется разработать с течением времени тонкую прослойку над вашим нетестируемым UI и в будущем будет на порядок легче.

Вопрос: Опиши детальнее возможности инструмента testdox.

TestDox – это очень простой, но удобный инструмент. Он ставится как плагин к IDE и позволяет разбирать названия тестовых методов на слова. Таким образом можно включать гораздо больше полезных данных в название теста, причем писать просто на английском языке, избегая особенностей языка программирования (подчеркиваний, camel case и прочих). Поддерживается редактирование, список тестов, создание новых тестов. Таким образом, данный плагин приближает вас на шаг к тестам в качестве документации. Остается только подключить мозг. :)

Вопрос: Что ты думаешь по поводу BDD?

BDD – отличная практика, которая является подмножеством TDD. Вместо тестов рекомендуется начинать с поведенческих шаблонов приложения, причем оформлять их в человеческом виде (в основном предложениями английского языка). Не всегда дополнительные расходы времени на специализированный инструмент действительно оправданы. Если никто со стороны бизнеса не заглядывает в эти тесты, то возможно стоит перейти на уровень технических тестов с DSL.

Вопрос: Прокомментируй еще раз рекомендации с чего начать.

Начать стоит с того, чтобы осознать четко для себя зачем и почему стоит работать по TDD. После этого стоит донести свои мысли и идеи до всех членов команды. Причем не то, что вы собираетесь работать по TDD, а то, какие преимущества могли бы получить все от этого. Если у вас получится это сделать, то все будут хотеть применить TDD. А потом дело лишь в стратегии. Вам нужно найти удобный момент и начать внедрение. Поддержка команды поможет вам сделать это достаточно быстро (я имею ввиду начать). А дальше у вас будет освобождаться все больше времени за счет 100% автоматизации новой функциональности и вы сможете укрепить свои позиции. И не забудьте подготовиться морально к тому, что придется поломать мозг, как свой так и коллег. :) Удачи!

Microsoft SWIT 2012 в Киеве

22 и 23 марта в Киеве пройдёт крупнейшая техническая конференция Microsoft в Украине – Microsoft SWIT 2012, на которой в течение двух дней будет представлено более 50 докладов по новейшим технологиям. Доклады будут проводиться ведущими экспертами международного уровня, с которыми будет организована возможность интенсивного общения.

Благодаря посещению конференции участники смогут

  • Одними из первых узнать детальную информацию о развитии, настоящем и будущем всего спектра технологий Microsoft.
  • Задать детальные вопросы и обсудить с сотрудниками Microsoft и ведущими индустриальными экспертами представленные анонсы, доклады, продукты и программы.
  • Посещая доклады,  узнать наиболее современные лучшие практики, решения и способы оптимизации использования всего спектра технологий Microsoft.
  • Общаясь на докладах и в зоне «спроси эксперта» установить полезные контакты с ведущими специалистами Microsoft, индустриальными экспертами, представителями партнеров Microsoft, а также коллегами по индустрии.
  • Посещая партнерскую выставку, ознакомиться с решениями ведущих ИТ-компаний Украины и установить деловые контакты для решения производственных задач.

Это знаковое мероприятие в Восточной Европе и каждый IT-шник, причастный к продуктам Microsoft просто обязан его посетить.

В рамках конференции будут покрыты следующие темы

  • Облачные вычисления;
  • Языки и инструменты разработки ПО;
  • Архитектура приложений и систем;
  • Мобильная платформа Windows Phone;
  • Информационная безопасность;
  • Управление ИТ-инфраструктурой;
  • Технологии виртуализации;
  • Бизнес-решения;

Один из тренеров нашего центра, Александр Белецкий, выступит на конференции с докладом «ASP.NET MVC 4 для разработчиков мобильных приложений». С некоторых пор, мобильные платформы являются неотемлимой частью нашей жизни. Актуальность разработки под них растет каждый день. Отвечая современным требования веб-фреймворк компании Майкрософт ASP.NET MVC версии 4 включил ряд расширений, облегчающий и расширяющий арсенал инструментов разбработки для мобильных устройств.

На докладе будет рассмотрена текущая реализация ASP.NET MVC 4 CTP (Community Technical Preview), которая доступна для скачивания и использования, в том числе: расширения темплейтов проектов, шаблон проекта для мобильного устройства, jQuery Mobile, режимы екранов (Display Modes), CSS3 media queries.

Двухдневная программа конференции включает

  • Пленарный доклад о стратегии развития технологий Microsoft;
  • Более 50 докладов, сгруппированных по трекам;
  • Лабораторные классы hands-on-lab по новым программным разработкам;
  • Круглые столы с участием ведущих экспертов Microsoft и индустрии;
  • Зону «Спроси эксперта»;
  • Выставку новинок и решений от ведущих технологических компаний Украины;
  • Демо-зону стартапов BizSpark и не только.

Программа конференции поделена на 4 потока. Это позволит каждому участнику найти для себя доклады по интересам.

Регистрация на конференцию уже открыта. Подробная информация и расписание докладов будут доступны на официальном сайте конференции – http://www.msswit.in.ua. До встречи!

Использование ASP.NET MVC валидационного механизма, без ASP.NET MVC

В своей практике использования фреймворка ASP.NET MVC, я очень привык к DataAnnotations аттрибутам, для валидации классов модели. В самом деле, это отличный подход. Аннотируешь модель соответвующими аттрибутами, всю остальную работу делает фреймворк. Простым вызовом ModelState.IsValid внутри екшина, можно узнать состояние модели.

Во время реализации одной из фич, для candidate я подумал, что мне нужна похожая валидационная модель, для моих классов, но без использования самого MVC фреймворка. А именно, для класса типа Github.cs я хочу знать, «сконфигурирован» он или нет. И «сконфигурирован» == «валиден», в моем контексте. Вместо того, чтобы писать кастомный код, который бы проверял все свойства на предмет заполненности, я хотел сделать тоже, что делает ASP.NET MVC, через DataAnnotations. Самое крутое, что это оказалось возможным, причем сделать это очень просто.

Простое начало

Предположим, есть такая модель:

public class SimpleModel
{
	[Required]
	public string SomeProperty { get; set; }

	[Range(0,50)]
	public int SomeAnotherProperty { get; set; }
}
    

Если, наша цель, просто получить ответ «да» или «нет» (валидна или нет), мы можем сделать такую функцию:

public bool ValidateSimpleModel(SimpleModel validate)
{
	return Validator.TryValidateObject(validate, new ValidationContext(validate, null, null), null);
}
    

Validator это статический класс, находящийся в неймспейсе DataAnnotations. Он принимает целевой объект, валидационный контекст и коллекцию результатов валидации. Но в силу того, что он лишь «пытается» выполнить валидацию, почти все эти параметры могуть быть null.

Использование результатов валидации

Если нужна более специфическая информация, как – какое именно свойство невалидно, то можно использовать ICollection<ValidationResult>.

public ICollection<ValidationResult> ValidateSimpleModel(SimpleModel validate)
{
	var validationResults = new List<ValidationResult>();
	Validator.TryValidateObject(validate, new ValidationContext(validate, null, null), validationResults);

	return validationResults;
}

В том случае, когда объект находится в невалидном состоянии, этот метод вернет коллекцию ValidationResult, которая содержит всю релевантную информацию.

Оборачиваем все в екстеншн метод

Наконец-то, я сделал просто екстеншн метод, с помощью которого можно применить DataAnnotations валидацию, к любому объекту:

public static class ValidatorExtensions
{
    public static bool TryValidateObject(this object validate)
    {
        return Validator.TryValidateObject(validate, new ValidationContext(validate, null, null), null);
    }
}
    

Теперь, модель может иметь метод IsValid() типа:

public bool IsValid()
{
 return this.TryValidateObject();
}
    

Для той простой задачи, которую я пытался решить, это сработало просто отлично!

Оригинал статьи – http://www.beletsky.net/2012/01/using-aspnet-mvc-validation-mechanism.html

Новые инструменты в моем арсенале TDD

Недавно, я открыл для себя 3 новых интструмента, которыми хочу поделится с вами. Более точно, это один инструмент и два фреймворка. Посмотрим!

NCrunch

NCrunch это просто потрясающее расширение к Visual Studio созданный @remcomulder. Он детектирует все тесты в вашем солюшине и перезапускает их как только исходный код меняется. Забудте про ручной запуск тестов навсегда, это просто потеря времени. Вам даже не обязятельно нажимать Ctrl + S, просто продолжаем кодить как и раньше.

Сначала, я очень скепртически относился к подобным инструментам, но NCruch изменил мое мнение. Он поддерживает все главные юнит тест фреймворки как NUnit, XUnit, MSpec etc. Кроме того, он позволяет собирать метрики покрытия (которые, отображаются прямо в VS редакторе), запуск тестов в дебаггере, поддержка многих ядер и т.д.

NCruch, это то что сделает ваш TDD более «гладким», позволяется сфокусироваться на главных вещах и отвлечся от рутины.


ncrunch

NSubstitute

На протяжении долгого времени, я был приверженцем Moq фреймворка и не видел причин его менять. До того как появился NSubsitute. Я с трудом представляю, что может двигать разработчиками, которые начинает делать «еще один фреймворк для моков», кажется, что это не имеет смысла. Но эти ребята доказывают, что я не прав.

Итак, что там нового? Во-первых это очень понятный API. Никаких тебе new Mock() или MockGenerator.GenerateMock(), создание тестовых двойников это не более, чем Substitute.For<IEntityToMock>(). Мокирование свойств, возращение множественных результатов, поддержка событий и т.д. Для начала очень круто прочитать getting started материалы для старта.

Лучшая фича, как по мне, это то, что с использованием экстеншн методов они отказались от лямбд, для инициализации моков. Это делает код более читаемым и чистым. Я сделал маленький gist, в который поместил примеры использования Moq и NSubstitute вместе.

Я не могу сказать, что Rhino или Moq это гораздо хуже NSubstitute.. Нет, я могу сказать, что NSubstitute немного лучше их. Таже функциональность, но с меньшим количесвом кода, это серьезный аргумент для меня.

[Test]
public void should_send_an_email_if_users_signs_up_nsub()
{
	// arrange
	var emailService = Substitute.For<IEMailService>();
	var controller = new LoginController(emailService);

	// act
	controller.SignUp(new SignUpModel { Email = "a@a.com", Password = "xxx" });

	// assert
	emailService.Received().SendEmail(Arg.Any<EmailMessage>(), "current");
}

FluentAssertions

Опять же, годами я следовал простому NUnit’s Assert.That() методу. Я также немного смотрел в сторону SharpTestsEx, но FluentAssertions от @ddoomen изменил это.

FluentAssertions также основан на екстенш методах, и позволяет избавиться от вызова Assert.That, применяя ассерты непосредсвенно к объекту. Пару примеров:

{
    // NUnit.Assert style..
    Assert.That(result, Is.EqualTo(3);

    // FluentAssert style..
    result.Should().Be(3);
}

Это очень простой пример. Мощь FluentAssertions проявляется тогда, когда необходим множественный ассерт на сложных объектах:

{
    "somestring".Should().Contain("some").And.HaveLength(10);
}

Он также добавляет хорошую поддержку для работы с Коллекциями, Датами, Guids, Исключениями, XML и т.д. Проект размещен на codeplex, вот документация.

Выводы

Очень классные инструменты, которые я осванию сейчас и пока что впечатления очень хорошие. Большое спасибо @skalinets, которые покаазал мне их.

Оригинал статьи – http://www.beletsky.net/2012/02/new-tools-in-my-tdd-arsenal.html.

Пишем приложение для Windows Phone 7 «с нуля»

Мы продолжаем серию встреч «Клуба анонимных разработчиков» на тему Windows Phone 7. 7 февраля прошла первая из них (12-ая встреча клуба). Эта встреча клуба, 13-ая по счету, будет проходить в сотрудничестве с порталом Windows Phone 7 Rocks. Это отличная новость для всех .NET-чиков и .NET-чиц Киева, потому что у вас появилась замечательная возможность послушать и поучиться у профессионалов в этой области, которых не так уж много. И все это в рамках формата «Клуба анонимных разработчиков» с непринужденной обстановкой и отличной атмосферой.

В этот раз ребята решили начать с самого главного – как начать писать приложения под Windows Phone 7. Платформа совсем новая и очень мало людей умеют это делать вообще, а еще меньше умеют это делать правильно. В докладе будет продемонстрирована разработка контентного приложения для Windows Phone. Будут затронуты такие темы:

  • UI / UX
  • полезные инструменты и библиотеки для Windows Phone
  • паттерн MVVM
  • работа с данными – загрузка, обработка, сохранение
  • отладка, подготовка к публикации

В роли докладчиков выступят Михаил Галушко и Александр Краковецкий. Они оба являются авторами многочисленных статей на сайте Windows Phone 7 Rocks. Александр является автором и идеологом сайтов Windows Phone 7 Rocks и Microsoft User Group Community. Оба начали изучать технологию Windows Phone с момента ее появления на свет. На данный момент уже опубликовали несколько приложений.

Эта встреча обещает получиться более практической и участники получат ответы на многие вопросы, связанные со стартом разработки приложений под Windows Phone 7. Итак, встреча пройдет в четверг 1 марта. Место проведения мы объявим ближе к дате мероприятия. Это связано с тем, кто число членов клуба постоянно растет и мы рискуем не влезть в уютный Киевский офис компании DataArt. Этот офис полюбился членам клуба своей уютной обстановкой и наличием всего необходимого для продуктивного общения. Но, по итогам прошлых встреч, есть риск, что все желающие не поместятся.

Официальное начало встречи по-прежнему в 19:00, завершение в 23:00. Стоимость участия 80 гривен при оплате заранее, 120 гривен при оплате на месте. Пива, пиццы и кофе с печеньками хватит на всех. Регистрация обязательна. Все детали по оплате будут высланы вам после успешного прохождения регистрации. Количество мест ограничено 60 участниками.