De um modo geral, os métodos baseados em modelos numéricos/analíticos para avaliação de dependabilidade de sistemas podem ser divididos em dois grandes grupos [22]: a) formalismo de modelagem não baseado em espaço de estados ou modelos combinatoriais (não geram o espaço de estados); b) formalismo de modelagem baseado em espaço de estados (computam o espaço de estado dos processos estocásticos).
3.2.1 Modelos Combinatoriais (não baseados na geração do espaço de estados) Dentre os modelos combinatoriais utilizados para modelagem e avaliação de sistemas dependáveis, podem-se considerar as seguintes soluções [89]:
• diagrama de bloco de confiabilidade - Reliability Block Diagram (RBD): é uma estrutura gráfica com dois tipos de nós: blocos, representando os componentes/subsistemas de um sistema, e nós dummy para conexão entre os componentes. Esta solução mapeia a dependência operacional de um sistema com respeito aos componentes/subsistemas que o compõe. Neste tipo de modelo, as falhas são consideradas independentes, de maneira que a falha de um componente não influi na falha do outro [101]. Modelos seriais e paralelos são bastante úteis não apenas por serem intuitivos, mas por terem uma dependência linear com o tempo [122]. Os modelos m/n [17] são uma generalização do modelo paralelo. Os modelos combinatoriais, por meio de diagramas de blocos de confiabilidade, são bastante
utilizados para modelagem de confiabilidade e disponibilidade [140][70][17], e pacotes de software, tal qual o SHARPE [122], estão disponíveis para construção e solução desses modelos;
• árvore de falha - Fault Tree (FT) [17][75][125]: é um grafo acíclico composto por nós internos, representados por portas lógicas dos tipos AND, OR, m/n [17], e nós externos, representados por eventos básicos que correspondem aos componentes do sistema. Os arcos representam entidades booleanas Verdadeiro e Falso (0 e 1) [106]. Quando há falha de um componente uma saída Verdade é transmitida, caso contrário, uma saída Falsa é liberada. Assim como no caso RBD, os caminhos representam a dependência operacional do sistema sobre os componentes. Em qualquer instante de tempo um valor lógico no nó raiz determina se o sistema está ou não em estado operacional. Quando a árvore de falha não possui nós compartilhados, o seu modelo equivale ao modelo serial/paralelo dos diagrama de blocos de confiabilidade (RDB) [89], porém quando o compartilhamento de nós ocorre, isto é, quando eventos repetidos são permitidos, as árvores de falha tornam-se mais poderosas [89]. Extensões de árvores de falha para solução de problemas específicos de sistema foram desenvolvidas pela introdução de portas AND com prioridade, portas
Exclusive-OR e portas inibidoras [46]. Pode-se utilizar árvores de falha na
modelagem de confiabilidade e disponibilidade [141], na modelagem de segurança [85] e na modelagem de tolerância a falhas em software [47]. Diversas soluções para árvores de falha com eventos repetidos podem ser encontradas em [117]. Assim como para os modelos RBD, pacotes de software foram desenvolvidos para dar suporte a construção e avaliação de sistemas dependáveis através de árvores de falha, como por exemplo, através da ferramenta SHARPE[122].
• grafo de confiabilidade - Reliability Graph (RG): tem sido bastante utilizado para modelagem de confiabilidade de redes. Um grafo de confiabilidade é um grafo acíclico representado por um conjunto de nós e um conjunto de arcos. A Falha de um componente é indicada pela eliminação do arco correspondente no grafo [101]. O sistema modelado pelo grafo de confiabilidade é considerado operacional quando houver pelo menos um caminho entre os nós fonte e dreno, os quais são nós especiais no modelo. Através do pacote de software SHARPE [122] é possível a sua construção e a análise de sistemas dependáveis.
3.2.2 Modelos baseados na geração de espaço de estados
Os modelos combinatoriais apresentam como pontos fortes uma grande simplicidade e intuitividade na modelagem de sistemas dependáveis, porém apresentam como desvantagens, a dificuldade de modelar dependência estocástica, como o processo de reparo, e a cobertura de falha imperfeita [17]. Para lidar com estas dificuldades, os formalismos de modelagem baseado em espaço de estados são mais adequados [22]. As cadeias de Markov são os modelos de espaço de estados mais comumente utilizados para modelar a dependabilidade de sistemas, além de permitir a avaliação de várias métricas relativas a dependabilidade [10]. As cadeias de Markov, apesar de serem capazes de
capturar vários tipos de dependências que ocorrem nos modelos de confiabilidade e de dependabilidade, têm como desvantagem problemas relacionados à geração do espaço de estados e a representação dos eventos não-Markovianos. Uma terceira característica indesejável dos modelos de dependabilidade Markovianos, denominada stiffness, pode ser reduzido pela separação do modelo de disponibilidade do modelo de desempenho na análise dos sistemas dependáveis, reduzindo com isto o problema causado pela diferença das ordens de grandeza dos tempos de falha, de processamento e de recuperação das falhas. Uma maneira de se tratar o problema de stiffness é denominada técnica de agregação, conforme descrito em [20], a qual faz parte de um conjunto de métodos conhecidos como stiffness-avoidance [101].
3.2.2.1 Modelos não-Markovianos
Modelos Markovianos podem ser adotados como uma ferramenta de modelagem bastante poderosa [136] para análise de dependabilidade, uma vez que eles são capazes de capturar várias dependências existentes nos sistemas reais. Os modelos Markovianos de parâmetro discreto (DTMC) e tempo contínuo (CTMC), por serem, em geral, matematicamente mais tratáveis do que os modelos que não têm a propriedade de ausência de memória, são mais utilizados. Em vários fenômenos a hipótese exponencial não é adequada sendo, portanto, necessária a utilização de modelos não-Markovianos [88]. Diversas técnicas têm sido propostas para representar e avaliar atividades representadas por variáveis aleatórias não-Markovianas através de modelos Markovianos. De forma geral, recorre-se a um conjunto de distribuições denominadas poli-exponenciais [59]. Os métodos de aproximação por fase [88][130], obtidos por meio de restrições impostas à classe de distribuições mais gerais definidas por Cox [42][88], ou os que adotam as distribuições hiper-exponenciais e variantes de distribuições gama, são exemplos do uso deste tratamento [140][43]. Uma outra alternativa é a utilização de variáveis complementares (suplementares) como mecanismo de registro da memória em cada estado [60], ou ainda por modelos de Markov regenerativos [87][88]. Modelos Markovianos e modelos Markovianos regenerativos têm sido bastante utilizados para análise de dependabilidade de sistemas de hardware [140], análise da confiabilidade conjunta de hardware e software [82], e na análise transiente de dependabilidade de sistemas de missão por fases [104]. Muitos pacotes de software dão suporte à avaliação destes modelos, conforme descritos [134], por meio de simulação ou análise de modelos através de aproximações por fase [145], SHARPE [121][138], que utiliza aproximações por fases, ou ainda, através de ambientes de software que suportam múltiplos formalismos de modelagem, como o Möbius [44]. É importante ressaltar ainda as soluções que evitam a explosão de estados (largness avoidance) e aquelas capazes de tolerar a explosão de estados (largness tolerance) [22].
3.2.2.2 Técnicas de Largeness Avoidance
As técnicas de largeness avoidance são usadas para evitar a explosão de estados. Técnicas do tipo truncamento de estados (state truncation methods) [99], solução hierárquica (hierarchical model solution) [79] e decomposição [135] são exemplos de
técnicas utilizadas para se evitar a explosão de estados. A técnica de state lumping [27] é bastante utilizada para redução do espaço de estados, pela exploração de simetrias estruturais nas cadeias de Markov de tempo contínuo (CTMC). O processo de lumping reduz o tamanho de uma CTMC pela troca de um conjunto de estados por um único estado, o qual preserva a propriedade Markoviana e possibilita a obtenção de medidas. Métodos de agregação/desagregação para análise de estado permanente ou transitório de uma CTMC podem ser vistos em [22]. Estes métodos podem ser usados para eliminar propriedades indesejáveis do modelo, tais como stiffness, como foi dito anteriormente. Técnicas denominadas importance sampling são usadas para acelerar artificialmente eventos raros de uma maneira controlada, fazendo algumas medidas corretivas porteriores [107][22]. Em [19] é apresentado um método de análise numérica, por software, para pequenos modelos, e uma simulação rápida por meio de importance
sampling, para grandes modelos, através de CTMC gerada pela ferramenta de
modelagem de alto nível, SAVE [62]. Nesta ferramenta o sistema é considerado uma coleção de componentes, os quais podem ser dispositivos de hardware, software, estruturas de dados ou componentes ambientais (unidade de resfriamento, de potência, etc...).
3.2.2.3 Técnicas de Largeness Tolerance
As técnicas de largeness tolerance são utilizadas para dar suporte de modelagem para as CTMCs que geram grande quantidade de estados, através de um modelo conciso em um alto nível de abstração. Em geral, estas técnicas são baseadas em extensões de redes de Petri estocástica [86] ou álgebra de processo estocástica [63], pelo desenvolvimento de algoritmos capazes de manipular CTMC com grande quantidade de estados, por meio de estruturas de dados, por exemplo, do tipo Bynary Decision Diagram (BDD) [25], associadas a modelagem composicional. Caso sejam assumidas algumas hipóteses, como por exemplo que os modelos individuais, isoladamente, terão o mesmo número de estados quando em conjunto com os demais sub-modelos, além de restrições estruturais, é originada a propriedade lógica da forma produto [39]. Uma outra solução, baseia-se na estratégia de dividir para conquistar, onde a matriz que descreve a CTMC é representada por um conjunto de matrizes menores que são apropriadamente combinadas. Estas técnicas são conhecidas como representação de Kronecker, desde que satisfeitas certas restrições estruturais [28]. A técnica on-the-fly [22] evita o armazenamento da matriz geradora pela regeneração dos elementos da matriz quando necessários em um algoritmo de solução iterativo.