目录
一、基本概念
1.1 定义
1.2 软件可靠性的定量描述
1.3 可靠性测试的意义
1.4 广义的软件可靠性测试和狭义的软件可靠性测试
二、软件可靠性建模
2.1 可靠性模型的组成
2.2 可靠性模型的共同假设
2.3 可靠性模型的重要特性
2.4 可靠性建模方法
往期推荐
历年真题练习
历年真题考情:本章节每年单项选择考2分左右,论文也会有涉及。
主要学习软件可靠性基本概念、建模、管理、设计(重点是容错技术)、测试和评价等内容。很少涉及超纲题。
一、基本概念
1.1 定义
软件可靠性是软件产品在规定的条件下和规定的时间区间完成规定功能的能力。
软件可靠性和硬件可靠性区别:
(1)复杂性:软件复杂性比硬件高,大部分失效来自于软件失效。
(2)物理退化:硬件失效主要是物理退化所致,软件不存在物理退化。
(3)唯一性:软件是唯一的,每个COPY版本都一样,而两个硬件不可能完全一样。
(4)版本更新周期:硬件较慢,软件较快。
1.2 软件可靠性的定量描述
(1)规定时间:自然时间、运行时间、执行时间(占用CPU)。
(2)失效概率:软件运行初始时为0,随着时间增加单调递增,不断趋向于1。
(3)可靠度:软件系统在规定的条件下、规定的时间内不发生失效的概率。等于1-失效概率。
(4)失效强度:单位时间软件系统出现失效的概率。
(5)平均失效前时间(MTTF):平均无故障时间,发生故障前正常运行的时间。
(6)平均恢复前时间(MTTR):平均故障修复时间,发生故障后的修复时间。
(7)平均故障间隔时间(MTBF):失效或维护中所需的平均时间,包括故障时间以及检测和维护设备的时间。
注:MTBF=MTTF+MTTR
系统可用性=MTTF/(MTTF+MTTR)*100%
1.3 可靠性测试的意义
(1)软件失效可能造成灾难性的后果。
(2)软件的失效在整个计算机系统失效中的比例较高。
(3)相比硬件可靠性技术,软件可靠性技术很不成熟,这就加剧了软件可靠性问题的重要
性。
(4)软件可靠性问题是造成费用增长的主要原因之一。
(5)软件对生产活动和社会生活的影响越来越大,从而增加了软件可靠性问题在软件工程领域乃至整个计算机工程领域的重要性。
1.4 广义的软件可靠性测试和狭义的软件可靠性测试
广义的软件可靠性测试是指为了最终评价软件系统的可靠性而运用建模、统计、试验、分析和评价等一系列手段对软件系统实施的一种测试。一个完整的软件可靠性测试包括如下图所示的过程。
狭义的软件可靠性测试是指为了获取可靠性数据,按预先确定的测试用例,在软件的预期使用环境中,对软件实施的一种测试。狭义的软件可靠性测试也叫“软件可靠性试验”(Software Reliability Test),它是面向缺陷的测试,以用户将要使用的方式来测试软件。
可靠性测试是对软件产品的可靠性进行调查、分析和评价的一种手段。可靠性测试的目的可归纳为以下3个方面:
(1)发现软件系统在需求、设计、编码、测试和实施等方面的各种缺陷。
(2)为软件的使用和维护提供可靠性数据。
(3)确认软件是否达到可靠性的定量要求。
二、软件可靠性建模
软件可靠性模型(Software Reliability Model) 是指为预计或估算软件的可靠性所建立的可靠性框图和数学模型。建立可靠性模型是为了将复杂系统的可靠性逐级分解为简单系统的可靠性,以便于定量预计、分配、估算和评价复杂系统的可靠性。
影响软件可靠性的因素包括:运行剖面(环境)、软件规模、软件的内部结构、软件的开发方法
和开发环境、软件的可靠性投入。
2.1 可靠性模型的组成
一个软件可靠性模型通常(但不是绝对)由以下几部分组成:
(1) 模型假设。模型是实际情况的简化或规范化,总要包含若干假设,例如测试的选取代表实际运行剖面,不同软件失效独立发生等。
(2) 性能度量。软件可靠性模型的输出量就是性能度量,如失效强度、残留缺陷数等。在软件可靠性模型中性能度量通常以数学表达式给出。
(3) 参数估计方法。某些可靠性度量的实际值无法直接获得,例如残留缺陷数,这时需通过一定的方法估计参数的值,从而间接确定可靠性度量的值。
(4) 数据要求。一个软件可靠性模型要求一定的输入数据,即软件可靠性数据。
2.2 可靠性模型的共同假设
绝大多数的模型包含3个共同假设:
(1) 代表性假设。是指可以用测试产生的软件可靠性数据预测运行阶段的软件可靠性行为
(2) 独立性假设。此假设认为软件失效是独立发生于不同时刻,一个软件失效的发生不影响另一个软件失效的发生。
(3) 相同性假设。此假设认为所有软件失效的后果(等级)相同,即建模过程只考虑软件失效的具体发生时刻,不区分软件的失效严重等级。
2.3 可靠性模型的重要特性
一个好的软件可靠性模型应该具有如下重要特性:
(1)基于可靠的假设。
(2)简单。
(3)计算一些有用的量。
(4)给出未来失效行为的好的映射。
(5)可广泛应用。
2.4 可靠性建模方法
(1)种子法模型。利用捕获一再捕获抽样技术估计程序中的错误数,在程序中预先有意“播种”一些设定的错误“种子”,然后根据测试出的原始错误数和发现的诱导错误的比例,来估计程序中残留的错误数。
(2)失效率类模型。用来研究程序的失效率。
(3)曲线拟合类模型。用回归分析的方法研究软件复杂性、程序中的缺陷数、失效率、失效间隔时间
(4)可靠性增长模型。这类模型预测软件在检错过程中的可靠性改进,用增长函数来描述软件的改进过程。
(5)程序结构分析模型。是根据程序、子程序及其相互间的调用关系,形成一个可靠性分析网络。
(6)输入域分类模型。选取软件输入域中的某些样本“点”运行程序,根据这些样本点在“实际”使用环境中的使用概率的测试运行时的成功/失效率,推断软件的使用可靠性。
(7)执行路径分析方法模型。分析方法与上面的模型相似,先计算程序各逻辑路径的执行概率和程序中错误路径的执行概率,再综合出该软件的使用可靠性。
(8)非齐次泊松过程模型。是以软件测试过程中单位时间的失效次数为独立泊松随机变量,来预测在今后软件的某使用时间点的累计失效数。
(9)马尔可夫过程模型。用于描述软件状态之间的转换和失效行为的随机性,能够处理更复杂的失效模式,如软件在不同运行阶段具有不同的失效率。
(10)贝叶斯模型。是利用失效率的试验前分布和当前的测试失效信息,来评估软件的可靠性
往期推荐
【系统架构设计师】十二、系统质量属性与架构评估(系统架构评估|SAAM|ATAM|CBAM)-CSDN博客文章浏览阅读898次,点赞28次,收藏7次。系统架构评估是在对架构分析、评估的基础上,对架构策略的选取进行决策。它利用数学或逻辑分析技术,针对系统的一致性、正确性、质量属性、规划结果等不同方面,提供描述性、预测性和指令性的分析结果。敏感点:是实现质量目标时应注意的点,是一个或多个构件的特性。权衡点:是影响多个质量属性的敏感点。例如修改某个功能,影响到了架构的性能属性和安全性属性。https://shuaici.blog.csdn.net/article/details/140444642【系统架构设计师】九、软件工程(项目管理|进度管理|软件配置管理|软件质量管理|软件风险管理 )-CSDN博客文章浏览阅读1.4k次,点赞40次,收藏10次。面向对象的分析模型主要由顶层架构图、用例与用例图、领域概念模型构成设计模型则包含以包图表示的软件体系结构图、以交互图表示的用例实现图、完整精确的类图、针对复杂对象的状态图和用以描述流程化处理过程的活动图等。为使软件项目开发获得成功,关键问题是必须对软件项目的工作范围、可能风险、需要资源(人、硬件/软件)、要实现的任务、经历的里程碑、花费工作量(成本)、进度安排等进行预先计划和执行。:识别出项目中已知和可预测的风险,确定风险的来源、产生的条件、描述风险的特征以及哪些项目可以产生风险,形成一个风险列表。https://shuaici.blog.csdn.net/article/details/140344001
历年真题练习
1.下列关于软件可靠性的叙述,不正确的是()
A.由于影响软件可靠性的因素很复杂,软件可靠性不能通过历史数据和开发数据直接测量和估算出来。
B.软件可靠性是指在特定环境和特定时间内,计算机程序无故障运行的概率。
C.在软件可靠性的讨论中,故障指软件行为与需求的不符,故障有等级之分。
D.排除一个故障可能会引入其他的错误,而这些错误会导致其他的故障。
2.在系统性能评价中通常用平均无故障时间(MTBF)和平均故障修复时间(MTTR)分别表示计算机系统的可靠性和可用性,以下关于MTBF和MTTR的说法中,错误的是()
A.平均无故障时间,也就是平均运行多久不出故障,这个时间越大,可用性越好。
B.平均故障修复时间,也就是每次故障需要多长时间恢复为正常状态,这个时间越小越好。
C.如果两次故障的间隔时间长,而每次故障的修复时间短,则系统的可靠性高。
D.MTBF小,MTTR大表示系统具有高可靠性和高可用性。
人工分割线-答案
1. A
2. D 解析:MTBF大,MTTR小表示系统具有高可靠性和高可用性。这个你可以根据A、B、C选项推出来。