Что такое legacy: терминология — Что такое legacy code?

Содержание

Легаси код — зло вселенского масштаба

ГлавнаяУслуги

О насРаботыОтзывыБлог

Главная
Блог
Легаси код — зло вселенского масштаба

Обратно

Legacy code — устойчивое выражение, обозначающее старый код без каких-либо пояснений как в нём разобраться. Legacy (англ.) – наследство. Это может быть чужой код, старый код, свежий кривой или старый качественный. Главный признак — отсутствие возможности в нём разобраться.

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

Я в своей жизни ещё ни разу не встречал проекта, где бы всё было сделано по правилам проектирования архитектуры, с хорошей документацией и чётким пониманием того, куда движется проект. Как правило — это ужасный легаси код, отсутствие не только документации, а даже каких-либо комментариев в самом коде, полное отсутствие логики построения приложения и полное попустительство со стороны заказчика. Что же делать и как с этим жить?

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

  • нежелание заказчика контролировать команду разработчиков
  • отсутствие на проекте архитектора и тимлида
  • отсутствие код-ревью
  • отсутствие в команде понимания, что такое командная работа
  • банальная лень и непрофессионализм
  • очень сжатые сроки для разработки

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

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

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

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

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

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

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

Что же нужно делать в подобной ситуации, чтобы не угробить весь проект? Для начала необходимо провести полный анализ всего проекта. Создать, как минимум, концептуальную документацию, как работает ресурс. Нарисовать диаграммы проекта, чтобы по ним было проще понять, какой функционал можно безболезненно отрезать от монолитного проекта. Из отрезанного функционала можно строить абстрактные мини-решения, которые уже не будут жестко завязаны в один тугой узел со всем проектом. Например, можно это создать на базе микросервисов.

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

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

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

источник
источник иллюстрации Medium

Кофе-брейк #20. Что такое legacy-код и как с ним работать. Инструменты, которые облегчают написание технической документации

Что такое legacy-код и как с ним работать

Источник: Dou
Рано и поздно программисту наверняка придется встретиться с legacy-кодом. Чтобы облегчить последствия этого знакомства, я подобрал несколько практических советов и примеров из собственного опыта — в частности, работы с унаследованной Java-системой.

Особенности legacy

Legacy (наследство) — это чужой код, который часто бывает ужасен настолько, что оказывается вообще непонятно, как с ним работать. И если вам придется работать с legacy-системой, кроме старого кода вы также встретитесь:

  • с устаревшей технологией;
  • неоднородной архитектурой;
  • недостатком или даже полным отсутствием документации.

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

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

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

Обратный инжиниринг

Для успешной работы с legacy-кодом придется пользоваться приемами reverse engineering. Для начала, нужно внимательно читать код, чтобы точно понимать, как именно он работает. Это обязательно, ведь документации у нас, скорее всего, не будет. Если мы не поймем хода мыслей автора, будем делать изменения с непредсказуемыми последствиями. Чтобы обезопасить себя от этого, нужно вникать еще и в смежный код. И при этом двигаться не только вширь, но и вглубь. Откуда вызывается метод с ошибкой? Откуда вызывается вызывающий его код? В legacy-проекте «call hierarchy» и «type hierarchy» используется чаще, чем что-либо еще.
Придется провести много времени с отладчиком: во-первых, чтобы находить ошибки, и, во-вторых, чтобы понять, как все работает. Что касается документации, не лишним будет прибегнуть к промышленной археологии. Очень полезно бывает откопать где-нибудь старую документацию и поговорить с теми, кто помнит, как писался доставшийся вам код.
Используя эти приемы, рано или поздно вы начнете более или менее понимать код. Но чтобы ваши усилия не пошли прахом, вы должны обязательно сразу же документировать результаты своих изысканий. Для этого я советую рисовать блок-схемы или диаграммы последовательности (sequence diagrams). Конечно, вам будет лень, но делать это точно нужно, иначе через полгода без документации вы сами в этом коде будете копаться как в первый раз.

