54
TDD как инструмент уменьшения кадровых рисков Николай Гребнев Компания «CUSTIS»

Test Driven Development как инструмент уменьшения кадровых рисков

Embed Size (px)

DESCRIPTION

Как мы все знаем, одним из ключевых факторов, определяющих успех проекта по разработке программного обеспечения, является команда реализующая проект. В случае если команда фиксируется на весь срок проекта, никто не болеет, все работают в одно и то же время, то проблем никаких не возникает. Но в реальности, команда меняется походу проекту, в проект приходят новые люди, ключевые участники проекта уходят в самый неожиданный момент, нередки случаи, когда на время надо срочно заменить выбывшего члена команды. Ввод нового человека в проект — это всегда риски, риски, того, что у человека окажется недостаточно квалификации, риск внесения ошибок вследствие плохого знакомства с проектом. Неожиданное отсутствие члена команды проекта может, как минимум, привести к задержке сроков, а в случае, если другие не знакомы с его фронтом работ, то возможен и крах проекта. Незаменимость членов команды, введение нового человека в проект, завышенные ожидания от разработчиков - острейшие проблемы во многих проектах по разработке ПО, а особенно сильно эти проблемы проявляются на крупных проектах, где фиксировать состав команды и избежать всех неожиданностей физически невозможно. Существенно снизить все выше перечисленные риски возможно при правильном использовании практики Test Driven Development (TDD). TDD — это техника разработки программного обеспечения, которая предполагает активное использование модульных тестов (unit-тестов), что делает их центральной частью дизайна системы. Разработка посредством тестирования при грамотном проектировании обеспечивает не только высокое качество ПО, но и стимулирует к созданию слабосвязанной архитектуры приложения. Более того, хорошо изолированными частями системы являются классы, т. е. фактически минимально возможный элемент системы. Слабая связность системы и хорошая изолированность ее частей, позволяют разработчикам быть уверенными, что их исправления или изменения будут локальными и не приведут к падению всей системы. Хорошее покрытие тестами, а также архитектура приложения, к которой провоцирует использование TDD, обеспечивает не только качество программного обеспечения и хорошую самодокументируемость кода, но и позволяет быть у

Citation preview

Page 1: Test Driven Development как инструмент уменьшения кадровых рисков

TDD как инструмент уменьшения кадровых рисковНиколай ГребневКомпания «CUSTIS»

Page 2: Test Driven Development как инструмент уменьшения кадровых рисков

Содержание• Кадровые риски• Условия задачи• Test Driven Development• Факторы кадрового риска• Как и почему?• Что, где, когда и сколько?• Итоги

Page 3: Test Driven Development как инструмент уменьшения кадровых рисков

КАДРОВЫЕ РИСКИ

Page 4: Test Driven Development как инструмент уменьшения кадровых рисков

Кадры решают всеИ.В. Сталин

Page 5: Test Driven Development как инструмент уменьшения кадровых рисков
Page 6: Test Driven Development как инструмент уменьшения кадровых рисков
Page 7: Test Driven Development как инструмент уменьшения кадровых рисков
Page 8: Test Driven Development как инструмент уменьшения кадровых рисков
Page 9: Test Driven Development как инструмент уменьшения кадровых рисков
Page 10: Test Driven Development как инструмент уменьшения кадровых рисков

Риски• Незаменимый разработчик• «Не знал и сломал»• Квалификация ниже ожидаемой• Обучение новых сотрудников

Page 11: Test Driven Development как инструмент уменьшения кадровых рисков

УСЛОВИЯ ЗАДАЧИ

Page 13: Test Driven Development как инструмент уменьшения кадровых рисков

Мечта руководителя

Page 19: Test Driven Development как инструмент уменьшения кадровых рисков

TEST DRIVEN DEVELOPMENT

Page 20: Test Driven Development как инструмент уменьшения кадровых рисков

Test Driven Development— техника разработки программного обеспечения, которая основывается на повторении очень коротких циклов разработки: сначала пишется тест, покрывающий желаемое изменение, затем пишется код, который позволит пройти тест. (Wikipedia)

Page 21: Test Driven Development как инструмент уменьшения кадровых рисков

TDD

Написать тест

Написать реализацию

Запустить тесты

Тесты не прошли

Все тесты проходят

Page 22: Test Driven Development как инструмент уменьшения кадровых рисков

TDD – unit-тесты вперед!

Page 23: Test Driven Development как инструмент уменьшения кадровых рисков

Unit-тестирование• Тестируем:

– Класс• Поведение• Взаимодействие

Одновременно тестируем только один класс

Page 24: Test Driven Development как инструмент уменьшения кадровых рисков

