Slides da palestra ministrada no 4º E-TIC do Instituto Federal de Camboriu.
Escrever código com baixa qualidade, de forma ilegível e confusa pode até funcionar!Tais atitudes,conscientes ou não, resultam na contração de uma dívida que cobra juros altos,perda de produtividade.
Serão abordados tópicos relacionados principalmente a responsabilidade e profissionalismo no desenvolvimento de software. Pontos importantes como motivação, qualidade de código, métricas, técnicas de refactoring, desenvolvimento orientado a testes e boas práticas para manter o código limpo e evitar muitas dores de cabeça no futuro!
Desenvolvimento de Aplicações com Zend Framework e Yahoo! User Interface
Clean Code e Refatoração
1. Vamos falar de Clean
Code, Refatoração e
TDD mais uma vez
Domingos Teruel
Zend Certified Engineer
2.
3. Domingos Teruel
Zend Certified Engineer PHP 5.3
Tecnólogo em Processamento de dados e
Gestão da Tecnologia da Informação,
especialista em interfaces de sistemas,
atuando no desenvolvimento e
implementação de sistemas web com
software livre e Governo Eletrônico.
44. Qualidade externa é aquela
que você percebe logo de
cara. Se ausabilidade da
interface
for
ruim,
aperformance for sofrível e
defeitos acontecem com
frequência, a pessoa logo
percebe e sequer compra o
software.
45. Qualidade interna é aquela que você
só
percebe
com
o
tempo.
Infelizmente o comercial não vende
esse tipo de qualidade. Noentanto, é
ela que atrasa o negócio e mata a
empresa aos poucos, sufoca e
aumenta os custos. É ela que gera
custos
boa parte da rotatividade.
47. • Linhas de código?
• Número de métodos?
•
Número de classes?
•
Linhas de código por método?
•
Complexidade ciclomática?
•
Número de estruturas de decisão?
?
67. 1.
2.
3.
4.
5.
6.
7.
8.
9.
READ INPUT TAPE A1, B1, C1;
501 FORMAT A1;
IF (A1) 777, 777, 777
IF (B1) 888, 888, 888
IF (C1) 999, 999, 999
STOP 1
799 S = FLOATF(A1 + B1 + C1) / 2.0
WRITE TO TAPE S
END PROCESS
As linguagens não
ajudavam muito
79. 1.
2.
3.
4.
5.
6.
7.
8.
// Processa folha de pagamento
processa();
processa()
// Calcula o imposto de renda ret.
calcula();
// Renderiza o relatório de alunos
renderiza();
// Totaliza as estatísticas da ligação
totaliza();
totaliza()
80. 1.
2.
3.
4.
5.
6.
7.
8.
// Processa folha de pagamento
processaFolhaPagamento();
processaFolhaPagamento()
// Calcula o imposto de renda ret.
calculaImpostoRetido();
calculaImpostoRetido()
// Renderiza o relatório de alunos
renderizaRelatorioAlunos();
renderizaRelatorioAlunos()
// Totaliza as estatísticas da ligação
totalizaEstatisticasLigacao();
totalizaEstatisticasLigacao()
107. “Alteração feita na estrutura
interna do software para tornálo mais fácil de ser
entendido e menos custoso
de ser modificado sem alterar
seu comportamento
observável.”
(Martin Fowler)
108. “Refactoring é a arte de
evoluir o design do
código existente.”
(William C. Wake)
109. “Refatorar é uma forma
de manter seu software
sustentável e
competitivo com o
passar do tempo.”
111. Tempo investido refatorando é
proporcional ao tempo
economizado com o entendimento
do código multiplicado pelo número
de pessoas na equipe.
(Rodrigo Branas - Developer)
112. A fórmula matemática do refactoring:
Tr = Te * tamanho da equipe
1 hora investida refatorando é
proporcional a
8 horas economizadas com o
entendimento em uma equipe de 8
pessoas.
Isso sem falar em flexibilidade,
redução na quantidade de
defeitos e reuso.
115. Diálogo entre o Desenvolvedor e o Gerente
Desenvolvedor: João, preciso fazer um refactoring no
código!
Gerente: Refactoring?! O que é isso, você vai melhorar a
performance?
Desenvolvedor: Não, não...
Gerente: Vai deixar a interface mais bonita e mais fácil
de ser utilizada?
Desenvolvedor: Não...
Gerente: Então? O que é isso?
Desenvolvedor: “Vou fazer uma alteração na estrutura
interna do software,para torná-lo mais fácil de ser
entendido e menos custoso de sermodificado, sem
alterar seu comportamento observável.” (Martin Fowler)
Gerente: Não.
116. Refatore com um propósito,
evite refatorar apenas por
refatorar
127. Temos dificuldade em lidar com
janelas quebradas. Seja numa
dieta, relacionamento ou
desenvolvimento de software, o
desânimo das janelas
quebradas leva ao fracasso.
fracasso
129. É fácil culpar o estagiário. É
preciso ter pessoas com nível
técnico alto e senso crítico
apurado para zelar pelas
boaspráticas e manter a
ordem do código.
código
135. • Quando o código simplesmente
não funciona, é instável
instáve
• Se funciona, ninguém sabe ao
certo como...
• Próximo ao final do prazo de
entrega
136. A maioria das empresas precisa
A maioria das empresas precisa
contrair algumas dívidas para
contrair algumas dívidas para
funcionar efetivamente
funcionar efetivamente
137. Mas cuidado com o aumento do débito
Mas cuidado com o aumento do débito
técnico, os juros são altos
técnico os juros são altos
técnico,
técnico
140. • Você não pode escrever o código
até que tenha criado um teste
falhando;
falhando
• Você não pode escrever mais
testes do que seja suficiente para
falhar;
falhar
• Você não pode escrever mais
código do que o suficiente para
passar o teste que esta falhando;
falhando
151. • Comentários pobres, obsoletos e
redundantes
• Código comentado
• Testes que requerem mais de um passo
• Muitos parâmetros ou parâmetros
booleanos
• Métodos mortos ou que fazem muita
coisa
• Responsabilidades fora do contexto
• Nomes pequenos e inexpressivos
154. • Tudo o que falamos até aqui não é
para ser uma lista de regras
• Você não se torna um bom
programador aprendendo uma lista
de regras.
• As técnicas e práticas têm que
começar a fazer parte do nosso dia
a dia.
• Devemos nos preocupar com a
qualidade do código e não
somente fazê-lo funcionar.
155. Você é responsável pelo código
Você é responsável pelo código
que escreve e só você!
que escreve e só você!
157. •
•
•
•
•
•
Clean Code - Robert Martin
•
•
•
•
•
Design Patterns - Head First - Eric Freeman e Elisabeth Freeman
Refactoring - Martin Fowler
Patters of Enterprise Application Architecture - Martin Fowler
Test-Driven Development by Example - Kent Beck
Effective Java - Joshua Block
Design Patterns - Eric Gamma, Richard Helm, Ralph Johnson e
John Vlissides
Refactoring to Patterns - Joshua Kerievisky
Domain-Driven Design - Eric Evans
Working Effectively with Legacy Code - Michael Feathers
Baseado no curso de Clean Code por Rodrigo Branas
(www.agilecode.com.br)
Referência