卷面分数及考点如下:两道大题
第一道大题(40):判断题:对错+原因(每题10分);
第二道大题(60):三小题,每题20分
涉及:
1、黑盒测试
2、测试用例:标识、输入、步骤、预期
3、白盒测试:代码、补充测试数据、代码控制流图、复合结构拆分、图复杂度
4、集成测试:自底向上、自顶向下、插桩
目录
第一章 软件测试基础
1.1测试的定义和原则
测试定义需要清楚变化
测试原则(大题、判断题)
软件测试就是对醒目开发过程的产品(编码、文档)进行差错审查,保证其质量的一种过程。
测试用例是为特定目的而设计的一组测试输入、执行条件和预期的结果,测试用例是执行测试的最小实体。
软件测试的目的之一是尽快尽早地找到至今没有被发现的缺陷,而不是确保没有缺陷。
在软件开发过程中,若能尽早暴露其中的错误,则为修复和改进错误所花费的代价就会降低。
软件测试规范规定,软件测试的类别可分为:单元测试、集成测试以及配置项测试、系统测试和验收测试
1.2软件缺陷的定义和分类
缺陷级别 | 详细描述 |
致命(critical) | 致命的错误,造成系统或应用程序崩溃(crash)、死机、系统悬挂、或造成数据丢失、主要功能组完全丧失。 |
严重(major) | 严重错误,指功能或者特性(feature)没有实现,主要功能丧失,导致严重的问题,或致命的错误声明。 |
一般(normal) | 不太严重的错误,这样的缺陷虽然不影响系统的基本使用,但没有很好的实现功能,没有达到预期的效果。如次要功能丧失,提示信息不太正确,或用户界面太差,操作时间长等 。 |
微小(minor) | 一些小问题,对功能几乎没有影响,产品及属性仍可使用,如有个别错别字、文字排列不整齐等。 |
1.3测试用例
1.4软件测试分类
第二章 软件测试模型与过程
第三章 软件测试管理
软件测试工作过程有哪些?
确定测试计划、设计测试用例、测试执行、测试总结
测试执行的工作过程有哪些?
(1)全方位地观察测试用例执行结果
(2)加强测试过程记录
(3)及时确定发现的问题
(4)提交缺陷时与开发的关系处理
(5)及时更新测试用例
(6)提交一份优秀的问题报告单
3.1测试管理使用基本流程
项目-》项目需求管理及建立-》测试用例建立-》测试单建立-》测试执行-》缺陷上报-》测试报告生成
软件测试岗位工作角色有:测试经理、测试工程师、测试员
软件测试岗位工作任务如下:监控测试进度 ( 测试经理 )、生成测试报告 ( 测试员 )、确保测试外部环境 ( 测试经理 )
1、记录测试结果 ( 测试员 )
2、实施测试操作 ( 测试员 )
3、设计测试用例 ( 测试工程师 )
4、分析测试结果 ( 测试工程师 )
5、制定测试计划 ( 测试经理 )
第四章 黑盒测试
黑盒测试是已知产品的功能设计规格,可以进行测试来证明每个实现了的功能是否符合要求。
黑盒测试的测试用例是根据应用程序的功能需求设计的。
在设计测试用例时,应包括合理的输入条件和不合理的输入条件。
4.1边界值测试
边界值分析采用单缺陷假设,即弱类型测试。
单缺陷假设:软件失效、极少是由两个或多个缺陷同时发生引起的
在最小值、略高于最小值、正常值、略低于最大值、最大值处取输入变量值。
表示方法:min、min+、nom、max-、max;
4.1.2边界值分析的测试用例
设计边界值测试用例时,多个变量,只使其中一个变量取极值,其他变量取正常值,控制变量嘛。
归纳基本边界值分析方法:
1.通过变量个数
2.通过变量取值范围
对于一个变量个数为n的函数,边界值分析会产生4n+1个测试用例
4.1.3边界值分析的优缺点分析
边界值测试分析采用了可靠性理论的 单缺陷假设。
优点:简便易行,生产测试数据的成本很低;
缺点:测试用例不充分;不能发现测试变量间的依赖关系;不考虑含义和性质。
结论:只能作为初步测试用例使用。
4.1.4边界值分析三角形举例
边界值分析法测试用例 | ||||
min | min+ | max- | max | nom |
1 | 2 | 199 | 200 | 100 |
边界值分析法 | |||
A边 | B边 | C边 | 输出 |
100 | 1 | 100 | 等腰三角形 |
100 | 2 | 100 | 等腰三角形 |
100 | 199 | 100 | 等腰三角形 |
100 | 200 | 100 | 非三角形 |
1 | 100 | 100 | 等腰三角形 |
2 | 100 | 100 | 等腰三角形 |
199 | 100 | 100 | 等腰三角形 |
200 | 100 | 100 | 非三角形 |
100 | 100 | 1 | 等腰三角形 |
100 | 100 | 2 | 等腰三角形 |
100 | 100 | 199 | 等腰三角形 |
100 | 100 | 200 | 非三角形 |
4.2等价类测试
4.2.1等价类的划分
有效等价类,无效等价类
4.2.2划分等价类的方法
(1)区间划分
如果输入条件规定了取值范围或值的个数就可确定一个有效等价类和两个无效等价类
、
(2)按照数值划分
如果规定了输入数据的一组值,且程序要对每一个输入值分别进行处理,要对每一个规定的输入值确立一个有效等价类,而对于这组值之外的所有值确立一个无效等价类
例如:输人条件说明学历可为:专科、本科、硕士、博士四种之一
有效等价类有四个:专科,本科,硕士,博士
无效等价类:非以上四种学历
(3)按照数值集合划分
输人条件规定了输入值的集合或是规定了“必须如何”的条件,则可确定一个有效等价类和一个无效等价类
例如:“文件名称必须以字母开头。。。”
有效等价类:以字母开头;
无效等价类:以非字母开头,如数字、特殊字符、汉字等;
(4)布尔变量
如果输人条件是一个布尔量,则可以确立一个有效等价类和一个无效等价类。
例如:
单选的选中与不选中
验证码正确与不正确
(5)进一步细分等价类
如已划分的等价类各元素在程序中的处理方式不同,则应将此等价类进一步划分成更小的等价类
例如:输入三条边,判断三角形的形状,
可以构成三角形(再进一步判断三角形的形状)
一般三角形、等腰三角形、等边三角形
不能构成三角形(可进一步细分等价类)
4.2.3等价类三角形举例
等价类分析法 | |||||
输入条件 | 有效等价类 | 编号 | 无效等价类 | 编号 | |
三个正整数 | 正整数 | 1 | 一边为非正整数 | a为非正整数 | 10 |
b为非正整数 | 11 | ||||
c为非正整数 | 12 | ||||
两边为非正整数 | a、b为非正整数 | 13 | |||
a、c为非正整数 | 14 | ||||
b、c为非正整数 | 15 | ||||
三遍均为非正整数 | 16 | ||||
三个数 | 2 | 只输入一个数 | 只给a | 17 | |
只给b | 18 | ||||
只给c | 19 | ||||
只输入两个数 | 只给a、b | 20 | |||
只给a、c | 21 | ||||
只给b、c | 22 | ||||
未输入数 | 23 | ||||
构成一般三角形 | a+b>c,且a≠b≠c | 3 | a+b<c | 24 | |
a+b=c | 25 | ||||
a+c>b,且a≠b≠c | 4 | a+c<b | 26 | ||
a+c=b | 27 | ||||
b+c>a,且a≠b≠c | 5 | b+c<a | 28 | ||
b+c=a | 29 | ||||
构成等腰三角三角形 | a=b,a≠c,且两边之和大于第三边 | 6 | |||
a=c,a≠b,且两边之和大于第三边 | 7 | ||||
b=c,a≠b,且两边之和大于第三边 | 8 | ||||
构成等边三角形 | a=b=c | 9 |
等价类分析测试用例 | |||||
测试用例编号 | 输入数据 | 预期输出 | 覆盖等价类 | ||
a | b | c | |||
1 | 5 | 6 | 7 | 一般三角形 | 1、2、3、4、5 |
2 | 6 | 6 | 5 | 等腰三角形 | 1、2、6 |
3 | 6 | 5 | 6 | 等腰三角形 | 1、2、7 |
4 | 5 | 6 | 6 | 等腰三角形 | 1、2、8 |
5 | 6 | 6 | 6 | 等边三角形 | 1、2、9 |
6 | -5 | 6 | 6 | 提示:输入不符合要求 | 10 |
7 | 6 | 0 | 6 | 提示:输入不符合要求 | 11 |
8 | 6 | 6 | 3.6 | 提示:输入不符合要求 | 12 |
9 | 0 | -5 | 6 | 提示:输入不符合要求 | 13 |
10 | 5.6 | 6 | -2 | 提示:输入不符合要求 | 14 |
11 | 6 | 0 | 3.5 | 提示:输入不符合要求 | 15 |
12 | 3.5 | 5.6 | 4.5 | 提示:输入不符合要求 | 16 |
13 | 6 | —— | —— | 提示:请输入数据 | 17 |
14 | —— | 5 | —— | 提示:请输入数据 | 18 |
15 | —— | —— | 5 | 提示:请输入数据 | 19 |
16 | 6 | 6 | —— | 提示:请输入数据 | 20 |
17 | 6 | —— | 4 | 提示:请输入数据 | 21 |
18 | —— | 5 | 6 | 提示:请输入数据 | 22 |
19 | —— | —— | —— | 提示:请输入数据 | 23 |
20 | 5 | 6 | 15 | 不能构成三角形 | 24 |
21 | 6 | 7 | 13 | 不能构成三角形 | 25 |
22 | 4 | 10 | 5 | 不能构成三角形 | 26 |
23 | 6 | 10 | 4 | 不能构成三角形 | 27 |
24 | 5 | 6 | 15 | 不能构成三角形 | 28 |
25 | 7 | 8 | 15 | 不能构成三角形 | 29 |
4.3判定表测试
4.3.1判定表建立步骤
①分析条件和动作,确定规则的个数;
假如有n个条件,每个条件有两个取值(0,1),则有种规则;
②列出所有的条件桩和动作桩
③填入条件项;
④填入动作项,得到初始决策表;
⑤简化,合并相似规则(相同动作)。
4.3.2判定表三角形举例
判定表分析法 | |||||||
1 | 2 | 3 | 4 | 5 | 6 | ||
条件 | 构成三角形 | Y | Y | Y | Y | Y | N |
a=b | Y | Y | N | N | N | —— | |
a=c | Y | N | Y | N | N | —— | |
b=c | Y | N | N | Y | N | —— | |
结果 | 不构成三角形 | √ | |||||
普通三角形 | √ | ||||||
等腰三角形 | √ | √ | √ | ||||
等边三角形 | √ |
判定表测试用例 | |||||
测试用例编号 | 输入数据 | 预期结果 | 覆盖规则 | ||
a | b | c | |||
1 | 3 | 3 | 3 | 等边三角形 | 1 |
2 | 3 | 3 | 1 | 等腰三角形 | 2 |
3 | 3 | 1 | 3 | 等腰三角形 | 3 |
4 | 1 | 3 | 3 | 等腰三角形 | 4 |
5 | 2 | 3 | 4 | 普通三角形 | 5 |
6 | 3 | 4 | 5 | 普通三角形 | 5 |
7 | 6 | 7 | 8 | 普通三角形 | 5 |
8 | 3 | 3 | 6 | 不构成三角形 | 6 |
9 | 1 | 5 | 7 | 不构成三角形 | 6 |
10 | 6 | 10 | 3 | 不构成三角形 | 6 |
第五章 白盒测试
白盒测试是已知产品的内部工作过程,可以通过测试来证明每种内部操作是否符合设计规格要求,所有内部成分是否已经过检查。
白盒测试仅与程序的内部结构有关,完全可以不考虑程序的功能要求。
软件测试员无法对产品说明书进行白盒测试。
5.1逻辑覆盖
5.1.1语句覆盖
需要保证程序中每一条可执行语句至少应执行一次。
5.1.2判定覆盖
设计测试用例时,应保证程序中每个判定节点的取真分支和取假分支至少经历一次。
5.1.3条件覆盖
设计测试用例时,要使每个判断中每个条件的可能取值至少满足一次。
5.1.4判定-条件覆盖
(1)所有条件的可能取值至少执行一次
(2)所有判断的可能结果至少执行一次。
5.1.5条件组合覆盖
设计测试用例时,所有可能的条件取值组合至少执行一次。
5.1.6路径覆盖
设计足够多的测试用例覆盖程序中所有可能的路径。
5.2基路径测试
5.2.1程序环路复杂性
方法一:通过控制流图的边数和节点数计算。
设E为控制流图的边数,N为图的节点数,则定义环路复杂性为V(G)=E-N+2。
方法二:通过控制流图中判断节点数计算。
设P为控制流图中的判顶点数,则有V(G)=P+1。
方法三:讲环路复杂性定义为控制流图中的区域数。
5.2.2基路径测试方法
(1)根据详细设计或者程序源代码,绘制出程序的程序流程图。
(2)根据程序流程图,绘制出程序的控制流图。
(3)计算程序环路复杂度。
(4)找出独立路径。
(5)设计测试用例。
第六章 单元测试
涉及实验三、实验四
单元测试通常由开发人员进行。
基本单元本身不是一个独立的程序,自己不能运行要靠其它部分来调用和驱动
驱动模块(Driver):被测基本单元的主程序,它接收测试数据,并把数据传送给被测单元,最后输出实测结果
桩模块(Stub):用来代替被测基本单元调用的其他基本单元
6.1插桩
显示插桩
@Test
public void testAdd_mock() {
AddTwoFun mockTwo = mock(AddTwoFun.class); // 建立mock对象
AddThreeFun testObj = new AddThreeFun();
testObj.addTwo = mockTwo;
int a = 50;
int b = 60;
int c = 30;
int exp = 140;
Mockito.when(mockTwo.add(50, 60)).thenReturn(110); // mock方法
int act = testObj.add(a, b, c);
Assertions.assertEquals(exp, act);
//Assert.assertEquals(0.11, 0.05, DELTA);
Mockito.verify(mockTwo).add(50, 60);// mock调用验证
}
注解插桩
@Mock
AddTwoFun addTwo;
@InjectMocks
AddThreeFun testObj = new AddThreeFun();
@BeforeEach
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
}
@Test
public void testAdd() {
int a = 50;
int b = 60;
int c = 30;
int exp = 140;
Mockito.when(addTwo.add(50, 60)).thenReturn(110);
int act = testObj.add(a, b, c);
Assertions.assertEquals(exp, act);
Mockito.verify(addTwo).add(50, 60);
}
第七章 集成测试
集成测试是每个模块完成单元测试后,需要按照设计是确定的结构图,将他们连接起来,进行集成测试,也成为综合测试。集成测试包括非增量测试和增量测试两种方式。
非增量型集成测试是先将所有软件模块统一集成后才进行整体测试,容易出现混乱,不宜采用。
增量型集成测试是从一个模块开始,测一次添加一个模块,边组装便测试。可以更早发现模块间接口错误。
7.1基于功能分解的集成
7.1.1自顶向下集成
按照系统层次结构图,以主程序模块为中心,自上而下按照深度优先或者广度优先策略,对各个模块一边组装一边进行测试。
自顶向下集成步骤:
(1)以主控模块作为测试驱动模块,把对主控模块进行单元测试引入的所有桩模块用实际模块替
(2)依据所选的集成策略,每次只替代一个桩模块
(3)每集成一个模块立即测试一遍
(4)只有每组测试完成后,才着手替换下一个桩模块
(5)为避免引人新错误,须不断地进行回归测试
从第(2)步开始,循环执行上述步骤,直至整个程序结构构造完毕
7.1.2自底向上集成
从系统层次结构图的最底层模块开始进行组装和集成测试的方式。
自底向上集成步骤:
(1)从最底层的模块开始组装,组合成一个能够完成某个子功能的构件;
(2)编制驱动程序,协调测试用例的输入与输出;
(3)测试集成后的构件
(4)使用实际模块代替驱动程序,按程序结构向上组装测试后的构件;
(5)重复上面的第二步,直到系统的最顶层模块被加人到系统中为止。
7.2基于调用图的集成
基于调用图的集成有两种:
(1)成对集成
(2)相邻集成
7.2.1成对集成
成对集成的思想就是免除桩/驱动器开发工作,使用实际代码来代替桩/驱动器。
成对集成的方法就是对应调用图的每一个边建立并执行一个集成测试会话。
7.2.2相邻集成
相邻节点:
有向图中,节点邻居包括所有直接前驱节点和直接后继节点
相邻集成:
(1)可大大降低集成测试的会话数量,并可避免桩和驱动器的开发
(2)相邻集成本质上是三明治集成
(3)相邻集成具有“中爆炸”集成的缺陷:隔离困难
第八章 系统测试
8.1性能测试
8.1.1影响性能测试的因素
性能测试需要模拟实际用户负载来测试系统,包括:反应速度、最大用户数、系统最优配置、软硬件性能、处理精度等等。
目标:对产品的性能进行测试,检验是否达标、是否能够保持
方法:覆盖系统的性能需求,一般和负载测试结合使用
工具:在需要大访问量时候尤其需要使用工具
8.1.2性能测试流程
8.2兼容性测试
兼容性测试(CompatibilityTesting)即测试软件在一个特定的硬件/软件/操作系统/网络等环境下的系统能否正常运行
目的:检验被测软件对其它应用软件或者其它系统的兼容性比如在对一个共享资源(数据、数据文件或者内存)进行操作时,检测两个或多个系统需求能否正常工作以及相互交互使用。
兼容性包括硬件兼容、软件之间兼容、数据之间兼容。
8.3web系统性能测试内容
压力测试通常需要辅助工具的支持。
第九章 面向对象软件的测试
无考点
第十章 自动化测试
10.1测试工具分类
LoadRunner是一种适用于各种体系结构的自动负载测试工具,它能预测系统行为并优化系统性能。