Aula 161: Lidando com Código Legado
Código legado é um termo que se refere a softwares que ainda estão em uso, mas foram escritos no passado. Pode ser problemático devido a vários fatores, incluindo práticas desatualizadas, falta de documentação e dificuldades em entender sua arquitetura. Este artigo explorará estratégias para lidar com código legado usando Swift, fornecendo exemplos para ilustrar essas técnicas.
Entendendo Código Legado
Código legado geralmente não possui testes e recursos modernos. Ele também pode usar bibliotecas e padrões obsoletos. Trabalhar com isso pode ser desafiador, mas existem estratégias eficazes para melhorar a manutenibilidade sem reescrever tudo do zero.
Estratégias para Lidar com Código Legado
1. Escrevendo Testes
Antes de fazer quaisquer alterações, é crucial estabelecer uma rede de segurança. Escrever testes para código legado permite que você faça mudanças de refatoração com confiança, garantindo que as funcionalidades existentes permaneçam intactas.
// Código legado
class Usuario {
var nome: String
init(nome: String) {
self.nome = nome
}
func cumprimentar() -> String {
return "Olá, \(nome)!"
}
}
// Testes para código legado
import XCTest
class UsuarioTests: XCTestCase {
func testCumprimento() {
let usuario = Usuario(nome: "João")
XCTAssertEqual(usuario.cumprimentar(), "Olá, João!")
}
}
2. Refatoração
Uma vez que você tenha os testes prontos, pode começar a refatorar. Refatoração é o processo de reestruturar o código existente sem mudar seu comportamento externo. Isso torna o código mais limpo e melhora a manutenibilidade.
Exemplo: Extrair Método
Imagine um método com uma lógica excessivamente complexa. Você pode extrair partes do método em métodos menores para melhorar a legibilidade.
// Método legado
func calcularTotal(preco: Double, imposto: Double) -> Double {
let total = preco + (preco * imposto)
exibirTotal(total: total)
return total
}
// Código refatorado
func calcularTotal(preco: Double, imposto: Double) -> Double {
let total = computarTotal(preco: preco, imposto: imposto)
exibirTotal(total: total)
return total
}
private func computarTotal(preco: Double, imposto: Double) -> Double {
return preco + (preco * imposto)
}
3. Substituindo Bibliotecas Obsoletas
O código legado pode depender de bibliotecas desatualizadas. Identificar essas dependências e substituí-las por alternativas modernas melhora a segurança e o desempenho.
Exemplo: Usando URLSession do Swift em vez de uma Biblioteca de Terceiros
Se um projeto legado usa uma biblioteca de rede de terceiros, considere substituí-la pelo URLSession
embutido no Swift.
// Código legado usando uma biblioteca de terceiros
import AlgumaBibliotecaAntigaDeRede
class GerenciadorDeRede {
func buscarDados() {
AlgumaBibliotecaAntigaDeRede.get("http://exemplo.com") { dados in
// manipular dados
}
}
}
// Refatorado para usar URLSession
class GerenciadorDeRede {
func buscarDados() {
guard let url = URL(string: "http://exemplo.com") else { return }
let tarefa = URLSession.shared.dataTask(with: url) { dados, resposta, erro in
// manipular dados
}
tarefa.resume()
}
}
4. Atualizações Incrementais
Em vez de tentar converter toda a base de código de uma só vez, considere fazer pequenas atualizações incrementais. Essa abordagem reduz o risco de introduzir novos bugs e permite que você se concentre em uma funcionalidade de cada vez.
5. Revisões de Código e Programação em Par
Incentive os membros da equipe a participar de revisões de código e programação em par. Isso promove a troca de conhecimentos e pode ajudar a entender melhor o código legado. Também garante que mais de uma pessoa revise o código ao refatorar ou adicionar novos recursos.
6. Documentação
À medida que você trabalha no código legado, reserve um tempo para documentar suas alterações e a base de código existente. Uma boa documentação pode aliviar o trabalho para futuros desenvolvedores que precisarem lidar com o código depois.
Conclusão
Lidar com código legado pode ser assustador, mas com as estratégias certas, você pode torná-lo gerenciável. Ao escrever testes, refatorar de maneira inteligente, substituir bibliotecas obsoletas, realizar atualizações incrementais, engajar-se em revisões de código e documentar seu trabalho, você pode melhorar significativamente a qualidade do código legado.
Encare o desafio e lembre-se de que cada pequena melhoria contribui para uma base de código mais manutenível e robusta. Boa codificação!