Download - Clean Code - Desenvolvendo como um Profissional Ágil

Transcript
Page 1: Clean Code - Desenvolvendo como um Profissional Ágil

Desenvolvendo como um Profissional Agil

André Faria@andrefaria @bruno_lui

Bruno Lui

Clean Code’

Page 2: Clean Code - Desenvolvendo como um Profissional Ágil

André Faria Gomes

@andrefariahttp://blog.andrefaria.comhttp://blog.bluesoft.com.br

Black Belt Lean 6 Sigma

+10 de Anos de Desenvolvimento de SoftwareCIO na Bluesoft

Instrutor da Adaptworks

Page 3: Clean Code - Desenvolvendo como um Profissional Ágil

Bruno Lui

@brunoluihttp://brunolui.com

+5 Anos no Desenvolvimento de Software

Desenvolvedor na Bluesoft

Page 4: Clean Code - Desenvolvendo como um Profissional Ágil

Então você quer ser um desenvolvedor de

software profissional?

Page 5: Clean Code - Desenvolvendo como um Profissional Ágil

Quer que as mães apontem para você e digam a seus filhos para que sejam como

você?

Page 6: Clean Code - Desenvolvendo como um Profissional Ágil

Cuidado com o que você Pede!

Page 7: Clean Code - Desenvolvendo como um Profissional Ágil

Profissionalismo é sem dúvida digno

de honra e orgulho, mas também é

responsabilidade.

Page 8: Clean Code - Desenvolvendo como um Profissional Ágil

Você não pode se orgulhar de algo pelo qual não se responsabiliza...

Page 9: Clean Code - Desenvolvendo como um Profissional Ágil

É muito mais fácil ser um largado... Não se responsabilizar pelo trabalho e pela carreira....

Page 10: Clean Code - Desenvolvendo como um Profissional Ágil

Quando um não-profissional faz uma besteira, seu empregador limpa a

bagunça...

Page 11: Clean Code - Desenvolvendo como um Profissional Ágil

Quando um profissional faz uma besteira, ele

limpa a bagunça!

Page 12: Clean Code - Desenvolvendo como um Profissional Ágil

O que você faz para escrever software sem defeitos?

Page 13: Clean Code - Desenvolvendo como um Profissional Ágil

Você se responsabiliza pelos defeitos que cria?

Page 14: Clean Code - Desenvolvendo como um Profissional Ágil

Escrever testes é essencial para garantir que seu software funciona...

Page 15: Clean Code - Desenvolvendo como um Profissional Ágil

Como você pode dizer que é responsável se

não os escreve?

Page 16: Clean Code - Desenvolvendo como um Profissional Ágil

“Toda a linha de código que você escreve deve estar testada, e

Ponto Final!”Uncle Bob

Page 17: Clean Code - Desenvolvendo como um Profissional Ágil

Código escrito por profissionais pode ser alterado sem custos

exorbitantes!

Page 18: Clean Code - Desenvolvendo como um Profissional Ágil

Em outras palavras, você também é responsável pela

estrutura do código que escreve!

Page 19: Clean Code - Desenvolvendo como um Profissional Ágil

Sua carreira é sua responsabilidade!

TreineVá a conferênciasLeia

Não é responsabilidade do seu empregador

Page 20: Clean Code - Desenvolvendo como um Profissional Ágil

Sua empresa te ajuda com isso?

Ótimo! Estão te fazendo um favor.

Page 21: Clean Code - Desenvolvendo como um Profissional Ágil

Mas a responsabilidade ainda é sua!

Page 22: Clean Code - Desenvolvendo como um Profissional Ágil

Também não é responsabilidade do seu empregador te dar “tempo” para você estudar...

Page 23: Clean Code - Desenvolvendo como um Profissional Ágil

“Você recebe por 40 horas para resolver os problemas da sua

empresa não os seus...”

Uncle Bob

Page 24: Clean Code - Desenvolvendo como um Profissional Ágil

Faça as contas....

Page 25: Clean Code - Desenvolvendo como um Profissional Ágil

Sua semana tem 168 horas.

Page 26: Clean Code - Desenvolvendo como um Profissional Ágil

Dê à seu empregador 40, e à sua carreira 20

Page 27: Clean Code - Desenvolvendo como um Profissional Ágil

Sobram 108

Page 28: Clean Code - Desenvolvendo como um Profissional Ágil

+ 56 para dormir 48

