SlideShare uma empresa Scribd logo
Globalcode – Open4education
Python – Sistemas legados, qualidade de código e bad smells
Gisele Zomer Rossi
Globalcode – Open4education
Gisele Zomer Rossi
Mestre em computação aplicada
Trabalho 10 anos com desenvolvimento
Professora Cesusc – Programação com python, programação web, Orientação a
objetos e dispositivos móveis.
Construção e design de APIs utilizando Python e flask
Globalcode – Open4education
Sistemas legados
Globalcode – Open4education
Globalcode – Open4education
Globalcode – Open4education
Código legado é código que
recebemos de alguém, ou seja, é o
código de outra pessoa.
Globalcode – Open4education
É sobre transformar sistemas que
se deterioram gradualmente em
sistemas que melhoram
gradualmente!
Globalcode – Open4education
Refatoração
Globalcode – Open4education
• Refatorar é melhorar o código depois de ele ter sido escrito
• "Refatoramento é o processo de mudança de um sistema de software
de tal maneira que não altere o comportamento externo do código e
ainda melhore a sua estrutura interna"
Globalcode – Open4education
Bad smells
Globalcode – Open4education
• Bad smells são possíveis falhas existentes no código que podem ser
melhoradas por meio de refatorações.
• Cada Bad smells examina um tipo específico de elemento do sistema,
como, por exemplo, classes ou métodos.
Globalcode – Open4education
Códigoduplicado
Globalcode – Open4education
• Código duplicado quebra um dos princípios da orientação a
objetos que é reutilização de código
• Programadores duplicam código para mostrar “trabalho”
(métrica de commit), e por dificuldade de entender o código
já existente
• Corrigir bugs em dois lugares
• Duplicar testes
Globalcode – Open4education
ACOPLAMENTO E COESÃO
Globalcode – Open4education
• Classes e métodos devem ter baixo acoplamento e alta coesão
• Classes ou método grandes podem indicar baixa coesão
Globalcode – Open4education
Use nomes que revelem
o seu propósito
Globalcode – Open4education
• Se um nome necessita de um comentário, então ele não revela o seu
propósito
• Evitar que nome de variáveis contenham a palavra variável, assim
como, evitar que o nome de uma tabela tenha a palavra tabela/table
Globalcode – Open4education
• A diferença do programador amador e do profissional é que o profissional entende
que clareza é fundamental e não tenta ficar se exibindo com códigos super difíceis
• Nome de métodos devem ser verbos:
postar_pagamento
excluir_pagina
salvar_pessoa
Globalcode – Open4education
• Definir um padrão de nomenclatura
Globalcode – Open4education
Utilize constantes
•O que é o 45?!
•É uma lista de que?!
•O que tem na posição 2?!
Globalcode – Open4education
Comentários
Globalcode – Open4education
Globalcode – Open4education
Globalcode – Open4education
•Não insira comentários em código ruim, reescreva-o
•Desejamos colocar comentário pois nem sempre encontramos uma forma
de nos expressar sem eles
Globalcode – Open4education
• Quando estiver em uma situação que seja colocar comentários no
seu código, pense se isso não pode ser transcrito no código
• Comentários errados ou desatualizados são piores que nenhum
comentário
Globalcode – Open4education
Métodos/Funções
Globalcode – Open4education
• O programa deve ser lido como se fosse uma série de parágrafos, cada
um descrevendo o nível atual e fazendo referência aos parágrafos
consecutivos
• Métodos devem ser pequenos
• Os métodos devem fazer apenas uma coisa (coesão)
Globalcode – Open4education
O código deve ser lido de cima para baixo
com uma narrativa
Globalcode – Open4education
Blocos dentro de if/else/while devem ter apenas uma linha, uma chamada a um
método (método com um nome significativo)
Globalcode – Open4education
• Princípio de responsabilidade única
• Antigamente se falava que as funções/métodos devem caber
no monitor
• O ideal é ter 4 ou 5 linhas.
Globalcode – Open4education
Parâmetros de métodos
Globalcode – Open4education
Recomendação de utilizar no máximo 3 parâmetros
Globalcode – Open4education
• Evite passar booleano por parâmetro
• Dificulta o entendimento e mostra que o método faz mais de uma coisa
• Prefira criar dois métodos ao invés de um que receba true e false
Globalcode – Open4education
• Evite muitas condições no mesmo if
• Refatore essas condições para um método
Globalcode – Open4education
• Coloque os blocos que estiverem dentro do try em um outro método
• Os métodos devem fazer apenas uma coisa e tratar o erro é só uma
coisa
Globalcode – Open4education
Formatação
Globalcode – Open4education
• Deve-se declarar as variáveis o mais próximo possível de onde serão
usadas
• Variáveis de instância devem ser declaradas no início da classe
• Métodos dependentes devem ficar próximos. De preferência quem
estiver chamando deve ficam em cima.
Globalcode – Open4education
Globalcode – Open4education
Testes
Globalcode – Open4education
• Quanto maior a cobertura de testes menor o medo
• Os testes não devem ter qualidade menor do que o código de produção, eles devem evoluir junto
• Um método de teste deve ter um único assert, mostrando que o testes faz uma única coisa (mesma lógica nos métodos)
Globalcode – Open4education
• Como testar esse código?
• Quantos testes serão necessários para validar todas as condições?
Globalcode – Open4education
Métricas de qualidade de código
Globalcode – Open4education
Por meio delas é possível chegar a maior compreensão do
código fonte, proporcionando, também, a avaliação da
qualidade e a evolução das melhorias do código que está
sendo produzido
Globalcode – Open4education
Complexidade ciclomática
Globalcode – Open4education
• Indica a complexidade de trecho de código
• O resultado da complexidade ciclomática indica quantos testes precisam
ser executados para que se verifique todos os fluxos possíveis que o
código pode tomar, a fim de garantir uma completa cobertura de testes.
Globalcode – Open4education
Quanto custa entender esse código?!
Globalcode – Open4education
Métodos ponderados por classe
Globalcode – Open4education
• Esta é uma métrica de complexidade de código que indica que uma
classe não pode ter muitos métodos
• Geralmente, se uma classe possui muito métodos ela não é coesa,
ou seja, não faz uma única coisa
Globalcode – Open4education
Profundidade na árvore de herança
Globalcode – Open4education
• Uma classe que possui muitos filhos ou mais que três pais, gera um alto
nível de acoplamento no código, além de aumentar drasticamente a
complexidade
• Deste caso, o programador deve, conhecer os métodos da classe atual, e
os métodos de todas as classes pai.
Globalcode – Open4education
Globalcode – Open4education
Obrigada!
https://www.linkedin.com/in/gisele-zomer-rossi

