Зачем нужен курс бизнесу
Непрерывный поток изменений – это основной источник боли при разработке ПО. В процессе постоянных доработок очень сложно поддерживать четкое отображение требований на код, покрытие кода тестами и поддерживаемость дизайна для будущих изменений. При этом все эти три компонента необходимо обеспечивать одновременно, целостно и непрерывно. Если хотя бы ненадолго упустить один из них, начинается очень быстрый рост технического долга – сегодня он кажется незначительной помехой, а уже завтра Вы получаете «полный букет»: неспособность вовремя внести новый функционал, раздражение заказчиков и пользователей, уход ключевых специалистов из-за демотивации. Владельцы бизнеса в недоумении, менеджмент теряет деньги, работа стоит – а ведь еще вчера все было нормально.
В рамках этого тренинга мы рассматриваем понятную две основные практику Test-Driven Development и Refactoring. Они ориентированы на условия постоянных изменений в проекте и успешно решают проблемы непрерывного поддержания качества продукта и поддерживаемости дизайна. Вносить изменения станет существенно проще и дешевле. Система будет более прогнозируемой с точки зрения планирования, что благоприятно скажется на ее развитии. Вовремя и грамотно проведенный рефакторинг поможет не накапливать технический долг.
Зачем нужен курс специалисту
Test-Driven Development изначально заточен на решение задачи длительной поддержки проекта. И по нашим наблюдениям, после внедрения TDD разработчки обычно вздыхают полной грудью. Типовые муторные проблемы с воспроизводством дефектов и внесением изменений становятся гораздо менее значимыми. Вы сразу и автоматически получаете понятный поддерживаемый дизайн и глубокое покрытие тестами. Время, проведенное в дебаге, стремится к нулю. Баги перестают быть проблемой, поскольку каждую вновь найденную проблему можно будет закрепить тестом и больше к ней не возвращаться. Автоматические тесты так же замещают ручную работу по проверке того или иного функционала перед тем, как отдать ее на финальное тестирование.
Практика TDD позволяет вспомнить давно забытое чувство – когда после завершения очередного шага разработки все заводится без проблем и с первого раза. И поначалу это может с непривычки даже пугать, но потом Вы привыкнете к этому ощущению драйва и «потока» и уже не сможете писать код, не начав с теста. Применяя рефакторинг, можно значительно повысить гибкость системы при изменении требований и значительно снизить силы на поддержку и больше внимания уделять новому функционалу. Согласитесь, разработчику всегда гораздо более комфортно работать с чистым понятным кодом, и это резко повышает продуктивность команды.
Помимо всего прочего, новые практики помогу команде вырасти в техническом плане, перейти на "следующий уровень". Парная работа обязательно будет способствовать быстрому распространению знаний и удачных подходов.
Для кого
- Разработчики, желающие с удовольствием работать с кодом и безопасно менять код, не боясь что-то сломать
- Тимлиды и руководители проектов, желающие повысить вовлеченность команд и обеспечивать высочайшее качество продукта в условиях непрерывного потока изменений требований
Цели
Для отсутствия страха изменений требований и способности непрерывно обеспечивать поддерживаемость продукта разработчики:
- поймут причины технического долга и смогут на практике обоснованно оперировать ими в оценках затрат
- осознают характеристики и метрики поддерживаемого дизайна и смогут на практике двигаться к нему через рефакторинг
- узнают типовые проблемные анти-паттерны в коде («smells») и смогут идентифицировать и избавиться от них в своем проекте
- узнают типовые трансформации («refactorings») из общепризнанных каталогов и смогут оперировать ими в общении и использовать эти трансформации в своем проекте
- поймут процессные подходы к рефакторингу и смогут обоснованно выбирать из них в своей команде
- узнают про оценку рефакторинга и смогут эффективно закладывать ее на планировании итерации
- узнают, как вести рефакторинг маленькими шажками, чтобы обеспечить безопасность и уверенность
- значительно повысят скорость разработки, несмотря на кажущиеся дополнительные усилия на тесты
- научатся отличать unit testing от TDD и смогут аргументированно выбирать тот или иной подход
- поймут цикл разработки TDD и смогут на практике держать постоянный темп производства
- поймут, как TDD помогает сохранять высочайшую концентрацию и узнают про состояние «потока»
- поймут шаблоны TDD и смогут на практике быстро писать подддерживаемые тесты
- поймут типовые ошибки внедрения TDD и смогут избежать их в своем проекте
- Поймут области применения TDD
Для обеспечения стабильных поставок и непрерывной поддержки качества продукта тимлиды и PM:
- поймут процессные паттерны внедрения рефакторинга и смогут внедрить практику в своей команде
- поймут ключевые метрики дизайна и кода и смогут внедрить объективную оценку поддерживаемости своего продукта
- узнают каталоги анти-паттернов («smells») и трансформаций («refactorings») и смогут внедрить единый словарь для эффективного общения в своей команде
- узнают про оценку рефакторинга и смогут эффективно закладывать ее на планировании итерации
- повысят скорость разработки в команде, несмотря на кажущиеся дополнительные усилия на тесты
- Избавятся от типичных страхов, связанных с внедрением TDD и смогут доказать полезность этой практики своему руководству
- Поймут области применения TDD
- Обсудят пути внедрения TDD в команду