Page 29: Clean Code - Desenvolvendo como um Profissional Ágil

+ 52 para ...60

Page 30: Clean Code - Desenvolvendo como um Profissional Ágil
Page 31: Clean Code - Desenvolvendo como um Profissional Ágil
Page 32: Clean Code - Desenvolvendo como um Profissional Ágil
Page 33: Clean Code - Desenvolvendo como um Profissional Ágil
Page 34: Clean Code - Desenvolvendo como um Profissional Ágil
Page 35: Clean Code - Desenvolvendo como um Profissional Ágil
Page 36: Clean Code - Desenvolvendo como um Profissional Ágil
Page 37: Clean Code - Desenvolvendo como um Profissional Ágil
Page 38: Clean Code - Desenvolvendo como um Profissional Ágil
Page 39: Clean Code - Desenvolvendo como um Profissional Ágil
Page 40: Clean Code - Desenvolvendo como um Profissional Ágil
Page 41: Clean Code - Desenvolvendo como um Profissional Ágil
Page 42: Clean Code - Desenvolvendo como um Profissional Ágil
Page 43: Clean Code - Desenvolvendo como um Profissional Ágil
Page 44: Clean Code - Desenvolvendo como um Profissional Ágil
Page 45: Clean Code - Desenvolvendo como um Profissional Ágil
Page 46: Clean Code - Desenvolvendo como um Profissional Ágil
Page 47: Clean Code - Desenvolvendo como um Profissional Ágil

Só não desperdice...

Page 48: Clean Code - Desenvolvendo como um Profissional Ágil
Page 49: Clean Code - Desenvolvendo como um Profissional Ágil

Durante essas 20 horas você deve

estar fazendo algo que gosta, que

aumente ainda mais a sua paixão pelo

que faz.

Page 50: Clean Code - Desenvolvendo como um Profissional Ágil

Esse é o grande segredo!

Page 51: Clean Code - Desenvolvendo como um Profissional Ágil

Além disso,o desenvolvedor

profissional de verdadese preocupa com o código que escreve...

Page 52: Clean Code - Desenvolvendo como um Profissional Ágil

...desenvolve somente código limpo e não consegue mais

escrever código ruim.

Page 53: Clean Code - Desenvolvendo como um Profissional Ágil

Ninguém gosta de encontrar um código ruim !

Page 54: Clean Code - Desenvolvendo como um Profissional Ágil

Raiva

Page 55: Clean Code - Desenvolvendo como um Profissional Ágil

Perda de Tempo

Page 56: Clean Code - Desenvolvendo como um Profissional Ágil

Frustração

Page 57: Clean Code - Desenvolvendo como um Profissional Ágil

Dor

Page 58: Clean Code - Desenvolvendo como um Profissional Ágil

Você fica P...

Page 59: Clean Code - Desenvolvendo como um Profissional Ágil

Mas afinal, o que é um

código limpo?

Page 60: Clean Code - Desenvolvendo como um Profissional Ágil

O que é um código limpo ?

SimplesDiretoEficienteSem duplicidadeEleganteFeito com cuidado

Page 61: Clean Code - Desenvolvendo como um Profissional Ágil

Escolhemos nomes para tudo, então devemos fazer isso bem feito

Nomes significativo

s

Page 62: Clean Code - Desenvolvendo como um Profissional Ágil

- Por que existe;- O que faz;- Como é usado;

O nome deve dizer...

Page 63: Clean Code - Desenvolvendo como um Profissional Ágil

Use nomes que revelem sua intenção

Page 64: Clean Code - Desenvolvendo como um Profissional Ágil

int d; // days

Se um nome de classe ou método requer um comentário, ele não está revelando sua intenção

Page 65: Clean Code - Desenvolvendo como um Profissional Ágil

a1?

int d?a2?

Faça distinções significativas

Page 66: Clean Code - Desenvolvendo como um Profissional Ágil

for (int j=0; j < 34; j++) {s += (t[j]*4)/5;

}

Nomes com apenas uma letra ou numéricos são difíceis de serem encontrados e

entendidos dentro do código.

Page 67: Clean Code - Desenvolvendo como um Profissional Ágil

Use nomes fáceis de encontrar

Page 68: Clean Code - Desenvolvendo como um Profissional Ágil

Use nomes pronunciáveis

Page 69: Clean Code - Desenvolvendo como um Profissional Ágil

Pronuncie seu código

private Timestamp genDMYHS()