Mais conteúdo relacionado

Mais procurados

TDC 2012 TDD e 20 coisas que você precisa saber
TDC 2012 TDD e 20 coisas que você precisa saberTDC 2012 TDD e 20 coisas que você precisa saber
TDC 2012 TDD e 20 coisas que você precisa saber
Camilo Lopes
 
Facilitando o desenvolvimento orientado a testes em aplicações PHP
Facilitando o desenvolvimento orientado a testes em aplicações PHPFacilitando o desenvolvimento orientado a testes em aplicações PHP
Facilitando o desenvolvimento orientado a testes em aplicações PHP
Pedro Chaves
 
TDD na Prática
TDD na PráticaTDD na Prática
TDD na Prática
Rafael Fuchs, PMP, MBA
 
Gof design patterns
Gof design patternsGof design patterns
Gof design patterns
Eduardo Carvalho
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
Engenharia de Software Ágil
 
Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atech
cesarcneto
 
Palestra TDD - TDC - 2016
Palestra TDD - TDC - 2016Palestra TDD - TDC - 2016
Palestra TDD - TDC - 2016
Bruno Maomeh
 
Design patterns de uma vez por todas
Design patterns de uma vez por todasDesign patterns de uma vez por todas
Design patterns de uma vez por todas
Michael Castillo Granados
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"
thiagobapt
 
