24
Разработка в долг 23 марта, 2017

Разработка в долг

Embed Size (px)

Citation preview

Разработка в долг

23 марта, 2017

2

Александр Радкевич

Инженер-программист, EPAM Systems

Обо мне

3

1. влияет на время, стоимость и качество проекта

2. практически неизбежен для любого проекта

3. каждый участник проекта должен знать, что это такое

Почему именно технический долг?

4

Впервые использовал

метафору «технический

долг» в 1992 году, чтобы

объяснить финансистам,

почему нужно внести

изменения в архитектуру

приложения.

Уорд Каннингем

By Carrigg Photography for the Wikimedia Foundation –

Own work, CC BY-SA 3.0,

https://commons.wikimedia.org/w/index.php?curid=17697618

5

Источники технического долга

Код, над которым вы работаете, должен отображать

ваше текущее понимание того, как должна работать

ваша программа.

Главная идея метафоры

6

это ресурсы, которые вам необходимы для того, чтобы

привести код в состояние, соответствующее вашему

текущему пониманию.

Технический долг –

7

• необходимость подстраивать архитектуру приложения

под текущее понимание

Источники технического долга

8

• более детальное изучайте предметную область

• содержите код в чистоте

• пишите техническую документация

• просматривайте чужой код

• практикуйте техники, позволяющие как можно скорее выявить

проблемы и повысить качество кода (парное программирование)

Как минимизировать такой долг?

9

Иногда вам может

понадобиться такое

решение, которое не

является устойчивым в

долгосрочной перспективе,

но приносит

краткосрочную выгоду.

Дядя Боб (Роберт Мартин)

By Tim-bezhashvyly - Own work, CC BY-SA 4.0,

https://commons.wikimedia.org/w/index.php?curid=38703621

10

Может быть стоит взять кредит?

11

• необходимость подстраивать архитектуру приложения

под текущее понимание

• временные решения, приносящие краткосрочные выгоды

Источники технического долга

12

• не берите долг, если это возможно

• полученная выгода должна превышать расходы на устранение

долга

• возвращайте долги как можно скорее

• не устраивайте в коде беспорядок

Как решать такие проблемы?

13

Беспорядок – не технический долг, это просто беспорядок

14

Временно – не значит спустя рукава

15

Технический долг – это

метафора, поэтому

реальный вопрос

заключается в том, полезна

ли метафора долга для

размышления о том, как

решать проблемы с

дизайном кода, и как

донести эти размышления

до других.

Мартин Фаулер

By Webysther Nunes - Own work, CC BY-SA 4.0,

https://commons.wikimedia.org/w/index.php?curid=39594469

16

Квадрант технического долга

Необдуманный

(reckless)

Обдуманный

(prudent)

У нас нет времени на дизайн

Умышленный (deliberate)

Неумышленный (inadvertent)

Нам нужно срочно выпустить релиз,

затраты на исправление долга

окупятся с лихвой

Многоуровневая архитектура?

Не, не слышали

Теперь мы знаем,

как мы это должны были делать

17

• дублирование кода

• низкое покрытие тестами

• отсутствие или низкое качество комментариев и документации к

коду

• чрезмерная сложность кода

• нарушение стандартов, несоблюдение стиля кода

• код с запашком

• код с долгом достался вам по наследству

Другие источники технического долга

18

• необходимость подстраивать архитектуру приложения

под текущее понимание

• временные решения, приносящие краткосрочные выгоды

• проблемы с качеством кода

Источники технического долга

19

Работа с техническим долгом

• закладывайте время на работу с техническим долгом

• анализируйте ваш технический долг

• устанавливайте рабочие соглашения в команде

• выделяйте время на образование

На уровне релиза (долгосрочная перспектива)

20

Работа с техническим долгом

• поддерживайте высокий уровень покрытия тестами

• контролируйте накладные

расходы, вызванные техническим долгом

• насколько вы удовлетворены от работы с вашим кодом?

• учитывайте зависимости между разными составляющими

технического долга

• проводите ретроспективы

• создавайте истории по работе с техническим долгом

• используйте непрерывную интеграцию

На уровне итерации (среднесрочная перспектива)

21

Работа с техническим долгом

• просматривайте чужой код

• практикуйте парное программирование

• придерживайтесь стандартов кода

• сделайте технический долг видимым

На уровне истории пользователя (короткосрочная перспектива)

22

Какие еще могут быть долги?

• по качеству (quality debt)

• по функциональности (feature debt)

• пользовательского взаимодействия (user experience debt)

• навыков(skills debt)

Помимо технического долга выделяют также долги:

23

• технический долг может быть нашим союзником, если нам нужно

выиграть время

• лучший вариант - избегать долгов, однако вам это вряд ли удастся

• технический долг снижает продуктивность, поэтому старайтесь

избавиться от него как можно быстрее

• анализируйте технический долг и выстраивайте работу с ним на

разных уровнях

• объясните клиенту, почему важно выделять время на работу с

техническим долгом

• не путайте технический долг с другими видами долгов

Подведем итоги

24

Информация по теме

• http://wiki.c2.com/?WardExplainsDebtMetaphor

• https://martinfowler.com/bliki/TechnicalDebt.html

• https://martinfowler.com/bliki/TechnicalDebtQuadrant.html

• https://sites.google.com/site/unclebobconsultingllc/a-mess-is-not-a-technical-debt

• https://www.agilealliance.org/introduction-to-the-technical-debt-concept/

• https://www.agilealliance.org/project-management-and-technical-debt/