Engenharia de Software
Prof. Wilkerson de L. Andrade
Versão resumida e traduzida dos slides originais produzidos por Ian Sommerville, Software Engineering, 7th edition. Chapter 3.
Estes slides foram adaptados dos slides gentilmente cedidos pela professora Patrícia D. L. Machado (DSC/UFCG).
Sistemas Críticos
Sistema Crítico de Segurança (Safety-critical systems) Falhas resultam em perda de vida, injúria ou dano ao meio ambiente; Exemplo: Sistema de controle de uma fábrica de produtos químicos Sistema Crítico de Missão (Mission-critical systems) Falhas resultam em falha de alguma atividade dirigida a metas; Exemplo: Sistema de navegação de aeronaves Sistema Crítico de Negócio (Business-critical systems) Falhas resultam em grandes perdas econômicas; Exemplo: Sistema de contas de cliente em um banco.Fidedignidade/Confiança
(Dependability)
• Propriedade mais importante para sistemas
críticos.
• Reflete o grau de confiança dos usuários de que o sistema vai operar como esperado e não vai falhar em usos normais.
• Utilidade e Fidedignidade não são a mesma
coisa: um sistema não precisa ser fidedigno para ser útil.
Importância da Fidedignidade
• Sistemas que não são fidedignos e são
inseguros e desprotegidos podem ser rejeitados por seus usuários;
• Os custos de uma falha podem ser muito
altos;
• Sistemas não fidedignos podem causar
perda de informações cujos custos para recuperação sejam impraticáveis.
Métodos de Desenvolvimento
para Sistemas Críticos
• Os custos de falhas em sistemas críticos são tão altos que compensa usar métodos de
desenvolvimento cujos custos seriam injustificáveis para outros sistemas.
• Exemplos de métodos de desenvolvimento:
▫ Métodos Formais
▫ Análise Estática
Sistemas Sociotécnicos Críticos
• Falha de Hardware
▫ Hardware falha devido a erros de projeto e manufatura ou porque componentes tenham ultrapassado seu tempo natural de vida.
• Falha de Software
▫ Software falha devido a defeitos em sua
especificação, design e/ou implementação.
• Falha Operacional
▫ Operadores humanos comentem erros.
Atualmente a provável maior causa de falhas em sistemas.
Uma bomba de insulina
controlada por software
• Usada por diabéticos para simular a função do pâncreas que manufatura insulina, um
hormônio essencial que metaboliza a glicose do sangue.
• Mede a glicose do sangue usando um
micro-sensor e computa a dose de insulina necessária para metabolizar a glicose.
Organização da Bomba de Insulina
Conjunto de agulhas Sensor Display1 Display2 Alarme Bomba Relógio Controlador Fornecimento de energia Reservatório de insulinaFluxo de Dados da Bomba de Insulina
Sangue Insulina Parâmetros de sangue Comandos de controle de bomba Bomba de Insulina Sensor de açúcar Análise do açúcar no sangue Nível de açúcar no sangue Insulina necessária Controlador de liberação de insulina Cálculo de insulina necessáriaRequisitos de Fidedignidade
• (Disponibilidade) O sistema deve liberar
insulina quando requisitado;
• (Confiabilidade) O sistema deve liberar a
quantidade correta de insulina de acordo com o nível real de açúcar no sangue;
• (Segurança) Doses excessivas de insulina
não devem ser administradas visto que são potencialmente perigosas para a vida
Fidedignidade
• Um sistema fidedigno é aquele no qual seus
usuários confiam;
• As principais dimensões de Fidedignidade são:
▫ Disponibilidade (Availability);
▫ Confiabilidade (Reliability);
▫ Segurança (Safety);
Dimensões de Fidedignidade
Fidedignidade
Disponibilidade Confiabilidade Segurança Proteção
Habilidade do sistema se proteger contra ataques acidentais ou intencionais. Habilidade do sistema operar sem falha catastrófica Habilidade do sistema prover serviços como especificado. Habilidade do sistema prover serviços quando requisitado
Outras propriedade de Fidedignidade
• Reparabilidade
▫ Reflete a capacidade do sistema ser consertado na ocorrência de uma falha
• Manutenibilidade
▫ Reflete a capacidade do sistema se adaptar a novos requisitos;
• Sobrevivência
▫ Reflete a capacidade do sistema de realizar seus serviços mesmo sobre ataque hostil;
• Tolerância a erros
▫ Reflete a capacidade de erros do usuário poderem ser evitados ou tolerados.
Custos de Fidedignidade
• Tendem a aumentar exponencialmente a
medida que aumentam os níveis de Fidedignidade requeridos
• Motivos:
▫ O uso de técnicas de desenvolvimento de alto
custo e hardware necessários para atingir altos níveis de fidedignidade
▫ O crescente uso de teste e validação a fim de
convencer o cliente de que os níveis de Fidedignidade requeridos foram atingidos.
Custos de Fidedignidade
Cu
sto
Baixa Média Alta Muito Ultra-alta Alta
Economia de Fidedignidade
• Devido aos altos custos para atingir
Fidedignidade, pode ser mais efetivo aceitar sistemas sem Fidedignidade e pagar pelas falhas (Cômodo);
• No entanto, isto depende de fatores sociais e políticos. Reputação de produtos que não
podem ser confiáveis pode levar a perdas futuras no negócio;
• Depende do tipo de sistema – para sistemas de negócio, níveis modestos de Fidedignidade
Terminologia de Confiabilidade
(Reliability)
Termo Descrição
Falha de sistema
Um evento que ocorre em algum momento, quando o sistema não fornece um serviço conforme esperado por seus usuários.
Erro de sistema
Um estado errôneo de sistema que pode levá-lo a um comportamento inesperado pelos seus usuários.
Defeito de sistema
Uma característica do sistema de software que pode levar a um erro de sistema. Por exemplo, a falha em iniciar uma variável pode levar a um valor errado quando esta for usada.
Erro humano ou engano
Comportamento humano que resulta na introdução de defeitos em um sistema.
Atingindo Confiabilidade
• Evitar Defeitos
▫ Técnicas de desenvolvimento que são usadas para minimizar a possibilidade de erros, evitando a
introdução de defeitos no sistema. • Detectar e Remover Defeitos
▫ Técnicas de Verificação e Validação que aumentam a probabilidade de detecção e correção de defeitos
antes que o sistema entre em operação • Tolerância a Defeitos
▫ Técnicas de tempo de execução usadas para
garantir que defeitos no sistema não vão resultar em erros do sistema e/ou que erros do sistema gerem falhas.
Modelagem de Confiabilidade
• Um sistema pode ser modelado como um
mapeamento de entrada-saída, onde algumas entradas podem resultar em saídas errôneas;
• A confiabilidade do sistema é a probabilidade de que uma entrada em particular faz parte de um conjunto de entradas que podem resultar em saídas errôneas;
• Pessoas diferentes usam um sistema de diferentes formas de tal forma que esta
probabilidade não é um atributo estático do
Mapeamento de Entrada/Saída
Ie Conjunto de entradas Oe Conjunto de saídas ProgramaEntradas que causam saídas errôneas
Percepções de Confiabilidade
Entradas possíveis Usuário 1 Usuário 3 Usuário2 Entradas errôneasMelhoria de Confiabilidade
• Remoção de X% de defeitos do sistema não irá necessariamente melhorar a confiabilidade em X%;
• Um estudo da IBM mostra que remover 60% de defeitos de um produto resultou em 3% de
melhoria de confiabilidade;
• Alguns defeitos podem ser executadas raramente;
• Um software com poucos defeitos podem ainda assim ser visto como não confiável por seus
Segurança (Safety)
• Segurança é uma propriedade do sistema
que reflete a habilidade do sistema de operar normalmente ou de forma anormal, sem
causar danos a vidas humanas ou morte e sem danos ao ambiente;
• É cada vez mais importante considerar esta propriedade, visto que a dependência por dispositivos controlados por software
aumenta cada vez mais;
• Requisitos de segurança são exclusivos, i.e., excluem situações não desejadas ao invés de especificar serviços desejados.
Segurança e Confiabilidade
• São relacionadas, mas distintas
▫ Confiabilidade e Disponibilidade são necessárias, mas não suficientes para a segurança do sistema
• Confiabilidade está relacionada com a conformidade com relação a uma
especificação de serviços
• Segurança está relacionada com garantir
que um sistema não pode causar danos independente deste estar ou não em
Sistemas Confiáveis e Inseguros
• Erros de Especificação
▫ Se a especificação do sistema está incorreta
então o fato do sistema se comportar conforme a mesma pode causar acidentes.
• Falhas de hardware podem gerar entradas
inapropriadas
▫ Difícil antecipar isto em uma especificação.
• Comandos sensíveis ao contexto, i.e. ativar um comando correto na hora errada
▫ Frequentemente causado por um erro do
Terminologia de Segurança
Termo Descrição
Acidente (ou desgraça)
Evento ou sequencia de eventos não planejados que resulta em morte ou ferimento de humanos, danos à propriedade ou ao ambiente. Ex.: Uma máquina controlada por computador que fere seu operador.
Perigo Condição com potencial para causar ou contribuir para um acidente. Ex.: A falha de um sensor que detecta um obstáculo em frente de uma máquina
Dano Medida de perda resultante de um acidente. Um dano pode variar desde a morte de pessoas como resultado de um acidente até ferimentos de pouca importância ou danos à propriedade.
Severidade do perigo
Avaliação do pior dano possível que poderia resultar de determinado perigo. A severidade do perigo pode variar de catastrófica até pequenos danos.
Probabilidade de perigos
Probabilidade de ocorrência de eventos que criam um risco. Valores de probabilidade tendem a ser arbitrários, mas variam de provável (1/100) a implausível.
Risco É a medida da probabilidade de que o sistema causará um acidente. O
risco é avaliado considerando-se a probabilidade do perigo, a severidade do perigo e a probabilidade de que o perigo resultará em um acidente.
Obtendo Segurança
• Evitar Perigo (Hazard)
▫ O sistema é projetado para que algumas classes
de perigo não possam acontecer
• Detecção e Remoção de Perigo
▫ O sistema é projetado para que perigos possam
ser detectados e removidos
• Limitação de Perigos
▫ O sistema inclui características de proteção que minimizam danos que possam resultar de um acidente.
Acidentes Normais
• Acidentes em sistemas complexos raramente têm uma única causa visto que estes sistemas são projetados para tratar pontos isolados de falhas.
▫ Projetar sistemas que tratem pontos isolados de falhas é um princípio fundamental em sistemas de segurança
• Quase todos os acidentes são resultado de combinações de mal funcionamentos.
• É provável que identificar todas as combinações de problemas, especialmente em sistemas de controle seja uma tarefa impossível.
Proteção (Security)
• A proteção de um sistema é uma
propriedade que reflete a habilidade do
sistema se proteger contra ataques externos intencionais ou acidentais.
• Proteção está se tornando cada vez
importante devido aos sistemas em rede com acesso externo via Internet.
• Proteção é uma pré-requisito essencial para disponibilidade, confiabilidade e segurança.
Proteção Fundamental
• Se um sistema em rede é desprotegido
então afirmações sobre sua confiabilidade e segurança não são confiáveis.
• Invasão pode mudar a forma como sistemas
são executados e seus dados são manipulados.
• Portanto, confiabilidade e segurança perdem a validade na ausência de proteção.
Terminologia de Proteção
Termo Descrição
Exposição Possível perda ou dano no sistema computacional. Pode ser perda ou danos nos dados ou pode ser perda de tempo ou esforço, se a recuperação é necessária após uma brecha na proteção.
Vulnerabilidade Uma fraqueza no sistema baseado em computador que pode ser explorada para causar perda ou dano.
Ataque Uma exploração da vulnerabilidade do sistema. Geralmente parte de fora do sistema e é uma tentativa deliberada para causar
algum dano.
Ameaças Circunstâncias que têm potencial para causar perda ou dano. Você pode pensar nelas como uma vulnerabilidade do sistema que está sujeita a um ataque.
Controle Uma medida de proteção que reduz uma vulnerabilidade do
sistema. Criptografia pode ser um exemplo de controle que reduz a vulnerabilidade de um sistema fraco de controle de acesso.
Danos resultantes da falta de
Proteção
• Interrupção de Serviços
▫ O sistema é forçado a entrar em um estado onde
seus serviços normais ficam indisponíveis ou a provisão de serviços fica degradada
• Corrupção de Programas ou Dados
▫ Programas ou dados do sistema podem ser
modificados de uma forma não-autorizada
• Revelação de Informações Confidenciais
▫ Informações podem ser expostas a pessoas não
Garantia de Proteção
• Evitar Vulnerabilidade
▫ O sistema é projetado para que vulnerabilidades não
ocorram. Por exemplo, se não existir conexão com uma rede externa, ataques externos são impossíveis.
• Detecção e Eliminação de Ataques
▫ O sistema é projetado para que ataques em
vulnerabilidades sejam detectados e neutralizados antes de resultar em exposição. Por exemplo, analisadores de vírus encontram e removem vírus que possa infectar um sistema
• Limitação de Exposição
▫ O sistema é projetado para que conseqüências adversas
de um ataque com sucesso sejam minimizadas. Por exemplo, uma política de backups torna possível a restauração de informações.