TDD - Test Driven Development com JAVA
TDD - Test Driven Development com JAVATDD - Test Driven Development com JAVA
TDD - Test Driven Development com JAVA
Paulo Igor Alves Godinho
 
Revisão de Código - Uma prática que depende da cultura
Revisão de Código - Uma prática que depende da culturaRevisão de Código - Uma prática que depende da cultura
Revisão de Código - Uma prática que depende da cultura
Leandro Parazito
 
Palestra TDD Javou! #08 2016
Palestra TDD Javou! #08 2016Palestra TDD Javou! #08 2016
Palestra TDD Javou! #08 2016
Matheus Fechine de Moura
 
TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação
Icaro Camelo
 
Be React. Do Tests!
Be React. Do Tests!Be React. Do Tests!
Be React. Do Tests!
Henrique Gogó
 
Minicurso de TDD
Minicurso de TDDMinicurso de TDD
Minicurso de TDD
William G. Comnisky
 
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Adam Victor Brandizzi
 
Codigo limpo
Codigo limpoCodigo limpo
Codigo limpo
diegomcunha
 
Coding Dojo - Funcionamento
Coding Dojo - FuncionamentoCoding Dojo - Funcionamento
Coding Dojo - Funcionamento
thiagodp
 
Apresentação testes white box
Apresentação testes white boxApresentação testes white box
Apresentação testes white box
Bárbara Cabral da Conceição, CTFL
 
7 interfaces
7 interfaces7 interfaces
7 interfaces
Thiago Oliveira
 

Mais procurados (20)

TDC 2012 TDD e 20 coisas que você precisa saber
TDC 2012 TDD e 20 coisas que você precisa saberTDC 2012 TDD e 20 coisas que você precisa saber
TDC 2012 TDD e 20 coisas que você precisa saber
 
Facilitando o desenvolvimento orientado a testes em aplicações PHP
Facilitando o desenvolvimento orientado a testes em aplicações PHPFacilitando o desenvolvimento orientado a testes em aplicações PHP
Facilitando o desenvolvimento orientado a testes em aplicações PHP
 
TDD na Prática
TDD na PráticaTDD na Prática
TDD na Prática
 
Gof design patterns
Gof design patternsGof design patterns
Gof design patterns
 
TDD - Test Driven Development
TDD - Test Driven DevelopmentTDD - Test Driven Development
TDD - Test Driven Development
 
Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atech
 
Palestra TDD - TDC - 2016
Palestra TDD - TDC - 2016Palestra TDD - TDC - 2016
Palestra TDD - TDC - 2016
 
Design patterns de uma vez por todas
Design patterns de uma vez por todasDesign patterns de uma vez por todas
Design patterns de uma vez por todas
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"
 
TDD - Test Driven Development com JAVA
TDD - Test Driven Development com JAVATDD - Test Driven Development com JAVA
TDD - Test Driven Development com JAVA
 
Revisão de Código - Uma prática que depende da cultura
Revisão de Código - Uma prática que depende da culturaRevisão de Código - Uma prática que depende da cultura
Revisão de Código - Uma prática que depende da cultura
 
Palestra TDD Javou! #08 2016
Palestra TDD Javou! #08 2016Palestra TDD Javou! #08 2016
Palestra TDD Javou! #08 2016
 
TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação TDD: Técnicas, Benefícios e Limitação
TDD: Técnicas, Benefícios e Limitação
 
Be React. Do Tests!
Be React. Do Tests!Be React. Do Tests!
Be React. Do Tests!
 
Minicurso de TDD
Minicurso de TDDMinicurso de TDD
Minicurso de TDD
 
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
Desenvolvimento Orientado a Documentação? Utilizando doctests para tornar seu...
 
Codigo limpo
Codigo limpoCodigo limpo
Codigo limpo
 
Coding Dojo - Funcionamento
Coding Dojo - FuncionamentoCoding Dojo - Funcionamento
Coding Dojo - Funcionamento
 
