Download - Tdc2012 david robert-robustezdesoftware
![Page 1: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/1.jpg)
Globalcode – Open4education
Robustez de SoftwareComo ouvir menos reclamações dos seus chefes
David Robert Camargo de CamposMestre em Ciência da Computação
![Page 3: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/3.jpg)
(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
![Page 4: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/4.jpg)
![Page 5: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/5.jpg)
Como se proteger?
![Page 6: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/6.jpg)
![Page 7: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/7.jpg)
Mas o que isso significa em software?
![Page 8: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/8.jpg)
Nem sempre as premissas que nós (desenvolvedores)
assumimos como válidas, sempre serão válidas
![Page 9: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/9.jpg)
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
![Page 10: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/10.jpg)
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
![Page 11: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/11.jpg)
{ "cliente": { "nome" : "Jonathan Bruce Postel", "data_nascimento" : "06 de agosto de 1943", "nacionalidade" : "Estadunidense", "profissao" : "Cientista da computação" }}
![Page 12: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/12.jpg)
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;
}
![Page 13: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/13.jpg)
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?
![Page 14: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/14.jpg)
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
![Page 15: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/15.jpg)
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;}
![Page 16: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/16.jpg)
"Seja conservador no que você faz, seja liberal no que você aceita dos outros"
Jonh Postel
![Page 17: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/17.jpg)
De onde vieram os componentes? em software
![Page 18: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/18.jpg)
Bom Design é só Reuso?
![Page 19: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/19.jpg)
"A função de um bom software é fazer com que o complexo pareça ser simples"
Grady Booch
![Page 20: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/20.jpg)
ALERTA
Combatento Complexidade
![Page 21: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/21.jpg)
Qual nosso arsenal pra isso?
Alta CoesãoBaixo Acoplamento
![Page 22: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/22.jpg)
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 }
}
![Page 23: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/23.jpg)
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 }
}
![Page 24: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/24.jpg)
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 }
}
![Page 25: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/25.jpg)
Forte Acoplamento
Acoplamento indesejado Mais responsabilidade para a classe
![Page 26: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/26.jpg)
Lei de Demeter
É um conjunto de regras para construir sistemas visando baixo acoplamento
Princípio do Mínimo Conhecimento
(Principle of Least Knowledge)
![Page 27: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/27.jpg)
Não fale com estrageiros
![Page 28: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/28.jpg)
Não fale com estrageiros
ou seja
Fale somente com amigos
![Page 29: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/29.jpg)
Não fale com estrageiros
ou seja
Fale somente com amigos
(membros ou parametros)
![Page 30: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/30.jpg)
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 }
}
![Page 31: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/31.jpg)
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 }
}
![Page 32: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/32.jpg)
produto.getCliente().getEndereco().getCEP()
![Page 33: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/33.jpg)
porque um acidente de trem vai estragar o seu dia
![Page 34: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/34.jpg)
produto.getCliente().getEndereco().getCEP()
![Page 35: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/35.jpg)
o padrão de OO no mercado é a “orgia dos objetos” pattern
todo mundo pega todo mundo
![Page 36: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/36.jpg)
É possível aplicar o princípio em todos os projetos?
![Page 37: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/37.jpg)
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
![Page 38: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/38.jpg)
“A Lei de Demeter na verdade deveria ser chamada de Sugestão de Demeter”
Martin Fowler
![Page 39: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/39.jpg)
o mais importanteem um projeto é
escrever código bonito
![Page 40: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/40.jpg)
o mais importanteem um projeto é
escrever código bom
![Page 41: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/41.jpg)
alguém tem um método zoado ai?!
![Page 42: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/42.jpg)
Por que ele ainda não foi refatorado?
![Page 43: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/43.jpg)
O que é código legado?
![Page 44: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/44.jpg)
“A principal coisa que identifica o código legado é a falta de testes”
![Page 46: Tdc2012 david robert-robustezdesoftware](https://reader034.vdocuments.mx/reader034/viewer/2022051502/58ee28e31a28ab6d6f8b45d7/html5/thumbnails/46.jpg)
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