Qual é a origem do termo negativo "código legado"

28

Todo mundo fala sobre código legado no desenvolvimento de software e eu ouvi o termo nos últimos dez anos usado para pintar qualquer base de código como ruim.

De onde se originou esse termo, que tem conotações tão poderosas para os programadores?

Estou certo de que deve haver algum livro sobre desenvolvimento de software que tenha sido pioneiro nesse termo. Gostaria de localizar a origem do termo "código herdado".

stevebot
fonte
13
Ouvi a seguinte definição de código legado há 20 anos e lembro-me desde então: código legado é o código que você possui atualmente em produção. Isso ajudou meu ponto de vista muitas vezes.
Michael Durrant
10
"Código legado" é um termo negativo? Quem diz isso? De qualquer forma, a palavra "legado" não é específica para programação, nem é especialmente significativa nesse contexto.
Robert Harvey
5
Michael Feathers ( amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/… ) provavelmente não é o inventor desse termo, mas ele fez uma definição interessante: chamou o código legado de "código sem testes". E isso é realmente um atributo negativo.
Doc Brown
11
Escreva um monte de código. Faça o check-in. Vá almoçar. Volte. Há uma tela inteira cheia de código legado! Agora você precisa entender esse código e garantir que todas as alterações futuras funcionem corretamente no contexto desse código. O código legado é o mesmo que o código existente .
Eric Lippert
4
"Legado" aqui significa simplesmente que os desenvolvedores originais não estão mais por perto, e apenas os artefatos de código e documentação são deixados. Não se refere a uma idade ou qualidade de forma alguma.
SK-logic

Respostas:

39

O código legado é baseado na frase de um sistema legado que se aplica especificamente ao código. Segundo a Wikipedia, provavelmente remonta à década de 1970 e era de uso comum na década de 1980. Ele decolou com a explosão tecnológica dos anos 90.

Isso pode ser visto no visualizador ngram do Google: sistema legado, código legado

sistema e código legado

Indo além, você pode encontrar usos documentados do termo 'sistema legado' na década de 1970 .

O exemplo mais antigo de 'sistema legado' que o Google possui está em um livro sobre Anais da Conferência de Computação e Análise Numérica do Exército, de 1978:

... a solução bem estruturada e documentada para um problema claramente definido é que a operação do sistema legado precisa ser entendida e alterar o sistema existente com confiança.

Há também um exemplo de 'sistema legado' sendo usado fora da indústria de tecnologia em Clout: Womanpower and Politics sorrin 1976:

... além disso, ela ocupa o cargo de democrata de terceiro escalão no poderoso Comitê de Bancos e Moeda - posições de poder que ela construiu por conta própria, não através do sistema legado.

Além desse exemplo, que mostra que seu uso se estendeu além do mundo puro do software, as especificidades de onde exatamente o termo se originou provavelmente serão perdidas para as areias do tempo. Dada a militar e referências políticas, ele pode ter se originado com eles (principalmente o militar e sua migração jargão ( "Parece provável que 'kluge' veio a MIT via alunos das muitas eletrônica militar projectos executados em Cambridge durante a guerra (muitos em O venerável Edifício 20 do MIT, que abrigava o TMRC ... " ))


fonte
Esta é uma ótima resposta. Vou continuar pesquisando para encontrar uma origem, mas você provavelmente está certo de que a origem foi perdida ou possivelmente não documentada.
SteveBot
11
@ stevebot Eu sugiro seguir o caminho do 'sistema legado' em vez de código ... esse termo parece ter um código legado anterior e tem o mesmo significado essencial.
6
O texto do seu 'livro sobre formação de títulos carbono-carbono a partir de 1979' é de um livro chamado 'Novas práticas em gerenciamento de projetos' e é de 2002 (publicado pela primeira vez em 1998). Parece que algo ficou confuso na verificação.
Pete Kirkham
11
Não parece que essa é a fonte do termo negativo.
JeffO
@JeffO Não, como MichaelT menciona que não é conclusivo de onde veio. Essa é uma resposta muito boa, embora mostre pesquisa e esforço.
Stevebot
5

A base de código herdada geralmente não se refere a um sistema POS, mas a qualquer sistema que exista em uma base de código ou sistema que não seja mais usado para novos desenvolvimentos. Por exemplo, minha equipe atualmente suporta alguns aplicativos .net 1.1 e 2.0 que são considerados código legado. Se chegar um momento em que uma modificação é necessária, elas serão reescritas ou atualizadas para usar as estruturas e os padrões mais recentes. Até então, os gerenciamos como aplicativos herdados que precisam continuar funcionando, mas nenhum aprimoramento ou correção de código é implementado.

