Как оценивать, управлять и избегать технических долгов

Опубликовано: 2020-05-26

Если технический долг звучит как что-то взятое из справочника по финансам, то это потому, что этот термин связан с финансами. Однако на самом деле технический долг связан с программированием. Это идея о том, что во время разработки программного проекта некоторые необходимые шаги пропускаются или просто отбрасываются, чтобы уложиться в срок.

В стремлении разработать идеальное приложение или программное обеспечение разработчики часто ограничены во времени — так же, как и любой случайный человек, выполняющий любую произвольную задачу. Таким образом, обычно имеет смысл найти какой-то компромисс между созданием идеального продукта с идеальным кодом и максимальным использованием времени.

Тогда возникает вопрос: есть ли предел этим компромиссам? Есть ли неотъемлемый вред, который может возникнуть в результате этого компромисса? Наконец, действительно ли разработчику лучше в долгосрочной перспективе? В этой статье о технических долгах я попытаюсь ответить на все эти вопросы.

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

What Is Technical Debt

При определении технического долга нам придется сослаться на человека, которому приписывают создание этого термина, в первую очередь: Уорда Каннингема. По словам Каннингема, технический долг относится к дополнительной работе по разработке, которая должна быть направлена ​​на программирование кода, чтобы компенсировать дефицит, возникающий при его программировании в течение короткого периода времени.

Чтобы сделать это более наглядным, представьте, что вам поручили убрать беспорядок в комнате, и вы опаздываете на урок. Стремясь удостовериться, что вы выполняете инструкцию, а также вовремя приходите на урок, вы делаете быструю уборку, подметая большую часть мусора под диван. Последствием этого является то, что вам в конечном итоге придется потратить время на то, чтобы разобраться в беспорядке. При разработке программного обеспечения, когда вы пропустите необходимые шаги и пойдете по более простому маршруту с «не очень чистыми» кодами, вам будет сложнее очистить код позже в будущем. В домино программного проекта встречаются несколько фаз, и чем дольше вы игнорируете существующую проблему, тем больше времени требуется для ее решения.

Типы технических долгов

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

Запланированные технические долги

Это происходит в ситуациях, когда организации намеренно решают залезть в технические долги. Как уже говорилось ранее, это обычно делается для того, чтобы превзойти установленные сроки и достичь конкретной цели. Занимаясь запланированными техническими долгами, организация должна четко понимать, от чего она готова отказаться, а от чего не может. Вы должны вести точные записи, помня о том, что в конечном итоге вам придется вернуться и исправить ошибки, которые вы пропустили в начале.

Непреднамеренные технические долги

Этот тип технического долга является прямой противоположностью первому. Он возникает, когда организация не предвидит и не планирует технический долг. Причиной этого обычно является нарушение связи между различными подразделениями в организации или паршивая практика работы между подразделениями.

Неизбежные технические долги

Это своего рода технический долг, который не могли бы предотвратить никакие действия со стороны организации. Например, при быстрых изменениях в технологии вполне логично, что некоторые коды, написанные в прошлом, не будут соответствовать текущим прогнозируемым стандартам.

Кроме того, такого рода технический долг может возникнуть, когда запрашиваются изменения, когда код уже написан. Если на полпути к разработке программного обеспечения будут внесены определенные изменения, это может испортить динамику, сделав старый код устаревшим или ненужным.

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

Causes of Technical Debt

Некоторые причины технического долга обсуждались выше, но я просто выберу их одну за другой, чтобы сделать их более ясными.

Спешка

Наиболее частая причина технического долга — спешка. Разработчики часто устанавливают строгие сроки, некоторые из которых включают сроки запуска определенного программного обеспечения. Часто понятно (и ожидаемо) в подобных ситуациях, что разработчик может по ходу дела иметь технические долги. Этот тип технического долга часто является преднамеренным и может привести к проблемам, которые могут варьироваться от ошибок в коде до появления спагетти-кодов.

недосмотр/ошибка

Иногда программисты просто пишут плохой код, что в итоге приводит к техническим долгам. Независимо от того, существует ли плохой код в результате ошибки кодера или нет, дело в том, что ошибки приводят к техническим долгам, и, поскольку они не масштабируемы, их в конечном итоге придется исправлять.

Неосведомленность о последствиях

Иногда технические долги возникают из-за того, что программист не понимает или не понимает, насколько вредны технические долги в долгосрочной перспективе. Это может происходить из-за законного незнания вредных последствий использования ярлыков во время программирования или из-за преднамеренного игнорирования последствий.

Намерение

Технические долги могут возникать преднамеренно в результате преднамеренных действий кодера или организации.

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

Это происходит в основном из-за того, что один код может одновременно обслуживать разные бизнес-логики. Такая ситуация значительно усложняет работу с программным обеспечением. С каждым кодом, который пишет разработчик, тем больше шансов, что у него возникнут проблемы с модульностью.

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

Evaluation of Technical Debt

