Robustez de SoftwareComo ouvir menos reclamações dos seus chefes          David Robert Camargo de Campos            Mestre...
quem sou eu?while42   davidrobert   davidrobert@gmail.com
Agenda  (1) Lei de Murphy  (2) Robustez de Software  (3) Graceful Degradation  (4) Lei de Postel  (5) Bom Desing e Reuso  ...
Como se proteger?
Mas o que issosignifica em software?
Nem sempre as premissas que    nós (desenvolvedores)assumimos como válidas, sempre         serão válidas
Objeto não é nullObjeto é do tipo que eu espero Sistema externo está no ar Resposta é bem formatadaInput do usuário é conf...
Robustez X Precisão         Precisão: Habilidade         de executar as tarefas         para as quais foi         definido...
{    "cliente":    {       "nome" : "Jonathan Bruce Postel",       "data_nascimento" : "06 de agosto de 1943",       "naci...
public Cliente parserDeCliente() throws JSONException {    JSONObject json = // ...    String nome = json.getString("nome"...
Faz sentido o invocador do método ter que      conhecer a JSONException? Faz sentido lançar uma exceção só por    não ter ...
Graceful Degradation             (Degradação Graciosa)Permite que o sistema continue a operar adequadamente nocaso de falh...
public Cliente parserDeCliente() throws MinhaException {    Cliente cliente;    try {        JSONObject json = // ...     ...
"Seja conservador no que você faz, sejaliberal no que você aceita dos outros"                           Jonh Postel
De onde vieram oscomponentes?em software
Bom Design é só Reuso?
"A função de um bom software é fazercom que o complexo pareça sersimples"                        Grady Booch
ALERTACombatentoComplexidade
Qual nosso arsenal pra isso?   Alta CoesãoBaixo Acoplamento
public class Financeiro {  // ...1 public void executarPagamentos() {2   for (Cliente cliente: clientes) {3     if (client...
public class Financeiro {  // ...1 public void executarPagamentos() {2   for (Cliente cliente: clientes) {3     if (client...
public class Financeiro {  // ...1 public void executarPagamentos() {2   for (Cliente cliente: clientes) {3     if (client...
Forte Acoplamento   Acoplamento indesejado   Mais responsabilidade para a classe
Lei de DemeterÉ um conjunto de regras paraconstruir sistemas visando baixoacoplamentoPrincípio do Mínimo Conhecimento    (...
Não fale com estrageiros
Não fale com estrageiros        ou sejaFale somente com amigos
Não fale com estrageiros         ou sejaFale somente com amigos (membros ou parametros)
public class Cliente {  private Carteira carteira;  // ...1 public boolean fazerPagamento(double valor) {2    if (carteira...
public class Financeiro {  // ...1 public void executarPagamentos() {2   for (Cliente cliente: clientes) {3     if (client...
produto.getCliente().getEndereco().getCEP()
porque um acidente de trem vai estragar o seu dia
produto.getCliente().getEndereco().getCEP()
o padrão de OO no mercado é a   “orgia dos objetos” pattern todo mundo pega todo mundo
É possível aplicar o princípio em      todos os projetos?
Em algumas situações, forçar a utilização daLei de Demeter pode não ter valor maior do que   manter as regras do domínio d...
“A Lei de Demeter na verdade  deveria ser chamada de Sugestão  de Demeter”Martin Fowler
o mais importante   em um projeto éescrever código bonito
o mais importante  em um projeto éescrever código bom
alguém temum método zoado ai?!
Por que ele ainda não foi      refatorado?
O que é código legado?
“A principal coisa que identifica o código legado é a                   falta de testes”
Obrigado! while42     davidrobert davidrobert@gmail.com
Onde saber mais?RFC 793 - http://goo.gl/SeHUpArtigo: Mocks Arent Stubs - http://goo.gl/ffcLXVideo: Design de Software: As ...
Robustez de Software - Como ouvir menos reclamações dos seus chefes
Robustez de Software - Como ouvir menos reclamações dos seus chefes
Próximos SlideShares
Carregando em…5
×

Robustez de Software - Como ouvir menos reclamações dos seus chefes

1.901 visualizações

Publicada em

Slides da palestra apresentada no TDC 2012 na trilha de Arquitetura - A robustez é a capacidade do sistema funcionar mesmo em condições anormais. Esta palestra prentende demonstrar algumas técnicas que podem ser usadas no desenvolvimento de software com intuito de auxiliar o desenvolvedor a produzir sistemas robustos.

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
1.901
No SlideShare
0
A partir de incorporações
0
Número de incorporações
6
Ações
Compartilhamentos
0
Downloads
27
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Robustez de Software - Como ouvir menos reclamações dos seus chefes

  1. 1. Robustez de SoftwareComo ouvir menos reclamações dos seus chefes David Robert Camargo de Campos Mestre em Ciência da Computação Globalcode – Open4education
  2. 2. quem sou eu?while42 davidrobert davidrobert@gmail.com
  3. 3. Agenda (1) Lei de Murphy (2) Robustez de Software (3) Graceful Degradation (4) Lei de Postel (5) Bom Desing e Reuso (6) Combatendo Complexidade (7) Lei de Demeter (8) Código Legado
  4. 4. Como se proteger?
  5. 5. Mas o que issosignifica em software?
  6. 6. Nem sempre as premissas que nós (desenvolvedores)assumimos como válidas, sempre serão válidas
  7. 7. Objeto não é nullObjeto é do tipo que eu espero Sistema externo está no ar Resposta é bem formatadaInput do usuário é conforme o esperado
  8. 8. Robustez X Precisão Precisão: Habilidade de executar as tarefas para as quais foi definido nos requisitos Robustez: Habilidade de funcionar mesmo em situações anormais
  9. 9. { "cliente": { "nome" : "Jonathan Bruce Postel", "data_nascimento" : "06 de agosto de 1943", "nacionalidade" : "Estadunidense", "profissao" : "Cientista da computação" }}
  10. 10. public Cliente parserDeCliente() throws JSONException { JSONObject json = // ... String nome = json.getString("nome"); String data = json.getString("data_nascimento"); String nacionalidade = json.getString("nacionalidade"); String naturalidade = json.getString("naturalidade"); String profissao = json.getString("profissao"); Cliente cliente = new Cliente(nome); // ... return cliente;}
  11. 11. Faz sentido o invocador do método ter que conhecer a JSONException? Faz sentido lançar uma exceção só por não ter a naturalidade no JSON?
  12. 12. Graceful Degradation (Degradação Graciosa)Permite que o sistema continue a operar adequadamente nocaso de falhas de alguns dos seus componentesA redução de qualidade é proporcional à gravidade da falha
  13. 13. public Cliente parserDeCliente() throws MinhaException { Cliente cliente; try { JSONObject json = // ... cliente = new Cliente(json.getString("nome")); } catch (JSONException e) { throw new MinhaException("Faltou o nome"); } // ... try { cliente.setNaturalidade(json.getString("naturalidade")); } catch (JSONException e) { /* ... */ } // ... return cliente;}
  14. 14. "Seja conservador no que você faz, sejaliberal no que você aceita dos outros" Jonh Postel
  15. 15. De onde vieram oscomponentes?em software
  16. 16. Bom Design é só Reuso?
  17. 17. "A função de um bom software é fazercom que o complexo pareça sersimples" Grady Booch
  18. 18. ALERTACombatentoComplexidade
  19. 19. Qual nosso arsenal pra isso? Alta CoesãoBaixo Acoplamento
  20. 20. public class Financeiro { // ...1 public void executarPagamentos() {2 for (Cliente cliente: clientes) {3 if (cliente.getCarteira().getSaldo() >= valor){4 cliente.getCarteira().subtrai(valor);5 // ...6 pagantes.add(cliente);7 }8 }9 }}
  21. 21. public class Financeiro { // ...1 public void executarPagamentos() {2 for (Cliente cliente: clientes) {3 if (cliente.getCarteira().getSaldo() >= valor){4 cliente.getCarteira().subtrai(valor);5 // ...6 pagantes.add(cliente);7 }8 }9 }}
  22. 22. public class Financeiro { // ...1 public void executarPagamentos() {2 for (Cliente cliente: clientes) {3 if (cliente.getCarteira().getSaldo() >= valor){4 cliente.getCarteira().subtrai(valor);5 // ...6 pagantes.add(cliente);7 }8 }9 }}
  23. 23. Forte Acoplamento Acoplamento indesejado Mais responsabilidade para a classe
  24. 24. Lei de DemeterÉ um conjunto de regras paraconstruir sistemas visando baixoacoplamentoPrincípio do Mínimo Conhecimento (Principle of Least Knowledge)
  25. 25. Não fale com estrageiros
  26. 26. Não fale com estrageiros ou sejaFale somente com amigos
  27. 27. Não fale com estrageiros ou sejaFale somente com amigos (membros ou parametros)
  28. 28. public class Cliente { private Carteira carteira; // ...1 public boolean fazerPagamento(double valor) {2 if (carteira.getSaldo() >= valor) {3 carteira.subtrai(valor);4 return true;5 }6 return false;7 }}
  29. 29. public class Financeiro { // ...1 public void executarPagamentos() {2 for (Cliente cliente: clientes) {3 if (cliente.fazerPagamento(valor)) {5 // ...6 pagantes.add(cliente);5 }6 }7 }}
  30. 30. produto.getCliente().getEndereco().getCEP()
  31. 31. porque um acidente de trem vai estragar o seu dia
  32. 32. produto.getCliente().getEndereco().getCEP()
  33. 33. o padrão de OO no mercado é a “orgia dos objetos” pattern todo mundo pega todo mundo
  34. 34. É possível aplicar o princípio em todos os projetos?
  35. 35. Em algumas situações, forçar a utilização daLei de Demeter pode não ter valor maior do que manter as regras do domínio da aplicação
  36. 36. “A Lei de Demeter na verdade deveria ser chamada de Sugestão de Demeter”Martin Fowler
  37. 37. o mais importante em um projeto éescrever código bonito
  38. 38. o mais importante em um projeto éescrever código bom
  39. 39. alguém temum método zoado ai?!
  40. 40. Por que ele ainda não foi refatorado?
  41. 41. O que é código legado?
  42. 42. “A principal coisa que identifica o código legado é a falta de testes”
  43. 43. Obrigado! while42 davidrobert davidrobert@gmail.com
  44. 44. Onde saber mais?RFC 793 - http://goo.gl/SeHUpArtigo: Mocks Arent Stubs - http://goo.gl/ffcLXVideo: Design de Software: As técnicas esquecidas http://goo.gl/1n42EWikipédia: Law of Demeter - http://goo.gl/PY8cmWikipédia: Fault-tolerant system - http://goo.gl/fS5POLivro: Working Effectively with Legacy Code - http://goo.gl/358zHLivro: Introdução à Arquitetura e Design de Software - http://goo.gl/uECTcSlides: Design de Código Qualidade a longo prazo - http://goo.gl/IDySHBlog: Law Of Demeter - http://goo.gl/Ahh9D

×