Tdc2012 david robert-robustezdesoftware

206 visualizações

Publicada em

0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
206
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
2
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Tdc2012 david robert-robustezdesoftware

  1. 1. Globalcode – Open4education Robustez de Software Como ouvir menos reclamações dos seus chefes David Robert Camargo de Campos Mestre em Ciência da Computação
  2. 2. while42 davidrobert davidrobert@gmail.com quem sou eu?
  3. 3. (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 Agenda
  4. 4. Como se proteger?
  5. 5. Mas o que isso significa 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 é null Objeto é do tipo que eu espero Sistema externo está no ar Resposta é bem formatada Input 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 no caso de falhas de alguns dos seus componentes A 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, seja liberal no que você aceita dos outros" Jonh Postel
  15. 15. De onde vieram os componentes? em software
  16. 16. Bom Design é só Reuso?
  17. 17. "A função de um bom software é fazer com que o complexo pareça ser simples" Grady Booch
  18. 18. ALERTA Combatento Complexidade
  19. 19. Qual nosso arsenal pra isso? Alta Coesão Baixo 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 para construir sistemas visando baixo acoplamento Princípio do Mínimo Conhecimento (Principle of Least Knowledge)
  25. 25. Não fale com estrageiros
  26. 26. Não fale com estrageiros ou seja Fale somente com amigos
  27. 27. Não fale com estrageiros ou seja Fale 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 da Lei 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 tem um 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/SeHUp Artigo: Mocks Aren't Stubs - http://goo.gl/ffcLX Video: Design de Software: As técnicas esquecidas http://goo.gl/1n42E Wikipédia: Law of Demeter - http://goo.gl/PY8cm Wikipédia: Fault-tolerant system - http://goo.gl/fS5PO Livro: Working Effectively with Legacy Code - http://goo.gl/358zH Livro: Introdução à Arquitetura e Design de Software - http://goo.gl/uECTc Slides: Design de Código Qualidade a longo prazo - http://goo.gl/IDySH Blog: Law Of Demeter - http://goo.gl/Ahh9D

×