软件工程(导论)

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

目录

  • 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 能力成熟度模型
白盒测试技术

白盒测试技术总述

所谓测试方案包括具体的测试目的(例如,预定要测试的具体功能),应该输入的测试数据和预期的结果。通常又把测试数据和预期的输出结果称为测试用例。


一、逻辑覆盖

有选择地执行程序中某些最有代表性的通路是对穷尽测试的惟一可行的替代办法。

从覆盖源程序语句的详尽程度分析,大致有以下一些不同的覆盖标准:

1、语句覆盖

含义:选择足够多的测试数据,使被测程序中每个语句至少执行一次。

特点:语句覆盖对程序的逻辑覆盖很少。语句覆盖只关心判定表达式的值,而没有分别测试判定表达式中每个条件取不同值时的情况。语句覆盖是很弱的逻辑覆盖标准。 

2、判定覆盖 

含义:不仅每个语句必须至少执行一次,而且每个判定的每种可能的结果都应该至少执行一次。

3、条件覆盖 

含义:不仅每个语句至少执行一次,而且使判定表达式中的每个条件都取到各种可能的结果。

特点:条件覆盖通常比判定覆盖强,因为它使每个条件都取到了两个不同的结果,判定覆盖却只关心整个判定表达式的值。但也有反例,如第二组测试用例。

判定覆盖不一定包含条件覆盖,条件覆盖也不一定包含判定覆盖。

4、判定/条件覆盖 

含义:使得判定表达式中的每个条件都取到各种可能的值,每个判定表达式也都取到各种可能的结果。

5、条件组合覆盖 

含义:要求选取足够多的测试数据,使得每个判定表达式中条件的各种可能组合都至少出现一次。

特点:条件组合覆盖是前述几种覆盖标准中最强的。满足条件组合覆盖标准的测试数据,也一定满足判定覆盖、条件覆盖和判定/条件覆盖标准。

但是,条件组合覆盖标准的测试数据并不一定能使程序中的每条路径都执行到。

从对程序路径的覆盖程度分析的逻辑覆盖标准。

6. 点覆盖

含义:选取足够多的测试数据,使得程序执行路径至少经过流图的每个结点一次。

特点:由于流图的每个结点与一条或多条语句相对应,因此点覆盖标准和语句覆盖标准是相同的。

7. 边覆盖

含义:选取足够多测试数据,使得程序执行路径至少经过流图中每条边一次。

特点:通常边覆盖和判定覆盖是一致的。

8. 路径覆盖

含义:选取足够多测试数据,使程序的每条可能路径都至少执行一次(如果程序图中有环,则要求每个环至少经过一次)。 


二、控制结构测试

1. 基本路径测试

基本路径测试是Tom McCabe提出的一种白盒测试技术。

首先计算程序的环形复杂度;

以该复杂度为指南定义执行路径的基本集合;

从该基本集合导出的测试用例可保证程序中的每条语句至少执行一次,而且每个条件在执行时都将分别取真、假两种值。 

2. 循环测试

循环测试是一种白盒测试技术,它专注于测试循环结构的有效性。

在结构化的程序中通常只有3种循环,即简单循环、串接循环和嵌套循环。 

(1) 简单循环

应该使用下列测试集来测试简单循环,其中n是允许通过循环的最大次数。

■跳过循环。

■只通过循环一次。

■通过循环两次。

■通过循环m次,其中m<n-1。

■通过循环n-1,n,n+1次。 

(2) 嵌套循环

从最内层循环开始测试,其他循环都设置为最小值。

对最内层循环使用简单循环测试方法,而使外层循环的迭代参数取最小值,并为越界值或非法值增加一些额外的测试。

由内向外,对下一个循环进行测试,但保持所有其他外层循环为最小值,其他嵌套循环为“典型”值。

继续进行下去,直到测试完所有循环。 

(3) 串接循环

如果串接循环的各个循环都彼此独立,则可以使用测试简单循环的方法来测试串接循环。

如果两个循环串接,而且第一个循环的循环计数器值是第二个循环的初始值,则这两个循环并不是独立的。当循环不独立时,建议使用测试嵌套循环的方法来测试串接循环。