软件可靠性课程复习要点

以下整理来自于Leo,因为Leo不玩博客,且网上关于软件可靠性这方面的资料微乎其微
所以本人厚颜无耻地拿过来标注原创发出,且希望Leo不会看到这篇博文,(逃)
因为文章整理按点展开,故琐碎难看。各位看客直接Ctrl+F搜索关键字。

软件可靠性概念(定义)

–在规定条件下,在规定的时间内,软件不引起系统失效的概率,该概率是系统输入和系统使用的函数,也是软件中存在的错误的函数;系统输入将确定是否会遇到已存在的错误(如果错误存在的话);

–在规定的时间周期内,在所述条件下程序执行所要求的功能的能力。

软件可靠性因素相关概念

可靠度

–软件可靠度是指软件在规定的条件下、规定的时间段内完成预定的功能的概率。或者说是软件在规定时间内无失效发生的概率。
R ξ ( t ) = P r { ξ > t } = 1 − F ξ ( t ) R_\xi(t)=P_r\{\xi>t\}=1-F_\xi(t) Rξ(t)=Pr{ξ>t}=1Fξ(t)

ξ 为 随 机 变 量 , F 是 其 分 布 函 数 , R ( t ) 表 示 t 时 刻 的 可 靠 度 \xi为随机变量,F是其分布函数,R(t)表示t时刻的可靠度 ξFR(t)t

失效率

–失效率是指软件在 T 时刻没有发生失效的条件下,在 区间T+t内,当t很小时,单位时间内发生失效的概率。

在指数分布下可靠度 R ( t ) = e − λ t 近 似 于 1 − λ t R(t)=e^{-\lambda t} 近似于 1-\lambda t R(t)=eλt1λt

不可靠度 F ( t ) = 1 − R ( t ) = 1 − e − λ t F(t)=1-R(t)=1-e^{-\lambda t} F(t)=1R(t)=1eλt

平均失效间隔时间MTBF

MTBF:指两次相邻失效时间间隔的均值

MTTF(平均失效前时间):可以理解为设备在规定的环境下,正常生产到发生下一次故障的平均时间。公式如下:

M T T F = ∫ 0 ∞ R ( t ) d t = 1 λ ( 有 些 情 况 下 ) MTTF=\int_0^{\infty}R(t)dt=\frac{1}{\lambda}(有些情况下) MTTF=0R(t)dt=λ1

软件可靠性模型相关概念

软件可靠性评估模型是随机过程的一种表示形式,将软件可靠性或直接相关的量表示成时间与软件产品的特性或开发过程的函数。将失效过程的一般形式定义为各因素,描述软件失效与软件缺陷之间关系的数学方程

假设条件原因

模型是实际情况的理想或简单化,总是包含若干假设

标准假设

软件运行方式和进行软件可靠性预计时的软件运行方式相同——确保预计结果的有效性

当检测到缺陷时,各个失误是独立的——简化推导

假设的四个公共条件

1.程序中的各个错误是相互独立的(即标准假设2)

2.测试过程中检测到的错误,都被排除,每次排错只排除一个,且过程中不会引入新的错误

3.程序的失效率在每个失效间隔时间内是常数,错误以相等的可能发生

4.软件的运行方式与预期的方式相似(即标准假设1)

评估模型的基本原理

对软件可靠性测试或实际使用中收集的失效数据,利用统计知识分析其规律,建立一个参数模型,在数据的基础上对该统计分布的参数进行估计,从而在此模型基础上对软件可靠性进行定量估计或评价

定义

是将软件失效过程的一般形式规定为各因素,例如缺陷引入缺陷移除运行环境等的函数或数学表达式,是描述软件失效与软件缺陷之间关系的数学方程

模型类型

指数分布的NHPP模型:JM模型、GO模型

非指数分布的NHPP模型:MO模型

可靠性建模过程中的指标因素 失效数据 用到哪些数据 数据类型

指标因素

1、错误或者缺陷的排除过程和引入过程
2、运行环境

排错引入过程

在JM、GO模型假设中,检测到的错误都会被立刻排除,排错时间可以忽略不计,每次排错只排除一个错误,在排错过程中不会引进新的错误

运行环境

