O documento discute princípios de robustez e qualidade de software, incluindo a Lei de Murphy, degradação graciosa, Lei de Postel, baixo acoplamento, Lei de Demeter, e legado de código. O objetivo é ensinar como desenvolvedores podem escrever software que seja resistente a falhas e problemas imprevistos.
Robustez de Software - Como ouvir menos reclamações dos seus chefes
1. Robustez de Software
Como ouvir menos reclamações dos seus chefes
David Robert Camargo de Campos
Mestre em Ciência da Computação
Globalcode – Open4education
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
8. Nem sempre as premissas que
nós (desenvolvedores)
assumimos como válidas, sempre
serão válidas
9. 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
10. 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
11. {
"cliente":
{
"nome" : "Jonathan Bruce Postel",
"data_nascimento" : "06 de agosto de 1943",
"nacionalidade" : "Estadunidense",
"profissao" : "Cientista da computação"
}
}
13. 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?
14. 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
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. 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 }
}
24. 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 }
}
25. Forte Acoplamento
Acoplamento indesejado
Mais responsabilidade para a classe
26. Lei de Demeter
É um conjunto de regras para
construir sistemas visando baixo
acoplamento
Princípio do Mínimo Conhecimento
(Principle of Least Knowledge)
46. 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