private Timestamp generateTimestamp()

Page 70: Clean Code - Desenvolvendo como um Profissional Ágil

Evite palavras

que não são

palavras

Page 71: Clean Code - Desenvolvendo como um Profissional Ágil

Não economize palavras“Use várias palavras para que o método ou variável sejam facilmente entendidos e possam transmitir seu

propósito”

Page 72: Clean Code - Desenvolvendo como um Profissional Ágil

Evite desinformação

Evite palavras que podem ser variáveis ou palavras reservadas em outras

plataformas

Page 73: Clean Code - Desenvolvendo como um Profissional Ágil

Evite desinformação

Evite dar nomes como “listaDeLancamentos”, o tipo não precisa estar no nome

(notação húngara)

Page 74: Clean Code - Desenvolvendo como um Profissional Ágil

Evite desinformação

Evite trocadilhos, escreva exatamente o que você

quer dizer

Page 75: Clean Code - Desenvolvendo como um Profissional Ágil

Nomes de classes devem ser substantivos e não devem conter verbos

Boas práticas

Nomes de métodos devem conter verbos

Page 76: Clean Code - Desenvolvendo como um Profissional Ágil

MétodosClasses

Page 77: Clean Code - Desenvolvendo como um Profissional Ágil

Devem ser pequenos“A primeira regra dos métodos é que eles devem ser pequenos. A

segunda regra é que eles devem ser menores ainda.”

Uncle Bob

Classes menores são mais fáceis de ler e entender o que estão fazendo.

Page 78: Clean Code - Desenvolvendo como um Profissional Ágil

método <= 20 linhaslinha <= 100 caracteres

classe = 200 a 500 linhas

Page 79: Clean Code - Desenvolvendo como um Profissional Ágil

“Métodos e

funções devem

fazer apenas

uma

coisa, fazê-la

certa

e somente faz

ê-la.”

Page 80: Clean Code - Desenvolvendo como um Profissional Ágil

O difícil é defi

nir o

que é “apenas

uma

coisa”

Page 81: Clean Code - Desenvolvendo como um Profissional Ágil

Tentar extrair um novo método de um outro, e dar um nome ao trecho extraído é uma maneira de identificar

Page 82: Clean Code - Desenvolvendo como um Profissional Ágil

Parâmetros

Métodos com muitos parâmetros devem ser evitados e possuírem uma boa justificativa para existirem.

Pois confundem e complicam o entendimento, além de dificultar os testes.

Page 83: Clean Code - Desenvolvendo como um Profissional Ágil

Cuidado com os efeitos colaterais. Eles são mentiras contadas pelo método, quando diz que fará uma coisa, mas faz

outras “escondidas”.

Page 84: Clean Code - Desenvolvendo como um Profissional Ágil

public boolean checkPassword (String password) {String passwordStatus = crypto.decrypt(password);if (passwordStatus.equals(“OK”)) {

Session.initialize();return true;

}return false;

}

Page 85: Clean Code - Desenvolvendo como um Profissional Ágil

CQS - Command Query Separation

Métodos devem fazer algo ou retornar algo, mas não as duas coisas. Isso gera confusão, além de atribuir mais de uma responsabilidade.

Page 86: Clean Code - Desenvolvendo como um Profissional Ágil

Preste atenção no código repetido. Evite duplicidades reaproveitando seus métodos.

DRY - Don’t Repeat Yourself

Page 87: Clean Code - Desenvolvendo como um Profissional Ágil

Para saber se o tamanho da classe é

o ideal, devemos analisar suas

responsabilidades.

Page 88: Clean Code - Desenvolvendo como um Profissional Ágil

Princípio da única da responsabilidade (SRP)

O princípio diz que uma classe deve ter uma, e apenas uma razão para

mudar.

Page 89: Clean Code - Desenvolvendo como um Profissional Ágil

Tentar identificar responsabilidades ajuda a melhorar

nosso código e criar melhores abstrações

Esse é um dos conceitos mais

importantes em OO

Page 90: Clean Code - Desenvolvendo como um Profissional Ágil

Coesão

Cada método deve manipular uma ou mais variáveis.

Classes devem conter poucas variáveis.

Quanto mais variáveis um método manipula, mais coeso

ele é para a classe.

Quando há coesão, significa que métodos e variáveis são

co-dependentes.

Page 91: Clean Code - Desenvolvendo como um Profissional Ágil

Comentários

