首页 > 其他分享 >十四、 软件可靠性基础知识(考点篇)

十四、 软件可靠性基础知识(考点篇)

时间:2024-09-22 13:20:34浏览次数:10  
标签:可靠性 模型 软件可靠性 基础知识 考点 失效 软件 冗余

1软件可靠性基本概念

软件可靠性是软件产品 在规定的条件下和规定的时间区间完成规定功能的能力

软件可靠性和硬件可靠性区别

  • (1)复杂性:软件复杂性比硬件高,大部分失效来自于软件失效。
  • (2)物理退化:硬件失效主要是物理退化所致,软件不存在物理退化。
  • (3)唯一性:软件是唯一的,每个COPY版本都一样,而两个硬件不可能完全一样。
  • (4)版本更新周期:硬件较慢,软件较快。

软件可靠性的定量描述

  • 1.规定时间:自然时间、运行时间、执行时间(占用CPU)。
  • 2.失效概率:软件运行初始时为0,随着时间增加单调递增,不断趋向于1.
  • 3.可靠度:软件系统在规定的条件下、规定的时间内不发生失效的概率。等于1 -  失效概率
  • 4.失效强度单位时间软件系统出现失效的概率
  • 5.平均失效前时间(MTTF):平均无故障时间,发生故障前正常运行的时间
  • 6.平均恢复前时间(MTTR):平均故障修复时间,发生故障后的修复时间
  • 7.平均故障间隔时间(MTBF):失效或维护中所需的平均时间包括故障时间以及检测和维护设备的时间。MTBF=MTTF+MTTR。
  • 系统可用性=MTTF/(MTTF+MTTR)*100%

总结:

1.失效率:开始为0,随着时间单调递增趋向于1。可靠度:跟失效率有关,1  -  失效率。失效强度:单位时间失效的概率。

2.MTTF:运行直到失败,那就是正常运行时间,失效前时间。MTTR:失效直到修复,恢复时间呗。MTBF:两次失败的间隔,正常运行时间+修复时间

串并联系统可靠性

无论什么系统,都是由多个设备组成的,协同工作,而这多个设备的组合方式可以是串联、并联, 也可以是混合模式,假设每个设备的可靠性为R1,R2……Rn,则不同的系统的可靠性公式如下: 串联系统 ,一个设备不可靠,整个系统崩溃, 整个系统可靠性 R=R1*R2*...* Rn。 并联系统 ,所有设备都不可靠,整个系统才崩溃, 整个系统可靠性R=1-(1-R1)*(1-R2)*..*(1-Rn)。 对软件运行的影响程度不仅取决于软件失效发生的概率,还和软件失效的严重程度有很大关系。 这里引出另外一个概念——失效严重程度类。   失效严重程度类就是对用户具有相同程度影响的失效集合。   对失效严重程度的分级可以按照不同的标准进行,最为常见的是按对成本影响、对系统能力的影响等标准划分软件失效的严重程度类。

可靠性测试的意义

  • (1)软件失效可能造成灾难性的后果
  • (2)软件失效在整个计算机系统失效中的比例较高
  • (3)软件可靠性技术很不成熟,加剧了软件可靠性问题的重要性。
  • (4)软件可靠性问题是造成费用增长的主要原因之一。
  • (5)软件对生产活动和社会生活的影响越来越大,从而增加了软件可靠性问题在软件工程领域乃至整个计算机工程领域的重要性。

总结:软件在社会生产活动中越来越重要,但是软件的可靠性技术不成熟,失效主要是软件引起,而且造成后果严重,费用增加。

广义的软件可靠性测试是指为了最终评价软件系统的可靠性而运用建模、统计、试验、分析和评 价等一系列手段对软件系统实施的一种测试。   狭义的软件可靠性测试是指为了获取可靠性数据,按预先确定的测试用例,在软件的预期使用环境中,对软件实施的一种测试。它是面向缺陷的测试,以用户将要使用的方式来测试软件。