Apresentação testes white box
Apresentação testes white boxApresentação testes white box
Apresentação testes white box
 
7 interfaces
7 interfaces7 interfaces
7 interfaces
 

Semelhante a Python tdc2019

F# para devs c# tdc
F# para devs c#   tdcF# para devs c#   tdc
F# para devs c# tdc
Lucas Teles
 
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHPCombatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Rodrigo Dos Santos
 
Clean code em C#
Clean code em C#Clean code em C#
Clean code em C#
Gustavo Araújo
 
TDC2018SP | Trilha .Net - Programacao Funcional com C#
TDC2018SP | Trilha .Net - Programacao Funcional com C#TDC2018SP | Trilha .Net - Programacao Funcional com C#
TDC2018SP | Trilha .Net - Programacao Funcional com C#
tdc-globalcode
 
TDC2012 Agile - 7 Padrões Para Implantar Métodos Ágeis
TDC2012 Agile - 7 Padrões Para Implantar Métodos ÁgeisTDC2012 Agile - 7 Padrões Para Implantar Métodos Ágeis
TDC2012 Agile - 7 Padrões Para Implantar Métodos Ágeis
Suelen Carvalho
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In Tuba
Rafael Paz
 
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
Bruno Tanoue
 
TDC Florianópolis 2019. Trilha Java - Arquitetura de Testes
TDC Florianópolis 2019. Trilha Java - Arquitetura de TestesTDC Florianópolis 2019. Trilha Java - Arquitetura de Testes
TDC Florianópolis 2019. Trilha Java - Arquitetura de Testes
Sandro Giacomozzi
 
TDC 2016 Trilha Testes - Floripa
TDC 2016 Trilha Testes - FloripaTDC 2016 Trilha Testes - Floripa
TDC 2016 Trilha Testes - Floripa
Walmyr Lima e Silva Filho
 
Codigo limpo.pptx
Codigo limpo.pptxCodigo limpo.pptx
Apresentação WTM
Apresentação WTMApresentação WTM
Apresentação WTM
Anna Cruz
 
De Fred Krueger a Brad Pitt como melhorar o seu código e fazê-lo ficar lindo
De Fred Krueger a Brad Pitt como melhorar o seu código e fazê-lo ficar lindoDe Fred Krueger a Brad Pitt como melhorar o seu código e fazê-lo ficar lindo
De Fred Krueger a Brad Pitt como melhorar o seu código e fazê-lo ficar lindo
Anna Cruz
 
Automação de testes em projetos ágeis
Automação de testes em projetos ágeisAutomação de testes em projetos ágeis
Automação de testes em projetos ágeis
Cristiano Caetano
 
TDC2013 - Trilha de Testes - Iterasys - José Correia - Testar em Multiplos A...
TDC2013  - Trilha de Testes - Iterasys - José Correia - Testar em Multiplos A...TDC2013  - Trilha de Testes - Iterasys - José Correia - Testar em Multiplos A...
TDC2013 - Trilha de Testes - Iterasys - José Correia - Testar em Multiplos A...
José Correia
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
tdc-globalcode
 
Testes Funcionais em um ALM Open Source - TDC 2012 SP
Testes Funcionais em um ALM Open Source - TDC 2012 SPTestes Funcionais em um ALM Open Source - TDC 2012 SP
Testes Funcionais em um ALM Open Source - TDC 2012 SP
Elias Nogueira
 
Refatoração de Código Legado
Refatoração de Código LegadoRefatoração de Código Legado
Refatoração de Código Legado
Caesar Ralf Franz Hoppen
 
Testes de aceitação automatizados com robotium utilizando a técnica bdd TDC...
Testes de aceitação automatizados com robotium utilizando a técnica bdd   TDC...Testes de aceitação automatizados com robotium utilizando a técnica bdd   TDC...
Testes de aceitação automatizados com robotium utilizando a técnica bdd TDC...
Rafael Chiavegatto
 
