Processo de Engenharia de Software III Confiabilidade de Software Tania Fatima Calvi Tait Confiabilidade de software Roteiro de apresentação: Conceito de confiabilidade Medidas de confiabilidade e disponibilidade Modelos de confiabilidade Dimensões da confiança do software Confiabilidade Desempenho e confiança Razões para a confiabilidade de software Disponibilidade Segurança Proteção Sistemas críticos Sistema crítico de segurança Sistema crítico de missão Sistema crítico de negócios Confiabilidade de software Confiabilidade de software pode ser medida e estimada usando usando dados históricos e de desenvolvimento Confiabilidade de software DEFINIÇÃO: Em termos estatísticos, a confiabilidade de software é definida como: “a probabilidade de operação livre de falhas de um programa de computador num ambiente específico durante determinado tempo” (Musa et al, 1987 in Pressman (1995). aborrecimentos Falhas catastrofes Não conformidade aos requisitos de software Confiabilidade de software Métricas de confiabilidade: Tempo médio de ocorrência de falhas Tempo médio até a ocorrência de falhas Tempo médio de reparo Taxa de ocorrência de falha. Probabilidade de falha sob demanda Disponibilidade Classificação geral Métrica do número de falhas do sistema Métricas de tempo ou número de transações Tempo gasto para reparar ou reiniciar o sistema Confiabilidade de software Medidas de confiabilidade e disponibilidade de software MTBF = MTTF + MTTR MTBF – tempo médio de ocorrência de falhas (mean time between failure) MTTF – tempo médio até a ocorrência de falha (mean time to failure) MTTR – tempo médio de reparo (mean time to repair) Disponibilidade = MTTF --------------------------- x 100% (MTTF + MTTR) Confiabilidade de software Probabilidade de falhas sob demanda (POFOD): A probabilidade de o sistema falhar quando um pedido de serviço é feito. Uma POFOD de 0,0001 significa que um entre mil pedidos de serviços pode resultar em falha. POFOD – probability of failure on demand Taxa de ocorrência de falha (ROCOF): A frequência com que um comportamento inesperado pode ocorrer. Uma ROCOF de 2/100 significa que duas falhas têm possibilidade de ocorrer em cada cem unidade operacionais de tempo. Essa medida= Intensidade de falhas. ROCOF – Rate of failure occurrence Confiabilidade de software Modelos de confiabilidade de software 1) Modelos que prevêm a confiabilidade como uma função cronológica (calendário) 2) Modelos que prevêm a confiabilidade como uma função do tempo de processamento transcorrido( tempo de execução da CPU). Confiabilidade de software Dimensões da confiança do software confiança disponiblidade A capacidade do sistema disponibilizar serviços quando necessário confiabilidade ... disponibilizar serviços conforme especificado segurança ...operar sem falhas catastróficas proteção ...se proteger contra invasão acidental ou deliberada Fonte: (Sommerville, 2003) Confiabilidade de software Dimensões da confiança do software: confiabilidade Refletindo... “altos níveis de confiança de software somente podem ser alcançados à custa do desempenho do sistema” Confiabilidade de software Um software confiável inclui: Código extra (redundante; para verificar os estados excepcionais do sistema e para possibilitar a recuperação necessária a partir das falhas do sistema) Aumento da capacidade de armazenamento X Redução do desempenho Confiabilidade de software Razões pelas quais a confiança é um atributo importante: 1. Sistemas não confiáveis (não apresentam segurança ou são inseguros) não são utilizados; 2. Os custos de falhas em um sistema podem ser enormes; 3. É difícil readequar a confiança; 4. Frequentemente é possível compensar a falha de desempenho do sistema; 5. Sistemas não confiáveis podem causar a perda das informações. Confiabilidade de software A confiabilidade do produto de software é influenciada pelo processo de software utilizado para desenvolver o produto. Um processo orientado no sentido de evitar defeitos poderá desenvolver um sistema confiável. Confiabilidade de software Dimensões da confiança do software: disponibilidade Disponibilidade: é a probabilidade de um sistema, em determinado instante, ser operacional e fornecer os serviços requeridos. A confiabilidade implica a disponibilidade – se um serviço especificado não for prestado, o sistema não estará se comportando de acordo com sua especificação. Confiabilidade de software A disponibilidade não depende do sistema em si, mas do tempo necessário para reparar os defeitos que tornam o sistema indisponível. Exemplo: sistema A falha uma vez por ano e leva 3 dias para reiniciar; Sistema B falha uma vez por mês e leva 3 minutos para reiniciar. Qual a maior disponibilidade? Qual o preferido? Confiabilidade de software A confiabilidade é comprometida com a ocorrência de falhas no sistema. Abordagens complementares para melhorar a confiabilidade de um sistema: 1. Evitar defeitos; (técnicas de desenvolvimento) 2. Detecção e exclusão de defeitos; (técnicas de verificação e validação) 3. Tolerância a defeitos (técnicas de tolerância a falhas) Confiabilidade de software Terminologia da confiabilidade Termo Descrição Falha do sistema Um evento que ocorre em algum momento, quando o sistema não fornece o serviço como é esperado por seus usuários. Erro do sistema Comportamento errôneo do sistema, quando o comportamento do sistema não atende à sua especificação. Defeito do sistema Um estado incorreto do sistema, ou seja, um estado do sistema que é inesperado para seus projetistas. Erro ou engano humano Comportamento humano que resulta na introdução de defeitos no sistema. Confiabilidade de software Os defeitos de software causam falhas de software quando o código com defeito é executado com um conjunto de entradas que expõem o defeito. Conjunto de entradas Ie Entradas que causam saídas errôneas programa Saídas errôneas Oe Conjunto de saídas Confiabilidade de software Dimensões da confiança do software: segurança A segurança de um sistema é um atributo que reflete a capacidade do sistema de operar normal e anormalmente, sem ameaçar as pessoas ou o ambiente. Quando a segurança é um atributo essencial de um sistema crítico, esse sistema é “um sistema de segurança crítica”. Exemplos: Sistemas de controle de aeronaves; Sistemas de controle de processos em indústrias químicas; Confiabilidade de software Controle de hardware e controle de software: complexidade Exemplo: monitoramento de aeronaves militares avançadas Confiabilidade de software Classes de softwares críticos de segurança: Software crítico de segurança primária Esse é um software que é embutido como um controlador em um sistema. A disfunção desse software pode causar uma disfunção de hardware, o que resulta em ferimentos em pessoas ou dano ambiental. Software crítico de segurança secundária Esse é um software que pode indiretamente resultar em ferimentos. Exemplo: banco de dados de um médico – erro pode resultar em dose errada de medicamento. Confiabilidade de software A confiabilidade e a segurança do sistema estão relacionadas, mas são atributos de confianças distintos. Os sistemas que apresentam tolerância a defeitos não são necessariamente seguros. Confiabilidade de software Razões pelas quais os sistemas de software que são confiáveis não são necessariamente seguros: 1. A especificação pode estar incompleta, pelo fato de não descrever o comportamento exigido do sistema em algumas situações críticas; (dificuldades com requisitos). 2. As disfunções de hardware podem fazer com que o sistema se comporte de maneira imprevisível e apresentar o software em um ambiente não previsto. 3. O operador do sistema pode gerar entradas que não são individualmente corretas, que, em determinadas situações, podem levar a uma disfunção do sistema. (mecânico e software para levantar trem de aterrissagem) Confiabilidade de software Chaves para garantir a segurança: 1. Evitar o perigo; 2. Detectar e eliminar o perigo; (válvula de alívio) 3. Limitar o prejuízo. (extintores de incêndio automáticos) Confiabilidade de software Dimensões da confiança do software: proteção A proteção de um sistema é uma avaliação do ponto em que o sistema protege a si mesmo de ataques externos. Exemplo: ataque por vírus; uso não autorizado de serviços do sistema; modificação não autorizada do sistema ou de seus dados. Sem um nível razoável de proteção, a disponibilidade, a confiabilidade e a segurança do sistema poderão ser comprometidos, se ataques externos provocarem algum dado ao sistema. Confiabilidade de software Erros no desenvolvimento de um sistema podem levar a falhas na proteção. Exemplo de fraquezas: Sistema não responde a entradas inesperadas; Seus limites não são verificados Alto nível de proteção: Sistemas militares; Sistemas de comércio eletrônico; Sistemas de processamento e intercâmbio de informações confidenciais. Confiabilidade de software Danos provocados por ataques externos: 1. Interrupção de serviço; afeta a disponibilidade do sistema. 2. Corrupção de programas ou dados; afeta a confiabilidade e a segurança. 3. Revelação de informações confidenciais; afeta a disponibilidade e a confiabilidade. Confiabilidade de software Para assegurar a proteção de um sistema: 1. Evitar a vulnerabilidade; Não conexão a uma rede pública. 2. Detectar e neutralizar ataques; Verificador de vírus. 3. Limitar a exposição. Cópias regulares do sistema e política de gerenciamento de configuração. Confiabilidade de software Uso da Internet Mais conexões Mais facilidade de ataques Atributo relacionado ao uso da Internet: sobrevivência. É a capacidade de um sistema continuar a prestar serviços enquanto sob ataque e, potencialmente, parte do sistema está incapacitada. Confiabilidade de software Abordagens para assegurar a proteção de um sistema: Resistência a ataques; Reconhecimento de um ataque; Recuperação a partir dos danos provocados pelo ataque.. Confiabilidade de software Confiabilidade de software Tipos de sistemas críticos: Sistema crítico de segurança Um sistema cuja falha pode resultar em ferimentos, na perda de uma vida ou em grande dano ambiental. Exemplo: sistema de controle de fábrica de produtos químicos. Sistema crítico de missão Um sistema cuja falha pode resultar na falha de alguma atividade orientada a metas. Exemplo: sistema de navegação de aeronaves. Sistema crítico de negócios Um sistema cuja fábrica pode resultar no fracasso dos negócios que utilizam o sistema. Exemplo: sistema de contas de cliente de um banco. Confiabilidade de software Componentes dos sistemas que estão sujeitos a falhas: Hardware de sistema erros de fabricação final de sua vida útil Software de sistema enganos na especificação, projeto ou implementação Operadores humanos falhar ao operar o sistema Confiabilidade de software Classificação das falhas Classe de falha Descrição Transiente Ocorre somente com algumas entradas. Permanente Ocorre com todas as entradas. Recuperável O sistema pode se recuperar sem a intervenção do operador. Irrecuperável É necessário a intervenção do operador para a recuperação a partir da falha. Não corruptível A falha não corrompe o estado do sistema ou seus dados. Corruptível A falha corrompe o estado do sistema ou seus dados. Confiabilidade de software Especificação de confiabilidade para um caixa eletrônico (fonte: Sommerville, 2003) Classe de falha Exemplo Métrica de confiabilidade Permanente, não corruptível O sistema falha ao operar com qualquer cartão que seja inserido. O software deve ser reinicializado para corrigir a falha. ROCOF A ocorrência/ 1000 dias Transiente, não corruptível Os dados da fita magnética não ROCOF podem ser lidos em um cartão sem 1 em 1000 transações defeito que tenha sido inserido. Transiente, corruptível Um padrão de transações na rede causa a corrupção do banco de dados. Não quantificável Nunca deve acontecer no tempo de vida útil do sistema. Confiabilidade de software Especificação da segurança – ciclo de vida de segurança da norma IEC 61508 Derivação de Definição de conceito e escopo Análise de perigos e riscos Alocação de requisito de segurança Requisito de segurança Planejamento Validação O&M Instalação Desenvolvimento de Recursos de redução sistemas relacionados de risco externo Com a segurança Validação da segurança Instalação e ativação Operação e manutenção Desativação do sistema Confiabilidade de software Especificação de proteção 1. 2. 3. 4. 5. Identificação e avaliação de ativos (dados e programas); Análise de ameaças e avaliação de riscos; Atribuição de ameaças; Análise de tecnologia; Especificação dos requisitos de proteção. Padrões de gerenciamento de proteção estão em desenvolvimento. Confiabilidade de software Referências bibliográficas: Pressman, Roger. Engenharia de Software., São Paulo Makron Books,:1995. Tradução: José Carlos Barbosa dos Santos. Sommerville, Ian. Engenharia de software. 6a.ed., São Paulo: Addison Wesley, 2003.