软件可靠性工程范文
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件可靠性工程
1.软件可靠性定义
1.1.广义
是指一切旨在避免、减少、处理、度量软件故障(错误、缺陷、失效)的分析、设计、测试等方法、技术和实践活动。于是有诸多相关术语,如软件可靠性度量、软件可靠性设计、软件可靠性建模、软件可靠性测试、软件可靠性管理等。
1.2.狭义
指软件无失效运行的定量度量,尤其是那些面向用户的定量度量。主要有:
⏹软件可靠度:表示软件在规定的运行环境中和规定的运行时间内无失效运行的机
会。软件无失效运行的机会多以概率度量,但也可以模糊数学中的可能性加以度量,有时也在数据域上将软件可靠度表示为软件成功执行一个回合的概率。
⏹软件失效强度:其物理解释是单位时间内软件发生失效的机会。在概率范畴内,它
与软件可靠度有明确的数学关系(R(t)=1-F(t),R(t)为可靠度,F(t)为失效强度)。
⏹软件平均失效时间(MTTF):表示软件投入运行到出现一个新失效的时间。
上述度量与硬件可靠性中的相应概念本质上是一致的。
“失效”是指程序的功能在某方面没有达到用户的需求。“没有像用户需求的那样工作”是一个很广的定义。因此,可靠性结合了与程序执行相关联的所有属性。例如,它包括正确性、安全性和可使用性的操作方面,以及对用户的友好性。请注意,安全性实际上是软件可靠性的一个特殊子类。
可靠性不包括可移植性、可修改性或文档的可理解性。
可靠性是面向用户的而不是面向开发人员的。可靠性与操作有关,而不是与程序的设计有关,因此可靠性是动态的,而不是静态的。可靠性考虑问题出现的频率,直接与操作经验和在经验中错误的影响相关。因此,可以很容易地将可靠性与成本联系起来。可靠性很适合检查发展趋势的重要性、设定目标和预测什么时候可以达到目标。可靠性使人们可以使用同样的术语对硬件和软件的系统可靠性进行分析,而在真实系统中硬件和软件都同时存在。所以,可靠性度量比错误度量要有用得多。
2.软件可靠性工程的研究范围
软件可靠性工程涉及以下四方面活动和有关技术:
2.1.软件可靠性分析
进行软件可靠性的需求分析、指标分配、故障树分析、失效模式和影响分析、软件开发过程中有关软件可靠性的的特性分析、……等。
2.2.软件可靠性设计和实现
进行防错设计、容错设计、检错设计、纠错设计、故障恢复设计、软件可靠性增长、……等。
2.3.软件可靠性测量、测试和评估
在软件生存周期各阶段进行有关软件可靠性设计、制造和管理方面的属性测量,进行基于软件运行剖面的测试用例随机输入的软件测试、软件可靠性预计、软件可靠性估计、软件可靠性验证、……等。
2.4.软件可靠性管理
确定影响软件可靠性的因素,制定必要的设计和实现准则以及对软件开发各阶段软件可
靠性相关的过程和产品的要求,依据上述有关测量数据和分析结果控制和改进开发过程,进行风险管理(不仅考虑安全性等技术风险,而且考虑进度和经费方面的风险),改进费用效益关系,改进开发过程,对采购或重用的软件进行可靠性管理,……等。
实施软件可靠性工程要解决三个问题,即软件可靠性指标的确定与分配,软件可靠性要求的实现和软件可靠性的验证。
上面提到对有关属性的测量,涉及对软件可靠性测试、评估、预计、估计。
3.软件可靠性工程的思想
软件可靠性工程之所以有效,在于它运用了两个思想:
第一,通过定量描述产品的使用方式,可以更有效地开发产品的功能并且使用这些信息,以便:
⏹将资源精确地集中到最常用和最关键的功能上。
⏹使测试工作真实地反映实际条件。
第二,软件可靠性工程平衡用户对可靠性、开发时间和开发费用的需求,从而更加有效。为此,软件可靠性工程要像对开发时间和开发费用设置定量目标那样,对可靠性也设置定量目标,要制定策略来达到这些目标。最后,软件可靠性工程在测试过程中跟踪产品的可靠性,并用来作为产品是否可以发布的标准。通过软件可靠性工程,你可以交付“正好合适”的可靠性的产品,并且既避免了不必要的资金和时间成本,又避免了发生由不够可靠的产品导致的用户不满和问题。
4.软件失效的根源与机理
软件失效的根源在于设计错误,而硬件失效的主要根源通常在于物理变质。然而,为软件可靠性开发的概念和理论确实可以应用于任何设计活动,包括硬件设计。一旦软件(设计)缺陷被适当地修复,通常就被永久性修复了。失效通常只发生在当程序(设计)运行在并非它所开发和测试时面向的环境中的情况。尽管制造过程也可能影响物理组件的质量,但是软件(设计)的复制过程很简单,并且其质量水平很高。
软件失效机理可描述为:软件错误—>软件缺陷—>软件故障—>软件失效。各自具体含义为:
⏹软件错误(error):在可以预见的时间内,软件仍将由人开发。软件错误是指在
软件开发过程中出现的不希望或不能接受的人为错误,其结果是导致软件缺陷的产
生。
⏹软件缺陷(defect):软件缺陷是指存在于软件(程序、文档、数据)中的那些不
希望或不可接受的偏差,如少一逗点、多一语句等,其结果是软件运行于某一特定
条件时出现故障。当软件特指程序时,软件缺陷(defect)与软件(程序)污点(bug)
同义。
⏹软件故障(fault):软件故障是指软件运行时出现的一种不希望或不可接受的内
部状态,譬如,软件处于执行一个多余的循环时,我们说软件出现故障。此时若无
适当措施(容错)加以及时处理,便产生软件失效。
⏹软件失效(failure):软件失效是指软件运行时产生的一种不希望或不可接受的外
部行为结果。
5.软件可靠性工程测试分类
包括两种类型:可靠性增长测试和确认测试。
这两种类型与不同测试阶段无关,例如单元测试、子系统测试、系统测试或β测试,而是与测试的目标相关。可靠性增长测试的目标是找到并清除错误。
5.1.可靠性增长测试
包括特性测试、负载测试和回归测试。
⏹在特性测试中,操作都是独立运行的,运行场地环境的影响和交互作用被减小到最
低程度。有时通过在操作之间重新初始化系统来减小交互作用。
⏹负载测试是指同时运行很多操作,并且是以相同的频率,在其他现场将会出现的相
同环境条件下。这样就可以产生与在现场中可能出现的情况相同的交互作用和环境
条件的影响。验收测试和性能测试都属于负载测试。
⏹回归测试是在系统发生重要改变之后进行的,包括一些(通常是随机选取的)或全
部特性测试。在回归测试中应该包括所有关键操作。
5.2.确认测试
确认测试不包括调试过程,不会试图通过引起定位错误后再清除错误来解决所发现的失效。被测系统必须是稳定的,不能出现任何改变,不管是由于增加了新特性还是由于错误的清除。通过确认测试,得到一个二选一的结论:或者接受这个软件,或者拒绝它并把它退回给提供商。在确认测试中,所需要的失效数据样本的数量要少得多。事实上,如果无失效运行的时间足够长,那么可以在出现任何失效之前就作出结论。通常只在负载测试(不是特性或回归测试)中使用确认测试。