测试环境要与实际运行环境相一致

失效数据

失效时间数据(完全失效数据):每一次失效发生的时间构成的失效数据

失效计数数据(不完全失效数据):由各时间段内发生的失效次数构成的失效数据

故障树 故障树的定义 故障树的规范化过程中如何简化

概念

故障树分析法是在系统设计的过程中,通过对可能造成系统失败的各种因素(包括硬件、软件、环境、人为因素)进行分析,画出逻辑框图(即故障树),从而确定系统失败原因的各种可能组合方式或其发生概率,以计算系统失效概率,采取相应措施,以提高系统可靠性的一种设计分析方法。

故障树分析方法在系统可靠性分析,安全性分析和风险评价中有重要作用和地位。既可用于定性分析又可用于定量分析。

对于所研究系统的各类故障或不正常工作情况统称为故障事件,与之对立的是成功事件。

故障树是一种为研究系统某功能故障而建立的一种倒树状的逻辑因果关系图。

故障树主要由事件和逻辑门构成,事件用来描述系统或元部件的故障状态,逻辑门把事件联系起来,表示事件间的逻辑因果关系

特点

自上而下作层层追踪分析

事件间的逻辑关系一目了然

在系统设计阶段有助于判明系统的隐患和潜在故障

故障树可作为管理维修人员的管理维修指南

规范化

仅含有基本事件、中间事件、顶事件以及与或非三种逻辑门的故障树

简化

用相同转移符号表示相同子树、相似转移符号表示相似子树

用布尔代数法化简,去掉明显的逻辑多余事件和逻辑多余门

可靠度概念公式

软件可靠度是指软件在规定的条件下、规定的时间段内完成预定的功能的概率。或者说是软件在规定时间内无失效发生的概率。 ξ 为 随 机 变 量 , F 是 其 分 布 函 数 , R ( t ) 表 示 t 时 刻 的 可 靠 度 \xi为随机变量,F是其分布函数,R(t)表示t时刻的可靠度 ξFR(t)t
R ξ ( t ) = P r { ξ > t } = 1 − F ξ ( t ) R ξ ( t ) = P r { ξ > t } = 1 − F ξ ( t ) R_\xi(t)=P_r\{\xi>t\}=1-F_\xi(t)R_\xi(t)=P_r\{\xi>t\}=1-F_\xi(t) Rξ(t)=Pr{ξ>t}=1Fξ(t)Rξ(t)=Pr{ξ>t}=1Fξ(t)

可靠度与不可靠度之间的函数关系

R ( t ) + F ( t ) = 1 R(t)+F(t)=1 R(t)+F(t)=1

根据指数分布推断计算系统的寿命

指数分布是事件的时间间隔的概率

指数分布: f = e − λ t f=e^{-\lambda t} f=eλt

概率相关: P ( X > t ) = e − λ t P(X>t)=e^{-\lambda t} P(X>t)=eλt

割集的性质(重要度影响关系)

阶数越小的最小割集越重要

在低阶最小割集中出现的底事件比高阶中的更重要

在相同阶次下,在不同割集中重复出现次数越多的底事件越重要

故障树相关过程

(1)选择顶事件

(2)建立故障树:规范化、事件逻辑门符号

(3)故障树的定性分析:简化(布尔表达式化简)和求最小割集

(4)故障树的定量分析:求顶事件发生的概率、重要度分析

(5)确定设计上的薄弱环节(找出问题所在)

(6)采取措施,提高产品的可靠性和安全性

几何分布性质

几何分布具有离散性,无记忆性(简单来说就是后面事件发生的概率与前面事件是否发生无关)

U、Y、PLR 背景原理构造方法

序列似然比PLR

用来对两个模型预计质量的相对优劣进行评定的一个指标。

PLR的总体思路是认为软件发生在软件失效时间的分布函数密度大的地方的可能性较大。预计软件失效时间的分布函数密度大的预计相比较而言更接近真实。

f为模型的预计概率密度,若 PLR为正无穷,则说明A优于B,为0则说明B优于A,为常数则说明两者差不多。
P L R = ∏ f a ( j ) f b ( j ) PLR=\prod{\frac{f_a(j)}{f_b(j)}} PLR=fb(j)fa(j)

