Tdc2012 david robert-robustezdesoftware

of 46 /46
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

Embed Size (px)

Transcript of Tdc2012 david robert-robustezdesoftware

  • Globalcode Open4education

    Robustez de SoftwareComo ouvir menos reclamaes dos seus chefes

    David Robert Camargo de CamposMestre em Cincia da Computao

  • while42 davidrobert [email protected]

    quem sou eu?

  • (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) Cdigo Legado

    Agenda

  • Como se proteger?

  • Mas o que isso significa em software?

  • Nem sempre as premissas que ns (desenvolvedores)

    assumimos como vlidas, sempre sero vlidas

  • Objeto no null

    Objeto do tipo que eu espero

    Sistema externo est no ar

    Resposta bem formatada

    Input do usurio conforme o esperado

  • Robustez X Preciso

    Preciso: Habilidade de executar as tarefas para as quais foi definido nos requisitos

    Robustez: Habilidade de funcionar mesmo em situaes anormais

  • { "cliente": { "nome" : "Jonathan Bruce Postel", "data_nascimento" : "06 de agosto de 1943", "nacionalidade" : "Estadunidense", "profissao" : "Cientista da computao" }}

  • 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;}

  • Faz sentido o invocador do mtodo ter que conhecer a JSONException?

    Faz sentido lanar uma exceo s por no ter a naturalidade no JSON?

  • Graceful Degradation(Degradao Graciosa)

    Permite que o sistema continue a operar adequadamente no caso de falhas de alguns dos seus componentes

    A reduo de qualidade proporcional gravidade da falha

  • 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;}

  • "Seja conservador no que voc faz, seja liberal no que voc aceita dos outros"

    Jonh Postel

  • De onde vieram os componentes? em software

  • Bom Design s Reuso?

  • "A funo de um bom software fazer com que o complexo parea ser simples"

    Grady Booch

  • ALERTA

    Combatento Complexidade

  • Qual nosso arsenal pra isso?

    Alta CoesoBaixo Acoplamento

  • 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 }

    }

  • 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 }

    }

  • 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 }

    }

  • Forte Acoplamento

    Acoplamento indesejado Mais responsabilidade para a classe

  • Lei de Demeter

    um conjunto de regras para construir sistemas visando baixo acoplamento

    Princpio do Mnimo Conhecimento (Principle of Least Knowledge)

  • No fale com estrageiros

  • No fale com estrageiros

    ou seja

    Fale somente com amigos

  • No fale com estrageiros

    ou seja

    Fale somente com amigos

    (membros ou parametros)

  • 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 }

    }

  • 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 }

    }

  • produto.getCliente().getEndereco().getCEP()

  • porque um acidente de trem vai estragar o seu dia

  • produto.getCliente().getEndereco().getCEP()

  • o padro de OO no mercado a orgia dos objetos pattern

    todo mundo pega todo mundo

  • possvel aplicar o princpio em todos os projetos?

  • Em algumas situaes, forar a utilizao da Lei de Demeter pode no ter valor maior do que

    manter as regras do domnio da aplicao

  • A Lei de Demeter na verdade deveria ser chamada de Sugesto de Demeter

    Martin Fowler

  • o mais importanteem um projeto

    escrever cdigo bonito

  • o mais importanteem um projeto

    escrever cdigo bom

  • algum tem um mtodo zoado ai?!

  • Por que ele ainda no foi refatorado?

  • O que cdigo legado?

  • A principal coisa que identifica o cdigo legado a

    falta de testes

  • Obrigado!

    while42 davidrobert [email protected]

  • Onde saber mais?

    RFC 793 - http://goo.gl/SeHUpArtigo: Mocks Aren't Stubs - http://goo.gl/ffcLXVideo: Design de Software: As tcnicas esquecidas http://goo.gl/1n42EWikipdia: Law of Demeter - http://goo.gl/PY8cmWikipdia: Fault-tolerant system - http://goo.gl/fS5PO Livro: Working Effectively with Legacy Code - http://goo.gl/358zHLivro: Introduo Arquitetura e Design de Software - http://goo.gl/uECTcSlides: Design de Cdigo Qualidade a longo prazo - http://goo.gl/IDySHBlog: Law Of Demeter - http://goo.gl/Ahh9D

    http://goo.gl/SeHUphttp://goo.gl/ffcLXhttp://goo.gl/1n42Ehttp://goo.gl/PY8cmhttp://goo.gl/358zHhttp://goo.gl/uECTchttp://goo.gl/Ahh9D

    Trilha XxxxSlide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18Slide 19Slide 20Slide 21Slide 22Slide 23Slide 24Slide 25Slide 26Slide 27Slide 28Slide 29Slide 30Slide 31Slide 32Slide 33Slide 34Slide 35Slide 36Slide 37Slide 38Slide 39Slide 40Slide 41Slide 42Slide 43Slide 44Slide 45Slide 46