Не переписывайте код

Самое важное в процессе разработки — вовремя бить себя по рукам и не пытаться переписать весь код заново. Прикиньте, сколько человеко-лет для этого потребуется. Вряд ли заказчик захочет потратить столько денег на переделывание того, что уже и так работает. Это касается не только системы в целом, но и любой ее части. Вам, конечно, могут дать неделю на то, чтобы во всем разобраться, и еще неделю на то, чтобы что-то исправить. Но вряд ли дадут два месяца на написание части системы заново.
Вместо этого реализуйте новый функционал в том же стиле, в каком написан остальной код. Иными словами, если код старый, не стоит поддаваться соблазну использовать новые красивые технологии: такой код потом будет очень тяжело читать. Например, вы можете столкнуться с ситуацией, которая была у нас: часть системы написана на Spring MVC, а часть — на голых сервлетах. И если в части, написанной на сервлетах, нужно дописать еще что-то, то дописываем мы это так же — на сервлетах.

Соблюдайте бизнес-интересы

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

Тестируйте

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

  1. Верификация, когда реализованный функционал фичи проверяется в отдельной ветке.
  2. Стабилизация, когда проверяется ветка релиза, в которой все фичи слиты вместе.
  3. Сертификация, когда все то же самое прогоняется еще раз на немного других тест-кейсах в сертификационном окружении, максимально приближенном к продакшену по характеристикам железа и конфигурации.

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

Формализуйте DevOps и релиз

Релизная процедура может быть, например, следующей. Когда заканчивается разработка и пройдены две или три фазы тестирования, мы пишем письмо DevOps-команде за 36 часов до предполагаемого времени релиза. После этого созваниваемся с девопсами и обсуждаем все изменения окружений (мы сообщаем им обо всех изменениях в БД и конфигурации). На каждое изменение у нас есть документ (тикет в Jira). Затем во время релиза все причастные к этому собираются вместе, и каждый говорит, что он сейчас делает: «Мы залили базу», «Мы перезапустили такие-то серверы», «Мы пошли прогонять регрессионные тесты в рабочем окружении». Если же что-то идет не так, запускается процедура отката релиза, точно описанная в изначальном документе на релиз — без такого документа мы обязательно что-нибудь забудем или напутаем.

Контролируйте качество кода

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

Инструменты, которые облегчают написание технической документации

Источник: Dzone
Большинство программистов не любят писать техническую документацию. Эксперт по психологии Джеральд Вайнберг даже назвал документацию «касторовым маслом программирования»: разработчики любят ее читать, но сами писать просто ненавидят.
Отсутствие руководства или пустая дорожная карта приводят к нехватке информации о том, как работают различные части программного обеспечения. В конечном итоге это ухудшает восприятие ситуации конечными пользователями кода, поскольку при отсутствии документации они не могут полагаться на точность и полезность продукта.
Чтобы программисту было легче сформировать у себя привычку писать документацию, я рекомендую обратить внимание на четыре отличных инструмента, доступных сейчас практически каждому.

GitHub Pages

Сегодня, вероятно, нет ни одного разработчика, который не имел бы опыта работы в GitHub. Кроме того, это отличное место для программистов, которым нужно где-то хранить документацию. Многие используют стандартный Readme в своей кодовой базе, чтобы предоставить пользователю простое практическое руководство, но это не единственный способ создания документации на GitHub.
Используя GitHub Pages, вы получаете не только хостинг для страниц своего проекта, включая документацию и руководства. Вы получаете возможность напрямую взаимодействовать со всеми репозиториями GitHub, что позволяет разработчикам обновлять документацию так же, как они обновляют свой код. Более того, здесь вы можете использовать Jekyll — он помогает преобразовать разметку в виде обычного текста или в полноценные веб-страницы.

Read the Docs