2软件可靠性建模

软件可靠性模型是指为预计或估算软件的可靠性所建立的可靠性框图和数学模型。 从技术的角度来看,影响软件可靠性的主要因素包括:运行环境、软件规模、软件内部结构、软 件的开发方法和开发环境、软件的可靠性投入

一个软件可靠性模型通常(但不是绝对)由以下几部分组成:

  • (1)模型假设。模型是实际情况的简化或规范化,总要包含若干假设,例如测试的选取代表实际运行剖面,不同软件失效独立发生等
  • (2)性能度量软件可靠性模型的输出量就是性能度量,如失效强度、残留缺陷数等。在软件可靠性模型中性能度量通常以数学表达式给出
  • (3)参数估计方法某些可靠性度量的实际值无法直接获得,例如残留缺陷数,这时需通过一定的方法估计参数的值从而间接确定可靠性度量的值
  • (4)数据要求。一个软件可靠性模型要求一定的输入数据,即软件可靠性数据

总结:

可靠性模型组成:模型假设(代表实际运行剖面,失效独立)、模型输出量--性能度量,无法直接获取的通过间接估计---参数估计方法,可靠性数据。

绝大多数的模型包含3个共同假设:

  • (1)代表性假设。是指可以用测试产生的软件可靠性数据预测运行阶段的软件可靠性行为。-- 测试阶段获得的可靠性数据代表运行阶段。
  • (2)独立性假设。此假设认为软件失效是独立发生于不同时刻,一个软件失效的发生不影响另一个软件失效的发生。--  失效之间不糊影响独立发生
  • (3)相同性假设。此假设认为所有软件失效的后果(等级)相同,即建模过程只考虑软件失效的具体发生时刻,不区分软件的失效严重等级。-- 失效强度相同
人们常常通过估计或预测的方法来确定模型的参数。 确定了模型的参数后,就可以来表示失效过程的很多不同的特性。  

软件的可靠性模型分类

  • 1.种子法模型。利用捕获一再捕获抽样技术估计程序中的错误数,在程序中预先有意“播种”一些设定的错误“种子”,然后根据测试出的原始错误数和发现的诱导错误的比例,来估计程序中残留的错误数。-- 预先播种错误,最后测完了,看看预先设置错误和其他错误的比例。
  • 2.失效率类模型。用来研究程序的失效率。
  • 3.曲线拟合类模型。用回归分析的方法研究软件复杂性、程序中的缺陷数、失效率、失效间隔时间。
  • 4.可靠性增长模型。这类模型预测软件在检错过程中的可靠性改进,用增长函数来描述软件的改进过程。
  • 5.程序结构分析模型。是根据程序、子程序及其相互间的调用关系,形成一个可靠性分析网络。
  • 6.输入域分类模型。选取软件输入域中的某些样本“点”运行程序,根据这些样本点在“实际”使用环境中的使用概率的测试运行时的成功/失效率,推断软件的使用可靠性。
  • 7.执行路径分析方法模型。分析方法与上面的模型相似,先计算程序各逻辑路径的执行概率和程序中错误路径的执行概率,再综合出该软件的使用可靠性。
  • 8.非齐次泊松过程模型。是以软件测试过程中单位时间的失效次数为独立泊松随机变量,来预测在今后软件的某使用时间点的累计失效数。
  • 9.马尔可夫过程模型
  • 10.贝叶斯模型。是利用失效率的试验前分布和当前的测试失效信息,来评估软件的可靠性。

3软件可靠性管理

软件可靠性管理是软件工程管理的一部分,它以全面提高和保证软件可靠性为目标,以软件可靠性活动为主要对象,是把现代管理理论用于软件生命周期中的可靠性保障活动的一种管理形式。  

