Lecture0

Module Overview

  1. Principles of software testing 软件测试原理
  2. Program Inspections,Walkthroughs and Reviews 软件检查、演练与视图
  3. Mathematical foundation for testing 测试的数学基础
  4. Unit testing/object-oriented testing 单元测试,面向对象测试
  5. Test cased esign 测试用例设计
  6. Integration,system and acceptance testing 集成、系统和验收测试

Fault,Error,Failure

Fault:
1.软件中错误的一个声明
2.计算机程序中不正确的步骤、过程、数据定义
3.可能导致对象发生错误的情况

Error:
1.系统的错误状态
2.产生错误的人为操作

Failure:
1.终止系统执行所需功能的能力
2.”违反合同”

黑盒测试

基于要求和规范
不考虑软件的内部实现,只关心输入和结果的测试
根据规则书进行测试

技术与操作:
1.等价类测试
2.边界值分析
3.组合测试
4.顺序测试
5.随机数据测试
6.错误猜测

白盒测试

关心软件的内部实现,关心内部代码中是哪个地方出现了问题
根据代码的细节进行测试
(要求的编程能力显然比黑盒高)
技术与操作:
1.语句覆盖
2.决策覆盖
3.条件覆盖
4.路径覆盖
5.数据流覆盖

Lecture 1

测试等级

单元测试 Unit Testing: 最简单的,往往只是一个界面,是最小的测试单元(再小就是“语句”了)
集成测试 Integration Tesing : 简单来说就是几个单元合起来的测试
系统测试 System Testing : 对整个软件产品,一个完整的环境(硬件,软件,网络…)的测试
验收测试 Acceptance Testing: 最终的测试。它成功之后,就可以让用户接受这个软件了。(alpha测试,beta测试就属于这一块)

回归测试 Regression Testing: 当一个新单元被添加,或一个单元被修改后,我们还需要再次测试

错误故障分类

类型分类

Logic:逻辑、判断、算法实现等
Interface:规格和结果实现等
Data:数据定义、初始化、映射、使用等

功能分类

Wrong:实现错误
Missing:功能缺失
Extra:实现了不用实现的功能

严重性分类

Blocking:PENDING CORRECTION
Critical:错误操作不能避免,安全性问题等
Major:主要
Minor:次要
Inconsequential:无关紧要

故障影响

功能:某个功能无法满足
可运行:错误导致软件运行错误/不能很好操作
安全:授权。验证、批准、隐私
性能:准确率,容量,响应时间,有效性等
可服务性:可靠性,维护/修改的方便

规格与需求

规格 Specification: 软件要依照什么标准
需求 Requirenment: 软件要实现什么功能

软件测试的方法

静态验证 Static Verification

不运行的状态下,通过源代码,文档,说明书,数据等进行分析和验证(需要比较有经验的测试者)

走查 Walk throughs: 在脑内过一遍代码,了解规格,功能,查看源代码进行审核、匹配、报告
代码审查/审核 Code Reviews/Inspections:测试者理解相关文档,总览设计、计划、代码,利用走查验证。审查与解决错误 (比走查更加广泛)
形式化 Formal Methods : 用专门的软件,严格进行推导,证明等验证,比较费时间,但是质量比较高

动态验证 Dynamic Verfication

软件运行的状态下进行验证

测试设计的过程

测试要干什么?

1.分析软件(从规格、代码,来分析组件、参数)
2.产生测试用例。最好该用例可以覆盖整个测试。每个用例需要有一个编号。
3.产生测试数据。输入值,期望输出(从规则书中分析得出),测试用例的列表需要(最大程度)覆盖
4.执行测试。有一些软件可以完成这个步骤,输入数据,调用模块,即可得到结果

功能测试

往往就是一个黑盒测试,测试用例和数据来自规范,测试也是面向规范,用测试的规范标准来做
功能测试/黑盒测试 在 所有等级的测试中都可以使用

常见方法

等价类测试
边界值测试
组合测试
随机数据测试
错误猜测/专家测试

等价类测试

等价类测试主要是用来减少测试例数量的,用有限的数据代替无限的数据,且得到一个同等的效果
把输入域进行切分,输出范围也进行切分
对于每一个等价类,从中选择一个有代表性的值进行测试,如果这个值通过了测试,则可以认为等价类中的所有值通过测试

DEF1:一个等价类包含了一个数据的结果,它们要被同样的对待,出现同样的结果
DEF2:
假设:一个测试用例在测试中发现了问题,则认为等价类中的其它数据也会发现这个问题。测试通过同理

lecture 3

边界值测试

边界值测试主要是为了发现那些处于分界点的数值可能发生问题

在发生分支语句测试的语句,会不会出错

如果在一个边界的两侧拥有边界值,则两个数都为边界值

比如0及以下为A情况,1及以上是B情况。则0和1都是边界值,都需要测试

我们可以根据等价类测试的划分线得到一个或两个边界值
不过请注意:边界值不需要重复计算

在进行边界值测试时,依旧需要测试所有等价类

