# Confiabilidade

Na engenharia de sistemas, confiabilidade é uma medida da disponibilidade, confiabilidade e manutenção de um sistema, e desempenho do suporte de manutenção e, em alguns casos, outras características como durabilidade, proteção e proteção. Na engenharia de software, confiabilidade é a capacidade de fornecer serviços que podem ser defensivamente confiáveis dentro de um período de tempo.$^[$ Isso também pode abranger mecanismos projetados para aumentar e manter a confiabilidade de um sistema ou software.
A Comissão Eletrotécnica Internacional (IEC), por meio de seu Comitê Técnico TC 56, desenvolve e mantém padrões internacionais que fornecem métodos e ferramentas sistemáticas para avaliação da confiabilidade e gerenciamento de equipamentos, serviços e sistemas ao longo de seus ciclos de vida.
A confiabilidade pode ser dividida em três elementos:
* Atributos - Uma maneira de avaliar a confiabilidade de um sistema
* Ameaças - Uma compreensão das coisas que podem afetar a confiabilidade de um sistema
* Meios - Formas de aumentar a confiabilidade de um sistema

## História

Algumas fontes sustentam que a palavra foi cunhada nos dezenove adolescentes da publicidade impressa em automóveis da Dodge Brothers. Mas a palavra é anterior a esse período, com o Oxford English Dictionary encontrando seu primeiro uso em 1901.
À medida que o interesse na tolerância a falhas e na confiabilidade do sistema aumentava nas décadas de 1960 e 1970, a confiabilidade passou a ser uma medida de [x], pois as medidas de confiabilidade passaram a abranger medidas adicionais, como segurança e integridade. No início dos anos 80, Jean-Claude Laprie escolheu a confiabilidade como o termo para abranger estudos de tolerância a falhas e confiabilidade do sistema sem a extensão do significado inerente à confiabilidade.
O campo da confiabilidade evoluiu desde o início para ser um campo de pesquisa internacionalmente ativo, promovido por várias conferências internacionais importantes, notadamente a Conferência Internacional sobre Sistemas e Redes Confiáveis, o Simpósio Internacional de Sistemas Distribuídos Confiáveis e o Simpósio Internacional de Engenharia de Confiabilidade de Software.
Tradicionalmente, a confiabilidade de um sistema incorpora disponibilidade, confiabilidade, capacidade de manutenção, mas desde os anos 80, a segurança e a proteção foram adicionadas às medidas de confiabilidade.

## Elementos de confiabilidade
### Atributos

Atributos são qualidades de um sistema. Eles podem ser avaliados para determinar sua confiabilidade geral usando medidas qualitativas ou quantitativas. Avizienis et al. definiram os seguintes atributos de confiabilidade:
* Disponibilidade - disponibilidade para o serviço correto
* Confiabilidade - continuidade do serviço correto
* Segurança - ausência de consequências catastróficas para o (s) usuário (s) e o meio ambiente
* Integridade - ausência de alteração inadequada do sistema
* Manutenibilidade - capacidade de fácil manutenção e reparo
Como essas definições sugeriram, apenas Disponibilidade e Confiabilidade são quantificáveis por medições diretas, enquanto outras são mais subjetivas. Por exemplo, a segurança não pode ser medida diretamente por meio de métricas, mas é uma avaliação subjetiva que exige que as informações de julgamento sejam aplicadas para fornecer um nível de confiança, enquanto a confiabilidade pode ser medida como falhas ao longo do tempo.
Confidencialidade, ou seja, a ausência de divulgação não autorizada de informações também é usada ao abordar a segurança. Segurança é um composto de Confidencialidade, Integridade e Disponibilidade. Às vezes, a segurança é classificada como um atributo mas a visão atual é agregá-la à confiabilidade e tratá-la como um termo composto chamado Dependability and Security.
Praticamente, a aplicação de medidas de segurança aos dispositivos de um sistema geralmente melhora a confiabilidade, limitando o número de erros originados externamente.

### Ameaças

Ameaças são coisas que podem afetar um sistema e causar uma queda na Confiabilidade. Existem três termos principais que devem ser claramente entendidos:
* Falha: uma falha (que geralmente é chamada de bug por razões históricas) é um defeito no sistema. A presença de uma falha em um sistema pode ou não levar a uma falha. Por exemplo, embora um sistema possa conter uma falha, suas condições de entrada e estado nunca podem causar a execução dessa falha, para que ocorra um erro; e, portanto, essa falha específica nunca aparece como uma falha.
* Erro: um erro é uma discrepância entre o comportamento pretendido de um sistema e o seu comportamento real dentro dos limites do sistema. Os erros ocorrem no tempo de execução quando alguma parte do sistema entra em um estado inesperado devido à ativação de uma falha. Como os erros são gerados a partir de estados inválidos, eles são difíceis de observar sem mecanismos especiais.
* Falha: Uma falha é uma instância no tempo em que um sistema exibe um comportamento contrário à sua especificação. Um erro pode não necessariamente causar uma falha, por exemplo, uma exceção pode ser lançada por um sistema, mas isso pode ser capturado e tratado usando técnicas de tolerância a falhas, para que a operação geral do sistema esteja em conformidade com a especificação.
É importante observar que as falhas são registradas nos limites do sistema. Eles são basicamente erros que se propagaram para os limites do sistema e se tornaram observáveis. Falhas, erros e falhas operam de acordo com um mecanismo. Às vezes, esse mecanismo é conhecido como cadeia Falha-Erro-Falha. Como regra geral, uma falha, quando ativada, pode levar a um erro (que é um estado inválido) e o estado inválido gerado por um erro pode levar a outro erro ou falha (que é um desvio observável do comportamento especificado no limite do sistema).
Depois que uma falha é ativada, um erro é criado. Um erro pode agir da mesma maneira que uma falha, pois pode criar condições de erro adicionais; portanto, um erro pode se propagar várias vezes dentro de um limite do sistema sem causar uma falha observável. Se um erro se propagar fora dos limites do sistema, é dito que ocorre uma falha. Uma falha é basicamente o ponto em que se pode dizer que um serviço está falhando em atender às suas especificações. Como os dados de saída de um serviço podem ser alimentados em outro, uma falha em um serviço pode se propagar para outro serviço como uma falha, para que uma cadeia possa ser formada da forma: Falha que leva a um erro que leva a uma falha que leva a um erro, etc.

### Significado

Como o mecanismo de uma cadeia de erros e falhas é entendido, é possível construir meios para quebrar essas cadeias e, assim, aumentar a confiabilidade de um sistema. Até agora, quatro meios foram identificados:
* Prevenção
* Remoção
* Previsão
* Tolerância
A Prevenção de Falhas lida com a prevenção da incorporação de falhas em um sistema. Isso pode ser conseguido usando metodologias de desenvolvimento e boas técnicas de implementação.
A Remoção de falhas pode ser subdividida em duas subcategorias: Remoção durante o desenvolvimento e Remoção durante o uso. A remoção durante o desenvolvimento requer verificação para que as falhas possam ser detectadas e removidas antes que um sistema seja colocado em produção. Depois que os sistemas são colocados em produção, é necessário um sistema para registrar falhas e removê-las por meio de um ciclo de manutenção.
A Previsão de falhas prevê falhas prováveis para que possam ser removidas ou que seus efeitos possam ser contornados.
A tolerância a falhas trata da implementação de mecanismos que permitirão que um sistema ainda ofereça o serviço necessário na presença de falhas, embora esse serviço possa estar em um nível degradado.
Os meios de confiabilidade visam reduzir o número de falhas apresentadas ao usuário de um sistema. As falhas são tradicionalmente registradas ao longo do tempo e é útil entender como sua frequência é medida para que a eficácia dos meios possa ser avaliada.

## Confiabilidade dos sistemas de informação e capacidade de sobrevivência

Trabalhos recentes, como sobre confiabilidade, beneficiam-se de sistemas de informação estruturados, por exemplo, com SOA, para introduzir uma capacidade mais eficiente, a capacidade de sobrevivência, levando em consideração os serviços degradados que um Sistema de Informação sustenta ou retoma após uma falha não mascarável.
A flexibilidade das estruturas atuais incentiva os arquitetos de sistemas a habilitar mecanismos de reconfiguração que reorientam os recursos seguros e disponíveis para dar suporte aos serviços mais críticos, em vez de provisionar em excesso para criar um sistema à prova de falhas.
Com a generalização dos sistemas de informação em rede, a acessibilidade foi introduzida para dar maior importância à experiência dos usuários.
Para levar em conta o nível de desempenho, a medição da performance é definida como "quantificando o desempenho do sistema de objetos na presença de falhas durante um período de tempo especificado".