软件可靠性管理的内容包括软件工程各个阶段的可靠性活动的目标、计划、进度、任务和修正措施等。可靠性各阶段设计任务如下:

  • 需求分析阶段:确定可靠性目标、分析影响因素、确定验收标准、制定框架、制定文档编写规范、制定初步计划、确定数据收集规范。
  • 概要设计阶段:确定可靠性度量、制定详细验收方案、可靠性设计、收集数据、调整计划、明确后续阶段详细计划、编制文档。
  • 详细设计阶段:可靠性设计、预测、调整计划、收集数据、明确后续阶段详细计划、编制文档。
  • 编码阶段:可靠性测试(单元)、排错、调整计划、收集数据、明确后续阶段详细计划、编制文档。
  • 测试阶段:可靠性测试(集成和系统)、排错、可靠性建模、评价、调整计划、收集数据、明确后续阶段详细计划、编制文档。
  • 实施阶段:可靠性测试(验收)、排错、收集数据、调整模型、评价、编制文档。

4软件可靠性设计

实践证明,保障软件可靠性最有效、最经济、最重要的手段是在软件设计阶段采取措施进行可靠性控制。 可靠性设计其实就是在常规的软件设计中,应用各种方法和技术,使程序设计在兼顾用户的功能和性能需求的同时,全面满足软件的可靠性要求。  

软件可靠性设计原则:

  • (1)软件可靠性设计是软件设计的一部分,必须在软件的总体设计框架中使用,并且不能与其他设计原则相冲突
  • (2)软件可靠性设计在满足提高软件质量要求前提下,以提高和保障软件可靠性为最终目标。
  • (3)软件可靠性设计应确定软件的可靠性目标,不能无限扩大化,并且排在功能度、用户需求和开发费用之后考虑。

原则总结:

1.在整体框架中使用,不与其他设计原则冲突。

2.首先得满足质量要求,再谈可靠性。

3.可靠性设计优先级毕竟低,要有限投入,它排在功能度,需求、开发费用之后。

软件可靠性设计技术主要有容错设计、检错设计和降低复杂度设计等技术。

  • 增加冗余和计算程序的容错(比如投票表决)
  • 发现错误及时提醒的检错(但不能自己处理)
  • 把软件复杂度降下来

1.容错设计技术。

软件容错的主要方法是提供足够的冗余信息和算法程序,使系统在实际运行时能够及时发现程序设计错误,采取补救措施,以提高系统可靠性,保证整个系统的正常运行。

软件容错技术主要有N版本程序设计、恢复块方法和冗余设计、防卫式程序设计等。

①N版本就是同一项功能,用不同的语言方法人开发出来,然后获得的结果投票表决。

②冗余设计:增加冗余,比如硬盘冗余阵列,数据备份到新盘等等,分结构、信息、时间、附加冗余4种。

③恢复块方法:动态冗余,它是通过故障检测、故障定位及故障恢复来完成的,比如主块计算结果判断有问题,立马启用备用块1,再次执行,在判断,还不对再启用备用块2,在计算,再判断...

④防卫式程序设计:它是在代码里加入错误检测,恢复的代码,比如try catch等

  • 冗余设计:冗余是指在正常系统运行所需的基础上加上一定数量的资源,包括信息、时间、硬件和软件。冗余是容错技术的基础,通过冗余资源的加入,可以使系统的可靠性得到较大的提高。主要的冗余技术有结构冗余(硬件冗余和软件冗余)、信息冗余时间冗余冗余附加4种。
  • N版本程序设计:是一种静态的故障屏蔽技术,其设计思想是用N个具有相同功能的程序同时执行一项计算,结果通过多数表决来选择。其中N个版本的程序必须由不同的人独立设计,使用不同的方法、设计语言、开发环境和工具来实现,目的是减少N个版本的程序在表决点上相关错误的概率。

与通常软件开发过程不同的是,N版本程序设计增加了三个新的阶段:相异成分规范评审、相异性确认、背对背测试

