MindMap

mindmap
  root((软件可靠性))
    软件可靠性建模
    软件可靠性建模
    软件可靠性管理
    软件可靠性设计
    软件可靠性评价
    软件可靠性测试

软件可靠性概念

软件可靠性是指在规定的时间内,软件不引起系统失效的概率。该概率是系统输入和系统使用的函数,也是软件中存在的缺陷函数;系统输入将确定是否会遇到已存在的缺陷

软件可靠性的定量描述

软件的可靠性是在软件使用条件、在规定时间内、系统的输入/输出、系统使用等变量构成的数学表达式

  • 规定时间:自然时间|运行时间|执行时间
  • 失效概率:出现失效的概率是一个随机函数,成为失效概率
  • 可靠度:在软件规定条件下,规定时间内不失效的概率
  • 失效强度:单位时间内软件失效的概率
  • 失效率
  • 平均无效时间

可靠性的目标

软件可靠性是指用户对所使用的软件的性能满意程度的期望。可以用可靠度、平均失效时间和故障强度等来描述


软件可靠性建模


软件可靠性管理

软件可靠性管理的各阶段如下:

graph LR
    A[需求分析阶段] --> B[概要设计]
    B --> C[详细设计]
    C --> D[编码]
    D --> E[测试]
    E --> F[实施]

软件可靠性设计

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

软件可靠性设计的技术种类

  • 容错设计技术
    • 恢复块设计
    • N 版本程序设计
    • 冗余设计
  • 检错技术
  • 降低复杂度设计
  • 系统配置技术
    • 双机热备技术
      • 采用“心跳”方法保证主系统与备用系统的联系
      • 根据两台服务器的工作方式分为
        • 双机热备模式(一台工作,一台后备)
        • 双机互备模式(两台运行相对独立应用,互为后备)
        • 双机双工模式(两台同时运行相同应用,互为后备)
    • 服务器集群技术
      • 集群内各节点服务器通过内部局域网相互通信,若某节点服务器发生故障,这台服务器运行的应用被另一节点服务器自动接管

软件可靠性设计原则

  • 软件可靠性设计是软件设计的一部分,必须在软件的总体设计框架中使用,并且不能与其他设计原则相冲突

  • 软件可靠性设计在满足提高软件质量要求的前提下,以提高和保障软件可靠性为最终目标

  • 软件可靠性设计应确定软件的可靠性目标,不能无限扩大化,并且排在功能度、用户需求和开发费用之后考虑


软件可靠性评价

软件可靠性评价概念

评估和预测软件可靠性过程包括

  • 选择可靠性模型
  • 收集可靠性数据
  • 可靠性评估和预测

如何选择可靠性模型

  • 模型假设的适用性
  • 预测的能力与质量
  • 模型输出值能否满足可靠性的评价需求
  • 模型使用的简便性

可靠性数据的收集

  • 尽可能早地确定可靠性模型
  • 数据收集计划要有较强的可操作性
  • 重视测试数据的分析和整理
  • 充分利用技术手段(数据库技术)来完成分析和统计

软件可靠性的评估和预测

目的:是评估软件系统的可靠性状况和预测将来一段时间的可靠性水平

评估和预测以软件可靠性模型分析为主,以失效数据的图形分析法和试探性数据分析技术等为辅


软件可靠性测试

软件可靠性测试包括的种类

  • 可靠性目标的确定
  • 运行剖面的开发
  • 测试用例的设计
  • 测试实施
  • 测试结果分析

测试用例的组成

  • 测试用例标识
  • 被测对象
  • 测试环境及条件
  • 测试输入
  • 操作步骤
  • 预期输出
  • 判断输出结果是否符合标准
  • 测试对象的特殊需求

用时间定义的软件可靠性数据的分类

  • 失效时间数据
  • 失效间隔时间数据
  • 分组时间内的失效数
  • 分组时间的累积失效数

软件测试工具

测试工具根据工作原理不同可分为静态测试工具动态测试工具

静态测试工具:是对代码进行语法扫描,找到不符合编码规范的地方,根据某种质量模型评价代码的质量,生成系统的调用关系图等。它直接对代码进行分析,不需要运行代码,也不需要对代码编译链接和生成可执行文件,静态测试工具可用于对软件需求、结构设计、详细设计和代码进行评审、走审和审查,也可用于对软件的复杂度分析、数据流分析、控制流分析和接口分析提供支持;

动态测试工具与静态测试工具不同,它需要运行被测试系统,并设置探针,向代码生成的可执行文件中插入检测代码,可用于软件的覆盖分析和性能分析,也可用于软件的模拟、建模、仿真测试和变异测试等。

软件测试分类

软件测试一般分为两个大类:动态测试和静态测试

动态测试是指通过运行程序发现错误

包括黑盒测试法(等价类划分、边界值分析、错误推测、因果图)、白盒测试法(逻辑覆盖、循环覆盖、基本路径法)和灰盒测试法等

静态测试是采用人工和计算机辅助静态分析的手段对程序进行检测

包括桌前检査、代码审查和代码走查

软件集成测试

软件集成测试也称为组装测试、联合测试(对于子系统而言,则称为部件测试)

它将已通过单元测试的模块集成在一起,主要测试模块之间的协作性。从组装策略而言,可以分为一次性组装测试增量式组装(包括自顶向下、自底向上及混合式)两种。集成测试计划通常是在软件概要设计阶段完成的,集成测试一般采用黑盒测试方法


Reference