U图

U图是用来检测预计和观察的失效行为之间系统而客观的差别。

U图的目的是用来判断预测预计分布函数是否均匀的接近于实际分布函数。

ui= Fi( t) ,将n+ 1个 ui的值按升序分类, 用uj表示分类以后的序列( j = 0, 1, 2, …, n) , 把点( uj , j / ( n+ 1) ) 描在图上。

Y图

U图能够检测出预计与显示的偏差。但ks距离很小的U图有时也会掩盖了偏差,Y图是通过对序列U进行变换后绘制的。Y图对U作如下变换

x j = − l n ( 1 − u j ) , y j = ∑ l = i j x i / ∑ l = i i + n t i x_j=-ln(1-u_j),y_j=\sum_{l=i}^jx_i/\sum_{l=i}^{i+n}t_i xj=ln(1uj)yj=l=ijxi/l=ii+nti

作图方法与U图作图法一样, 将 点( yj , j / ( n+ 1) ) 描在图上并作出 45°线。 这时单位斜率线上产生的偏差表示预测中的趋势。

可靠性测试概念、特点、对比 增长测试 验证测试

概念

对软件可靠性进行定量的评估或验证,为了达到和验证软件的可靠性定量要求而对软件进行的测试

主要特征

按照用户实际使用软件的方法测试软件

增长测试

发现程序中影响软件可靠性的故障,并排除故障实现软件可靠性增长(软件系统测试阶段的末期)

流程:构造操作剖面->生成测试数据->测试运行->测试结果分析->排错与回归测试/可靠性评估->可靠性进展分析->停止测试

验证测试

验证在给定的统计置信度下,软件当前的可靠性是否满足用户要求(软件验收阶段)

流程:构造操作剖面->生成测试数据->测试运行->测试结果分析->接收/拒收判决->可靠性评估

可靠性测试与一般测试的对比:
比较项目 软件可靠性增长测试 一般软件测试
测试目的 评估软件可靠性水平,有效实现软件可靠性增长 发现软件的故障
测试效率 达到可靠性要求较快 达到可靠性要求较慢
测试数据方法生成 基于使用的测试,根据软件的使用状况构造操作剖面然后生成测试用例 基于需求/结构的测试,根据软件的需求或结构生成测试用例
数据收集 需要收集测试输出结果和失效时间等数据 只需要收集输出结果
数据分析 通过失效数据进行分析 根据用例执行情况进行需求结构覆盖分析
测试停止准则 满足可靠性要求 某些要求的结构覆盖率达到100%

可靠性设计 避错设计简化设计 容错设计 原则 方法

避错设计

避错设计是在软件开发设计过程中,针对软件的具体特点,充分应用有效的软件工程技术、方法、工具,加强软件工程管理,避免软件错误的引入,从而保证和提高软件的可靠性。

方法:

通用类设计风格: 1.程序编写清楚,不要过分灵巧

​ 2.简明直接地说明用意

​ 3.尽量使用库函数

​ 4.保证特殊情况特殊处理

结构类设计风格: 1.避免不必要的分支

​ 2.使用括号避免二义性

​ 3.调用公共函数代替重复的表示

健壮性设计: 1.模块调用时检测参数合法性

​ 2.检查输入数据的数据类型

监控定时器设计:提供监控定时器或类似措施,确保处理器或计算机系统具有处理程序超时或死循环的能力;监控定时器采用独立时钟源和独立的硬件实现

异常保护设计:分析软件运行过程中各种可能的异常情况,设计相应的保护措施。异常处理措施必须使系统转入安全状态,并保持计算机处于运行状态。

简化设计

应从模块的独立性、扇入扇出以及单入口单出口等采取措施,同时还应综合考虑模块的复杂度和规模等因素。

独立性准则:提高模块内聚度,降低耦合度,实现独立性

单入口单出口要求:除中断情形外,模块应使用单入口和单出口控制结构

扇入扇出原则:将模块在逻辑上构成分层次结构,在不同的层次上允许不同的扇入扇出数

容错设计

一定程度上对自身故障具有屏蔽能力,在一定程度上能从故障状态恢复到正常状态、软件故障时能在一定程度上完成预期的功能以及在一定程度上具有容错能力

