Tdc2012 david robert-robustezdesoftware
-
Author
silvio-garbes -
Category
Documents
-
view
198 -
download
0
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