Trabalhando com código legado
Renato Oliveira
Ou evitando o desejo de reescrever tudo do zero
Slide 3
Slide 3 text
QUEM SOU EU?
@_renatooliveira
Recifense
Comunidade
Django Software Foundation
Bike
Café
Slide 4
Slide 4 text
LABCODES
Estúdio de Software
de Recife para o
mundo
Tecnologias
trabalhadas
Labcodes e a
comunidade
Slide 5
Slide 5 text
MOTIVAÇÃO
Slide 6
Slide 6 text
- Definição oficial que ninguém usa
“Código legado se refere a um programa
que não é mais mantido”
Slide 7
Slide 7 text
O QUE É CÓDIGO LEGADO?
Código sem testes?
Código mal escrito?
- Como definir se o código é mal escrito?
Slide 8
Slide 8 text
QUALIDADE DE CÓDIGO
Slide 9
Slide 9 text
MÉTRICAS
Média de linhas de código por método
Média de complexidade ciclomática por
método
Profundidade na árvore de herança
Falta de coesão em métodos
Conexões aferentes de uma classe
Slide 10
Slide 10 text
No content
Slide 11
Slide 11 text
MÉTRICAS
Funcionar
Fácil de entender
Fácil de mudar
Slide 12
Slide 12 text
FUNCIONAR
Softwares têm bugs. Isso é normal!
Slide 13
Slide 13 text
FUNCIONAR
Aceitando o fato que todo software tem bug
Nem todo bug é de alta prioridade
Não é porque seu produto tem menos bugs
que o concorrente que ele terá mais sucesso
É importante garantir que um bug não ocorra
de novo após corrigido
TESTES!
Slide 14
Slide 14 text
FÁCIL DE ENTENDER
“Readability Counts”
Style guides (PEP-008) - Beyond PEP 8
Raymond Hettinger
Código sem sotaque
API consistente
Slide 15
Slide 15 text
FÁCIL DE MUDAR
Quatro razões para mudar um software
Adicionar uma feature
Corrigir um bug
Melhorar o design
Otimização
Slide 16
Slide 16 text
FÁCIL DE MUDAR
Testes
Dependências
Repetição de código não é um problema é um
sintoma.
Design e Feedback
Slide 17
Slide 17 text
TUTORIAL DE TDD
(TEST DRIVEN DESIGN)
Terça 10/10 às 14h!
Slide 18
Slide 18 text
CÓDIGO LEGADO
Slide 19
Slide 19 text
- Definição achada na 7ª página de resultados do google
“Legacy code is a codebase that is
continually patched, but no longer
engineered”
Slide 20
Slide 20 text
- Definição achada na 7ª página de resultados do google
“Legacy code is a codebase that is
continually patched, but no longer
engineered”
Slide 21
Slide 21 text
No content
Slide 22
Slide 22 text
No content
Slide 23
Slide 23 text
No content
Slide 24
Slide 24 text
No content
Slide 25
Slide 25 text
Engenharia é a aplicação do
conhecimento científico, econômico, social
e prático, com o intuito de inventar,
desenhar, construir, manter e melhorar
estruturas, máquinas, aparelhos, sistemas,
materiais e processos.
Slide 26
Slide 26 text
MANTER E MELHORAR
Slide 27
Slide 27 text
No content
Slide 28
Slide 28 text
CENÁRIO
Startup “de tecnologia” com 1 dev
Quem escreveu o código saiu do time
Código desenvolvido em python 2.7
Você passa mais tempo resolvendo bug do
que implementando novas features
Slide 29
Slide 29 text
No content
Slide 30
Slide 30 text
RESISTA
Resista a tentação de reescrever código do
zero!
É caro!
Não entrega valor por MUITO tempo!
Refatoração é diferente de redesign!
Existe valor no código mal escrito
LOGS
Ajudam a entender o fluxo da aplicação
Transformam a aplicação em um livro de
registros
Sentry
Slide 39
Slide 39 text
AUTOMATIZE TAREFAS
REPETIDAS
Deploy
Dump de database
Criação de usuários
Tarefas que não entregam valor ao usuário
final
Slide 40
Slide 40 text
- Uncle Bob.
“Always leave the campground cleaner
than you found”
Regra do escoteiro
Slide 41
Slide 41 text
FLUXO DE CORREÇÃO DE BUG
1. Crie um teste para o bug. O teste DEVE falhar
2. Corrija o bug
3. Teste passa
4. Deploy
5. Procure por repetição de código/responsabilidades fora
do lugar que você inseriu
1. Proponha uma nova abordagem com um teste. O
teste DEVE falhar
2. Implementar a nova abordagem
3. Teste passa
4. Deploy
Slide 42
Slide 42 text
REFATORAÇÃO
Como vender refatoração?
Make the invisible, visible
Ataque as áreas mais críticas do sistema
primeiro
Release early, release often