基本活动:故障检测(方法:软件自测试)、破坏估计、故障恢复、故障隔离、继续服务

软件容错技术:为了实现软件容错,一般都要使用某种形式的冗余,这种冗余既可以是设计(算法)冗余,也可以是数据冗余。设计冗余是利用相异的软件模块来实现软件容错。

分配方法

等同分配

串联部件可靠度: R i = R 1 n R_i=R^\frac{1}{n} Ri=Rn1

并联部件可靠度: R i = 1 − [ 1 − R ] 1 n R_i=1-[1-R]^\frac{1}{n} Ri=1[1R]n1

阿林斯分配

假定软件系统为串联系统,n个部件失效率为常数,系统的容许失效率为 λ s \lambda_s λs,各部件的失效率为 λ i \lambda_i λi,根据此算得加权因子 ω i = λ i ∑ λ i \omega_i=\frac{\lambda_i}{\sum{\lambda_i}} ωi=λiλi,各部件分配的容许失效率 λ i ∗ = ω i ∗ λ s \lambda^*_i=\omega_i*\lambda_s λi=ωiλs

agree分配(主要)

设 系 统 的 可 靠 度 为 R , 若 系 统 由 m 个 分 系 统 组 成 , 各 分 系 有 n i 个 单 元 , 则 分 配 给 第 i 个 系 统 的 失 效 率 为 λ i = − n i l n R n ω i t i 设系统的可靠度为R,若系统由m个分系统组成,各分系有n_i个单元, 则分配给第i个系统的失效率为 \lambda_i=-\frac{n_ilnR}{n\omega_it_i} Rmniiλi=nωitinilnR

分 配 给 第 I 个 系 统 的 可 靠 度 R i ( t i ) = 1 − − l n R n i n ω i = 1 − 1 − R n i n ω i 分配给第 I 个系统的可靠度 R_i(t_i)=1-\frac{-lnR^\frac{n_i}{n}}{\omega_i}=1-\frac{1-R^\frac{n_i}{n}}{\omega_i} IRi(ti)=1ωilnRnni=1ωi1Rnni

故障树相关

选择顶事件、建立故障树
故障树的定性分析

a)故障树的规范化

b)规范化后的简化

c)求最小割集

故障树的定量分析

a)求顶事件发生的概率(即系统的不可靠度 F s ( t ) F_s(t) Fs(t)

设每个事件发生的概率为 P i P_i Pi最小割集的发生概率为 K i = ∏ P i , 其 中 P i 属 于 K i K_i=\prod{P_i},其中P_i属于K_i Ki=PiPiKi,则顶事件发生的概率为
P ( T ) = P ( ∪ i = 1 n K i ) = ( 粗 略 计 算 或 最 小 割 集 相 互 独 立 ) ∑ i = 1 n P ( K i ) P(T)=P(∪_{i=1}^nK_i)=(粗略计算或最小割集相互独立)\sum_{i=1}^nP(K_i) P(T)=P(i=1nKi)=()i=1nP(Ki)
当最小割集不相互独立且要求精确计算时,应当使用容斥原理。

b)重要度分析

1.第i个零件的概率重要度: Δ g i ( t ) = δ F s ( t ) δ F i ( t ) \Delta g_i(t)=\frac{\delta F_s(t)}{\delta F_i(t)} Δgi(t)=δFi(t)δFs(t),其中 F s ( t ) F_s(t) Fs(t)为系统不可靠度函数, F i ( t ) F_i(t) Fi(t)为第i个元部件的不可靠度, Δ g i \Delta g_i Δgi即为s对i求偏导的结果

2.关键重要度: I i C R ( t ) = F i ( t ) F s ( t ) ∗ Δ g i ( t ) I^{CR}_i(t)=\frac{F_i(t)}{F_s(t)}*\Delta g_i(t) IiCR(t)=Fs(t)Fi(t)Δgi(t)

3.结构重要度: I i ϕ = 1 2 n − 1 ∗ n i ϕ I^{\phi}_i=\frac{1}{2^{n-1}}*n^{\phi}_i Iiϕ=2n11niϕ

你可能感兴趣的:(软件可靠性,软件可靠性,复习要点)