Технические долги никогда не должны рассчитываться вручную, потому что это было бы довольно сложно. Это означало бы, что придется вручную вводить код, чтобы определить текущие проблемы и возможные проблемы в будущем. Помимо того, что ручной процесс занимает много времени, существует вероятность того, что коды изменили бы форму в конце ручного процесса.

Одним из способов проведения оценки является выполнение статического анализа с использованием некоторых поддерживающих его инструментов. Некоторые из инструментов, которые можно использовать, включают Coverity, SonarQube, Check Style и Closure Compiler.

Как правило, существует два способа расчета технического долга. В первом подходе его можно было получить путем расчета коэффициента технического долга вслед за кодовым коэффициентом. Здесь первоначальная оценка или общее время, необходимое для разработки приложения, будет использоваться для определения времени, необходимого для устранения технического долга.

Во втором подходе вы можете напрямую использовать оценки, полученные с помощью различных инструментов, таких как SonarQube. Это будет объединено со списками технических долгов, а также их справочными кодами. С помощью инструментов вы можете получить точную оценку времени, необходимого для исправления.

Оценка технического долга даст вам представление о том, сколько дней потребуется для устранения технического долга. Чем больше долгов, тем больше времени вам потребуется, чтобы их исправить.

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

Что делать, если возникла техническая задолженность, и вы не знаете, что делать? Есть определенные шаги, которые вы можете предпринять, чтобы управлять техническими долгами.

Во-первых, вы должны признать, что технические долги существуют, и сообщить об этом своей команде. В общении вы должны четко понимать, что произошло и что нужно сделать, чтобы исправить это. Вы должны убедиться, что вы четко сообщаете о необходимости позаботиться о техническом долге при первой же возможности.

После информирования вашей команды о технических долгах вы можете воспользоваться тремя подходами. При первом подходе вы можете решить продолжать использовать систему как есть. В этом случае приложение будет использоваться как есть.

В качестве альтернативы вы можете решить реорганизовать приложение. Рефакторинг выполняется с целью уменьшения сложности приложения, а также очистки структуры приложения. При рефакторинге поведение ПО не изменится; единственной затронутой частью будет внутренняя структура.

Наконец, если два рассмотренных выше варианта не работают, вам придется полностью заменить код. Одна из проблем заключается в том, что это может привести к новым техническим долгам, но в долгосрочной перспективе это может быть лучшим компромиссом.

Как избежать технических долгов в будущем

Avoiding Technical Debts

Конечно, очевидно, что избегать технических долгов определенно разумнее, чем пытаться исправить их, когда они возникают. Помимо того, что это сэкономит вам время и нервы, это также гарантирует отсутствие остаточных последствий, возникающих из-за наличия технических долгов с самого начала.

Можно утверждать, что технические долги сами по себе не так уж плохи. Как правило, они проблематичны, потому что это долги, которые нужно возвращать, а люди — не самый ответственный вид на земле. Последовательный выбор более слабого варианта, как правило, ослабляет силу вашего программного обеспечения и затрудняет последующее улучшение функциональности. В целом, избегание технических долгов — лучший выбор для всех.

Итак, как предотвратить возникновение технических долгов:

Создайте Бэклог Проекта

Идея здесь состоит в том, чтобы держать всех в курсе процесса и приводить их в соответствие с требованиями к любой выполняемой задаче. Создание журнала невыполненных работ позволяет каждому увидеть невыполненные задачи и пути их достижения.

Ставьте качество выше скорости

Если вы сами программист, вы должны научиться ставить качественную работу над большим объемом работы. Убедитесь, что ваши коды чисты, а ваши приложения или другое программное обеспечение разработаны в совершенстве. Поймите, что искушение срезать путь не стоит того, потому что в конце концов вам все равно придется выполнять задачи, которые вы отбросили.

Если вы возглавляете команду, вы должны донести эти же ценности до членов команды. Членов следует научить создавать решения, ориентированные на результат, и избегать ярлыков.

Создайте осведомленность

Как правило, глубокие знания о том, что такое технический долг и как его избежать, могут быть полезны для предотвращения их возникновения в первую очередь. Когда вы вооружаете своих разработчиков необходимыми знаниями, они лучше избегают ловушек, связанных с техническими долгами.

Внедряйте передовые методы кодирования

Некоторые методы кодирования повышают вероятность того, что вы попадете в технический долг. Таким образом, было бы здорово избежать тесной связи, использовать абстракцию и рефакторинг.

Внедрить обновленную технологию

Регулярные обновления технологий могут быть отличным средством предотвращения технических долгов. При обновлении вы должны убедиться, что используются самые последние версии фреймворка, баз данных и прикладного программного обеспечения.

Вывод

Технические долги в подавляющем большинстве случаев неизбежны, пока вы продолжаете разрабатывать программы и писать коды. Однако вероятность их возникновения может быть значительно снижена, если следовать перечисленным выше шагам. Кроме того, в случае возникновения технических долгов не теряется всякая надежда. Сохраняйте спокойствие, будьте уверены, действуйте соответственно.