lean software developmentagilcoop.org.br/files/agilcoop-verao10-cleancode.pdf ·...
TRANSCRIPT
![Page 1: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/1.jpg)
Código Limpo
Curso de Verão 2010 - IME/USPwww.agilcoop.org.br
Hugo Corbucci
![Page 2: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/2.jpg)
2Copyleft AgilCoop 2010
Introdução
A única métrica válida de qualidade de código: VSFs/min
Código bom Código ruim
![Page 3: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/3.jpg)
3Copyleft AgilCoop 2010
Introdução
“Você sabe que está trabalhando num código limpo quando cada rotina que
você lê é aquilo que você esperava que ela fosse.
Pode chamá-lo de código bonito quando o código também faz parecer que a
linguagem foi feita para o problema.”-- Ward Cunningham
![Page 4: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/4.jpg)
4Copyleft AgilCoop 2010
Introdução
Cu
sto
de
mu
dan
ças
tempo
Cu
sto
de
mu
dan
ças
tempo
Como passar de
para ?
![Page 5: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/5.jpg)
5Copyleft AgilCoop 2010
Introdução
Testes
Integração
Implementação
Projeto (design)
![Page 6: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/6.jpg)
6Copyleft AgilCoop 2010
Introdução
![Page 7: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/7.jpg)
7Copyleft AgilCoop 2010
Introdução
(refatoração)
![Page 8: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/8.jpg)
8Copyleft AgilCoop 2010
Regra dos escoteiros
“Deixe o acampamento mais limpo do que estava quando o encontrou.”
Traduzindo para software:
Sempre que ler um trecho de código, refatore algo nele para melhorá-lo (desde
que seus testes estejam todos passando).
![Page 9: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/9.jpg)
9Copyleft AgilCoop 2010
Use nomes com sentido
![Page 10: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/10.jpg)
10Copyleft AgilCoop 2010
Use nomes com sentido
![Page 11: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/11.jpg)
11Copyleft AgilCoop 2010
Use nomes com sentido
• Use nomes que revelem sua intenção– Ex:
int tempoPassadoEmDias;ao invés deint t;
![Page 12: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/12.jpg)
12Copyleft AgilCoop 2010
Use nomes com sentido
• Use nomes que revelem sua intenção• Evite desentendimentos
– Ex:int hipotenusa;ao invés deint hp;
![Page 13: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/13.jpg)
13Copyleft AgilCoop 2010
Use nomes com sentido
• Use nomes que revelem sua intenção• Evite desentendimentos• Faça distinções com significado
– Ex:int origem, destino;ao invés de:int a1, a2;
![Page 14: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/14.jpg)
14Copyleft AgilCoop 2010
Use nomes com sentido
• Use nomes que revelem sua intenção• Evite desentendimentos• Faça distinções com significado• Use nomes pronunciáveis
– Ex:int somaDosQuadradosDosCatetos;ao invés de:int sdQdC;
![Page 15: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/15.jpg)
15Copyleft AgilCoop 2010
Use nomes com sentido
• Use nomes que revelem sua intenção• Evite desentendimentos• Faça distinções com significado• Use nomes pronunciáveis• Use nomes buscáveis
– Ex:boolean oxitona;ao invés de:boolean o;
![Page 16: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/16.jpg)
16Copyleft AgilCoop 2010
Use nomes com sentido
• Use nomes que revelem sua intenção• Evite desentendimentos• Faça distinções com significado• Use nomes pronunciáveis• Use nomes buscáveis• Evite mapas mentais
– Ex: int fibonacci; ao invés de: int fbn;
![Page 17: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/17.jpg)
17Copyleft AgilCoop 2010
Use nomes com sentido
• Uma palavra por conceito– Ex:
Escolha entre apagar, remover, deletar, etc.
![Page 18: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/18.jpg)
18Copyleft AgilCoop 2010
Use nomes com sentido
• Uma palavra por conceito• Use nomes próximos do domínio da
solução ou do problema
![Page 19: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/19.jpg)
19Copyleft AgilCoop 2010
Use nomes com sentido
• Uma palavra por conceito• Use nomes próximos do domínio da
solução ou do problema• Mantenha o contexto pequeno para
manter o sentido
![Page 20: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/20.jpg)
20Copyleft AgilCoop 2010
Funções/Métodos
![Page 21: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/21.jpg)
21Copyleft AgilCoop 2010
Funções/Métodos
![Page 22: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/22.jpg)
22Copyleft AgilCoop 2010
Funções/Métodos
![Page 23: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/23.jpg)
23Copyleft AgilCoop 2010
Funções/Métodos
• Pequenas/os– C/C++/C#/Java no máximo 15 linhas
Ruby/Smalltalk/Python no máximo 5 linhas
![Page 24: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/24.jpg)
24Copyleft AgilCoop 2010
Funções/Métodos
• Pequenas/os• Faça uma coisa
– Mau cheiro: nomes de métodos com E ou OU
![Page 25: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/25.jpg)
25Copyleft AgilCoop 2010
Funções/Métodos
• Pequenas/os• Faça uma coisa• Um nível de abstração por função
– Ex:Rectangle limites = obtemLimites(shell);gc.setLineDash(new int[]{3, 2, 5});gc.drawOval(limites.x, limites.y, limites.width, limites.height);desenhaOlhos(limites);Isso é muito estranho de ler!!!!
![Page 26: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/26.jpg)
26Copyleft AgilCoop 2010
Funções/Métodos
• Pequenas/os• Faça uma coisa• Um nível de abstração por função• Argumentos
– 0, 1 ou 2. 3 raramente.Mais do que isso, provavelmente há algo errado!
![Page 27: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/27.jpg)
27Copyleft AgilCoop 2010
Funções/Métodos
• Pequenas/os• Faça uma coisa• Um nível de abstração por função• Argumentos• Sem efeitos colaterais
Ex: validaSenha não deveria inicializar uma sessão se a senha é válida!
![Page 28: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/28.jpg)
28Copyleft AgilCoop 2010
Funções/Métodos
• Pequenas/os• Faça uma coisa• Um nível de abstração por função• Argumentos• Sem efeitos colaterais• Prefira exceções a códigos de erros
![Page 29: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/29.jpg)
29Copyleft AgilCoop 2010
Funções/Métodos
• Pequenas/os• Faça uma coisa• Um nível de abstração por função• Argumentos• Sem efeitos colaterais• Prefira exceções a códigos de erros• DRY – Don't Repeat Yourself
![Page 30: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/30.jpg)
30Copyleft AgilCoop 2010
Comentários
WTF?!?
![Page 31: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/31.jpg)
31Copyleft AgilCoop 2010
Comentários
• Não resolvem problemas no código
![Page 32: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/32.jpg)
32Copyleft AgilCoop 2010
Comentários
• Não resolvem problemas no código• Explique pelo código
ou
![Page 33: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/33.jpg)
33Copyleft AgilCoop 2010
Comentários
• Não resolvem problemas no código• Explique pelo código• Bons comentários
– Ex: Legais/obrigatóriosInformativosExplicando a intençãoAvisando de consequênciasUsados por pós processamentoAmplificaçãoJavadocs p/ APIs
![Page 34: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/34.jpg)
34Copyleft AgilCoop 2010
Comentários
• Não resolvem problemas no código• Explique pelo código• Bons comentários• Comentários ruins
– Ex: Explica o que o código fazQue induzem ao erroCódigo comentadoJavadocs em código interno
![Page 35: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/35.jpg)
35Copyleft AgilCoop 2010
Formatação
![Page 36: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/36.jpg)
36Copyleft AgilCoop 2010
Formatação
• O intuito da formatação– Facilitar a leitura– Evidenciar fluxos– Agrupar códigos “próximos”
![Page 37: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/37.jpg)
37Copyleft AgilCoop 2010
Formatação
• O intuito da formatação• Formatação vertical
– Código deveria ser lido como jornal– Espaços entre conceitos– Densidade para unir– Distância vertical
![Page 38: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/38.jpg)
38Copyleft AgilCoop 2010
Formatação
• O intuito da formatação• Formatação vertical• Formatação horizontal
– Código deve caber na sua tela– Indentação!– Alinhamentos dão destaque. Pense no que
destacar antes de alinhar coisas.
![Page 39: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/39.jpg)
39Copyleft AgilCoop 2010
Formatação
• O intuito da formatação• Formatação vertical• Formatação horizontal• Regras de formatação da equipe
![Page 40: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/40.jpg)
40Copyleft AgilCoop 2010
Tratamento de erros
![Page 41: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/41.jpg)
41Copyleft AgilCoop 2010
Tratamento de erros
• Exceções ao invés de códigos de erro– Código de erro => if logo após chamada
![Page 42: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/42.jpg)
42Copyleft AgilCoop 2010
Tratamento de erros
• Exceções ao invés de códigos de erro• Use exceções não-verificadas (unchecked)
– Exceções verificadas poluem até serem tratadas
![Page 43: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/43.jpg)
43Copyleft AgilCoop 2010
Tratamento de erros
• Exceções ao invés de códigos de erro• Use exceções não verificadas• Não devolva/passe null
– Padrão NullObject
![Page 44: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/44.jpg)
44Copyleft AgilCoop 2010
No limite!
![Page 45: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/45.jpg)
45Copyleft AgilCoop 2010
No limite!
• Usando código de outros– Encapsule seu uso externo– Escreva testes para garantir comportamento
![Page 46: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/46.jpg)
46Copyleft AgilCoop 2010
No limite!
• Usando código de outros• Usando código que ainda não existe
– Use interfaces– Use testes (que falham por enquanto)
![Page 47: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/47.jpg)
47Copyleft AgilCoop 2010
No limite!
• Usando código de outros• Usando código que ainda não existe• Mantendo os limites limpos
– Atualize suas fachadas– Quando o código existir, acerte os testes
![Page 48: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/48.jpg)
48Copyleft AgilCoop 2010
Testes e TDD
![Page 49: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/49.jpg)
49Copyleft AgilCoop 2010
Testes e TDD
• 3 regras de TDD– Você não pode escrever código de produção
até escrever um teste que falha.– Você não pode escrever mais de um teste
necessário para falhar, e não compilar é falhar.
– Você não pode escrever mais código de produção do que é suficiente para passar o teste que está falhando.
![Page 50: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/50.jpg)
50Copyleft AgilCoop 2010
Testes e TDD
• 3 regras de TDD• Mantenha seus testes muito limpos
– Refatore– Use padrões– Tenha fábricas, classes para asserção, etc.– Quebre em funções– Mocks, Stubs, Spies, etc.
![Page 51: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/51.jpg)
51Copyleft AgilCoop 2010
Testes e TDD
• 3 regras de TDD• Mantenha seus testes muito limpos• Uma asserção por teste
– Se tiver mais, você não sabe o que está passando e o que não está.
![Page 52: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/52.jpg)
52Copyleft AgilCoop 2010
Testes e TDD
• 3 regras de TDD• Mantenha seus testes muito limpos• Uma asserção por teste• F.I.R.S.T.
– Fast/RápidoIndependenteRepetívelSelf-Validating/Auto-validateTimely/Em tempo
![Page 53: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/53.jpg)
53Copyleft AgilCoop 2010
Classes
• Encapsuladas/Coesas– Deveriam funcionar sem depender da
atitude de outros
![Page 54: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/54.jpg)
54Copyleft AgilCoop 2010
Classes
• Encapsuladas/Coesas• Pequenas
– Ex: Classes grandes são sinal de muita responsabilidade
![Page 56: Lean Software Developmentagilcoop.org.br/files/AgilCoop-Verao10-CleanCode.pdf · Ruby/Smalltalk/Python no máximo 5 linhas. Copyleft AgilCoop 2010 24 Funções/Métodos • Pequenas/os](https://reader034.vdocuments.net/reader034/viewer/2022052006/601a31e039f78227c058b51d/html5/thumbnails/56.jpg)
56Copyleft AgilCoop 2010
Referência