Дмитpий Hecтepук

Блог о программировании — C#, F#, C++, архитектура, и многое другое

Проект однодневного курса по TDD

26 комментариев

Итак, сейчас в воздухе витает идея создания однодневного курса по Test-Driven Development (TDD), ориентированного на студентов. Цель простая — за один день дать студентам и начинающим разработчикам необходимые знания для того, чтобы грамотно покрывать тестами свой код.

Предварительный план мероприятия включает в себя 6 сессий по 45 минут с перерывами по 15 минут а также часовым перерывом на обед. План сессий представлен ниже:

  1. Что такое тестирование, зачем оно нужно. Различные типы тестирования (модульное, интеграционное, приемочное). Участники процесса тестирования. Роль тестирования в различных моделях разработки ПО (agile, rup, cmmi etc.). Цели и принципы автоматизации тестов. Идеология TDD.
  2. Введение в модульное (юнит) тестирование. Обзор фреймворков и библиотек для тестирования. Инструментарий и автоматизация тестирования. Простые примеры TDD с использованием MbUnit & Gallio Icarus. Тестовое покрытие на примере NCover.
  3. Тестируемость кода. Проблемы (smells) в коде, поведении и проекте. Практики правильного построения тестов. Примеры.
  4. Продвинутые практики модульного тестирования. Типы утверждений, секции иниациализации и финализации. Data-driven тесты. Способы организации модульных тестов.
  5. Тестовые дубли – кто они и что с ними делать. Моки, фейки, стабы. Обзор современных мок-фреймворков – приемущества и ограничения. Паттерны ААА и Record-Replay. Примеры использования Moq.
  6. Дизайн для тестируемости и проблема зависимостей. Паттерн инъекции зависимостей. Введение в идеологию DI/IoC на примере фреймворка Unity. Примеры использования DI для тестирования.

Это предварительный план, и реально все может измениться. В плане “стека” очень сложно выбрать технологии, т.к. лично я фанат TypeMock но боюсь что на подобных встречах нужно рассказывать про менее коммерческие библиотеки. На данный момент, склонности к стеку такие:

  • MbUnit/Gallio. Единственной серьезной альтернативой является NUnit, но имеет смысл показывать именно “классический” синтаксис, мне кажется MbUnit тут как раз подходит.
  • Moq. Мое мнение что Rhino Mocks хоть и является “доминирующим” фреймворком, он слишком запутан, “вариативен” и вообще устарел.
  • Unity. Про DI все равно придется говорить, а поскольку базовые возможности всех фреймкворков примерно одинаковы, лучше рассказывать про тот, который легко изучать и использовать.
  • NCover. Не думаю что стоит “евангелизировать” идею тестового покрытия, но упомянуть стоит. Хороших некоммерческих альтернатив нет (PartCover не предлагать), поэтому придется говорить про NCover.

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

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

Update: рассматривается также вариант номинальной аттестации участников, т.е. заполнение короткой multiple-choice анкеты в конце встречи. По результатам теста можно выдавать либо документ о прослушивании теста (если человек провалил тест) либо аттестат (если человек сдал тест хорошо). Эта практика уже проверенная, и мне кажется самое время задействовать бренд spbalt.net для чего-то полезного. (Почему spbalt.net а не Ineta? Потому что spbalt.net намного более активная группа, и участники там посильнее. Одним словом, авторитета больше.)

Реклама

Written by Dmitri

18 апреля 2010 в 20:41

Опубликовано в Technology

комментариев 26

