软件工程(导论)

成秀秀、杨玲、戚爱斌、苗世迪、温东新

目录

  • 1 软件与软件工程
    • 1.1 软件
    • 1.2 软件危机
    • 1.3 软件工程
    • 1.4 软件生命周期
    • 1.5 软件过程模型
    • 1.6 学生成果分享
  • 2 可行性研究与项目开发计划
    • 2.1 可行性研究的任务
    • 2.2 可行性研究过程
    • 2.3 进度计划
    • 2.4 学生成果分享
  • 3 需求分析
    • 3.1 需求分析的任务
    • 3.2 与用户沟通获取需求的方法
    • 3.3 分析建模与规格说明
    • 3.4 实体-联系图
    • 3.5 数据规范化
    • 3.6 状态转换图
    • 3.7 其它图形工具
    • 3.8 验证软件需求
  • 4 总体设计
    • 4.1 系统流程图
    • 4.2 数据流图
    • 4.3 数据字典
    • 4.4 设计过程
    • 4.5 设计原理
    • 4.6 启发规则
    • 4.7 描绘软件结构的图形工具
    • 4.8 面向数据流的设计方法
  • 5 详细设计
    • 5.1 结构程序设计
    • 5.2 人机界面设计
    • 5.3 过程设计的工具
    • 5.4 面向数据结构的设计方法
    • 5.5 程序复杂程度的定量度量
  • 6 软件编码
    • 6.1 程序设计语言
    • 6.2 编码风格
  • 7 软件测试
    • 7.1 软件测试基础
    • 7.2 单元测试
    • 7.3 集成测试
    • 7.4 确认测试
    • 7.5 白盒测试技术
    • 7.6 黑盒测试技术
    • 7.7 调试
    • 7.8 软件可靠性
  • 8 软件项目管理
    • 8.1 估算软件规模
    • 8.2 工作量估算
    • 8.3 人员组织
    • 8.4 质量保证
    • 8.5 软件配置管理
    • 8.6 能力成熟度模型
软件可靠性

一、基本概念

软件可靠性:程序在给定的时间间隔内,按照规格说明书的规定成功地运行的概率。

软件的可用性:程序在给定的时间点,按照规格说明书的规定,成功地运行的概率。 

稳态可用性Ass:如果在一段时间内,软件系统故障停机时间分别为td1,td2…,正常运行时间分别为tu1,tu2,…,则系统的稳态可用性为:

Ass=Tup/(Tup+Tdown)

其中Tup=∑tui,Tdown=∑tdi

平均维修时间MTTR:是修复一个故障平均需要用的时间,它取决于维护人员的技术水平和对系统的熟悉程度,也和系统的可维护性有重要关系。

平均无故障时间MTTF:是系统按规格说明书规定成功地运行的平均时间,它主要取决于系统中潜伏的错误的数目,因此和测试的关系十分密切。

Ass=MTTF/(MTTF+MTTR) 


二、估算平均无故障时间的方法

1. 相关量的符号

■ET——测试之前程序中错误总数;

■IT——程序长度(机器指令总数);

■τ——测试(包括调试)时间;

■Ed(τ)——在0至τ期间发现的错误数;

■Ec(τ)——在0至τ期间改正的错误数。 

2. 基本假定

在类似的程序中,单位长度里的错误数ET/IT近似为常数。通常:0.5×10-2≤ ET/IT ≤2×10-2

失效率正比于软件中剩余的错误数,而平均无故障时间MTTF与剩余的错误数成反比。

假设发现的每一个错误都立即正确地改正了。因此:Ec(τ)=Ed(τ)

剩余的错误数为:Er(τ)=ET-Ec(τ)

单位长度程序中剩余的错误数为:εr(τ)=ET/IT-Ec(τ)/IT  

3. 估算平均无故障时间

经验表明,平均无故障时间与单位长度程序中剩余的错误数成反比,即:MTTF=1/K(ET/IT-Ec(τ)/IT),其中K为常数,典型值是200。

估算平均无故障时间的公式,可以评价软件测试的进展情况。Ec=ET-IT/(K×MTTF)

因此,也可以根据对软件平均无故障时间的要求,估计需要改正多少个错误之后,测试工作才能结束。 

4. 估计错误总数的方法

程序中的错误总数ET与程序规模、类型、开发环境、开发方法论、开发人员的技术水平和管理水平等都有密切关系。

估计ET的两个方法:

植入错误法:在测试之前由专人在程序中随机地植入一些错误。测试之后,根据测试小组发现的错误中原有的和植入的两种错误的比例,来估计程序中原有错误的总数ET 。 

假设人为地植入的错误数为Ns,经过一段时间的测试之后发现ns个植入的错误,此外还发现了n个原有的错误。

如果可以认为测试方案发现植入错误和发现原有错误的能力相同,则能够估计出程序中原有错误的总数为:N=n/ns×Ns

分别测试法:植入错误法的基本假定是所用的测试方案发现植入错误和发现原有错误的概率相同。

上述基本假定可能有时和事实不完全一致。

如果有办法随机地把程序中一部分原有的错误加上标记,然后根据测试过程中发现的有标记错误和无标记错误的比例,估计程序中的错误总数。 

分别测试法使用两个测试员(小组),彼此独立地测试同一个程序的两个副本,把其中一个测试员发现的错误作为有标记的错误。

τ表示测试时间,设:

τ= 0 时错误总数为B0;

τ=τ1时测试员甲发现的错误数为B1;

τ=τ1时测试员乙发现的错误数为B2;

τ=τ1时两个测试员发现的相同错误数为bc。

如果认为测试员甲发现的错误是有标记的,即程序中有标记的错误总数为B1,则测试员乙发现的B2个错误中有bc个是有标记的。

假定测试员乙发现有标记错误和发现无标记错误的概率相同,则错误总数为:B0 =B2/bc×B1