Engenharia de Confiança Helena Macedo Reis Luis Fernando de Souza Moro 1
Engenharia de Confiança Preocupada com técnicas que aumentam a confiança e diminui os riscos de falhas Falha pode causar perda de vidas ou financeira Sistemas críticos: Controle de processos; Sistemas de proteção; Sistemas médicos Sistemas de controle de voo. 2
Engenharia de Confiança As técnicas usadas na Engenharia de Confiança suportam três abordagens: Prevenção de defeitos; Detecção e correção de defeitos; Tolerância. Os sistemas críticos são avaliados por órgãos reguladores. 3
Engenharia de Confiança 4
Diversidade e Redundância Exemplos: Fechaduras de uma casa Realização de backup Processos seguros Maior dificuldade para compreender o sistema Menor possibilidade de encontrar erros que resultem em falhas Empresas utilizam as duas abordagens: Airbus 340 Hardware e Software redundantes Boeing 777 Hardware redundante 5
Processos confiáveis Para um processo ser considerado confiável deve seguir os seguintes atributos: 6
Processos confiáveis As atividades que podem serem incluídas em um processo confiável são: Revisões de requisitos; Gerenciamento de requisitos; Especificação formal; Sistema de modelagem; Inspeções de projeto e programa; Análise estática; Planejamento e gerenciamento de testes. 7
Arquiteturas de Sistemas Confiáveis Sistemas de Proteção Arquitetura de Auto monitoramento Programação N-Version Diversidade de Software 8
Sistemas de Proteção 9
Arquitetura de Auto monitoramento 10
Arquitetura de Auto monitoramento Sistema de voo do Airbus 11
Programação N-Version 12
Diversidade de software Independência nas implementações Equipes diferentes Politicas explicitas Métodos de projeto Diferentes linguagens Diferentes ambientes de desenvolvimento Diferentes algoritmos 13
Diversidade de software Especificação detalhada Idealmente Sem dependência Diferentes falhas Mais confiabilidade 14
Diversidade de software Porém Impossível alcançar a independência completa Membros com mesma origem cultural Requisitos incorretos Redução de erros Especificações detalhadas independentes Diferentes linguagens (especificação formal, modelo baseado em estados) Sistema de 3 canais, 5 a 9 vezes mais confiável Custo X Confiabilidade 15
Programação Confiável Programação Boas praticas de programação Diretrizes de programação confiável 1. Limitar a visibilidade de informação em um programa 2. Verificar todas as entradas para validade 3. Fornecer um tratador para todas as exceções 4. M inimizar o uso de construções propensas a erros 5. Fornecer recursos de reiniciação 6. Verificar limites d e vetor 7. Incluir timeouts ao chamar componentes externos 8. Nomear todas as constantes que representam valores do mundo real 16
Diretriz 1: Limitar a visibilidade de informação em um programa Militares e informações Acessos componentes Tipos abstratos Fila de pedidos de serviço 17
Diretriz 2: Verificar todas as entradas para validade Verificar leitura das entradas Intervalos (Probabilidade) Tamanhos (Conta bancaria) Representações (Nome) Razoabilidade (Conta de agua) Falha (Reinserir, valor antigo) 18
Diretriz 3: Fornecer um tratador para todas as exceções Exceções Tratamento Componente superior Processamento alternativo Run-time Tolerância a defeitos 19
Diretriz 4: Minimizar o uso de construções propensas a erros Construções e técnicas Go-to Código espaguete Números de ponto flutuante Comparação Ponteiros Área de memoria 20
Diretriz 4: Minimizar o uso de construções propensas a erros Alocação dinâmica de memoria Falta de memoria Paralelismo Dependência Recursão Logica difícil Memoria Interrupções Encerramento de uma operação critica 21
Diretriz 4: Minimizar o uso de construções propensas a erros Herança Entender comportamento Varias instancias Alias Perda de declarações Vetores não limitados Overflow de buffer Entradas default Entradas inesperadas Cuidado na utilização 22
Diretriz 5: Fornecer recursos de reiniciação Transações curtas Transações longas Checkpoint Comercio eletrônico Exceção 23
Diretriz 6: Verificar limites de vetor Tamanhos fixos Verificação de índices Overhead Garantia pelo desenvolvedor 24
Diretriz 7: Incluir timeouts ao chamar componentes externos Espera de resposta Timeouts Recuperação 25
Diretriz 8: Nomear todas as constantes que representam valores do mundo real Entidades do mundo real Constantes Erros Alteração de valor 26