ФАКТОРЫ КАДРОВОГО РИСКА

Page 25: Test Driven Development как инструмент уменьшения кадровых рисков

Причины• Сильносвязная архитектура• Позднее обнаружение ошибок• Плохая документированность

Page 26: Test Driven Development как инструмент уменьшения кадровых рисков

Сильносвязная архитектура

Page 27: Test Driven Development как инструмент уменьшения кадровых рисков

Правки исходного кода ведут к непредсказуемым последствиям

Изменения

Ошибки

Ошибки

Page 28: Test Driven Development как инструмент уменьшения кадровых рисков

Держать все в голове

Page 29: Test Driven Development как инструмент уменьшения кадровых рисков

Цена ошибки

Разработка

Тестирование

Эксплуатация

Page 30: Test Driven Development как инструмент уменьшения кадровых рисков

Тестирование

Page 31: Test Driven Development как инструмент уменьшения кадровых рисков

Эксплуатация

Page 32: Test Driven Development как инструмент уменьшения кадровых рисков

Разработка

Page 33: Test Driven Development как инструмент уменьшения кадровых рисков

Плохая документированность• Документация устаревает сразу после

своего написания• Никто не поддерживает актуальность

документации• Зачастую документация вообще отсутствует

Page 34: Test Driven Development как инструмент уменьшения кадровых рисков

КАК И ПОЧЕМУ?

Page 35: Test Driven Development как инструмент уменьшения кадровых рисков

Тестируем• Класс

– Поведение– Взаимодействие

Page 36: Test Driven Development как инструмент уменьшения кадровых рисков

Одновременно тестируем только один класс

Page 37: Test Driven Development как инструмент уменьшения кадровых рисков

Зависимость

Page 38: Test Driven Development как инструмент уменьшения кадровых рисков

Inversion of Control

Page 39: Test Driven Development как инструмент уменьшения кадровых рисков

Декомпозиция

Page 40: Test Driven Development как инструмент уменьшения кадровых рисков

Локализация ошибок

Изменения

Ошибки

Page 41: Test Driven Development как инструмент уменьшения кадровых рисков

Раннее обнаружение ошибок• Тесты запускаются:

– Регулярно во время разработки– До окончания этапа разработки

Page 42: Test Driven Development как инструмент уменьшения кадровых рисков

Раннее обнаружение ошибок

Тестирование

Эксплуатация

Разработка

Page 43: Test Driven Development как инструмент уменьшения кадровых рисков

Документация• Всегда актуальна• Автоматическая проверка соответствия

спецификациям

Page 44: Test Driven Development как инструмент уменьшения кадровых рисков

ЧТО, ГДЕ, КОГДА И СКОЛЬКО?

Page 45: Test Driven Development как инструмент уменьшения кадровых рисков

Что?• Высокое качество конечного продукта• Хороший дизайн кода• Уверенность при модификации• Снижение рисков от незаменимых и

неопытных разработчиков

Page 46: Test Driven Development как инструмент уменьшения кадровых рисков

Где?• Длительные проекты• Высокие требования к качеству• Опытная команда (есть опыт

использования TDD)

Page 47: Test Driven Development как инструмент уменьшения кадровых рисков

Когда?• С начала проекта• На изолированных участках в

существующем проекте

Page 48: Test Driven Development как инструмент уменьшения кадровых рисков

Сколько?• Нет опыта применения TDD:

– Дорого• Есть опыт использования TDD:

– Тратим время на написании теста– Экономим на отладке и сопровождении

Page 49: Test Driven Development как инструмент уменьшения кадровых рисков

ПОДВОДИМ ИТОГИ

Page 50: Test Driven Development как инструмент уменьшения кадровых рисков

Вспомним риски• Незаменимый разработчик• «Не знал и сломал»• Квалификация ниже ожидаемой• Обучение новых сотрудников

Page 51: Test Driven Development как инструмент уменьшения кадровых рисков

Незаменимость vs TDD• Любого человека возможно заменить:

– Система хорошо документирована– Слабая связность– Покрытие тестами

Page 52: Test Driven Development как инструмент уменьшения кадровых рисков

«Не знал и сломал» vs TDD• Любые правки исходного кода безопасны:

– Высокая изолированность классов– Обнаружение ошибок на этапе разработки– Жесткое соблюдение контракта класса

Page 53: Test Driven Development как инструмент уменьшения кадровых рисков

Обучение и TDD• Обучение на «боевых» задачах

– Скорость обучения возрастает– Слабая связность– Формально документированное

взаимодействие в системе

Page 54: Test Driven Development как инструмент уменьшения кадровых рисков

СПАСИБО

Докладчик: Николай Гребневe-mail: [email protected]: ngrebnev