一、介绍
软件测试是为了尽可能多地发现软件系统中的错误而不是证明软件的正确性。
1、软件缺陷是什么?
软件在使用过程中存在的任何问题都叫软件的缺陷,简称bug。
缺陷的判定标准
软件未实现需求说明书中明确要求的功能——少功能
软件出现了需求说明书中指明不应该出现的错误——功能错误
软件是现实的功能超出需求说明书指明的范围——多功能
软件未实现需求说明书中虽未明确指明但应该实现的要求——隐性功能错误
软件测试人员认为软件难以理解,不易使用,运行缓慢,用户体验不好——不易使用
缺陷的等级可以划分为:轻微、一般、严重、致命。
2、软件测试的定义
软件测试是为了发现错误而运行程序的过程。
测试是使用人工或自动的手段来运行或检测某个系统的过程,其目的在于检验它是否满足约定的需求或是比较预期结果与实际结果的差别。
3、软件测试的目的
为了发现软件中的错误。
以检验软件是否满足用户需求为目标。
一个成功的测试是发现了至今尚未发现的错误。
4、软件测试的原则
(1)要尽早并且不断地进行测试
(2)测试用例应由测试输入数据及与之对应的预期输出结果两部分组成
(3) 程序员应避免检查自己的程序
(4) 设计周密的测试用例
(5) 注意测试中错误集中的现象
(6) 严格执行测试计划,排除测试的随意性
(7) 对测试错误结果一定要有一个确认的过程
(8) 妥善保存测试计划、测试用例、出错统计和最终分析报告
二、软件测试生命周期(过程)
软件测试是由测试计划、单元测试、集成测试、系统测试、验收测试等组成的。
1、测试计划
软件测试伴随在如那件开发的整个生命周期。
软件生命周期:需求分析→系统设计→编码→软件测试→系统发布→软件运行使用→软件维护。
2、单元测试:最基本的测试活动,多采用 白盒测试 技术
测试对象软件设计的最小单位——模块。
单元测试的依据是详细设计,主要用于验证各个独立模块的功能正确性。
系统中多个模块可以并行地进行测试。
驱动模块: 负责提供测试输入,调用被测模块,并接收输出以验证功能正确性。
被测模块: 是单元测试的核心,直接被测试的代码模块。
桩模块: 用于模拟被测模块依赖的其他模块,帮助实现测试的隔离性。
3、集成测试
在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。
集成测试策略最主要的有三种:
大爆炸集成,自顶向下集成方式,自底向上集成方式。
4、系统测试
对最终软件系统进行全面测试。
(1)功能测试:检查产品是否达到产品需求说明书中规定的功能。
(2)性能测试
负载测试: 通过不断增加负载的方式,关注系统在正常工作情况下的性能瓶颈和负载能力。
压力测试: 关注系统在高负载或超出最大负载时的表现。
(3)安全测试
(4)强度测试
(5)健壮性测试
(6)用户界面测试
(7)兼容测试
(8)安装测试
(9)回归测试:根据修复好了的缺陷再重新进行的测试。目的是一方面验证以前出现过但已经修复好的缺陷不再重新出现;另一方面验证再修复缺陷的同时没有引入新的错误。
5、验收测试
软件系统的功能和性能满足用户需求。
Alpha测试:就是指内测,是在开发者环境进行的测试,环境是可控的,用户少,时间集中。
Beta测试:就是指公测,是在用户环境下进行的测试,环境不可控,用户比较多,时间不集中。
三、测试技术
1、代码检查
(1)代码会审
一组人阅读、讨论和争议对程序进行静态分析的过程。
(2)走查
以小组为单位进行代码阅读,区别是使用了计算机把测试数据沿程序的逻辑结构走一遍。
2、黑盒测试(功能测试)
代码不可见,UI功能可见
主要依据:用户需求规格说明书和详细设计说明书。
(1)等价类划分
有效等价类:有意义的,合理的输入数据所构成的集合。
无效等价类:不合理的或无意义的输入数据所构成的集合。
使用场景:有数据输入(编辑框)的地方。
例1.注册邮箱
邮箱名要求6~18个字符,可使用字母、数字、下划线、需以字母开头。
等价类表
输入条件 | 有效等价类 | 编号 | 无效等价类 | 编号 |
---|---|---|---|---|
6~18个字符 | 1 | 少于6个字符 多于18个字符 空 | 2 3 4 | |
邮箱名 | 包含字母、数字、下划线 | 5 | 除字母、数字、下划线外的特殊字符 非打印字符 中文字符 | 6 7 8 |
以字母开头 | 9 | 以数字或下划线开头 | 10 |
测试用例
编号 | 输入数据 | 覆盖等价类 | 预期输出 |
---|---|---|---|
1 | test_123 | 1、5、9 | 合法输入 |
2 | test | 2、5、9 | 非法输入 |
3 | test_123456789_123456789 | 3、5、9 | 非法输入 |
4 | NULL | 4 | 非法输入 |
5 | test&&123 | 1、6、9 | 非法输入 |
6 | test 123 | 1、7、9 | 非法输入 |
7 | test测试123 | 1、8、9 | 非法输入 |
8 | 123_test | 1、5、10 | 非法输入 |
(2)边界值分析
边界范围节点:选取正好等于、刚好大于、刚好小于边界的值作为测试数据
上点:边界上面的点(正好等于)
离点:离边界最近的点
内点:范围内的点
(3)错误推测法
根据经验,列举出程序中所有可能有的错误和容易发生错误的特殊情况,并根据它们设计测试用例。
(4)因果图法
因————原因,输入条件
果————结果,输出结果
因果图法就是通过画图的方法表达输入和输出的关系(因果关系)
Ci表示原因,通常置于图的左部;Ei表示结果,通常在图的右部。
例 某软件规格说明书包含这样的要求:第一列字符必须是A或B,第二列字符必须是一个数字,在此情况下进行文件的修改,但如果第一列字符不正确,则给出信息L;如果第二列字符不是数字,则给出信息M。
1) 根据题意,原因和结果如下:
原因:
1——第一列字符是A;
2——第一列字符是B;
3——第二列字符是一个数字。
结果:
21——修改文件;
22 ——给出信息L;
23——给出信息M。
2) 其对应的因果图如下:
11为中间节点;考虑到原因1和原因2不可能同时为1,因此在因果图上施加E约束。
(5)判定表驱动
解决什么问题?(多条件限制依赖关系如何测试)
实施——画表格——列出条件列出操作
3)根据以上因果图建立判定表。
(6)正交试验法
是研究多因素、多水平的一种实验方法,它利用正交表来对实验进行设计,通过少数实验代替全面的实验。
行数:正交表中的行的个数,即试验的次数,也是通过正交实验法设计的测试用例的个数。
因素:正交表中列的个数,即要测试的功能点。
水平数:任何单个因素能够取得的值的最大个数,即要测试功能点的输入值。
7因素,2水平,8行。
例 某所大学通信系共2个班级,刚考完某一门课程,想通过“性别”、“班级”和“成绩”这三个查询条件对通信系这门课程的成绩分布,男女比例或班级比例进行人员查询:
根据“性别”=“男,女”进行查询
根据“班级”=“1班,2班”查询
根据“成绩”=“及格,不及格”查询
按照传统设计——全部测试
分析上述测试需求,有3个被测元素,被测元素我们称为因素,每个因素有两个取值,我们称之为水平值(也就是2)。
如果是普通的全面测试,则如下(2^3=8次)
若采用正交测试
利用正交表设计测试用例,我们得到的测试用例个数是n=3*(2-1)+1=4(这个公司就是(因素数*(最大水平数-1)+1)),对于三因素两水平的刚好有L4(2^3)的正交表可以套用
于是用正交表试验法得出4个测试用例如下(正交测试表的类型一般都会给出来)
3、白盒测试(结构测试,单元测试):动态测试、静态测试
代码层面
(1)语句覆盖
设计测试用例,使得程序中每条语句至少被执行一次。
(2)判定覆盖
设计测试用例,使得程序中的每个判断的”真“和”假“都至少被执行一次。
(3)条件覆盖
设计测试用例,使得判定中的每个条件至少有一次取真值,有一次取假值。
(4)判定/条件覆盖
设计测试用例,使得被测程序中的每个判断本身的判定结果(真假)至少满足一次,每个逻辑条件的可能值也至少被满足一次。就是既满足判定覆盖,也满足条件覆盖。
(5)条件组合覆盖
设计测试用例,使得被测程序中的每个判定中条件结果的所有可能组合至少执行一次。
(6)路径覆盖
设计测试用例,覆盖程序中所有可能的路径。
4、设计测试用例
测试用例包括两部分:测试输入数据、预期输出数据。
四、习题集
1、针对水杯,设计测试用例
①外观:是否与图片宣传一致,是否美观、有没有明显划痕、形变
②密封性:颠倒、倾斜是否会漏水
③容量:实际容量是否与包装标注的一致
④使用便捷性:设计的手柄是否合理,重量是否适中,喝水是否方便
⑤保温性/保冷性:保温/保冷时长可以达到预期时长否
⑥耐用性:抗摔否
⑦安全性:使用的材质是否对人体有害,是否符合国家标准
⑧清洁性:测试水杯是否容易清洗掉污渍,杯口和杯身连接处是否容易清洁
⑨环保性:使用的材质是否可回收,是否符合环保标准
⑩杯盖开启性:杯盖易于开启,且密封性要好
2、输入三个数a、b、c分别作为三边的边长构成三角形。程序判断所构成的三角形类型。请为该程序 设计测试用例,满足判断覆盖。
三角形类型 | a | b | c |
---|---|---|---|
等边三角形 | 7 | 7 | 7 |
等腰三角形 | 7 | 7 | 5 |
一般三角形 | 3 | 4 | 5 |
非三角形 | 3 | 4 | 1 |
3、C/S:客户端/服务器
B/S:浏览器/服务器
4、冒烟测试
冒烟测试就是用较少的人,在较短的时间内,测试程序的主要功能,如果通过再进行正式的测试。
5、静态和动态测试
静态测试是不运行被测程序本身而寻找程序中可能存在的错误或评估程序代码的过程。通过分析或者检查源程序的语法、结构、过程、借口等来检查程序的正确性,找出问题。这些问题包括:参数不匹配、不适当的分支嵌套和循环嵌套、未使用过的变量、空指针的引用等。
文档的测试一般也是用静态测试。
静态测试可以用手工,也可以用工具实现。静态测试工具一般是对代码进行语法检查,找出不符合编码规范的地方,根据某种模型评价代码的质量,生成系统的调用关系图等,常见的工具有Telelogic公司的Logiscope、PR公司的PRQA等。
动态测试是运行被测试程序,输入相应的测试数据,检查运行结果与预期结果的差异,判定执行结果是否符合要求,从而检验程序的正确性、可靠性和有效性,并分析系统运行效率和健壮性等性能。
6、黑盒测试、灰盒测试和白盒测试
黑盒测试又称为功能测试、数据驱动测试或者基于规格说明书的测试,注重测试软件的功能需求。测试人员不关心程序具体如何实现,根据软件的规格对软件进行各种输入,观察软件的各种输出结果,发现软件的缺陷。因为这类测试不考虑软件的内部运作原理,因此软件对用户来说就像一个黑盒子。
灰盒测试是介于黑盒测试与白盒测试之间的测试方法,在执行白盒测试的时候考虑使用黑盒测试的方法。
白盒测试又称结构测试、逻辑驱动测试或基于程序代码的测试。根据软件内部的工作原理分析来进行测试,测试人员通过阅读程序代码或者通过使用开发工具中的单步调试来判断软件的质量。