TDD-Test Driven Development

О тренинге:

 Разработка через тестирование (Test-Driven DevelopmentTDD) - это значительно больше, чем просто автоматизация unit-тестирования. Прежде всего, TDD - это подход к дизайну программного обеспечения, позволяющий победить одну из ключевых болезней современных сложных систем: сильную связанность (coupling) отдельных компонентов кода между собой. Как следствие, использование TDD гарантирует, что ваше ПО будет не только подробно оттестировано, но и что его будет легко и дешево сопровождать и развивать. TDD наделяет шаблоны Inversion-of-Control (IoC) и Dependency Injection особым смыслом и значимостью, превращая их из просто модных словечек в повседневную необходимость.

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

Отдельная часть тренинга посвящена работе с унаследованным (legacy) кодом: как постепенно его делать тестопригодным за счет устранения взаимопроникающих зависимостей между классами (coupling), с чего начать и как двигаться по мере развития и исправления ошибок. Без этого сопровождение и развитие legacy-кода рискует превратиться в кошмар: в код страшно вносить изменения, никто не понимает как что работает, команда разработки деморализована и теряет ключевых специалистов, количество дефектов растет катастрофическими темпами, при этом скорость их исправления и внесения новых функций неуклонно падает.

В результате тренинга вы не только разовьете эрудицию и вдоволь пообщаетесь с коллегами, но и:

  1. изменится ваше отношение к unit-тестам: их написание станет не только полезным, но и увлекательным занятием;
  2. эволюционирует взгляд на объектно-ориентированный дизайн;
  3. целый набор шаблонов проектирования приобретут совершенно особенные смысл и ценность.

 

Содержание тренинга:

 

  • Введение
    • виды автоматизированного тестирования: unit, функциональные, интеграционные
    • краткое введение в использование xUnit-фреймворков
    • почему написание тестов с использованием xUnit-фреймворков не есть TDD
  • TDD
    • основная мантра TDD: "red-green-refactor"
    • как быть с тестированием связанных классов
    • способы уменьшения связанности и повышения тестопригодности: Inversion-of-Control (IoC), Dependency Injection, Message Bus
    • Mock-и и Stub-ы
    • почему в языке Go отсутствует наследование в привычном понимании
  • TDD в реальной жизни
    • полезные фреймворки и инструменты
    • организация тестов
    • использование custom assert-ов
    • использование builder-ов для создания окружения
    • как быть с СУБД и внешним окружением
    • тестирование UI (шаблоны MVС и MVP)
    • про процент покрытия кода тестами
    • время выполнения тестов, CI
    • mock hell
  • Полезные элементы BDD:
    • should-именование тестов
    • шаблон given-when-then
  • Работа с унаследованным (legacy) кодом:
    • как модифицировать существующую функциональность
    • как исправлять ошибки
  • С чего начать завтра на работе:
    • философия Shu-Ha-Ri
    • тестирование отдельных классов
    • рефакторинг с использованием Dependency Injection
    • Defenition-of-Done
  • Ключевые ресурсы и книги

Формат тренинга:

Тренинг построен по принципу "live coding first", т.е. прежде всего показывается разработка отдельных фрагментов кода, и только потом подтягивается "теория". Это помогает эффективно усваивать материал, так как подавляющее большинство программистов мыслят "от кода". Кроме того, в процессе тренинга предлагается выполнить несколько учебных упражнений.

Целевая аудитория:

разработчики, ведущие разработчики, team lead-ы, системные архитекторы

 

Языки и среды:

 

  • C# 3.0 + MS Visual Studio 2008
  • Java 1.6 + ItelliJ IDEA / NetBeans IDE

Тренер

Дмитрий Лобасев

Дмитрий опытнейший разработчик и талантливый тренер. В настоящий момент является руководителем Agile проектов. Ему очень нравится Agile и нравится помогать проектным командами выстраивать наиболее эффективные процессы, основываясь на принципах Scrum и инженерных практиках XP, таких как Test Driven.


Дмитрий закончил МЭИ, также он сертифицированный Scrum Master.


Работал в Люксофт agile коуч, помогал компаниям перейти с waterfall-based процесса на Agile-based