Как следует из названия, Read the Docs предоставляет разработчикам платформу для хранения и чтения документации. Сервис работает примерно так же, как GitHub Pages: программисты могут вносить изменения в документацию из своих любимых систем контроля версий, включая Git, Bazaar, Mercurial и других. Также поддерживается автоматическая обработка версий и создание страниц.
Лучшая часть Read Docs — это его гибкость. Он поддерживает веб-хуки, поэтому можно автоматизировать большую часть процесса создания документов. Это огромная экономия времени при выполнении задачи, с которой большинство программистов вообще не хотят иметь ничего общего. Кроме того, все, что размещено на платформе, доступно для широкой публики в различных форматах, включая PDF, одностраничный HTML и даже формат электронных книг. Сервис берет на себя значительную часть рутинной работы по поддержанию актуальности документации.

Tettra

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

Apiary

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

Что такое наследие и почему вы должны думать о своем?

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

 

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

 

Зачем оставлять наследие?

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

 

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

 

Как оставить наследие

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

 

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

 

Что включать в устаревшее письмо

Можно создать устаревшее письмо самостоятельно. Consider these points that you might include in your written document:

 

  • Personal history
  • Life memories
  • Accomplishments
  • Career successes
  • Religious views
  • Personal values ​​
  • Dreams for the future
  • Family recipes

 

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

 

Старые проекты, которые можно начать в любом возрасте

 

Инструменты, которые помогут вам оставить наследие

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

 

Инструменты для записи и документирования вашего сообщения могут включать:

  • Pen and Paper
  • Программное обеспечение для обработки текстов и ноутбук
  • Audio Recorder
  • Приложение для видеозаписи
  • Цифровые фотоальбуации
  • Цифровые фотоальбом
  • 111111111111111111111111111111038

    01111111111111111111111111111111111111111111111111111111111111111111111ЕТСКИ

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

     

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

     

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

     

    Оставить наследство через благотворительную организацию

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

     

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

     

    Помощь близкому оставить наследие

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

     

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

     

    Унаследованные проекты, пока человек еще жив

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

     

    У семьи останется сокровище не только после смерти человека. Но опыт создания наследия для любимого человека — отличный способ создать воспоминания вместе.

     

    Уважение к наследию после ухода близкого человека

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

     

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

     

    Никогда не поздно создать наследие

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

     

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

     

    Присоединяйтесь к нашему сообществу в  Instagram и Facebook. Мы будем рады видеть вас там.

    Наследие Определение и значение | YourDictionary

    lĕgə-sē

    наследство

    существительное

    наследство

    Деньги или имущество, оставленное кому-либо по завещанию; завещание.

    Новый мир Вебстера

    Все, что передано от предка или как от предка.

    Webster’s New World

    Студент, подающий заявление или поступивший в колледж или университет, который является родственником выпускника.

    Webster’s New World

    Дарение личного имущества или денег.

    Определение наследия — это то, что передается вам от семьи, включая репутацию.

    Примером наследия является семейная собственность, которая передавалась из поколения в поколение.

    YourDictionary

    Синонимы:

    • Синонимы:
    • завещание
    • семейная реликвия
    • основание
    • разработка
    • 8

    • наследие
    • право первородства
    • подарок
    • традиция
    • наследие

    реклама

    прилагательное

    быть или иметь отношение к чему-либо, особ. нечто устаревшее или иным образом нежелательное, перенесенное из предыдущей системы, бизнес-операции и т. д.

    Webster’s New World

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

    Устаревшие файлы в старой системе электронной почты.

    Американское наследие

    Наследие означает старый стиль или систему.

    Примером наследия является файловая система предыдущего секретаря на вашей новой работе.

    YourDictionary

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

    Викисловарь

    Оставленный; старый или больше не используется.

    Они ожидают, что на обработку и импорт всех устаревших данных уйдут годы.

    Устаревший номер или идентификатор означает номер, который больше не используется (например, для документа).
    Другие формы слова Наследие

    Существительное

    Единственное число:

    наследие

    Множественное число:

    наследие

    Происхождение наследия

    • средний английский Legacie Офис заместителя от старого французского от средневекового латинского Lēgātia от Latin Lēgātus in 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 .

Читайте также: