软件测试PPT02
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件测试用例的理解
规格说明 (预期的) 预期的) 5 1 4 8 7 T 3 测试用例 (已检验) 已检验) S 2 P 6 程序 (观察的) 观察的)
功能测试用例
规格说明 (预期的) 预期的) S P 程序 (观察的) 观察的)
测试用例
结构测试用例
规格说明 (预期的) 预期的) S P 程序 (观察的) 观察的)
Pareto原则 原则
Pareto原则暗示着测试发现的错误中的 原则暗示着测试发现的错误中的 80%很可能起源于程序模块中的 很可能起源于程序模块中的20%。 很可能起源于程序模块中的 。
软件测试 Software Testing
2. 软件测试的数学知识
测试人员的离散数学
离散数学包括:集合论、函数、关系、 命题逻辑和概率论。
public class MoneyTest extends TestCase { //TestCase的子类 的子类 public void testEquals() { //把测试代码放在 把测试代码放在testEquals中 把测试代码放在 中 Money m12CHF= new Money(12, "CHF"); Money m14CHF= new Money(14, "CHF"); Assert.assertTrue(!m12CHF.equals(null));//进行不同情况的测试 进行不同情况的测试 Assert.assertEquals(m12CHF, m12CHF); Assert.assertEquals(m12CHF, new Money(12, "CHF")); // (1) Assert.assertTrue(!m12CHF.equals(m14CHF)); } }
public class MoneyTest extends TestCase {//TestCase的子类 的子类 private Money f12CHF;//提取公用的对象 提取公用的对象 private Money f14CHF; protected void setUp() {//初始化公用对象 初始化公用对象 f12CHF= new Money(12, "CHF"); f14CHF= new Money(14, "CHF"); } public void testEquals() {//测试 测试equals方法的正确性 测试 方法的正确性 Assert.assertTrue(!f12CHF.equals(null)); Assert.assertEquals(f12CHF, f12CHF); Assert.assertEquals(f12CHF, new Money(12, "CHF")); Assert.assertTrue(!f12CHF.equals(f14CHF)); } public void testSimpleAdd() {//测试 测试add方法的正确性 测试 方法的正确性 Money expected= new Money(26, "CHF"); Money result= f12CHF.add(f14CHF); Assert.assertTrue(expected.equals(result)); } }
JUnit介绍 介绍
定义了一系列的接口和类, 定义了一系列的接口和类,使得程序员在进行单元测试时 必须遵循一定的规范,如继承某各类,实现某个接口。 必须遵循一定的规范,如继承某各类,实现某个接口。 JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测 是由 试框架( )。用于 试框架(regression testing framework)。用于 )。用于Java开发 开发 人员编写单元测试之用。 人员编写单元测试之用。 回归测试就是不断地对所编写的代码进行测试:编写一些, 回归测试就是不断地对所编写的代码进行测试:编写一些, 测试一些,调试一些,然后循环这一过程, 测试一些,调试一些,然后循环这一过程,会不断地重复 先前的测试,哪怕正编写其他的类。 先前的测试,哪怕正编写其他的类。
public class Money { private int fAmount;//余额 余额 private String fCurrency;//货币 货币 类型
public Money add(Money m) { return new Money(amount()+m.amount(), public Money(int amount, String currency()); currency) } { fAmount= amount; public boolean equals(Object anObject) fCurrency= currency; {//判断钱数是否相等 判断钱数是否相等 } if (anObject instanceof Money) { Money aMoney= public int amount() (Money)anObject; { return return fAmount; aMoney.currency().equals(currency()) } && amount() == aMoney.amount(); public String currency() } { return false; return fCurrency; } } }
import junit.framework.*; public class MoneyTest extends TestCase { //…. public static void main(String[] args) { TestCase test=new MoneyTest("testAdd"); junit.textui.TestRunner.run(test); } }
集合论—集合定义 集合论 集合定义
集合有三种方式定义: 集合有三种方式定义: 简单列出集合的元素 给出辨别规则 通过其他集合构建
集合论—空集 集合论 空集
表示, 空集采用符号 表示,在集合中占有 特殊位置。 特殊位置。 空集不包含元素。 空集不包含元素。 空集是唯一的,即不会有两个空集。 空集是唯一的,即不会有两个空集。 如果集合被规则定义为永远失败, 如果集合被规则定义为永远失败, 那 么该集合就是空集。 么该集合就是空集。
有向图—定义
定义: 有向图(或框图)G=(V,E)包含:一个 节点的有限集合V={n1,,n2 ,……,nm}, 一个边的集合E={e1, e2,…..,ep},其中每 条边ek=〈ni,nj〉是节点ni 、nj∈V的一 个有序对偶。
有向图—基本概念
内度与外度 节点的类型 有向图的相邻距阵
有向图—基本概念
集合论—集合关系 集合论 集合关系
定义: 定义: A是B的子集 是 的子集 A是B的真子集 是 的真子集 A是B的相等集合。 的相等集合。 是 的相等集合
集合论—子集划分
定义:子集划分 由于划分是一组子集, 因此可以把单 个子集看做是划分的元素。 划分可以保证完备性和无冗余性。
函数
函数的定义 函数的定义域与值域 函数的类型 函数的合成
软件缺陷的寄生虫性
找到的软件缺陷越多, 找到的软件缺陷越多,就说明软件缺陷越多
原因: 原因: •程序员的疲倦 程序员的疲倦 •程序员往往犯同样的错误 程序员往往犯同样的错误 •某些软件的缺陷其实是大灾难的征兆 某些软件的缺陷其实是大灾难的征兆
软件测试的杀虫剂现象
软件测试越多, 软件测试越多,其免疫力越强的现象
克服方法: 克服方法: •不断编写不同的新的测试程序 不断编写不同的新的测试程序 •对程序的不同部分进行测试 对程序的不同部分进行测试
软件测试的不修复原则
并非所有软件缺陷都能修复 不需要修复软件缺陷的原因: 不需要修复软件缺陷的原因: •没有足够的时间 没有足够的时间 •不算真正的软件缺陷 不算真正的软件缺陷 •修复的风险太大 修复的风险太大 •不值得修复 不值得修复
定义: 图G=(V,E)有节点的有限(并且非空) 集合V和节点无需对偶集合E组成。 V E V={n1,,n2 ,……,nm} 和 E={e1, e2,…..,ep} 其中每条边ek={ni,nj} ,ni 、nj∈V。
图—基本概念
节点的度 图的关联距阵 图的相邻距阵
图—路径
路径的定义 路径的连接性 压缩图 圈数
用于测试的图—Petri网
定义 Petri网是一种双向有向图(P,T,In,Out), 其中,P和T是不相交的节点集合,In 和Out是边集合, In c PXT,Out c TXP。
用于测试的图—事件驱动的 Petri网
定义 EDPN是一种多向图(P,D,S,In,Out),包 括三个节点集合P、D和S,以及两个映 射集合In和Out。其中: P是端口事件的集合;D是数据地点的集 合;S是转移的集合;In是(P∪D) XS的有序对偶集合;Out是SX P∪ D) 的有序对偶集合。
测试用例
软件测试的特征
软件测试具有一定的风险 软件缺陷的“寄生虫性” 软件缺陷的“寄生虫性” 软件测试的“杀虫剂现象” 软件测试的“杀虫剂现象” 软件测试的不修复原则 Pareto原则 Pareto原则
完全测试程序是不可能的
原因: 原因: 输入量太大 输出结果太多 软件实现途径太多 软件说明书没有客观标准
用于测试的图—状态图
状态图是将为维恩图描述层次结构的 能力以及有向图描述有向连接性的能 力结合在一起,开发出一种可视化表 示法。
状态图的团点
A
B
D
C
状态图中的初始状态
A
B
D
C
进入子状态的默认入口
A
B
D
C
并发状态
D A B E
C
F
软件测试 Software Testing
软件测试框架 ——回归测试框架 回归测试框架JUnit
测试概述内容回顾
软件测试的目的 软件缺陷和软件质量 软件测试的原则 软件测试的类型 功能性测试和结构性测试
软件测试的生命周期
错误 错误 需求规 格说明 缺陷 设计 缺陷 编码 缺陷 修复 错 误 事故 测试 缺陷解决
错误
缺陷隔离
缺陷分类
软件测试的理解
S P
规格说明 (预期的) 预期的)
程序 (观察的) 观察的)
public class MoneyTest extends TestCase { //TestCase的子类 的子类 public void testAdd() { //把测试代码放在 把测试代码放在testAdd中 把测试代码放在 中 Money m12CHF= new Money(12, "CHF"); Money m14CHF= new Money(14, "CHF"); Money expected= new Money(26, "CHF");//预期的结果 预期的结果 Money result= m12CHF.add(m14CHF); //运行被测试的方法 运行被测试的方法 Assert.assertTrue(expected.equals(result)); //判断运行结果是 判断运行结果是 否与预期的相同 } }
关系—集合之间的关系
集合之间的关系的定义 关系的势的定义 关系的参与的定义
关系—单个集合上的关系
关系的四个特殊属性 排序关系的定义 等价关系的定义
命题逻辑
命题的定义 逻辑操作符 逻辑表达式 逻辑ຫໍສະໝຸດ Baidu价
概率论
事件的概率的定义 概率论在测试中的应用
测试人员的图论
本课程主要介绍:无向图和有向图。
图—图的定义
路径与半路径 可到达性距阵 n-连接性 强组件
用于测试的图—程序图
定义 给定一个采用命令式程序设计语言编写 的程序,其程序图是一种有向图,其 中: 节点是程序语句,边表示控制流(从 节点I到节点j有一条边,当且仅当对应 节点j的语句可以立即在节点I对应的语 句之后执行。
用于测试的图—有限状态机
定义 有限状态机是一种有向图,其中状态是 节点,转移是边。 源状态和吸收状态是初始节点和终止节 点,路径被建模为通路。 大多数有限状态机表示方法都要为边 (转移)增加信息,已指示转移的原 因合作为转移的结果要发生的行动。