软件工程(导论)

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

目录

  • 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 能力成熟度模型
确认测试

确认测试总述

确认测试也称为验收测试,它的目标是验证软件的有效性。

软件有效性的一个简单定义是:如果软件的功能和性能如同用户所合理期待的那样,软件就是有效的。

需求分析阶段产生的软件需求规格说明书,准确地描述了用户对软件的合理期望,因此是软件有效性的标准,也是进行确认测试的基础。 


一、确认测试的范围

确认测试必须有用户积极参与,或者以用户为主进行。

使用用户界面输入测试数据并且分析评价测试的输出结果。

通常在验收之前由开发单位对用户进行培训。 


二、软件配置复查

确认测试的一个重要内容是复查软件配置。

复查的目的是保证软件配置的所有成分都齐全,质量符合要求,文档与程序完全一致,具有完成软件维护所必须的细节,而且已经编好目录。 


三、Alpha和Beta测试

Alpha测试由用户在开发者的场所进行,并且在开发者对用户的“指导”下进行测试。Alpha测试是在受控的环境中进行的。

Beta测试由软件的最终用户们在一个或多个客户场所进行。开发者通常不在Beta测试的现场,因此,Beta测试是软件在开发者不能控制的环境中的“真实”应用。

测试总结:


1. 接口测试

每个接口可能有多个输入参数,每个参数有   “典型值”、“边界值”、“异常值”之分。

根据接口的定义,可以推断某种输入应当产生什么样的输出。输出包括函数的返回值和输出参数。 

观察是否有程序语句从来没有被执行过。

要特别留意函数体内的错误处理程序块。 

2. 路径测试

想遍历测试几乎是不可能的,不测试或者胡乱找几条路径测试却又不行。 

输入与对应的输出之间的路径是唯一的。由于接口测试时的输入是有代表性的,因此相应的路径也具有代表性。

路径测试检查表:数据类型、变量值、逻辑判断、循环、内存管理、文件I/O、错误处理。

3. 功能测试

功能测试的基本方法是构造一些合理输入(在需求范围之内),检查输出是否与期望相同。

功能测试有两种比较好的测试方法:等价划分法和边界值分析法。 

等价划分是指把输入空间划分为几个“等价区间”,在每个“等价区间”中只需要测试一个典型值就可以了。

边界值测试法是对等价划分法的补充。除了典型值外还要用边界值作为测试用例。 

4. 健壮性测试

健壮性是指在异常情况下,软件能正常运行的能力。

健壮性有两层含义:

(1)容错能力。容错性测试通常构造一些不合理的输入来引诱软件出错。

(2)恢复能力 。恢复测试重点考察以下几项:

■系统能否重新运行;

■有无重要的数据丢失;

■是否毁坏了其它相关的软件硬件。 

5. 性能测试

性能测试即测试软件处理事务的速度,一是为了检验性能是否符合需求,二是为了得到某些性能数据供人们参考。 

有时人们关心测试的“绝对值” 。

有时人们关心测试的“相对值” 。 

6. 用户界面测试

绝大多数软件拥有图形用户界面。

图形用户界面的测试重点是正确性、易用性和视觉效果。

在评价易用性和视觉效果时,主观性非常强,应当考虑多个人的观点。 

7. 信息安全测试

信息安全性是指防止系统被非法入侵的能力,既属于技术问题又属于管理问题。

信息安全性测试有如下步骤:

■为非法入侵设立目标;

■邀请(或悬赏)一些人扮演黑客,让他们想尽办法入侵系统,实现“目标”。

■如果有人成功了,请他详述入侵的过程。

8. 压力测试

压力测试也叫负荷测试,即获取系统能正常运行的极限状态。 

压力测试的主要任务是:构造正确的输入,使劲折腾系统却让它刚好不瘫痪。 

压力测试的一个变种是敏感测试。

敏感测试目的是发现什么样的输入可能会引发不稳定现象。 

9. 可靠性测试

可靠性是指在一定的环境下、给定的时间内、系统不发生故障的概率。

软件可靠性测试可能会花费很长时间。 

比较实用的办法是,让用户使用该系统,记录每一次发生故障的时刻。计算出相邻故障的时间间隔,注意要去掉非工作时间。

统计出不发生故障的“最小时间间隔”、“最大时间间隔”和“平均时间间隔”。 

10. 安装/反安装测试

目前市面上有非常流行的、专门制作安装/反安装程序的一些工具,如Install Shelled。

主要测试工作: 

■至少在标准配置和最低配置两种环境下测试;

■如果有安装界面,应当尝试各种选项,如选择“全部”、“部分”、“升级”等。