其他需要注意的问题:N版本程序的同步、N版本程序之间的通信、表决算法、一直比较问题、数据相异性。

  • 恢复块设计(动态冗余):动态冗余又称为主动冗余,它是通过故障检测、故障定位及故障恢复等手段达到容错的目的。其主要方式是多重模块待机储备,当系统检测到某工作模块出现错误时,就用一个备用的模块来替代它并重新运行。各备用模块在其待机时,可与主模块一样工作,也可以不工作。前者叫热备份系统(双重系统),后者叫冷备份系统(双工系统、双份系统)。
设计时应保证实现主块和后备块之间的独立性,避免相关错误的产生,使主块和备份块之间的共 性错误降到最低程度。
二者比较
  • 防卫式程序设计:是一种不采用任何传统的容错技术就能实现软件容错的方法,对于程序中存在的错误和不一致性,防卫式程序设计的基本思想是通过在程序中包含错误检查代码和错误恢复代码,使得一旦发生错误,程序就能撤销错误状态,恢复到一个已知的正确状态中去。其实现策略包括错误检测、破坏估计错误恢复三个方面。

2.检错技术

在软件出现故障后能及时发现并报警,提醒维护人员进行处理。代价低,但不能自动解决故障。 采用检错设计技术要着重考虑几个要素:检测对象、检测延时、实现方式和处理方式。

3.降低复杂度设计

是在保证实现软件功能的基础上,简化软件结构,缩短程序代码长度,优化软件数据流向降低软件复杂度,从而提高软件可靠性。 通常在系统配置中可以采用相应的容错技术,通过系统的整体来提供相应的可靠性,主要有双机热备技术和服务器集群技术。

双机容错技术

是一种软硬件结合的容错应用方案。该方案是由两台服务器和一个外接共享磁盘阵列相应的双机软件组成。 双机容错系统采用“心跳”方法保证主系统与备用系统的联系。所谓心跳,是指主从系统之间相互按照一定的时间间隔发送通信信号,表明各自系统当前的运行状态。一旦心跳信号表明主机系统发生故障,或者备用系统无法收到主系统的心跳信号,则系统的高可用性管理软件认为主系统发生故障,立即将系统资源转移到备用系统上,备用系统替代主系统工作,以保证系统正常运行和网络服务不间断。   工作模式:双机热备模式;双机互备模式;双机双工模式。
区别于联系: 双机热备=主机+备机
简单理解:主要应用运行于主机,备机即备用机器  -- 备机不工作  
双机互备=主机(备机)+备机(主机)
简单理解:部分应用运行于主机,部分应用运行于备机  -- 两机互备但是运行应用不同  
双机双工=主机+主机
简单理解:两台机器同时运行应用 -- 两机互备运行应用也相同
  
 
第一种,备机不工作,主机出现故障时备机接管主机的所有工作
第二、三种,主机备机同时工作,两台服务器可以跑不同的应用,例如主机跑ORACLE,备机跑IIS,任意一台服务器故障时,所有服务会自动切换到正常的服务器上  
第一种,备机不运行应用,处于等待状态
第二种,备机运行与主机不同的应用,应用互为备份
第三重,备机运行与主机相同的应用

集群技术

就是将多台计算机组织起来进行协同工作,它是提高系统可用性和可靠性的一种技术。 在集群系统中,每台计算机均承担部分计算任务和容错任务,当其中一台计算机出现故障时,系统使用集群软件将这台计算机从系统中隔出离去,通过各计算机之间的负载转嫁机制完成新的负载分担,同时向系统管理人员发出警报。集群系统通过功能整合和故障过渡,实现了系统的高可用性和可靠性。   特点:可伸缩性、高可用性、可管理性、高性价比、高透明性。 分类:高性能计算集群、负载均衡集群、高可用性集群。  

负载均衡

集群系统中的一项重要技术,可以提高集群系统的整体处理能力,也提高了系统的可靠性,最终目的是加快集群系统的响应速度,提高客户端访问的成功概率。集群的最大特征是多个节点的并行和共同工作,如何让所有节点承受的负荷平均,不出现局部过大负载或过轻负载的情况,是负载均衡的重要目的。

