qualidade de código: boas práticas, princípios e padrões

56
Qualidade de Código: boas práticas, princípios e @edgarddavidson http://edgarddavidson.com princípios e padrões.

Transcript of qualidade de código: boas práticas, princípios e padrões

Page 1: qualidade de código: boas práticas, princípios e padrões

Qualidade de Código:boas práticas,

princípios e

@edgarddavidsonhttp://edgarddavidson.com

princípios e padrões.

Page 2: qualidade de código: boas práticas, princípios e padrões
Page 3: qualidade de código: boas práticas, princípios e padrões

Curso de Pós Graduação em

http://engenhariadesoftwareagil.com

Engenharia de Software Centrada em Métodos Ágeis

Page 4: qualidade de código: boas práticas, princípios e padrões

Curso de Pós Graduação em Teste e Qualidade

http://testeequalidadedesoftware.com

Teste e Qualidade de Software

Page 5: qualidade de código: boas práticas, princípios e padrões

Referências

Page 6: qualidade de código: boas práticas, princípios e padrões

<trollagem>

Page 7: qualidade de código: boas práticas, princípios e padrões

Um típico implementador

de POG convícto

Page 8: qualidade de código: boas práticas, princípios e padrões

1°encontro dos

implementadores de POG

convíctos

Page 9: qualidade de código: boas práticas, princípios e padrões

Projeto entregue pelos

implementadores de POG

convíctos

Projeto entregue pelos

implementadores de POG

convíctos

Page 10: qualidade de código: boas práticas, princípios e padrões

Um dia típico de trabalho de um

implementador de POG convícto

Page 11: qualidade de código: boas práticas, princípios e padrões

Implementadores de POG convíctos

também trabalham em equipe

Page 12: qualidade de código: boas práticas, princípios e padrões

Um implementador de POG convícto

não tem medo do perigo

Page 13: qualidade de código: boas práticas, princípios e padrões

Um implementador de POG convícto

assume que boas práticas,

princípios e padrões

é tudo um VIAGEMé tudo um VIAGEMé tudo um VIAGEMé tudo um VIAGEM

Page 14: qualidade de código: boas práticas, princípios e padrões

Por algum

motivo os

erros se

repetem

Page 15: qualidade de código: boas práticas, princípios e padrões

</trollagem>

Page 16: qualidade de código: boas práticas, princípios e padrões

Code Smell

Page 17: qualidade de código: boas práticas, princípios e padrões

Baixa coesãoe

Alto acoplamento

são um dos fatores fundamentais são um dos fatores fundamentais para aumentar a dependência,

dificultar a manutenção, expansão e alteração.

Page 18: qualidade de código: boas práticas, princípios e padrões

1° Code Smell

Page 19: qualidade de código: boas práticas, princípios e padrões

Rigidez

“O sistema é difícil de mudar, porque cada vez que você muda alguma coisa, você tem que mudar alguma outra coisa em uma sucessão interminável de mudanças.”

Page 20: qualidade de código: boas práticas, princípios e padrões

2° Code Smell

Page 21: qualidade de código: boas práticas, princípios e padrões

Fragilidade

“Uma mudança de uma parte do sistema faz com que ele quebra em muitas outras partes, completamente alheios.”

Fragilidade

Page 22: qualidade de código: boas práticas, princípios e padrões

3° Code Smell

Page 23: qualidade de código: boas práticas, princípios e padrões

Imobilidade

“É difícil separar o sistema em componentes que podem ser reutilizados em outros sistemas.”

Page 24: qualidade de código: boas práticas, princípios e padrões

4° Code Smell

Page 25: qualidade de código: boas práticas, princípios e padrões

Complexidade

Desnecessária

“Há muitas estruturas de código muito inteligentes que não são necessárias agora, mas poderia ser muito útil um dia.”

Desnecessária

Page 26: qualidade de código: boas práticas, princípios e padrões

5° Code Smell

Page 27: qualidade de código: boas práticas, princípios e padrões

Repetições

InúteisInúteis

“O código parece que foi escrito por dois programadores chamado Recortar e Colar.”

Page 28: qualidade de código: boas práticas, princípios e padrões

Mostra aí como combater esse tal de Code Smell

Page 29: qualidade de código: boas práticas, princípios e padrões

Qualidade de Códigoboas práticas,

princípios e padrões.padrões.

Page 30: qualidade de código: boas práticas, princípios e padrões

Testeunitário

Testeunitário

Código POO

Código POO RefatoraçãoRefatoração

Princípios de Projeto OO

Princípios de Projeto OO

Início

Integração ContínuaIntegração Contínua

POOPOO

Padrões de Projeto OOPadrões de Projeto OO

Page 31: qualidade de código: boas práticas, princípios e padrões
Page 32: qualidade de código: boas práticas, princípios e padrões

Desenvolvimento Dirigido pelos Testes

Page 33: qualidade de código: boas práticas, princípios e padrões

Programação em Par

Page 34: qualidade de código: boas práticas, princípios e padrões

Refatoração

Page 35: qualidade de código: boas práticas, princípios e padrões

