第七章 集成测试过程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Day.java
Month.java
《软件测试方法和应用》 7-29
Year.java
测试用例设计和实现
NextDate问题集成测试的关键点在于 theDate类的increment()方法,为了覆 盖所有的消息,设计了3个方法: testDayIncrement()方法执行msg7的 true分支 testMonthIncrement()方法执行msg7 的false分支,msg8和msg11的true分支 testYearIncrement()方法执行msg7的
CalendarUnit是一个抽象类
theDate是CalerdarUnit的一个子类 Day是CalerdarUnit的一个子类 Month是CalerdarUnit的一个子类 Year是CalerdarUnit的一个子类
CalendarUnit.java
theDate.java
U1
U2 U5 U3 U4 U2 U6 S4 Step 3 U1 S4 U3 S3 U2
U3
U4 S5
Step 4 U1
U2
U3
U4
U2
U3
U4
Байду номын сангаас
U5
Step 5
S5
U5
Step 6
U6
深度优先集成举例
步骤
1.
从U1开始,被U1调用的U2、U3、U4被3个桩模块S1、S2、S3代替,
基于功能树,选择一个U1的分支,集成自顶而下。在本例中选择最左面 的一个分支
setDay()
getDay() Month Month() Increment() setCurrentPos() setMonth() getMonth() getMonthSize() msg19 msg18
Increment()
getYear() isLeap() msg20
《软件测试方法和应用》 testMonthIncrement() 方法的MM路径,这条路径不能覆盖 msg9 and msg10 7-33
自下而上举例
d4 d1 d2 d3 U2 U5 U2 U5 U3 U4 Step 1 U6 U1 U3 U6 U4 d5 U1
U5
U6
Step 2
U2 U5
U3
U4 U6
Step 3
三明治集成
定义
为减少桩模块和驱动模块,在分解树的子树上进行集成
举例
步骤
1.
基于功能树,选择完全分支/子分支作为集成单元,在本例中,我选择了3
《软件测试方法和应用》 7-13
深度优先集成举例
U1 U2 S4 U1 S2 Step 2 S3 S1 U1 S2 Step 1 S3
U1
U2 U5 U3 U4 U2 U6 U5 U5 Step 3 U1 S2 S3 U2
U1 U3 S3
Step 4 U1
U2
U3
U4
U2
U3
U4
U5
S5
U5
Step 6
个子树
1. 2. 3.
为了测试U2和U5的集成,开发一个驱动器d1 开发两个桩S1和S2测试U1和U3的集成 为了测试U4和U6,开发一个驱动器d2
2.
将所有的测试子树集成在一起
《软件测试方法和应用》 7-17
三明治集成举例
d1 U1 U1 U2 U4 S1 U3 subtree2 Step 1 U1 S2 d2
U2 U5
U3
U4 U6
U5
subtree1
U6
subtree3
U2 U5
U3
U4 U6
Step 2
《软件测试方法和应用》 7-18
基于MM路径的集成
定义
这种方法由Paul C. Jorgensen提出,MM路径法是英文MessageMethod的简称
MM路径可以用于描述单元之间的控制转移。
最低要求所有消息均被覆盖至少一次。。
难点
MM-路径的标识
《软件测试方法和应用》 7-24
基于MM路径的集成举例
功能说明
NextDate:nextDate(month,day,year) 实现输出输入日期的下一个
日期,其中1≤month ≤12, 1≤day ≤31, 1900≤year ≤2060 NextDate由5个类实现,这5个类通过彼此发送消息交互:
目的 在把各个模块连接起来的时候,穿越模块接口的数据 是否会丢失;
一个模块的功能是否会对另一个模块的功能产生不利 的影响;
各个子功能组合起来,能否达到预期要求的父功能;
全局数据结构是否有问题;
单个模块的误差累积起来,是否会放大,以至达到不
能接受的程度。
集成测试必要性
基于MM路径的集成
A 1 B 1 C 1 2 3 2 3 4 3 5 4 6 5 4 2
A的模块执行路径:
MEP(A,1) = <1,2,3,6> MEP(A,2) = <1,2,4> MEP(A,3) = <5,6>
B的模块执行路径:
MEP(B,1) = <1,2> MEP(B,2) = <3,4> C的模块执行路径 : MEP(C,1) = <1,2,4,5> MEP(C,2) = <1,,3,4,5>
《软件测试方法和应用》 7-19
基于MM路径的集成
下图展示了一条基于调用关系的单元A,B和C的MM路径
A
1
B
1
C
1 2 3
2 3 4
2
一条MM路径
3 5 4 6
4
5
《软件测试方法和应用》 7-20
基于MM路径的集成
相关概念
源节点:程序执行开始时或重新开始处的语句片断。 可能是单元中的第一个可执行语句或者是紧接着转移 控制到其它单元节点之后的节点 汇节点:程序执结束处的语句片断。 可能是单元中的最后一个可执行语句或者转移控制到 其它单元的节点。 模块执行路径:以源节点开始,以汇节点结束的一系列 语句,中间没有插入汇节点
2.
将U1和U2集成,被U2调用的U5用桩模块S4代替,U3、U4被S2、S3
代替 将U1、U2和U5集成,U3、U4用桩模块S2、S3代替 转回到第二级,将U1、U2、U5和U3集成,用S3代替U4 转回到第二级,将U1、U2、U3、U5和U4集成,用S5代替U3 将U6与其它模块集成
3. 4. 5. 6.
消息接收。
MM-路径是穿插出现模块执行路径和消息的序列,是描述包含在单独单元之 间控制转移的模块执行路径序列。
MEP(a,2) MEP(b,1) MEP(c,1)
MEP(a,3)
MEP(b,2)
基于MM路径的集成
应用
基于系统中的调用关系、或者对象之间协作图、顺序图等建模信息和代码标
识系统的MM-路径。
U6
自下而上
定义
从最底层组件开始,按照分解树的结构,逐层向上集成,调用下层单元
的上层单元以驱动出现
自下而上举例
1. 2. 3.
步骤
从最底层U5,U3,U6开始,开发3个驱动模块d1,d2,d3调用它们 用U5集成U2,U6,U4被d4,d5代替 将所有单元集成在一起
《软件测试方法和应用》 7-15
2.
U3,U4被S2,S3
3. 4. 5. 6.
集成U1、U2,U3,U5被S4代替,U4被S3代替 集成U1,U2,U3和U4,被U4调用的U6,被S5代替,U5用S4代替 移到下一层,集成U2,U1,U3,U4和U5,用S5代替U6 将U6与其它单元集成
广度优先集成举例
U1 U2 S4 U1 S2 Step 2 U1 S3 S1 U1 S2 Step 1 S3
源节点:A模块:节点1,5;B模块:节点1,3;C模块:节点1 汇节点:A模块:节点4,6;B模块:点2,4;C模块:节点5
基于MM路径的集成
相关概念
消息:一种程序设计语言机制,通过这种机制一个单元将控制转移给另一个
单元。
不同的程序设计语言消息的含义可能不同,可能是函数调用,也可能是
重复这样的集成操作直到所有的单元都集成进来
广度优先
从最顶层单元开始,持续向下到下一层, 一个个完成下一层上所有单元 集成后,再转向下面一层,重复这样的集成操作直到所有的单元都集成 进来
广度优先集成举例
步骤
1.
从U1开始测试, 被U1调用的U2,U3,U4被S1,S2,S3这3个桩模块代替
集成从左向右进行 移到下一层,将U1和U2集成,被U2调用的U5被桩模块S4代替,
(1)一个模块可能对另一个模块产生不利的影响 (2)可能会发现单元测试中未发现的接口方面的报告 (3)将子功能合成时不一定产生所期望的主功能 (4)独立可接受的误差,在组装后可能会超过可接受 的误差程度 (5)在单元测试中无法发现时序问题 (6)在单元测试中无法发现资源竞争问题
集成测试的层次
传统软件:按集成粒度不同,可分为: 模块间集成测试,子系统内集成测试, 子系统间集成测试; 面向对象的应用系统:类内集成测试, 类间集成测试
自顶而下集成
定义
从顶层开始,采用同设计顺序一样的思路对被测系统进行测试,一般集中于
顶层的组件,然后逐步测试处于底层的组件,被上层单元调用的下层单元以 桩出现
自顶而下的集成方式
深度优先
从最顶层单元开始,持续向下到下一层,选择一个分支,自顶而下一个 一个的集成这条分支上的所有单元,直到最底层,然后转向另一个分支,
Jan.31st 2007 的MM路径
msg6 testNextDate main msg7 msg11 msg13 msg1 msg2 msg3 Date Date() Increment() printDate() msg4 Year Year() setCurrentPos() msg14 msg21 msg5 msg8 msg12 Day Day() setCurrentPos() Increment() msg15 msg16 msg17
setDay()
getDay() Month Month() msg12 Increment() setCurrentPos() setMonth() getMonth() getMonthSize() msg19 msg18
Increment()
getYear() isLeap() msg20
《软件测试方法和应用》 testDayIncrement()方法的MM路径, 这条路径不能覆盖 msg8,msg9,msg10 and msg11 7-32
Dec.31st 2006 的MM路径
msg6 testNextDate main msg7 msg11 msg13 msg1 msg2 msg3 Date Date() Increment() printDate() msg4 msg5 msg8 msg12 Year Year() setCurrentPos() Day Day() setCurrentPos() Increment() msg15 msg16 msg17
1.
2.
3.
false分支,msg8,msg9,msg10的false
分支
通过执行这3个方法,各类间的所有消息 发送都被覆盖到了
Jan. 16th 2007 MM路径
msg6 testNextDate main msg7 msg13 msg1 msg2 theDate Date() Increment() printDate() msg3 msg4 Year Year() setCurrentPos() msg14 msg21 msg5 Day Day() setCurrentPos() Increment() msg15 msg16 msg17
集成策略
集成策略
在对测试对象分析的基础上,描述软件单元集成(组装)的方式和方法。
是集成测试过程中各种活动的基础,集成策略包括
1.
基于功能分解图的集成
大爆炸 渐增式集成 自顶而下 自底而上 混合集成
2.
基于MM-路径的集成
功能分解图
功能分解定义
一种基于系统功能和子功能将系统分解为多个组件的模块分解方式
第6章 集成测试
本章大纲
本章讨论与集成测试相关的内容,包括:
集成测试过程
集成策略
大爆炸
自顶而下
自底而上 三明治集成 基于MM-路径的集成
集成测试计划 集成测试设计 集成测试执行
什么是集成测试
定义
集成经过单元测试的各组件评估它们之间交互的测试过程集 成测试(Integration Testing)在单元测试的基础上,将所有 模块按照设计要求组装成为子系统或系统,进行集成测试。 程序在某些局部反映不出来的问题,在全局上很可能暴露出 来,影响功能的实现。
SATM系统
设备传感与控制
中央银行通信
终端传感与控制
管理会话
通道传感与控制
屏幕驱动器 键盘传感器
验证卡 验证PIN
结束会话 管理事务
槽传感与控制
取数字
大爆炸集成
定义
把各个单元一次性集成为一个完整的系统中进行测试,而不是分阶段进 行
备注
大爆炸法是一个折中的集成测试策略 如果系统很小或者定位缺陷不是那么复杂,可以采用大爆炸法。不然, 比较好的办法基于某种集成测试策略一步步集成各单元