比较常用的负载均衡实现技术主要有以下几种:

(1)基于特定软件的负载均衡。 很多网络协议都支持重定向功能,例如,基于HTTP重定向服务,其主要原理是服务器使用HTTP重定向指令,将一个客户端重新定位到另一个位置。服务器返回一个重定向响应,而不是返回请求的对象。客户端确认新地址然后重发请求,从而达到负载均衡的目的。 -- 一些软件天然具有的消峰填谷的功能,比如网络协议的重定向   (2)基于 DNS 的负载均衡属于传输层负载均衡技术,其主要原理是在 DNS服务器中为同一个主机名配置多个地址,在应答DNS 查询时,DNS 服务器对每个查询将以 DNS 文件中主机记录的IP地址按顺序返回不同的解析结果,将客户端的访问引导到不同的节点上去,使得不同的客户端访问不同的节点,从而达到负载均衡的目的。 -- DNS服务器上一个主机名配多个地址,这样请求分流。 -- 补充:DNS递归查询:本地的DNS服务器去一个个查;DNS迭代查询:客户端一个个去查。 (3)基于NAT的负载均衡。将一个外部 IP 地址映射为多个内部 IP 地址,对每次连接需求动态地转换为一个内部节点的地址,将外部连接请求引到转换得到地址的那个节点,上从而达到负载均衡的目的。 -- 这种就是内部IP和外部IP的方式 (4)反向代理负载均衡。将来自 Internet上的连接请求以反向代理的方式动态地转发给内部网络上的多个节点进行处理,从而达到负载均衡的目的。  -- 反向代理服务器来分流请求
--补充:正向代理和反向代理服务器 1.正向代理是代理客户端,C指定要访问的服务器,然后发送给正向S,S根据指定的服务器去请求真正的S,得到结果,然后再发送给C。 这种情况下C端还需要配置。 经典应用:防火墙内的局域网客户端提供访问服务器的途径,科学上网   2.反向代理是代理服务器,C不用指定要访问的服务器了(因为对C来说反向代理S就是要访问的S),然后反向S得到结果,再给C。 C端无需任何配置。 经典应用:将防火墙外的服务器提供给客户端访问,负载均衡。
  • 正向代理是客户端的代理,服务器不知道真正的客户端是谁;反向代理是服务器的代理,客户端不知道真正的服务器是谁。
  • 正向代理一般是客户端架设的;反向代理一般是服务器架设的。
  • 正向代理主要是用来解决访问限制问题;反向代理则是提供负载均衡、安全防护等作用。二者都能提高访问速度。
  (5)混合型负载均衡。  

5软件可靠性测试与评价

软件可靠性测试由可靠性目标确定、运行剖面开发、测试用例设计、测试实施、测试结果 分析等主要活动组成。 -- 测试活动组成:定目标,剖面开发,用例设计,实施,结果分析。   测试步骤:义软件运行剖面(为软件的使用行为建模)——设计可靠性测试用例——实施可靠性测试-- 测试步骤:定剖面,设计用例,实施测试   软件可靠性评价3个过程选择可靠性模型、收集可靠性数据、可靠性评估和预测。   选择可靠性模型考虑因素:模型假设的适用性、预测的能力与质量模型输出值能否满足可靠性评价需求模型使用的简便性-- 选择模型考虑的因素:模型是否适应,模型预测的能力和质量,模型输出的值满足评价要求,模型使用简单不   可靠性数据的收集:可靠性数据主要是指软件失效数据,是软件可靠性评价的基础,主要是在软件测试、实施阶段收集的。   可靠性数据的收集应采用的解决方法及早所采用的的可靠性模型制订可实施性较强的可靠性数据收集计划重视软件测试数据的整理和分析、充分利用数据库来完成可靠性数据的存储和统计分析-- 早定模型,制定计划收集,重视数据整理和分析,充分利用数据存储分析   可靠性评估和预测:判断是否达到了可靠性目标;如未能达到要再投入多少;在软件系统投入实际运行一年或若干时间后,经过维护、升级和修改,软件能否达到交付或部分交付用户使用的可靠性水平。辅助方法失效数据的图形分析法、试探性数据分析技术