Existem também alguns sistemas legados aos quais não oferecemos suporte, escritos no VB6 e no ASP clássico. Não temos capacidade ou diretiva para oferecer suporte ou modificar esses sistemas, mas enquanto eles continuarem em execução e não tiverem necessidade de aprimoramentos, provavelmente não serão atualizados. Não há nada de particularmente errado com nenhum desses sistemas. Eles realizam seus trabalhos da maneira que deveriam e, além de parecerem um aplicativo entre meados e o final dos anos 90, não têm grandes problemas.

Portanto, legado não significa POS, apenas um sistema que foi criado em uma tecnologia ou linguagem anterior que não está de acordo com os padrões atuais. Alguns sistemas legados se qualificam como POS principalmente porque não possuíam as metodologias de desenvolvimento existentes atualmente que permitem código gerenciado e os mais de 15 anos de experiência dos codificadores da web veteranos.

SoylentGray
fonte
Concordo plenamente que os sistemas legados não são necessariamente sistemas POS. Eu estou querendo saber qual é a origem da frase.
SteveBot
3
@ stevebot Se você quiser encontrar a origem do termo, peça isso sem pressupor uma conotação.
um CVn
2
@ stevebot - Um legado é qualquer coisa que você deixa para trás quando passa adiante. Eu presumiria que o descritor tivesse sido adotado apenas como foi adotado em inúmeros outros campos.
SoylentGray
11
@ MichaelKjörling, você está me dizendo que nunca ouviu um código legado usado em sentido negativo? Essa não é a minha conotação, mas a de outras pessoas que ouvi várias vezes em encontros, livros e trabalhos. Como eu disse, concordo plenamente que o legado não deve ser um termo negativo.
SteveBot
@stevebot - o código legado parece apenas 'negativo', porque só é usado no contexto de substituição ou interface com um sistema mais antigo (e as dificuldades dele). Um programa que foi construído há mais de uma década, mas ainda é útil / relevante e tem poucos bugs, ainda é um 'software legado', mas todos chamam de 'software'. O mesmo vale para as bases de código.
Robotnik
3

"Código legado" é um termo usado pelo pessoal de marketing para pressionar aqueles cujo código é antigo (mas provavelmente funciona bem) a atualizar para as mais recentes e melhores linguagens e técnicas de software (e provavelmente mais repletas de erros). Está intimamente ligado ao "sistema legado", que se refere a hardware e sistemas operacionais antigos que funcionam bem, mas não estão em conformidade com o que é agora "politicamente correto" (por exemplo, OpenVMS, sistema IBM).

JohnM
fonte
6
Embora isso possa ser verdade, seria melhor se você editasse a resposta para citar referências específicas que apóiam as reivindicações feitas nesta resposta. Existem referências que você possa citar?
precisa
2

O termo código legado data de pelo menos 1989, conforme usado por Glenn Everhart em comp.sys.amiga :

(... a propósito, sim, às vezes eu também programa em C ... mas acho mais fácil converter código legado sem alterar seu idioma ...)

Não encontrei nada verificável anteriormente no Google Livros.

Hugo
fonte
Como Eric Lippert apontou, no minuto exato em que você escreveu um pedaço de código, obteve um código legado. As curvas mostradas por MichaelT e sua descoberta apenas visualizam o período de tempo, onde o aumento da TI em geral começou a produzir imensas quantidades de código, envolvendo muitas pessoas em todo o mundo. Um pouco mais tarde, a necessidade de substituir sistemas "antigos" por sistemas mais novos também foi criada - e é por isso e quando se tornou um termo generalizado.
JensG
11
O código antigo estava sendo substituído constantemente, se houvesse uma boa razão para isso. Eu trabalhava em um sistema de cobrança de mainframe escrito (em PL / 1) em 1970. Ele substituiu um sistema escrito em linguagem assembly de mainframe (que por si só era em grande parte uma automação de um sistema manual existente). O sistema PL / 1 foi finalmente substituído após cerca de 35 anos de uso (algumas tentativas frustradas de substituí-lo antes disso). Possivelmente agora as tecnologias modernas são descartadas muito antes (e desconsiderando a quantidade de reescritas do sistema patrimonial que isso provavelmente implica).
Kickstart