{"id":5167,"date":"2025-03-07T12:24:33","date_gmt":"2025-03-07T15:24:33","guid":{"rendered":"https:\/\/geekblogti.wpengine.com\/?p=5167"},"modified":"2025-03-17T18:09:43","modified_gmt":"2025-03-17T21:09:43","slug":"lidando-com-codigo-legado","status":"publish","type":"post","link":"https:\/\/www.geekhunter.com/pt/blog\/lidando-com-codigo-legado\/","title":{"rendered":"[Guia completo] Como lidar com software legado?"},"content":{"rendered":"\r\n<p class=\"wp-block-paragraph\">Trabalhar com um software legado, utilizando tecnologias que est\u00e3o no topo no mercado hoje em dia, como <strong><a href=\"https:\/\/geekblogti.wpengine.com\/react-vs-vue-vs-angular-qual-escolher\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"React, Angular (abre numa nova aba)\">React, Angular<\/a><\/strong>, Elixir, Rust, Kotlin, <a href=\"https:\/\/geekblogti.wpengine.com\/svelte-o-framework-javascript-que-nao-e-um-framework\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Svelte  (abre numa nova aba)\"><strong>Svelte <\/strong><\/a>costuma fazer os olhos de muitos desenvolvedores brilharem.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O que acontece \u00e9 que nem sempre trabalhamos com tecnologia de ponta. Temos momentos \u2014 ou at\u00e9 <strong>100% do tempo<\/strong> \u2014 em que precisamos colocar as m\u00e3os no projeto antigo da empresa e fazer manuten\u00e7\u00e3o em um software legado. A m\u00e1 not\u00edcia \u00e9 que, \u00e0s vezes, o c\u00f3digo tem mais de 15 anos de mercado.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Alguns software legados tem m\u00f3dulos t\u00e3o mal escritos, que lembram um buraco negro. S\u00f3 pronunciando o seu nome, o des\u00e2nimo toma conta da equipe.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Brincadeiras \u00e0 parte, c\u00f3digo complexo, milhares de linhas de bagun\u00e7a, sem <strong><a href=\"https:\/\/www.geekhunter.com/pt/blog\/automatizando-testes-com-python-selenium-e-behave\/\">testes automatizados<\/a><\/strong>, documenta\u00e7\u00e3o inexistente, com in\u00fameras responsabilidades, gera muito desconforto.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">\u00c9 sobre esse desconforto e sobre t\u00e9cnicas para voc\u00ea melhorar o c\u00f3digo legado que n\u00f3s vamos falar.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Me acompanhe!<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><a href=\"https:\/\/www.geekhunter.com\/pt\/candidates\/signup?utm_source=Blog&amp;utm_medium=cta&amp;utm_campaign=cadastro-de-candidato\" target=\"_blank\" rel=\"noreferrer noopener\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"209\" class=\"wp-image-7835\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2019\/10\/CTA-Emprego-dos-sonhos-4-1024x209.jpg\" alt=\"\" srcset=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/10\/CTA-Emprego-dos-sonhos-4-1024x209.jpg 1024w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/10\/CTA-Emprego-dos-sonhos-4-150x31.jpg 150w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/10\/CTA-Emprego-dos-sonhos-4-100x20.jpg 100w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/10\/CTA-Emprego-dos-sonhos-4-600x122.jpg 600w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/10\/CTA-Emprego-dos-sonhos-4-450x92.jpg 450w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/10\/CTA-Emprego-dos-sonhos-4-960x196.jpg 960w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/10\/CTA-Emprego-dos-sonhos-4-300x61.jpg 300w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/10\/CTA-Emprego-dos-sonhos-4-768x156.jpg 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Encarando o software legado de frente<\/h2>\r\n\r\n\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Uma estrat\u00e9gia de encarar o problema \u00e9 o colocando debaixo do tapete e fingir que ele n\u00e3o existe. At\u00e9 chegar o momento de dar manuten\u00e7\u00e3o, cada um na equipe pensa: \u201c<em>Espero que n\u00e3o seja o infeliz que tem que a miss\u00e3o de mexer naquele tro\u00e7o<\/em>\u201d.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Como podemos evitar que aquele simp\u00e1tico trecho de algoritmo vire um Frankstein que coloque medo em qualquer pessoa?<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Podemos come\u00e7ar colocando uma luz sobre a escurid\u00e3o do c\u00f3digo e expor os problemas que a bagun\u00e7a causou.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Mas como medir a qualidade? Testando o c\u00f3digo legado?<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Identificar as falhas nos d\u00e1 conhecimento para enfrent\u00e1-las. As consequ\u00eancias mais comuns do software legado, s\u00e3o:<\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>\u00a0\u00a0\u00a0Baixa velocidade de desenvolvimento;<\/li>\r\n<li>\u00a0\u00a0\u00a0Inseguran\u00e7as (ou de alterar o c\u00f3digo e estragar algo importante, ou de colocar em produ\u00e7\u00e3o e a\u00ed sim estragar tudo);<\/li>\r\n<li>\u00a0\u00a0\u00a0Alta complexidade;<\/li>\r\n<li>\u00a0\u00a0\u00a0Baixa coes\u00e3o;<\/li>\r\n<li>\u00a0\u00a0\u00a0Alto acoplamento.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Cada dia que o problema que se mant\u00e9m vivo no c\u00f3digo por falta de interesse ou medo, estamos carregando um fardo cada vez mais pesado.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A decis\u00e3o de n\u00e3o mant\u00ea-lo mais daquela maneira, faz com seja reescrito e colocado no eixo. \u00c9 preciso coragem para transformar, mas, mais do que \u00e9 isso, \u00e9 preciso olhar para o problema.<\/p>\r\n\r\n\r\n\r\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\r\n<p><em>&#8220;Diga n\u00e3o para bugs tenebrosos de dif\u00edcil inspe\u00e7\u00e3o!&#8221;<\/em><\/p>\r\n<cite><strong>PERITO, Jeferson. 2019.<\/strong> <\/cite><\/blockquote>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Caso caiamos em algum c\u00f3digo mal escrito e decidimos refator\u00e1-lo, precisamos avaliar a necessidade e 4 pr\u00e9-requisitos podem ser respeitados:<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">1. Qual o objetivo com a refatora\u00e7\u00e3o?<\/h2>\r\n\r\n\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Nesse momento de valida\u00e7\u00e3o o objetivo n\u00e3o \u00e9 criar um c\u00f3digo perfeito e dedicar muito tempo nisso. A refatora\u00e7\u00e3o pode servir muito para validar id\u00e9ias que est\u00e3o sendo propostas e definidas entre os <em>stakeholders. <\/em><\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Nunca \u00e9 a solu\u00e7\u00e3o final. A ideia pode n\u00e3o ir para frente ou sofrer uma grande altera\u00e7\u00e3o de escopo, onde o grande esfor\u00e7o colocado pode ter servido para nada.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Mas lembre-se:<\/strong> a qualidade tamb\u00e9m n\u00e3o deve ser descartada totalmente, principalmente em projetos-prot\u00f3tipos, que tem alguma chance \u2014 mesmo que pequena \u2014 de serem lan\u00e7ados.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Esses projetos podem ser utilizados como esqueleto em um projeto a ser iniciado, mas vale lembrar que o objetivo principal \u00e9 a valida\u00e7\u00e3o de ideias.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><em>&gt;<\/em><strong><em>&gt;Leitura Recomendada:<\/em><\/strong><em><br \/>Leia nosso artigo sobre a <\/em><a href=\"https:\/\/geekblogti.wpengine.com\/qual-e-a-importancia-da-documentacao-de-software\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong><em>import\u00e2ncia da documenta\u00e7\u00e3o de software<\/em><\/strong><\/a><\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">Quanto tempo a refatora\u00e7\u00e3o tomar\u00e1?<\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Caso voc\u00ea opte pela refatora\u00e7\u00e3o, tempo x qualidade s\u00e3o essenciais.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Por experi\u00eancia pr\u00f3pria, creio que s\u00f3 com a senioridade para conseguir equil\u00edbrio entre qualidade e tempo de desenvolvimento, pois como disse anteriormente, o seu projeto pr\u00e9-prot\u00f3tipo pode virar efetivo no futuro.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Voc\u00ea n\u00e3o quer ter que pagar os juros gerados por um d\u00e9bito t\u00e9cnico, certo? Em resumo: a qualidade n\u00e3o deve ser a m\u00e9trica principal, mas n\u00e3o pode ser esquecida.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><em><strong>&gt;&gt; Leitura Recomendada:<\/strong> <\/em><br \/><em>Leia nosso artigo sobre <\/em><a href=\"https:\/\/geekblogti.wpengine.com\/as-principais-fontes-de-informacao-que-um-programador-deve-conhecer\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"As principais fontes de informa\u00e7\u00e3o de um programador (abre numa nova aba)\"><strong><em>As principais fontes de informa\u00e7\u00e3o de um programador<\/em><\/strong><\/a><\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">2. Vale a pena refatorar na valida\u00e7\u00e3o de produto?<\/h2>\r\n\r\n\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Em oposi\u00e7\u00e3o ao caso anterior, aqui estamos falando de um projeto real.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A qualquer momento, m\u00f3dulos inteiros podem virar p\u00f3, do dia para a noite. Imagine que o sistema possui poucos clientes ou nenhum.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Em um projeto nesse n\u00edvel de maturidade, uma estrat\u00e9gia \u00e9 manter o tronco (<em>core<\/em>) do sistema com uma engenharia razo\u00e1vel e com alta cobertura de testes, pois aqui a chance de grandes mudan\u00e7as costuma ser menor que nas suas periferias.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ent\u00e3o caso caia em uma periferia, lembre-se que aquilo pode n\u00e3o estar ali amanh\u00e3 e aquele esfor\u00e7o de refatorar n\u00e3o valha a pena.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><em>&gt;<\/em><strong><em>&gt;Sugerido:<\/em><\/strong><em><br \/><\/em><strong><em><a href=\"https:\/\/pt.slideshare.net\/rodrigokono\/boas-prticas-tcnica-para-um-cdigo-limpo-clean-code\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Boas pr\u00e1ticas t\u00e9cnica para um clean code (abre numa nova aba)\">Boas pr\u00e1ticas t\u00e9cnica para um c\u00f3digo limp<\/a><\/em><\/strong><a href=\"https:\/\/pt.slideshare.net\/rodrigokono\/boas-prticas-tcnica-para-um-cdigo-limpo-clean-code\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Boas pr\u00e1ticas t\u00e9cnica para um clean code (abre numa nova aba)\"><strong><em>o<\/em><\/strong><\/a><\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><strong>3. O c\u00f3digo est\u00e1 muito ruim. Vale a pena come\u00e7ar de novo?<\/strong><\/h2>\r\n\r\n\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Imagine que o c\u00f3digo est\u00e1 muito ruim. Mesmo assim, eu considero extremismo reconstruir tudo do zero.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Na grande maioria dos casos que presenciei o c\u00f3digo era recuper\u00e1vel. O processo pode ser muito doloroso, mas recuper\u00e1vel.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Em minha avalia\u00e7\u00e3o era: construir algo do zero poderia levar mais tempo e um congelamento da evolu\u00e7\u00e3o do quadro de novas tarefas.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Eu pensava que era mais f\u00e1cil continuar com aquele peda\u00e7o de c\u00f3digo &#8220;<em>sangrando<\/em>&#8221; e ir aplicando regra do escoteiro para refatorar os pontos mais acessados enquanto n\u00e3o conseguisse liberar janela de tempo para corrigir os defeitos mais graves.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><strong>4. C\u00f3digo legado sem manuten\u00e7\u00e3o, mas bem escrito<\/strong><\/h2>\r\n\r\n\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Esse caso \u00e9 algo que particularmente nunca presenciei, mas achei interessante trazer devido ao fato de ter j\u00e1 estudado como atuar nesse tipo de ocasi\u00e3o.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Caso se depare com esse tipo de projeto \u2014 deve ter chego nele por alguma altera\u00e7\u00e3o de escopo \u2014 o n\u00edvel de refatora\u00e7\u00e3o \u00e9 baixo.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Os maiores encargos seriam, basicamente, atualiza\u00e7\u00e3o da vers\u00e3o de linguagem e suas bibliotecas visando maior estabilidade, velocidade e corre\u00e7\u00e3o de bugs.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Outra preocupa\u00e7\u00e3o s\u00e3o <em>trade-offs, <\/em>que j\u00e1 foi algo v\u00e1lido, mas hoje n\u00e3o faz mais sentido.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><a href=\"http:\/\/bit.ly\/2JS9hZn\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" class=\"wp-image-6638\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2019\/07\/CTA-Rodap\u00e9-Front-end-e-Back-end-58-1024x134.jpg\" alt=\"\" \/><\/a><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Start na refatora\u00e7\u00e3o: planejamento<\/h2>\r\n\r\n\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ok, foi decidido dar o pontap\u00e9 inicial em uma refatora\u00e7\u00e3o e voc\u00ea ir\u00e1 se aventurar no c\u00f3digo legado. Mas como escrever um c\u00f3digo leg\u00edvel?<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Para iniciar a nossa aventura precisamos de apoio, ferramentas que nos auxiliem no caminho certo para atingir o objetivo e t\u00e9cnicas comprovadas que garantam a estabilidade do artefato para <em>deploy. <\/em><\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Vejamos algumas delas:<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\"><strong>1. Esteira de etapas automatizada <\/strong><\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Etapas ou <em>jobs<\/em> s\u00e3o processos onde podemos executar <em>scripts<\/em> para realizar alguma tarefa espec\u00edfica.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ent\u00e3o a dica \u00e9 colocarmos em uma ordem estilo &#8220;esteira de montagem&#8221;, podendo executar cada etapa em sequ\u00eancia seguindo pr\u00e9 requisitos de execu\u00e7\u00e3o.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Esses <em>jobs<\/em> ou etapas tamb\u00e9m podem ser paralelizados de acordo com a necessidade, s\u00e3o disparados por algum gatilho ou manualmente.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong>Vamos definir alguns jobs para uma aplica\u00e7\u00e3o web:<\/strong><\/p>\r\n\r\n\r\n\r\n<ul class=\"wp-block-list\">\r\n<li>Build;<\/li>\r\n<li>Testes de integra\u00e7\u00e3o;<\/li>\r\n<li>Testes de aceita\u00e7\u00e3o;<\/li>\r\n<li>Execu\u00e7\u00e3o de scripts de banco de dados;<\/li>\r\n<li>Deploy em ambiente de teste;<\/li>\r\n<li>Deploy em ambiente de produ\u00e7\u00e3o.<\/li>\r\n<\/ul>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Com os jobs definidos vamos colocar em uma esteira.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Existem diversas ferramentas que gerenciam jobs de integra\u00e7\u00e3o cont\u00ednua (<em>Integra\u00e7\u00e3o cont\u00ednua \u00e9 uma pr\u00e1tica de entregar software legado de maneira confi\u00e1vel, automatizada com toler\u00e2ncia a falhas. Sugiro estudar fortemente<\/em>).<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O primeiro job que queremos executar \u00e9 o <strong>Build.<\/strong> A sua responsabilidade ser\u00e1 de rodar os testes de unidade e empacotar em um arquivo que ser\u00e1 a vers\u00e3o candidata para o <em>deploy<\/em> em produ\u00e7\u00e3o.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">\u00c9 importante colocarmos um gatilho que executar\u00e1 toda vez que houver uma altera\u00e7\u00e3o na \u00e1rvore de arquivos no nosso reposit\u00f3rio de c\u00f3digo fonte.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O segundo job deve ser executar os <em>scripts<\/em> de banco de dados. A ordem \u00e9 rodar os testes de integra\u00e7\u00e3o, ap\u00f3s o <em>build<\/em> terminar a execu\u00e7\u00e3o <strong>com sucesso. <\/strong><\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Caso falhe o <em>build<\/em>, essa etapa n\u00e3o ser\u00e1 executada at\u00e9 o job anterior ser corrigido.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O terceiro job, deve ser realizar o <em>deploy<\/em> para o ambiente de teste, caso o job anterior passe com sucesso.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O quarto job \u00e9 executar os testes de aceita\u00e7\u00e3o em ambiente de testes \u2014 caso o job anterior passe sem problemas.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O quinto job deve ser deploy em ambiente de produ\u00e7\u00e3o. <strong>Lembre-se:<\/strong> voc\u00ea s\u00f3 executar\u00e1 se todos os anteriores passarem, mas o gatilho ser\u00e1 manual, pois nem sempre iremos querer um <em>deploy<\/em> em produ\u00e7\u00e3o.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Com o fim da execu\u00e7\u00e3o da esteira, temos a garantia de que tudo passou por bateria de scripts, testes e de que tudo correr\u00e1 bem.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\"><strong>2. An\u00e1lise est\u00e1tica de c\u00f3digo<\/strong><\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Adicionamos um passo a mais: a an\u00e1lise est\u00e1tica de c\u00f3digo. Essa etapa analisar\u00e1 o c\u00f3digo fonte e nos informar\u00e1 o d\u00e9bito t\u00e9cnico.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">At\u00e9 \u00e9 poss\u00edvel configurar pontos como m\u00e9todos muito complexos, nomenclatura fora do padr\u00e3o, n\u00fameros m\u00e1gicos, entre outros.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Isso garante a qualidade em n\u00edvel de legibilidade e facilidade de manuten\u00e7\u00e3o.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Essa etapa pode ou n\u00e3o causar erro na esteira caso o novo <em>commit<\/em> infrinja essas regras.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\"><strong>3. IDE<\/strong><\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Uma IDE ajuda muito hoje em dia por possuir ferramentas de <em>refactoring. <\/em>Essas ferramentas v\u00e3o desde extra\u00e7\u00e3o de fun\u00e7\u00e3o, altera\u00e7\u00e3o de nome de fun\u00e7\u00e3o\/classe (tamb\u00e9m alterando o c\u00f3digo que o chama), entre outras funcionalidades.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Eu particularmente n\u00e3o executo os testes de unidade quando \u00e9 uma refatora\u00e7\u00e3o executada pela IDE, por ter extrema confian\u00e7a nela.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\"><strong>Colocando as m\u00e3os no c\u00f3digo<\/strong><\/h2>\r\n\r\n\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Complexidade pequena, pipeline de <em>build<\/em> e <em>deploy <\/em>automatizado, grande e boa cobertura de testes automatizados, c\u00f3digo bem estruturado e implanta\u00e7\u00e3o definida e automatizada, documenta\u00e7\u00e3o t\u00e9cnica boa e stakeholders acess\u00edveis. O melhor dos mundos para <em>refactoring<\/em><\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Nas condi\u00e7\u00f5es acima, o trabalho \u00e9 tranquilo. O tipo de trabalho de que falo pode ser remover algum ru\u00eddo no c\u00f3digo, atualiza\u00e7\u00e3o de biblioteca ou at\u00e9 mesmo alguma evolu\u00e7\u00e3o de c\u00f3digo.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Fa\u00e7a refatora\u00e7\u00e3o em <em>baby steps. <\/em>A indica\u00e7\u00e3o \u00e9 fazer o <em>build<\/em> e acompanhar o pipeline \u2014 <em>com um bom caf\u00e9 quente<\/em> \u2014 e rodar toda a bateria de testes. \ud83d\ude42<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ok, vimos um pouco do mundo perto da perfei\u00e7\u00e3o. Na vida real isso n\u00e3o vai acontecer com frequ\u00eancia (infelizmente).<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">\u00c9 comum vermos projetos em c\u00f3digo legado que vem se arrastando por anos.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Isso porque, provavelmente, durante o seu desenvolvimento, n\u00e3o surfaram na vibe dos princ\u00edpios <em>clean code. <\/em><\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O <strong><a href=\"https:\/\/www.amazon.com.br\/Clean-Code-Handbook-Software-Craftsmanship\/dp\/0132350882\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"livro Clean Code do Uncle Bob (abre numa nova aba)\">livro Clean Code do Uncle Bob<\/a><\/strong> \u2014 juntamente com outras pessoas influentes \u2014 ajudou a democratizar as pr\u00e1ticas que hoje s\u00e3o difundidas amplamente na Engenharia de Software.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ao pegar software legados com muitos anos de exist\u00eancia, a chance de possuir um n\u00edvel elevado de boas pr\u00e1ticas, nos padr\u00f5es<em> clean cod<\/em>e, \u00e9 menor do que em softwares escritos hoje em dia.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Vamos ver como proceder em alguns casos que falte ou n\u00e3o seja suficiente alguma pr\u00e1tica:<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\"><strong>Testes de unidade<\/strong><\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Refatorar sem testes de unidade e garantir qualidade \u00e9 praticamente imposs\u00edvel.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Precisamos de estabilidade e garantia. Fazer isso de maneira manual \u00e9 muito penoso por causa do tempo para testar.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Enquanto um ser humano levaria dezenas de horas, a m\u00e1quina leva poucos segundos. Mas, caso n\u00e3o tenha testes de unidade, m\u00e3os \u00e0 obra.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">N\u00e3o comece sem antes ver o comportamento mapeado pelos testes. Claro, quando for executado pela esteira com sucesso.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A partir disso ent\u00e3o podemos partir para alterar o c\u00f3digo caso n\u00e3o precise de\u2026<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\"><strong>Testes de integra\u00e7\u00e3o <\/strong><\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Pode ser um passo opcional, o trecho de c\u00f3digo pode n\u00e3o interagir com outros recursos externos como banco de dados, arquivos de sistemas, <em>API<\/em> e etc.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Vale lembrar da pir\u00e2mide de testes, pois testes de integra\u00e7\u00e3o costuma ter um custo de tempo e\/ou recursos da m\u00e1quina, e o ciclo da pipeline tem que ser o mais r\u00e1pido poss\u00edvel. a<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Aqui vale a senioridade mapear o peso de ter esse teste de integra\u00e7\u00e3o.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Eu particularmente acho essencial ter testes de integra\u00e7\u00e3o no core do sistema para blindar de bugs.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Outras partes eu coloco na balan\u00e7a \u00e9 a complexidade ou alta sensibilidade a falha, caso n\u00e3o possuir esses detalhes, um mock de testes resolve bem simulando o comportamento da intera\u00e7\u00e3o entre os componentes.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><em><strong>&gt;&gt; Leitura Recomendada: <\/strong><\/em><br \/><em>Leia nosso artigo sobre as diferen\u00e7as entre <\/em><strong><a href=\"https:\/\/geekblogti.wpengine.com\/front-end-descomplicado-ux-ui\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"UX e UI (abre numa nova aba)\"><em>UX e UI<\/em><\/a><\/strong><\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\"><strong>Testes de aceita\u00e7\u00e3o<\/strong><\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O grande por\u00e9m \u00e9 que o tempo de execu\u00e7\u00e3o, que \u00e9 alto. Algumas dezenas de testes pode levar + de 10 minutos para executar, gerando grande atraso.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">\u00c9 poss\u00edvel simular o comportamento do usu\u00e1rio por meio de testes automatizados, tamb\u00e9m conhecidos como testes de aceita\u00e7\u00e3o.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Novamente aqui vale avaliar se tudo o que ser\u00e1 refatorado merece testes.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">No caso Landing Pages, login no sistema e o core s\u00e3o bons candidatos a ter testes de aceita\u00e7\u00e3o. Vale uma avalia\u00e7\u00e3o criteriosa quanto \u00e0s Landing Pages e Login, pois s\u00e3o as portas de entrada dos usu\u00e1rios do sistema.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\"><strong>Documenta\u00e7\u00e3o T\u00e9cnica<\/strong><\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Esse t\u00f3pico pode incomodar algumas pessoas, principalmente aquelas pessoas usam<a href=\"https:\/\/geekblogti.wpengine.com\/tudo-que-voce-precisa-saber-sobre-agile-scrum-e-kanban\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" metodologias \u00e1geis (abre numa nova aba)\"><strong> metodologias \u00e1geis<\/strong><\/a>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Quem trabalha com metodologia \u00e1gil defende comunica\u00e7\u00e3o sobre documenta\u00e7\u00e3o. Isto \u00e9, a coloca em segundo plano, mas n\u00e3o elimina a utiliza\u00e7\u00e3o.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><strong><a href=\"https:\/\/www.geekhunter.com/pt/blog\/qual-e-a-importancia-da-documentacao-de-software\/\">Documenta\u00e7\u00e3o t\u00e9cnica<\/a><\/strong> pode ser utilizada para clarificar id\u00e9ias em alto n\u00edvel.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ela tem que ser vis\u00edvel a todos e n\u00e3o escondida em um local que ningu\u00e9m veja. Deve ser simples, leve para todos da equipe conseguirem entender e identificar as nuances.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Existem alguns tipos de documenta\u00e7\u00e3o de alto n\u00edvel que pode ser \u00fateis como diagrama de contexto, atividade e m\u00e1quina de estado.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Processos que rodam em <em>background, <\/em>que sofrem pouca manuten\u00e7\u00e3o, defini\u00e7\u00e3o de arquitetura em alto n\u00edvel ou c\u00f3digo em baixo n\u00edvel s\u00e3o candidatos de implementa\u00e7\u00e3o de documenta\u00e7\u00e3o t\u00e9cnica.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\"><strong>Documenta\u00e7\u00e3o n\u00e3o-t\u00e9cnica<\/strong><\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Documenta\u00e7\u00e3o n\u00e3o-t\u00e9cnica s\u00e3o geralmente escritas por profissionais de neg\u00f3cio, com acompanhamento da equipe de desenvolvimento.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Aqui s\u00e3o usados documento de vis\u00e3o, users stories, ou outra forma de padroniza\u00e7\u00e3o de defini\u00e7\u00e3o, n\u00e3o necessariamente \u00e9 um requisito para um software legado de sucesso.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Mas, em muitos casos \u00e9 de grande import\u00e2ncia estrat\u00e9gica. Esses documentos servem como pedra fundamental e, estruturar de maneira textual as funcionalidades do sistema e como o software se comporta, mantendo um hist\u00f3rico e o contrato que o c\u00f3digo-fonte se espelha, ajuda muito.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">A escrita de documenta\u00e7\u00e3o n\u00e3o t\u00e9cnica costuma ser um trabalho das pessoas de neg\u00f3cio, n\u00e3o do setor de TI.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Mas, se identificarmos uma falha que afeta o <em>business<\/em> nosso dever como profissional \u00e9 ajudar na escrita.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Vale a pena a implementa\u00e7\u00e3o em uma refatora\u00e7\u00e3o apenas em caso seja da cultura implementar.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Se n\u00e3o possui, apenas ignore. No entanto, se sentir a real necessidade da documenta\u00e7\u00e3o n\u00e3o-t\u00e9cnica, re\u00fana os interessados e fa\u00e7a uma mesa redonda explicando a necessidade.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\"><em><strong>&gt;&gt; Leitura Recomendada:<\/strong><br \/>Leia nosso artigo sobre a<\/em><a href=\"https:\/\/geekblogti.wpengine.com\/mercado-front-end-da-origem-ate-o-futuro\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" hist\u00f3ria do mercado front-end (abre numa nova aba)\"><strong><em> hist\u00f3ria do mercado front-end<\/em><\/strong><\/a><\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Como evitar que o software legado volte a apresentar problemas estruturais?<\/h2>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><img decoding=\"async\" width=\"1024\" height=\"683\" class=\"wp-image-5252\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2019\/04\/mercado-de-ti-no-brasil-min-1-1024x683.jpg\" alt=\"\" srcset=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/04\/mercado-de-ti-no-brasil-min-1-1024x683.jpg 1024w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/04\/mercado-de-ti-no-brasil-min-1-300x200.jpg 300w, https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2019\/04\/mercado-de-ti-no-brasil-min-1-768x512.jpg 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Uma pr\u00e1tica que muitos gurus da tecnologia defendem \u00e9 a regra do escoteiro: \u201c<em>Deixar o local de acampamento melhor do que voc\u00ea encontrou<\/em>\u201d.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">\u201cMelhor do que voc\u00ea encontrou\u201d n\u00e3o significa o melhor poss\u00edvel.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">O importante \u00e9 resolver alguns dos problemas ponderando com o tempo que tem dispon\u00edvel para <em>refactoring<\/em>.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Voc\u00ea tinha 10 problemas em uma classe e eliminou 3? \u00d3timo, ficou melhor do que antes. Com o tempo os m\u00f3dulos que sofrem mais altera\u00e7\u00f5es tendem ser os melhores escritos.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Refatorar de maneira passiva ajuda a manter a boa qualidade, cria a cultura de boas pr\u00e1ticas e evita ter que alocar tempo para se dedicar a grandes refatora\u00e7\u00f5es de sistema.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Caso queira se aprofundar os estudos, segue a sugest\u00e3o de 3 livros:<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\">1.<a href=\"https:\/\/www.amazon.com.br\/Clean-Code-Handbook-Software-Craftsmanship-ebook\/dp\/B001GSTOAM\/ref=sr_1_1?__mk_pt_BR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&amp;keywords=clean+code&amp;qid=1555527962&amp;s=digital-text&amp;sr=1-1\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Clean Code. (abre numa nova aba)\">Clean Code.<\/a><\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Livro cl\u00e1ssico que reuniu diversas pr\u00e1ticas de c\u00f3digo limpo.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\"><em>2. <a href=\"https:\/\/www.amazon.com.br\/Continuous-Delivery-Deployment-Automation-Addison-Wesley-ebook\/dp\/B003YMNVC0\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Continuous Delivery: Reliable Software Releases Through Build, Test, and Deployment Automation. (abre numa nova aba)\">Continuous Delivery: Reliable Software Releases Through Build, Test, and Deployment Automation.<\/a><\/em><\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ensina passo-a-passo a como automatizar o processo de entrega de software legado em produ\u00e7\u00e3o.<\/p>\r\n\r\n\r\n\r\n<h3 class=\"wp-block-heading\"><em>3. <a href=\"https:\/\/www.amazon.com.br\/Refactoring-Improving-Existing-Addison-Wesley-Signature-ebook\/dp\/B07LCM8RG2\/ref=sr_1_1?__mk_pt_BR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&amp;keywords=Refactoring+improving+the+design+of+existing+code&amp;qid=1555527999&amp;s=digital-text&amp;sr=1-1\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Refactoring improving the design of existing code (1a\/2a edi\u00e7\u00e3o) (abre numa nova aba)\">Refactoring improving the design of existing code<\/a><\/em> <em><a href=\"https:\/\/www.amazon.com.br\/Refactoring-Improving-Existing-Addison-Wesley-Signature-ebook\/dp\/B07LCM8RG2\/ref=sr_1_1?__mk_pt_BR=%C3%85M%C3%85%C5%BD%C3%95%C3%91&amp;keywords=Refactoring+improving+the+design+of+existing+code&amp;qid=1555527999&amp;s=digital-text&amp;sr=1-1\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"Refactoring improving the design of existing code (1a\/2a edi\u00e7\u00e3o) (abre numa nova aba)\">(1a\/2a edi\u00e7\u00e3o)<\/a><\/em><\/h3>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Livro do Martin Fowler sobre refatora\u00e7\u00e3o de c\u00f3digo legado o tornando atual, mapeando diversas t\u00e9cnicas e processos.<\/p>\r\n\r\n\r\n\r\n<figure class=\"wp-block-image\"><a href=\"http:\/\/bit.ly\/2JS9hZn\" target=\"_blank\" rel=\"noreferrer noopener\"><img decoding=\"async\" class=\"wp-image-6509\" src=\"https:\/\/geekblogti.wpengine.com\/wp-content\/uploads\/2019\/07\/CTA-Rodap\u00e9-Front-end-e-Back-end-24-1024x134.jpg\" alt=\"\" \/><\/a><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Afinal, como lidar com software legado?<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Software legado \u00e9 desenvolvido por uma empresa e ela possui cultura, se ela n\u00e3o tem no sangue testes automatizados e clean code, pode ser um grande desafio trazer boas pr\u00e1ticas porque mudan\u00e7a de cultura \u00e9 complexo e demorado.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Organizar <em>workshops <\/em>para os desenvolvedores e apresenta\u00e7\u00e3o formal para a ger\u00eancia sobre as vantagens pr\u00e1ticas de clean code, agiliza mudan\u00e7as, diminui stress e pode ser um in\u00edcio de mudan\u00e7a de paradigma no local onde voc\u00ea trabalha.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Lembre-se de n\u00e3o ficar desapontado(a) ou indignado(a) com a pessoa que escreveu daquela maneira.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Fa\u00e7a um exerc\u00edcio de empatia e imagine qual era o clima da empresa, o n\u00edvel t\u00e9cnico, a cultura e a exig\u00eancia da \u00e9poca. Outro lembrete \u00e9 que a pipeline e refatora\u00e7\u00e3o caminham de m\u00e3os dadas!<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Boa sorte!<\/p>\r\n","protected":false},"excerpt":{"rendered":"<p>Trabalhar com um software legado, utilizando tecnologias que est\u00e3o no topo no mercado hoje em dia, como React, Angular, Elixir, Rust, Kotlin, Svelte costuma fazer os olhos de muitos desenvolvedores brilharem. O que acontece \u00e9 que nem sempre trabalhamos com tecnologia de ponta. Temos momentos \u2014 ou at\u00e9 100% do tempo \u2014 em que precisamos [&hellip;]<\/p>\n","protected":false},"author":167,"featured_media":13069,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[18],"tags":[],"class_list":["post-5167","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-desenvolvimiento-de-software"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.3 (Yoast SEO v28.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Como trabalhar com um software legado?<\/title>\n<meta name=\"description\" content=\"O artigo de hoje \u00e9 um guia completo de como lidar com software legado. Saiba como planejar o refactoring, quando e como fazer.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.geekhunter.com\/pt\/blog\/lidando-com-codigo-legado\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[Guia completo] Como lidar com software legado?\" \/>\n<meta property=\"og:description\" content=\"Trabalhar com um software legado, utilizando tecnologias que est\u00e3o no topo no mercado hoje em dia, como React, Angular, Elixir, Rust, Kotlin, Svelte\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.geekhunter.com\/pt\/blog\/lidando-com-codigo-legado\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Geekhunter\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/geekhunterbr\/\" \/>\n<meta property=\"article:published_time\" content=\"2025-03-07T15:24:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-03-17T21:09:43+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2022\/12\/junior-developer-sitting-down-on-desk-showing-laptop-with-source-code-to-senior-dev-asking-for-opinion-programer-writing-algorithm-interrupted-by-colleague-wanting-help-with-fixing-errors-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1440\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Geekhunter\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@geekhunterbr\" \/>\n<meta name=\"twitter:site\" content=\"@geekhunterbr\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Geekhunter\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/lidando-com-codigo-legado\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/lidando-com-codigo-legado\\\/\"},\"author\":{\"name\":\"Geekhunter\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/person\\\/9f62b173345139f7bbdaf55312c3d400\"},\"headline\":\"[Guia completo] Como lidar com software legado?\",\"datePublished\":\"2025-03-07T15:24:33+00:00\",\"dateModified\":\"2025-03-17T21:09:43+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/lidando-com-codigo-legado\\\/\"},\"wordCount\":2896,\"publisher\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/lidando-com-codigo-legado\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/junior-developer-sitting-down-on-desk-showing-laptop-with-source-code-to-senior-dev-asking-for-opinion-programer-writing-algorithm-interrupted-by-colleague-wanting-help-with-fixing-errors-scaled.jpg\",\"articleSection\":[\"Desenvolvimiento de software\"],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/lidando-com-codigo-legado\\\/\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/lidando-com-codigo-legado\\\/\",\"name\":\"Como trabalhar com um software legado?\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/lidando-com-codigo-legado\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/lidando-com-codigo-legado\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/junior-developer-sitting-down-on-desk-showing-laptop-with-source-code-to-senior-dev-asking-for-opinion-programer-writing-algorithm-interrupted-by-colleague-wanting-help-with-fixing-errors-scaled.jpg\",\"datePublished\":\"2025-03-07T15:24:33+00:00\",\"dateModified\":\"2025-03-17T21:09:43+00:00\",\"description\":\"O artigo de hoje \u00e9 um guia completo de como lidar com software legado. Saiba como planejar o refactoring, quando e como fazer.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/lidando-com-codigo-legado\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/lidando-com-codigo-legado\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/lidando-com-codigo-legado\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/junior-developer-sitting-down-on-desk-showing-laptop-with-source-code-to-senior-dev-asking-for-opinion-programer-writing-algorithm-interrupted-by-colleague-wanting-help-with-fixing-errors-scaled.jpg\",\"contentUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2022\\\/12\\\/junior-developer-sitting-down-on-desk-showing-laptop-with-source-code-to-senior-dev-asking-for-opinion-programer-writing-algorithm-interrupted-by-colleague-wanting-help-with-fixing-errors-scaled.jpg\",\"width\":2560,\"height\":1440,\"caption\":\"engenharia-de-dados-entrevista-carreira\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/lidando-com-codigo-legado\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"In\u00edcio\",\"item\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mundo TI\",\"item\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/category\\\/mundo-ti\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Desenvolvimiento de software\",\"item\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/category\\\/mundo-ti\\\/desenvolvimiento-de-software\\\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"[Guia completo] Como lidar com software legado?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/\",\"name\":\"Blog de TI\",\"description\":\"Dicas para o RH e profissionais da \u00e1rea TI\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#organization\",\"name\":\"GeekHunter\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/icon-1.png\",\"contentUrl\":\"https:\\\/\\\/www.geekhunter.com/pt/blog\\\/wp-content\\\/uploads\\\/2024\\\/10\\\/icon-1.png\",\"width\":300,\"height\":300,\"caption\":\"GeekHunter\"},\"image\":{\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/geekhunterbr\\\/\",\"https:\\\/\\\/x.com\\\/geekhunterbr\",\"https:\\\/\\\/www.instagram.com\\\/geekhunterbr\\\/\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/geekhunter-brasil\\\/\",\"https:\\\/\\\/www.youtube.com\\\/@GeekHunterOfficial\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/#\\\/schema\\\/person\\\/9f62b173345139f7bbdaf55312c3d400\",\"name\":\"Geekhunter\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g\",\"caption\":\"Geekhunter\"},\"url\":\"https:\\\/\\\/www.geekhunter.com\\\/pt\\\/blog\\\/author\\\/matias\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Como trabalhar com um software legado?","description":"O artigo de hoje \u00e9 um guia completo de como lidar com software legado. Saiba como planejar o refactoring, quando e como fazer.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.geekhunter.com\/pt\/blog\/lidando-com-codigo-legado\/","og_locale":"pt_BR","og_type":"article","og_title":"[Guia completo] Como lidar com software legado?","og_description":"Trabalhar com um software legado, utilizando tecnologias que est\u00e3o no topo no mercado hoje em dia, como React, Angular, Elixir, Rust, Kotlin, Svelte","og_url":"https:\/\/www.geekhunter.com\/pt\/blog\/lidando-com-codigo-legado\/","og_site_name":"Blog Geekhunter","article_publisher":"https:\/\/www.facebook.com\/geekhunterbr\/","article_published_time":"2025-03-07T15:24:33+00:00","article_modified_time":"2025-03-17T21:09:43+00:00","og_image":[{"width":2560,"height":1440,"url":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2022\/12\/junior-developer-sitting-down-on-desk-showing-laptop-with-source-code-to-senior-dev-asking-for-opinion-programer-writing-algorithm-interrupted-by-colleague-wanting-help-with-fixing-errors-scaled.jpg","type":"image\/jpeg"}],"author":"Geekhunter","twitter_card":"summary_large_image","twitter_creator":"@geekhunterbr","twitter_site":"@geekhunterbr","twitter_misc":{"Escrito por":"Geekhunter","Est. tempo de leitura":"16 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/lidando-com-codigo-legado\/#article","isPartOf":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/lidando-com-codigo-legado\/"},"author":{"name":"Geekhunter","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/person\/9f62b173345139f7bbdaf55312c3d400"},"headline":"[Guia completo] Como lidar com software legado?","datePublished":"2025-03-07T15:24:33+00:00","dateModified":"2025-03-17T21:09:43+00:00","mainEntityOfPage":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/lidando-com-codigo-legado\/"},"wordCount":2896,"publisher":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#organization"},"image":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/lidando-com-codigo-legado\/#primaryimage"},"thumbnailUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2022\/12\/junior-developer-sitting-down-on-desk-showing-laptop-with-source-code-to-senior-dev-asking-for-opinion-programer-writing-algorithm-interrupted-by-colleague-wanting-help-with-fixing-errors-scaled.jpg","articleSection":["Desenvolvimiento de software"],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/lidando-com-codigo-legado\/","url":"https:\/\/www.geekhunter.com\/pt\/blog\/lidando-com-codigo-legado\/","name":"Como trabalhar com um software legado?","isPartOf":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/lidando-com-codigo-legado\/#primaryimage"},"image":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/lidando-com-codigo-legado\/#primaryimage"},"thumbnailUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2022\/12\/junior-developer-sitting-down-on-desk-showing-laptop-with-source-code-to-senior-dev-asking-for-opinion-programer-writing-algorithm-interrupted-by-colleague-wanting-help-with-fixing-errors-scaled.jpg","datePublished":"2025-03-07T15:24:33+00:00","dateModified":"2025-03-17T21:09:43+00:00","description":"O artigo de hoje \u00e9 um guia completo de como lidar com software legado. Saiba como planejar o refactoring, quando e como fazer.","breadcrumb":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/lidando-com-codigo-legado\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.geekhunter.com/pt/blog\/lidando-com-codigo-legado\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/lidando-com-codigo-legado\/#primaryimage","url":"https:\/\/www.geekhunter.com\/pt\/blog\/wp-content\/uploads\/2022\/12\/junior-developer-sitting-down-on-desk-showing-laptop-with-source-code-to-senior-dev-asking-for-opinion-programer-writing-algorithm-interrupted-by-colleague-wanting-help-with-fixing-errors-scaled.jpg","contentUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2022\/12\/junior-developer-sitting-down-on-desk-showing-laptop-with-source-code-to-senior-dev-asking-for-opinion-programer-writing-algorithm-interrupted-by-colleague-wanting-help-with-fixing-errors-scaled.jpg","width":2560,"height":1440,"caption":"engenharia-de-dados-entrevista-carreira"},{"@type":"BreadcrumbList","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/lidando-com-codigo-legado\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"In\u00edcio","item":"https:\/\/www.geekhunter.com/pt/blog\/"},{"@type":"ListItem","position":2,"name":"Mundo TI","item":"https:\/\/www.geekhunter.com/pt/blog\/category\/mundo-ti\/"},{"@type":"ListItem","position":3,"name":"Desenvolvimiento de software","item":"https:\/\/www.geekhunter.com/pt/blog\/category\/mundo-ti\/desenvolvimiento-de-software\/"},{"@type":"ListItem","position":4,"name":"[Guia completo] Como lidar com software legado?"}]},{"@type":"WebSite","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#website","url":"https:\/\/www.geekhunter.com\/pt\/blog\/","name":"Blog de TI","description":"Dicas para o RH e profissionais da \u00e1rea TI","publisher":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.geekhunter.com/pt/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#organization","name":"GeekHunter","url":"https:\/\/www.geekhunter.com\/pt\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.geekhunter.com\/pt\/blog\/wp-content\/uploads\/2024\/10\/icon-1.png","contentUrl":"https:\/\/www.geekhunter.com/pt/blog\/wp-content\/uploads\/2024\/10\/icon-1.png","width":300,"height":300,"caption":"GeekHunter"},"image":{"@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/geekhunterbr\/","https:\/\/x.com\/geekhunterbr","https:\/\/www.instagram.com\/geekhunterbr\/","https:\/\/www.linkedin.com\/company\/geekhunter-brasil\/","https:\/\/www.youtube.com\/@GeekHunterOfficial"]},{"@type":"Person","@id":"https:\/\/www.geekhunter.com\/pt\/blog\/#\/schema\/person\/9f62b173345139f7bbdaf55312c3d400","name":"Geekhunter","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/secure.gravatar.com\/avatar\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/09a0f76de8cf1fa3621f8b73417ce43344b42e1324a07a9af24f57c5eef49840?s=96&d=mm&r=g","caption":"Geekhunter"},"url":"https:\/\/www.geekhunter.com\/pt\/blog\/author\/matias\/"}]}},"_links":{"self":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/posts\/5167","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/users\/167"}],"replies":[{"embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/comments?post=5167"}],"version-history":[{"count":0,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/posts\/5167\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/media\/13069"}],"wp:attachment":[{"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/media?parent=5167"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/categories?post=5167"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.geekhunter.com/pt/blog\/wp-json\/wp\/v2\/tags?post=5167"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}