标签:可靠性,模型,软件可靠性,基础知识,考点,失效,软件,冗余
From: https://blog.csdn.net/lxy1290439047/article/details/140163002

相关文章

  • 【编程基础知识】哪些行为算跨域,跨域会引发什么问题,怎么解决
    哪些行为算跨域(CORS,Cross-OriginResourceSharing)跨域是指浏览器在处理网页时,由于同源策略(Same-OriginPolicy)的限制,限制了来自与当前请求网页不同源的资源请求。这里的“源”(Origin)指的是协议、域名和端口的组合。以下是一些常见的跨域行为:不同域名的请求:从http://exa......
  • 嵌入式硬件基础知识
    一、嵌入式系统的定义与特点定义:嵌入式系统是一种专为特定应用而设计的计算机系统,它通常被嵌入到更大的设备或系统中,作为这些设备或系统的一部分来执行预设的任务。与通用计算机相比,嵌入式系统具有更高的专用性、更低的功耗、更小的体积以及更强的实时性等特点。特点:专用性:......
  • 电气自动化入门04:三相交流异步电动机基础知识
    视频链接:3.1电工知识:三相交流异步电动机基础知识_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1PJ41117PW?p=5&vd_source=b5775c3a4ea16a5306db9c7c1c1486b5一、三相交流异步电动机基础知识11.三相交流异步电动机工作原理    是感应电动机的一种,是靠同时接......
  • NOI Linux 基础知识与编程环境
    在计算机早期历史中,终端专指用户与计算机系统进行交互的物理设备,包括命令行终端和图形化终端等。在流行的UNIX、Linux发行版中,可以使用快捷键调出命令行终端模式,也可以在图形界面中使用终端仿真器(terminalemulator)来模拟命令行终端。在桌面版Ubuntu中常见的终端仿真器有“终......
  • python基础知识
    python的介绍1、python是一个编程语言;2、python的版本:2.0版本,3.0版本  ,python中最新版本3.1263、python下载地址:https://www.python.org/downloads/4、下载后得到安装包,我们已经下载好了点击安装之前,我们在盘符下新建一个文件夹选择自动义安装下一步:选择新建的文件夹点......
  • 【网络安全】基础知识详解(非常详细)零基础入门到精通,收藏这一篇就够了_网络安全的入门
    ......
  • 大功率回馈式负载的基础知识
    大功率回馈式负载是一种能够将电能转化为其他形式能量,然后再将其转化回电能的设备。这种设备在电力系统中起着重要的作用,主要用于调节电网的电压和频率,保证电力系统的稳定运行。大功率回馈式负载的工作原理是:当电网电压或频率超过设定值时,负载将多余的电能转化为其他形式的能量,如......
  • linux 基础知识 什么是僵尸进程?有什么影响?如何解决?
    linux系统僵尸进程在Linux系统中,僵尸进程(ZombieProcess)是一种特殊的进程状态,它指的是一个已经完成执行的进程,其父进程尚未通过wait()或waitpid()系统调用来回收其资源和状态信息。僵尸进程本身并不占用CPU和其他资源,但它的进程描述符(PCB)仍然保留在系统中,这会占用系统资源并可......
  • 学习CentOs我们必备入门基础知识
    目录前言一、文件系统结构二、命令行操作三、软件包管理四、系统监控与管理五、用户与权限管理六、网络配置与管理七、系统安全与维护八、系统启动与关机总结前言CentOS(CommunityEnterpriseOperatingSystem)是一个基于RedHatEnterpriseLinux(RHEL)的开源操作系统......
  • C++入门基础知识76(实例)——实例 1【输出 “Hello, World!“】
    成长路上不孤单......