Page 92: Clean Code - Desenvolvendo como um Profissional Ágil

Comentários podem ser mentirosos e

trazer desinformação,

mesmo sem intenção;

Page 93: Clean Code - Desenvolvendo como um Profissional Ágil

Ele não recebem

“manutenção”, sendo

que quanto mais

velhos maior a chance

de estarem errados.

Page 94: Clean Code - Desenvolvendo como um Profissional Ágil

Comentários não

vão esconder o

código ruim

Geralmente você comenta para que se faça entender.

Quando pensar em comentar, é sinal que seu código deve ser refatorado.

Page 95: Clean Code - Desenvolvendo como um Profissional Ágil

Explique-se no código!

// check if the employee is eligible for benefits if ((employee.flags == 100) && (employee.age > 65))

if (employee.isEligibleForBenefits())

Page 96: Clean Code - Desenvolvendo como um Profissional Ágil

Closing brace comments

try {String nada;while (i = 3) {

i++;...

} // end while } // end if

Page 97: Clean Code - Desenvolvendo como um Profissional Ágil

“Qualquer comentário que faça você olhar para outras

partes do código para entendê-lo, não vale os bits que

consome”. Uncle Bob

Page 98: Clean Code - Desenvolvendo como um Profissional Ágil

Comentários podem ser úteis...

Aviso de consequências que um trecho de código pode vir a causar

Page 99: Clean Code - Desenvolvendo como um Profissional Ágil

Comentários podem ser úteis...

Mostrar a intenção por trás de uma decisão tomada, e não só pela

informação.

Page 100: Clean Code - Desenvolvendo como um Profissional Ágil

Quando alguém vê um código

comentado, não tem coragem de

apagá-lo. Vão pensar que há um

motivo para estar ali.

Nunca deixe código comentado!

Page 101: Clean Code - Desenvolvendo como um Profissional Ágil

Formatação

Page 102: Clean Code - Desenvolvendo como um Profissional Ágil

“Formatação é importante, pois se trata de Comunicação.”

Boa Comunicação é essencial para os desenvolvedores profissionais

Page 103: Clean Code - Desenvolvendo como um Profissional Ágil

A legibilidade do seu código terá profundo efeito em todas as mudanças que serão feitas e seu estilo e disciplina sobrevive mesmo se o código original for

alterado

Page 104: Clean Code - Desenvolvendo como um Profissional Ágil

Métodos com conceitos relacionados devem ficar verticalmente próximos

Page 105: Clean Code - Desenvolvendo como um Profissional Ágil

A ordem dos métodos cria um fluxo de leitura melhorando a legibilidade do código

Page 106: Clean Code - Desenvolvendo como um Profissional Ágil

Uma boa identação do código ajuda a visualizar todo o escopo, torna mais fácil e rápida a

identificação de situações e regras relevantes.

Page 107: Clean Code - Desenvolvendo como um Profissional Ágil

Essa identação não deve ser maior do que 2, para compreensão fácil e rápida

if (a > 0) { if (b > 1) { if (c > 2) { if (d > 3) { if (e > 4) {

Page 108: Clean Code - Desenvolvendo como um Profissional Ágil

Dê espaços entre operadores, parâmetros e vírgulas.

public getSum(int one,int two,double number){double sum=number+(one*two);

}

Espaçamento

public getSum (int one, int two, double number) {double sum = number + (one * two);

}

Page 109: Clean Code - Desenvolvendo como um Profissional Ágil

Tratamento

de erros

Page 110: Clean Code - Desenvolvendo como um Profissional Ágil

Tratar erros é responsabilidade do desenvolvedor, as coisas podem dar errado e nós temos que garantir que nosso código tem

um tratamento para cada situação

Page 111: Clean Code - Desenvolvendo como um Profissional Ágil

Quem faz a chamada deve verificar se há erros no retorno do método, e isso pode ser

facilmente esquecido.

Use exceptions ao invés de

retornar códigos de erro

Page 112: Clean Code - Desenvolvendo como um Profissional Ágil

Crie mensagens informativas para os erros, mencione o que aconteceu, o que estava tentando fazer, e por que o erro ocorreu.

Forneça o contexto na exception

Page 113: Clean Code - Desenvolvendo como um Profissional Ágil

try {MealExpenses expenses = expensesDao.getMeals();total += expenses.getTotal();

} catch (MealExceptionNotFound e) {total += expenses.getMealPerDiem();

}

Separe as regras de negócio de erros ou outras situações.

Page 114: Clean Code - Desenvolvendo como um Profissional Ágil

Prefira retornar Special case objects ou vazio no caso de

coleções

Não retorne null

Page 115: Clean Code - Desenvolvendo como um Profissional Ágil

Não passe null

Evite passar null para seus métodos, isso

pode gerar as famosas

NullPointerExceptions

Page 116: Clean Code - Desenvolvendo como um Profissional Ágil

Testes unitários

Page 117: Clean Code - Desenvolvendo como um Profissional Ágil

As Três Leis do TDD

Page 118: Clean Code - Desenvolvendo como um Profissional Ágil

As Três Leis do TDD

1 - Você não pode escrever o código até que tenha criado um teste falhando.

Page 119: Clean Code - Desenvolvendo como um Profissional Ágil

As Três Leis do TDD

1 - Você não pode escrever o código até que tenha criado um teste falhando.

2 - Você não pode escrever mais testes do que seja suficiente para falhar.

Page 120: Clean Code - Desenvolvendo como um Profissional Ágil

As Três Leis do TDD

1 - Você não pode escrever o código até que tenha criado um teste falhando.

2 - Você não pode escrever mais testes do que seja suficiente para falhar.

3 - Você não pode escrever mais código do que o suficiente para passar o teste que esta falhando.

Page 121: Clean Code - Desenvolvendo como um Profissional Ágil

conceito por teste

Separe um teste que esteja testando mais de um

conceito em outros testes.

Facilite o entendimento de cada teste.

1

Page 122: Clean Code - Desenvolvendo como um Profissional Ágil

F.I.R.S.TTestes

Page 123: Clean Code - Desenvolvendo como um Profissional Ágil

Os testes devem ser rápidos para executar, pois quando são lentos a frequência de execução

diminui.

Fast

Page 124: Clean Code - Desenvolvendo como um Profissional Ágil

Testes não podem depender uns dos outros, pois se um falha os outros também

falharam

Independent

Page 125: Clean Code - Desenvolvendo como um Profissional Ágil

Ao executa-los mais de uma vez, devem sempre retornar o mesmo resultado

Repeatable

Page 126: Clean Code - Desenvolvendo como um Profissional Ágil

Devem possuir respostas booleanas, sem precisar de interpretação para saber o

resultado.

Self-Validating

Page 127: Clean Code - Desenvolvendo como um Profissional Ágil

Os testes devem ser escritos antes do código. Após o código será mais

difícil fazer o teste.

Timely

Page 128: Clean Code - Desenvolvendo como um Profissional Ágil

O código do teste é tão importante quanto o código da produção

O teste precisa sofrer alterações da mesma forma que o código.

Page 129: Clean Code - Desenvolvendo como um Profissional Ágil

Quanto mais sujo o teste mais difícil dar

manutenção, e menor a flexibilidade para alterá-lo.

Page 130: Clean Code - Desenvolvendo como um Profissional Ágil

“Se você deixar seus testes

apodrecerem, seu código também apodrecerá”

Page 131: Clean Code - Desenvolvendo como um Profissional Ágil

Fique atento aos Maus cheiros

Page 132: Clean Code - Desenvolvendo como um Profissional Ágil

- Comentários pobres, obsoletos e redundantes

- Código comentado

- Testes que requerem mais de um passo

- Muitos parâmetros ou parâmetros boolean

- Métodos mortos ou que fazem muita coisa

- Responsabilidades fora do contexto

- Nomes pequenos e inexpressivos

Page 133: Clean Code - Desenvolvendo como um Profissional Ágil

- Duplicação- Inconsistência- Intenção obscura- Variáveis e funções inexpressivas- Despadronização- Números mágicos- Desencapsulamento- Efeitos colaterais- Testes inuficientes

Page 134: Clean Code - Desenvolvendo como um Profissional Ágil

Você não se torna um bom programador aprendendo uma lista de regras.

Clean code não foi escrito para ser 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.

Conclusão

Page 135: Clean Code - Desenvolvendo como um Profissional Ágil

“Você é responsável pelo código que escreve”

Page 136: Clean Code - Desenvolvendo como um Profissional Ágil

Referências

Page 137: Clean Code - Desenvolvendo como um Profissional Ágil

Muito Obrigado!

@andrefariahttp://blog.andrefaria.com

http://blog.bluesoft.com.br

@bruno_luihttp://brunolui.com