Substitua Herança por DelegaçãoExemplo: pilha subclasse de vetor.Class MyStack extends Vector {

public void push (Object element) {public void push (Object element) {

insertElementAt (element, 0);

}

public Object pop () {

Object result = firstElement ();

removeElementAt (0);

return result;

}

Page 36: qualidade de código: boas práticas, princípios e padrões

Refatorando...Crio campo para superclasse.Class MyStack extends Vector {

private Vector _vector = this;

public void push (Object element) {public void push (Object element) {

_vector.insertElementAt (element, 0);

}

public Object pop () {

Object result = _vector.firstElement ();

_vector.removeElementAt (0);

return result;

}

Page 37: qualidade de código: boas práticas, princípios e padrões

Refatorando...Removo herança.Class MyStack extends Vector {

private Vector _vector = this; new Vector ();

public void push (Object element) {public void push (Object element) {

_vector.insertElementAt (element, 0);

}

public Object pop () {

Object result = _vector.firstElement ();

_vector.removeElementAt (0);

return result;

}

Page 38: qualidade de código: boas práticas, princípios e padrões

Acoplamento e Coesão

Diminuir Acoplamento

AumentarCoesão

Page 39: qualidade de código: boas práticas, princípios e padrões

Programação Orientada a Objetos

AbstraçãoEncapsulamento

ReusoHerança

Polimorfismo

Page 40: qualidade de código: boas práticas, princípios e padrões

Princípios de Projeto•Restrição ao Acesso

•Prefira a composição à herança•Programação para a interface

•Separe o que permanece igual do que varia

Page 41: qualidade de código: boas práticas, princípios e padrões

SOL

ingle Responsibility Principle (SRP)

pen/Closed Principle (OCP)

iskov substitution principle (LSP)LID

iskov substitution principle (LSP)

nterface Segregation Principle (ISP)

ependency Inversion Principle (DIP)

Page 42: qualidade de código: boas práticas, princípios e padrões

Princípios de Projeto OO – Single Responsibility Principle (SRP)

"Nunca deve haver mais de um motivo para uma classe ser alterada"

Page 43: qualidade de código: boas práticas, princípios e padrões

Violação do princípio:Considere a Classe TAD

Page 44: qualidade de código: boas práticas, princípios e padrões

Adequação ao princípio:

Page 45: qualidade de código: boas práticas, princípios e padrões

Princípios de Projeto OO – Open/Closed Principle (OCP)

“As entidades devem estar abertas para extensão, mas fechadas para modificação”

Page 46: qualidade de código: boas práticas, princípios e padrões

Considere o método para calcular o preço total de peças:

public double totalPrice(Part[] parts){double total = 0.0;for(int i=0; i < parts.length; i++){

total += parts[i].getPrice();

Violação do princípio:

total += parts[i].getPrice();}return total;

}

O método processa diferentes tipos de peças da hierarquia de Part, sem demandar modificações, portanto conformado-

se com o OCP.

Page 47: qualidade de código: boas práticas, princípios e padrões

O que ocorrerá se a empresa decidir cobrar um preço adicional por certas peças?

public double totalPrice(Part[] parts){double total = 0.0;for(int i = 0; i < parts.length; i++){if(parts[i] instanceof Motherbord)

Violação do princípio:

if(parts[i] instanceof Motherbord)total +=(1.45 * part[i].getPrice());

else if (parts[i] instanceof Memory)total += (1.30 * part[i].getPrice());

elsetotal += part[i].getPrice();

}return total;

}

Page 48: qualidade de código: boas práticas, princípios e padrões

Considere novamente o método totalPrice original

public double totalPrice(Part[] parts){double total = 0.0;for(int i = 0; i < parts.length; i++){

total += part[i].getPrice();}

Adequação ao princípio:

}return total;

}

Note que agora o método não precisa ser alterado para processar diferentes tipos de peças.

Mas as subclasses especiais de Parts precisam

Page 49: qualidade de código: boas práticas, princípios e padrões

public class Part{

private double basePrice;

public void setPrice(double price){

basePrice = price;

}

public double getPrice(){return basePrice;}

}

Adequação ao princípio:

}

public class motherBoard extends Part{

public double getPrice(){return 1.45*super.getPrice();

}

public class Memory extends Part{

public double getPrice(){

return 1.30 * super.getPrice();

}

}

Page 50: qualidade de código: boas práticas, princípios e padrões

Princípios de Projeto OO – Liskov substitution principle (LSP)

“Funções que usam objetos de uma superclasse devem ser capazes de usar objetos das subclasses.”

Page 51: qualidade de código: boas práticas, princípios e padrões

Princípios de Projeto OO – Interface Segregation Principle (ISP)

“Interfaces mais específicas melhor que interface de propósito diversos.”

Page 52: qualidade de código: boas práticas, princípios e padrões

Princípios de Projeto OO – Dependency Inversion Principle (DIP)

“Módulos de alto nível não devem depender de módulos de nível mais baixo. Todos devem depender de abstrações.”

Page 53: qualidade de código: boas práticas, princípios e padrões

Padrões de Projeto

Page 54: qualidade de código: boas práticas, princípios e padrões

Padrões Arquiteturais

De acordo com os condutores arquiteturais

Page 55: qualidade de código: boas práticas, princípios e padrões

Atender ao negócioUsuário Feliz

Necessidade atendida$$$$$$$$$

Page 56: qualidade de código: boas práticas, princípios e padrões

@edgarddavidsonhttp://edgarddavidson.com