或者根据上面几点,我们可以说:边界值是根据等价类确定的

边界值测试值的一般规则

1.每个输入输出的分界的边界值都是一个测试案例
2.输入的测试数据,是从多个未覆盖的测试情况中选出的
(没测试过的区域我肯定要挑一个代表啊)
3.每个测试用例,都应该尽可能涵盖多的测试情况,以确认整个等价类的边界值
4.对于无效等价类中的每个值,都应该单独处理
5.与返回值有关的测试案例都需要被覆盖
6.通常按顺序识别测试数据,并且为每个参数都尽可能挑选未覆盖的测试边界值

确定边界值的一般准则

A.对于一个连续范围的数值
1.为范围的边界创建测试案例(对输入和输出)
2.测试无效的输入值时,其数值刚刚超过边界

B.对于一系列离散的数值
1.为边界上的最大值和最小值,以及对于的上下值(比如大1,小1)创建测试用例(对输入和输出)

C.对于有序集合
1.创建以第一个和最后一个元素为重点的测试案例

边界测试的适用性以及局限性

1.可以大大减少测试案例的数量
2.适用于一定范围内的输入数据取值
3.可以应用于单元测试、集成测试、系统测试、验收测试
4.只要求输入和输出可以被划分且可以识别到边界
5.输入的组合可以不被测试

lecture 4-5

组合测试

我们之前说到边界值不好测试”组合”的情况,组合值测试可以解决这个问题
(等价类测试也没有考虑”组合”的角度)

1.组合测试可以帮助我们测试”输入测试的组合情况”
2.可以用系统的办法进行测试(比如a和b都有t和f两种情况,就可以系统化进行组合)
3.因果图,决策表,真值表…都是我们配合组合测试的工具

1.以可能的组合,组成的最小的集合。考虑程序最多的可能性
2.有n个原因/条件,就有$2^n$个组合,再继续分析得到可的测试用例
3.以真值表的t、f来组合各种情况

因果关系

识别所有输入软件和相关输出的组合
对软件的输入称为原因 Causes,相关的输出叫做结果 Effects

原因的组合将产生特定响应的结果,即effects

这些原因和影响再描述其关系的真值表中,进行了结合

目标组合测试 The Goal of Combinational Testing

目的是找到,能够完成测试的情况下,最有可能的组合的最小值
对于n个独立的原因,我们一共会有$2^n$个不同的组合
原因和结果必须以布尔表达式的形式表达

优化Cause的数量

1.把复杂的关系分解成独立的部分
2.分组关系
3.按照数值大小分析
4.识别并消除重复、无用的cause
5.在每一次不同的的基本cause参数,都进行以上操作

做真值表

1.画出cause和effect的关系
2.对于每一个cause-effect,定义它们所测试的规则rule
3.预测可能的输出

注意:
1.每个原因都在一个被分隔的行中
2.每个不同的列定义了有不同结构的组合
3.每个列都是一个规则rule
4.每个规则都是一个测试用例

小结

1.真值表中的各个规则用于识别所有可能的输入组合的输出值
2.特别的,错误案例不会在真值表中被覆盖,以此来减小它的尺寸
3.如果输入的组合会导致error,要使用一个单独的表格,只记录error的测试情况
4.尽可能的减少cause的数量,以此来减少表的大小
5.组合测试和有效地确认相关的原因

Lecture6 Random Testing & Error Guessing 随机测试和错误猜测

随机测试

随机生成的数据用作软件的输入

搜索故障的概率方法

以统计方式估计软件的质量

1.分布可以是均匀的,也可以是模拟软件在实际使用中会收到的输入类型。
2.单元测试中使用的均匀分布的随机数据
3.随机数的统计相关分布常用于系统测试

TestCase

1.目标是基于每个输入参数的假定使用模式实现对可能值的良好覆盖
2.每个测试用例由一组随机选择/生成的值表示,通常基于每个参数
3.每个测试用例都表示为特定参数的值分布.通常包括上限和下限以及用于在范围内选择随机值的分布。

小结

1.快速生成测试用例
2.可以提供一个数学基础来选择适当的输入值集
3.可能会对极端或非法数值的系数进行测试
4.如果不知道输入的分布情况,选择的输入值可能无法反映典型的使用情况

错误猜测

这是一种基于专家知识和经验的临时方法,又称专家意见 ExpertOpinion

选择的测试数据有可能暴露实施中的缺陷

比如典型的:空/空字符串、未初始化列表、零分度、电池电量指示器超过 100%,当地面温度高于 120oF 时,客机不能起飞

该技术非常有效,它专注于可能的故障。当然,如果使用不当,可能会出现故障。

功能测试的总结 Functional TestingSummary

等价类测试:定义条件或错误类以帮助产生测试次数。Itassumes表示类内的代表值,也可以表示类内的销售值或条件。
边界值测试:测试搜索边条件等效类。
组合测试:组合效果的产品结构表多个参数。
随机测试:使用统计方法对软件质量进行评估。
错误猜测:基于直觉和专家知识的产品案例发现潜在的结果和设计焦点案例。