Что делает код наследственным? - PullRequest
41 голосов
/ 26 января 2009

Я слышал, что многие разработчики называют код "устаревшим". В большинстве случаев это код, написанный кем-то, кто больше не работает над проектом. Что делает код устаревшим?

Обновление в ответ на: «Что-то переданное от предка, предшественника или из прошлого» * ​​1003 *http://www.thefreedictionary.com/legacy. Очевидно, вы хотели знать что-то еще. Не могли бы вы уточнить или расширить свой вопрос? С. Лотт

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

С другой стороны, явно устаревший код, который стоит сохранить.

Ответы [ 21 ]

40 голосов
/ 26 января 2009

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

25 голосов
/ 26 января 2009

Что делает код устаревшим?

Как и в случае с обычным наследием, когда автор мертв или отсутствует, вы как наследник получаете весь или часть его кода.

Вы проливаете слезы и пытаетесь понять, что делать со всем этим мусором.

21 голосов
/ 26 января 2009

У Майкла Фезерса есть интересное определение в его книге «Эффективная работа с устаревшим кодом». По его словам, устаревший код - это код без автоматизированных тестов.

17 голосов
/ 26 января 2009

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

  1. База кода основана на языке / платформе, которая полностью не поддерживается производителем оригинального продукта (часто говорят, что производитель обанкротился).

  2. (на самом деле 1a) Кодовая база или платформа, на которой она построена, настолько стара, что найти квалифицированных или опытных разработчиков для системы сложно и дорого.

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

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

12 голосов
/ 26 января 2009

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

11 голосов
/ 26 января 2009

По словам Майкла Фезерса, автора превосходной Эффективной работы с устаревшим кодом , устаревший код - это код, который не имеет тестов. Когда нет способа узнать, что ломается, когда меняется этот код.

Главное, что отличает устаревший код из не устаревшего кода тесты, а точнее отсутствие тестов. Мы может почувствовать это с небольшим мысленный эксперимент: насколько легко это будет чтобы изменить вашу базу кода, если это мог бы откусить, если бы мог сказать когда ты ошибся? Это было бы довольно легко, не так ли? Большинство из страх, связанный с внесением изменений в большие кодовые базы - это страх внесение тонких ошибок; страх непреднамеренно меняя вещи. С тесты, вы можете сделать вещи лучше с безнаказанность. Для меня разница такова критический, он подавляет любой другой различие. С помощью тестов вы можете сделать вещи лучше. Без них ты просто не знаю, идут ли дела лучше или хуже.

8 голосов
/ 26 января 2009

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

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

Бригада TDD может предположить, что любой код без тестов является устаревшим кодом.

7 голосов
/ 26 января 2009

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

5 голосов
/ 06 декабря 2016

Никто не будет читать это, но я чувствую, что другие ответы не совсем правильно:

  1. Он имеет значение, если бы он не был полезен, его давно бы выбросили
  2. Трудно рассуждать, потому что любой из
    1. Отсутствие документации,
    2. Невозможно найти или забыть оригинального автора (да, через 2 месяца ваш код тоже может быть устаревшим!)
    3. Отсутствие тестов или систем типов
    4. Не следует современным практикам (то есть нет контекста, на котором можно держаться)
  3. Существует требование изменить или расширить его. Если нет необходимости изменять его, это не устаревший код так как никто не заботится об этом. Он делает свое дело и никого нет вокруг, чтобы назвать это устаревшим кодом.
5 голосов
/ 26 января 2009

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

...