软件工程中的软件可靠性

2025 年 5 月 2 日 | 阅读 6 分钟

引言

软件可靠性意味着操作可靠性。它被描述为系统或组件在静态条件下在特定时期内执行其所需功能的能力。

软件可靠性也被定义为在给定环境下,软件系统在预定义的输入案例数量下完成其指定任务的概率,假设硬件和输入没有错误。

软件可靠性是软件质量的重要组成部分,与功能性、可用性、性能、可维护性、能力、可安装性、可维护性和文档等共同组成。由于软件的复杂性往往很高,软件可靠性难以实现。虽然任何包含软件的高度复杂的系统都难以达到一定的可靠性水平,但随着系统规模的快速增长和通过升级软件来达到此目的的便利性,系统开发人员倾向于将复杂性推入软件层。

例如,下一代大型飞机将拥有超过 100 万行板载软件源代码;下一代空中交通管制系统将包含 100 万到 200 万行;即将到来的国际空间站将拥有超过 200 万行板载软件和超过 1000 万行地面支持软件;几个重要的生命攸关的防御系统将拥有超过 500 万行软件源代码。虽然软件的复杂性与软件可靠性成反比,但它与其他软件质量的关键因素直接相关,特别是功能性、能力等。

软件可靠性技术

两种不同的模型用于计算软件可靠性

  1. 预测建模
  2. 估计建模

预测建模

顾名思义,预测模型是根据创建指定软件程序所需的规范的假设构建的。这些假设包括来自历史事件或软件操作特征的信息和材料。由于在开发期间或之后进行预测被认为是非常不可靠的,因此它在设计阶段或开发过程开始之前进行。预测不是基于当前情况,而是基于应用程序将在未来某个时候使用的想法。

估计建模

估算模型是根据开发或测试过程的当前数据结果构建的,并基于多种软件特性。它在软件开发生命周期的后期完成,此时所有必需的软件组件都已安装。软件的可靠性是使用当前或紧随其后的时间段进行估算的。一些软件开发分析师还开发了不同的模型,例如基本执行时间模型 Shooman 模型、错误播种模型对数泊松时间模型、Littlewood - Verrall 模型、Goel - Okumoto 模型、Musa - Okumoto 模型和 Jelinski - Moranda 模型。

软件可靠性指标

软件系统应用程序的可靠性是使用软件可靠性指标进行测量和推导的,这些指标可以用数字或任何其他方式表示。系统行为、软件的业务目标、预期的恢复时间、故障的可能性、使用程序的用户的类型等,都可能影响应用程序开发人员决定的指标类型。以下是软件应用程序开发专业人员在实时中经常用于衡量软件可靠性的评估类型。

基于需求

客户的实际需求可以在软件开发规范文档中找到。它通常概述了开发软件的需求和期望,包括其功能特性、非功能性外观以及对其他相关系统的依赖性。它用于识别软件的功能。

它用于解决非功能性方面,例如软件的外观兼容性、性能验证、集成能力、程序实时通过的负载等。过程结果应表明客户需求与软件开发团队的理解之间没有差异。

基于设计和代码

行动计划在设计和编码阶段评估软件可靠性。软件组件可用性特性和软件大小是使用估计的领域。将系统维护在更小的单元中至关重要,以便显著降低事故的可能性。一旦故障事件得到控制,可靠性规模将按分析所需运行。具有易于理解的软件单元的多个组件优于单个大型复杂系统。

测试可靠性指标

在测试过程中,可靠性指标分为两部分。一部分是验证,以确保构建的应用程序的功能行为与文档中指定的要求相匹配。另一部分评估程序的功能和性能。前者被称为黑盒测试方法,后者被称为白盒测试,通常由开发人员执行。

在客户需求规范的掩护下,测试过程是针对先前放置的文档进行的。这意味着此时的任何差异都将作为错误修复的一部分进行报告和修复,并使用缺陷生命周期进行监控。为了确保开发系统的每个方面都得到验证,它用于实现验证整个系统的有效方法。

以下是根据上述软件开发阶段所需的指标分析类型所采用的方法

  • 平均故障时间 - (总时间) / (测试单元数)
  • 平均修复时间 - (总维护时间) / (总修复次数)
  • 平均故障间隔时间 - MTTF + MTTR
  • 故障发生率 - 1 / (MTTF)
  • 故障概率 - (故障次数) / (考虑的总案例数)
  • 可用性 - MTTF / MTBF

实现软件可靠性的示例

让我们考虑平均故障时间计算,它需要总时间和测试单元数。

例如,如果值如下,MTTF 计算为

MTTF = (总时间) / (测试单元数)

= 100 / 40

= 2.5

影响软件可靠性的因素

用户对软件程序可靠性的评估基于两种类型的数据。

  • 软件中的错误数量
  • 用户与系统交互的方式。这被称为操作配置文件。

以下因素影响系统中的故障数量

  • 代码的大小和复杂性。
  • 所采用开发过程的特点。
  • 开发人员的培训教育和经验。
  • 操作环境。

软件可靠性应用

软件可靠性有多种用途

  1. 比较与软件工程相关的技术。
    • 采用一项技术需要多少成本?
    • 就价格和质量而言,这项技术能带来什么收益?
  2. 监控系统测试过程: 故障强度指标提供了系统当前质量的信息,高强度表明需要进行额外的测试。
  3. 控制正在使用的系统: 维护所需的软件修改程度会影响系统的可靠性。
  4. 更好地理解软件开发过程: 通过量化质量,我们可以更好地理解软件开发过程。

软件可靠性优势

在软件开发过程中包含软件可靠性具有以下好处

  • 数据保存利用软件可靠性。
  • 避免软件故障是有益的。
  • 系统升级过程简单。
  • 系统性能和效率的提高带来了更高的生产力。

结论

由于它保证了软件质量和性能、按要求实现功能、简单的维护任务等,软件可靠性验证是软件开发过程中必不可少的一步。尽管这是一个要求很高的过程,但通常接受采取强有力的措施来提高正在开发的软件的质量。

常见问题 - FAQs

问题 1:定义软件可靠性?

答案: 软件可靠性是软件的一个特性,它包括功能性、可用性、性能、能力、可维护性、文档以及其他方面。

问题 2:说出几个预测模型?

答案: 预测模型包括 Rome Lab TR-92-52 模型、Putnam 模型和 Musa 模型。

问题 3:说出几个估算模型?

答案: 用于估算的模型包括 Weibull Bayesian J-M 和 Goel-Okumoto 模型。


下一主题软件故障机制