基于体系结构的可靠性建模

传统的软件可靠性增长模型,仅仅将软件看做一个黑盒,不关心内部状态,只考虑其输入输出。通过用户的操作剖面生成随机的用例并执行,获得软件的失效信息,并对其进行数学建模。这些模型大多基于失效数据,需要在测试阶段进行,无法在设计阶段进行。且必须长时间基于操作剖面的测试才能得到有价值的失效数据,浪费人力物力。
基于体系结构的开发是现代软件开发的重要途径,在这种开发方法中,软件系统由不同的组件按照一定的体系结构组装而成。基于系统架构的信息,可以在软件设计和开发阶段对系统可靠性进行预测,比传统的黑盒模型提高了效率、节约成本。

基于 Markov 链的组件化系统可靠性模型

Cheung 模型

Cheung 模型根据系统的每个组件的可靠性和用户的使用剖面综合给出系统可靠性。
Cheung 模型基于以下两个假设:

  1. 组件的可靠度是互相独立的,某个组件的失效直接导致系统失效,不必考虑组件失效后系统的运行。
  2. 组件间的控制转移可以建模为一个马尔可夫过程,也就是说下一个组件执行的概率仅和当前组件相关,与历史执行无关。

Cheung 的具体分析方法如下:
设软件有 n 个模块,分别记为 M_1,M_2,...,M_nP_{ij} 表示 M_i 执行完毕后下一个执行 M_j 的概率。P_{ij} 可以通过实验统计获得,用 t(i,j) 表示多次操作中控制从 M_i 转移到 M_j 的平均次数,则

P_{ij}=\frac{t(i,j)}{\sum_{k=1}^nt(i,k)}

P_{ij} 并不是 M_iM_j 的转移概率,因为在软件运行时,只有模块 M_i 正确执行,控制流才有可能跳转到下一个模块。设 R_iM_i 正确执行的概率,P(i,j)M_iM_j 的转移概率,则

P(i,j)=R_iP_{ij}

计算可得一步状态转移矩阵 P=[P(i,j)] 以及 n 步状态转移矩阵 P^n=[P^n(i,j)]。(根据马尔可夫链的数学原理)
R^k_{ij} 表示从状态 M_i 经过 k 步状态转移到 M_j 的可靠性(即 M_i 经过 k 次控制流转移到 M_j 并正确执行了 M_j 的概率)

R^k_{ij}=P^k(i,j)R_j

软件可靠性 R 定义为从初始状态 M_1 到终止状态 M_n 的总可靠性,可以表示为:

\begin{aligned} R &= R^0_{1n}+R^1_{1n}+...+R^\infty_{1n}+...\\ &=\sum^\infty_{k=0}R^k_{1n}=R_n\sum^\infty_{k=0}P^k(1,n) \end{aligned}

U=[u(x,y)] 为:

U=I+P+P^2+P^3+...=\sum_{k=0}^\infty P^k

由线性代数相关知识可知

U = (I-P)^{-1} \tag {1}

显然 u(1,n)=\sum_{k=0}^\infty P^k(1,n)
因此

R=u(1,n)R_n \tag{2}

综上所述,在得到状态转移矩阵 P 后,根据式 (1) 和 式(2) 即可得到软件可靠性 R