Como aumentar a eficiência dos seus testes manuais
Como aumentar a eficiência dos seus testes manuaisComo aumentar a eficiência dos seus testes manuais
Como aumentar a eficiência dos seus testes manuais
Marcelo Galvão
 
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...
Edlaine Zamora
 

Semelhante a Python tdc2019 (20)

F# para devs c# tdc
F# para devs c#   tdcF# para devs c#   tdc
F# para devs c# tdc
 
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHPCombatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
Combatendo o Código Procedural - TDC 2012 Florianópolis - Trilha PHP
 
Clean code em C#
Clean code em C#Clean code em C#
Clean code em C#
 
TDC2018SP | Trilha .Net - Programacao Funcional com C#
TDC2018SP | Trilha .Net - Programacao Funcional com C#TDC2018SP | Trilha .Net - Programacao Funcional com C#
TDC2018SP | Trilha .Net - Programacao Funcional com C#
 
TDC2012 Agile - 7 Padrões Para Implantar Métodos Ágeis
TDC2012 Agile - 7 Padrões Para Implantar Métodos ÁgeisTDC2012 Agile - 7 Padrões Para Implantar Métodos Ágeis
TDC2012 Agile - 7 Padrões Para Implantar Métodos Ágeis
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In Tuba
 
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
TDC 2015 - Trilha PHP - Testes e Ambiente de Integração Contínua PHP para o D...
 
TDC Florianópolis 2019. Trilha Java - Arquitetura de Testes
TDC Florianópolis 2019. Trilha Java - Arquitetura de TestesTDC Florianópolis 2019. Trilha Java - Arquitetura de Testes
TDC Florianópolis 2019. Trilha Java - Arquitetura de Testes
 
TDC 2016 Trilha Testes - Floripa
TDC 2016 Trilha Testes - FloripaTDC 2016 Trilha Testes - Floripa
TDC 2016 Trilha Testes - Floripa
 
Codigo limpo.pptx
Codigo limpo.pptxCodigo limpo.pptx
Codigo limpo.pptx
 
Apresentação WTM
Apresentação WTMApresentação WTM
Apresentação WTM
 
De Fred Krueger a Brad Pitt como melhorar o seu código e fazê-lo ficar lindo
De Fred Krueger a Brad Pitt como melhorar o seu código e fazê-lo ficar lindoDe Fred Krueger a Brad Pitt como melhorar o seu código e fazê-lo ficar lindo
De Fred Krueger a Brad Pitt como melhorar o seu código e fazê-lo ficar lindo
 
Automação de testes em projetos ágeis
Automação de testes em projetos ágeisAutomação de testes em projetos ágeis
Automação de testes em projetos ágeis
 
TDC2013 - Trilha de Testes - Iterasys - José Correia - Testar em Multiplos A...
TDC2013  - Trilha de Testes - Iterasys - José Correia - Testar em Multiplos A...TDC2013  - Trilha de Testes - Iterasys - José Correia - Testar em Multiplos A...
TDC2013 - Trilha de Testes - Iterasys - José Correia - Testar em Multiplos A...
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
Testes Funcionais em um ALM Open Source - TDC 2012 SP
Testes Funcionais em um ALM Open Source - TDC 2012 SPTestes Funcionais em um ALM Open Source - TDC 2012 SP
Testes Funcionais em um ALM Open Source - TDC 2012 SP
 
Refatoração de Código Legado
Refatoração de Código LegadoRefatoração de Código Legado
Refatoração de Código Legado
 
Testes de aceitação automatizados com robotium utilizando a técnica bdd TDC...
Testes de aceitação automatizados com robotium utilizando a técnica bdd   TDC...Testes de aceitação automatizados com robotium utilizando a técnica bdd   TDC...
Testes de aceitação automatizados com robotium utilizando a técnica bdd TDC...
 
Como aumentar a eficiência dos seus testes manuais
Como aumentar a eficiência dos seus testes manuaisComo aumentar a eficiência dos seus testes manuais
Como aumentar a eficiência dos seus testes manuais
 
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...
Teste de performance com JMeter: como criar e executar os testes em aplicaçõe...
 

Python tdc2019