Subscribe to comments with RSS.

  1. А тебе возможно интересно было бы сделать курс в каком нибуть институте.

    Mike Chaliy

    18 апреля 2010 at 21:08

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

      Dmitri

      18 апреля 2010 at 21:10

  2. Возможен вариант записи курсов на видео? Для всех тех, кто out of Спб.

    AKhalilov

    18 апреля 2010 at 21:14

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

      Dmitri

      18 апреля 2010 at 21:16

  3. Лично я перестал понимать о чем идет речь уже после 3го пункта. Думается, что у людей, совсем не знакомых с темой, от объема новой информации будет голова пухнуть уже к середине мероприятия.

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

    Можно тему Pex затронуть. Или любых других тулов для автогенерации тестов. http://research.microsoft.com/en-us/projects/pex/

    И да. Как будет проходит отбор на посещение мероприятия?

    KpoHyc

    18 апреля 2010 at 21:15

    • Ну объем информации будет большой, не скрою. Но на коммерческих курсах примерно так. Раздаточный материал конечно будет, в смысле будут распечатки слайдов.

      Насчет PEX, BDD и еще миллиона дополнительных вещей я думал, но боюсь это все out of scope. Чтобы покрыть абсолютно всё, нужно примерно 3 дня, а это уже совсем другой уровень усилий. Возможно что-то трехдневное будет реализовано в коммерческом формате.

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

      Dmitri

      18 апреля 2010 at 21:27

      • Теоретически, если аудитория будет большая — можно попробовать пробить лекционную аудиторию в университете. Тогда проблем с местом и количеством не будет.

        KpoHyc

        18 апреля 2010 at 21:49

    • Ну мы так и планируем делать. Другой вопрос — в каком университете. И есть еще вопрос что делать с питанием — в принципе эта проблема решается деньгами, но к сожалению денег от UGSS совсем не хватит при достаточно большом количестве участников. Вообще, финансирование такого эвента — это отдельная тема, и тут у меня готовых ответов вообще нет :)

      Dmitri

      18 апреля 2010 at 21:55

  4. Что Вы имеете в виду под этим:
    «имеет смысл показывать именно “классический” синтаксис», чем у MBUnit синтаксис более классический?

    Про Unity, не сказал бы, что это фреймворк который легко изучать, точнее что легче всех. Почему бы не рассказать на примере Ninject?

    Restuta

    18 апреля 2010 at 22:37

    • Тут можно долго холиварить. Де факто лучше чтоб люди знали как писать Assert.AreEqual(a, b) чем Assert.That(a, Is.Equal(b)) или что-то в этом духе. Опять же, в консалтинге сейчас MbUnit фреймворк номер один, поэтому не грех рассказывать именно про него. И инструментарий Gallio на высоте.

      Что касается Unity, то конечно каждый сделает свой выбор, но отправной точкой должен быть он, т.к. он не слишком нагружен всякой непонятной инфраструктурой, да и синтаксис у него простой и понятный. Вообщем, от Unity я вряд ли откажусь.

      Dmitri

      18 апреля 2010 at 22:43

  5. В принципе, идею про видео уже высказывали. У меня есть более конкретное предложение на этот счет — ты можешь провести курс как и планировал, записать на видео и выложить, скажем, на какой-нибудь intuit.ru — аудитория будет гораздо больше. Если интересно, напиши мне на почту — можно обсудить более подробно.

    Sergey Zwezdin

    19 апреля 2010 at 2:47

    • Уже известно, на какой сайт это пойдет. Про intuit я ничего не знаю, посмотрю.

      Dmitri

      19 апреля 2010 at 9:08

  6. Для студентов курс подобной продолжительности будет мало эффективен, только если проводить предварительный отсев, и не на весь курс, а на серию сессий из плана.

    AlexandrYZ

    19 апреля 2010 at 8:33

    • Вот я как раз этого и боюсь. Я вообще не знаю сколько часов «нормально» для студента. Коммерческие-то курсы именно в полнодневном формате проводятся, и там никто не жалуется что много. А тут — у меня маловато знаний чтобы понять то, осилят все это слушатели или нет.

      Dmitri

      19 апреля 2010 at 8:38

  7. Будучи студентом, больше одной пары подряд на одну и ту же тему я осилить не мог. Если обед, то можно две пары. Поэтому я бы сделал 2 дня по 4 часа, и обязательно с активным вовлечением слушателей.

    ulu

    19 апреля 2010 at 10:18

    • А вот это точно не получится, т.к. один день я выделить еще готов, но 2 дня — практически нереально. Тут получается три «пары», думаю люди должны осилить все-таки…

      Dmitri

      19 апреля 2010 at 10:23

      • Тогда надо будет их активно будить, мне кажется.

        «Нестерук, встань и повтори, что я только что говорила» :)

        ulu

        19 апреля 2010 at 10:27

    • Млин… неужели все так плохо? Вот лично меня посылали на курсы причем не на один а на несколько дней. И так каждый день было как раз часов по 6 нового материала. И ведь ничего — справлялся.

      Dmitri

      19 апреля 2010 at 10:29

      • Если учесть что сие затевается для создания коммерческого курса, то ориентироваться на неусидчивость студентов не стоит.

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

        AlexandrYZ

        19 апреля 2010 at 14:08

  8. Тебя посылали, когда ты студентом был?

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

    ulu

    19 апреля 2010 at 12:45

    • Ну вот я и думаю как бы это правильно поставить с точки зрения организации. Так чтобы народ не тупел а получал удовольствие от новых знаний. У тебя есть идеи как «облегчить» нагрузку не меняя при этом график?

      Dmitri

      19 апреля 2010 at 14:13

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

        Анна

        23 апреля 2010 at 23:49

  9. За день — полностью нереально! Тут нужна практика минимум месяц-два.

    hazzik

    19 апреля 2010 at 21:30

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

      Dmitri

      20 апреля 2010 at 15:22

  10. >> Паттерны ААА и Record-Replay.

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

    Alexius

    25 апреля 2010 at 19:38


Оставить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: