Презентация подготовлена по материалам выступления Александра Радкевича на витебском Весеннем MiniQ (https://vk.com/spring_miniq), который был проведен 23 марта 2017.
— Александр, почему ты решил рассказать именно о техническом долге? Неужели так накипело?
— Я мог бы поговорить и на более "хардкорную" тему, но выбрал технический долг. Уверен, что эта тема в той или иной степени касается каждого проекта. Мне кажется, будет честно, если каждый участник проекта будет иметь четкое представление о том, что такое технический долг и как с ним работать. Тем более я не припомню, чтобы витебские программисты уже говорили об этом, поэтому тем интереснее будет услышать их мнение и вопросы.
3. 3
1. влияет на время, стоимость и качество проекта
2. практически неизбежен для любого проекта
3. каждый участник проекта должен знать, что это такое
Почему именно технический долг?
4. 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. 5
Источники технического долга
Код, над которым вы работаете, должен отображать
ваше текущее понимание того, как должна работать
ваша программа.
Главная идея метафоры
6. 6
это ресурсы, которые вам необходимы для того, чтобы
привести код в состояние, соответствующее вашему
текущему пониманию.
Технический долг –
8. 8
• более детальное изучайте предметную область
• содержите код в чистоте
• пишите техническую документация
• просматривайте чужой код
• практикуйте техники, позволяющие как можно скорее выявить
проблемы и повысить качество кода (парное программирование)
Как минимизировать такой долг?
9. 9
Иногда вам может
понадобиться такое
решение, которое не
является устойчивым в
долгосрочной перспективе,
но приносит
краткосрочную выгоду.
Дядя Боб (Роберт Мартин)
By Tim-bezhashvyly - Own work, CC BY-SA 4.0,
https://commons.wikimedia.org/w/index.php?curid=38703621
11. 11
• необходимость подстраивать архитектуру приложения
под текущее понимание
• временные решения, приносящие краткосрочные выгоды
Источники технического долга
12. 12
• не берите долг, если это возможно
• полученная выгода должна превышать расходы на устранение
долга
• возвращайте долги как можно скорее
• не устраивайте в коде беспорядок
Как решать такие проблемы?
15. 15
Технический долг – это
метафора, поэтому
реальный вопрос
заключается в том, полезна
ли метафора долга для
размышления о том, как
решать проблемы с
дизайном кода, и как
донести эти размышления
до других.
Мартин Фаулер
By Webysther Nunes - Own work, CC BY-SA 4.0,
https://commons.wikimedia.org/w/index.php?curid=39594469
16. 16
Квадрант технического долга
Необдуманный
(reckless)
Обдуманный
(prudent)
У нас нет времени на дизайн
Умышленный (deliberate)
Неумышленный (inadvertent)
Нам нужно срочно выпустить релиз,
затраты на исправление долга
окупятся с лихвой
Многоуровневая архитектура?
Не, не слышали
Теперь мы знаем,
как мы это должны были делать
17. 17
• дублирование кода
• низкое покрытие тестами
• отсутствие или низкое качество комментариев и документации к
коду
• чрезмерная сложность кода
• нарушение стандартов, несоблюдение стиля кода
• код с запашком
• код с долгом достался вам по наследству
Другие источники технического долга
18. 18
• необходимость подстраивать архитектуру приложения
под текущее понимание
• временные решения, приносящие краткосрочные выгоды
• проблемы с качеством кода
Источники технического долга
19. 19
Работа с техническим долгом
• закладывайте время на работу с техническим долгом
• анализируйте ваш технический долг
• устанавливайте рабочие соглашения в команде
• выделяйте время на образование
На уровне релиза (долгосрочная перспектива)
20. 20
Работа с техническим долгом
• поддерживайте высокий уровень покрытия тестами
• контролируйте накладные
расходы, вызванные техническим долгом
• насколько вы удовлетворены от работы с вашим кодом?
• учитывайте зависимости между разными составляющими
технического долга
• проводите ретроспективы
• создавайте истории по работе с техническим долгом
• используйте непрерывную интеграцию
На уровне итерации (среднесрочная перспектива)
21. 21
Работа с техническим долгом
• просматривайте чужой код
• практикуйте парное программирование
• придерживайтесь стандартов кода
• сделайте технический долг видимым
На уровне истории пользователя (короткосрочная перспектива)
22. 22
Какие еще могут быть долги?
• по качеству (quality debt)
• по функциональности (feature debt)
• пользовательского взаимодействия (user experience debt)
• навыков(skills debt)
Помимо технического долга выделяют также долги:
23. 23
• технический долг может быть нашим союзником, если нам нужно
выиграть время
• лучший вариант - избегать долгов, однако вам это вряд ли удастся
• технический долг снижает продуктивность, поэтому старайтесь
избавиться от него как можно быстрее
• анализируйте технический долг и выстраивайте работу с ним на
разных уровнях
• объясните клиенту, почему важно выделять время на работу с
техническим долгом
• не путайте технический долг с другими видами долгов
Подведем итоги
24. 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/