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

Preview:

DESCRIPTION

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

Citation preview

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

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

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

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

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

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

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

TEST DRIVEN DEVELOPMENT

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

TDD

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

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

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

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

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

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

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

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

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

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

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

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

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

Изменения

Ошибки

Ошибки

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

Цена ошибки

Разработка

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

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

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

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

Разработка

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

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

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

КАК И ПОЧЕМУ?

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

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

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

Зависимость

Inversion of Control

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

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

Изменения

Ошибки

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

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

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

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

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

Разработка

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

СПАСИБО

Докладчик: Николай Гребневe-mail: ngrebnev@gmail.comslideshare.net: ngrebnev

Recommended