一、软件测试定义、目的、原则
1.定义
定义一:维基百科
是在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否满足设计要求进行评估的过程。
定义二:IEEE
是使用人工或自动手段对系统运行或测试的过程,其目的在于检验系统是否满足规定的需求,或弄清预期结果与实际结果之间的差别。
get到这些点:
规定的条件--》一定的环境下(开发环境、测试环境、真实环境)
目的:衡量软件质量;是否满足规定的需求
方式:人工、自动化
周期:过程(测试需求分析、测试计划、测试设计、测试执行、测试i评估)
2.目的
软件测试为了发现程序存在的代码或业务逻辑错误
软件测试为了检验产品是否符合用户需求
软件测试为了提高用户的体验
3.原则——经验性原则
1.所有的测试活动都应以用户需求(软件需求规格说明书)为标准
2.应尽早地和不断进行软件测试,越早发现缺陷,修复缺陷的成本就越低
3.程序员应避免检查自己的程序,测试人员应避免执行自己写的测试用例
4.尽量避免测试的随意性
5.测试的"杀虫剂效应"——改变思维方式、操作习惯
6.完全(穷举)测试是不可能的,测试需要终止——时间,成本,组合太多(无法全部覆盖)
7.二八原则(聚集效应)——大部分bug集中在少部分的模块
8.对错误结果要进行一个确认过程
9.制定严格的测试计划
10.设计测试用例时应该考虑到合法的输入和不合法的输入,以及各种边界条件,特殊情况下还要知道极端状态和意外状态
11.妥善保存测试过程中的所有文档
二、软件测试对象
≥软件、系统、项目、产品―》程序、文档和数据
1.程序(源码、模块、部件、软件)
2.文档(需求规格说明书、概要设计说明书、详细设计说明书、用户手册(帮助文档)等)
3.数据(字符、图片、视频、音频等等)
60%以上的软件错误并不是程序错误,而是分析和设计错误。
测试概念扩大化,提倡软件全生命周期测试的理念。
三、测试分类(策略)
1、按测试技术划分
白盒测试、黑盒测试、灰盒测试
白盒测试&黑盒测试
黑盒测试:不关心软件内部,只关心输入输出,主要测试依据是需求文档。
白盒测试:关心软件内部设计和程序实现,主要测试依据是设计文档。
灰盒测试:灰盒测试介于白盒测试与黑盒测之间的测试—―接口测试
关注输出对于输入的正确性;同时也关注内部表现
2、按测试阶段划分
单元测试、集成测试、系统测试、验收测试(正式验收测试、Apha测试、Beta测试)
【软件测试阶段】
单元测试、集成测试、系统测试、验收测试是“从小到大”、“由内至外”、“循序渐进"的测试过程,体现了“分而治之”的思想。
【软件测试阶段详解】
单元测试的粒度最小,一般由开发小组采用白盒方式来测试,主要测试单元是否符合“设计”。
集成测试界于单元测试和系统测试之间,起到“桥梁作用”,一般由开发小组采用白盒加黑盒的方式来测试,既要验证“设计”又要验证“需求”。
——模块(多个单元组成,单元与单元之间的调用与被调用,通道==》接口测试)
系统测试的粒度最大,一般由独立测试小组采用黑盒方式来测试,主要测试系统是否符合“需求规格说明书”——系统
验收测试与系统测试非常相似,主要区别是测试人员不同,验收测试由用户执——黑盒测试
【α测试/β测试】
大型通用软件,在正式发布前,通常需要执行Alpha和Beta测试。
目的是从实际终端用户的使用角度,对软件的功能和性能进行测试,以发现可能只有最终用户才能发现的错误。
Apha测试: α测试是用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的测试。这是在受控制的环境下进行的测试。——游戏内测
Beta测试: β测试是用户在实际使用环境下进行的测试。与α测试不同的是, 开发者通常不在测试现场。因而,β测试是在开发者无法控制的环境下进行的软件现场应用。——游戏公司
正式验收测试:用户在实际使用环境下进行的测试。
3、被测试对象是否运行划分
动态测试、静态测试(文档检查、代码走查、界面检查)
【软件测试阶段对照表】
静态测试指不运行程序,对程序和文档进行分析与检查
程序检查:程序员交叉检查彼此的代码--》发现代码层面的问题
文档检查:文档测试(术语、图片、操作流程)--》测试人员
动态测试
动态测试是指通过人工或使用工具运行程序进行检查分析程序的执行状态和程序的输出>白盒测试、黑盒测试、灰盒测试都属于动态测试
【代码走查(走读)实践】
请走读下列Bash源代码,找出里面的问题,并提供修改建议
代码需要实现的功能:提示用户输入确认信息(Y),如果用户入的是Y,程序输出Yes,否则输出No
【需求评审实践】
需求:系统中有一个日期输入框,根据实际业务,有下列需求:
1.要求用户输入以年月表示的日期
2.日期限定在1990年01月~2049年12月
3.日期由6位数字字符组成,比如20140713
4.前4位表示年
5.后2位表示月
4、按不同的测试手段划分
手工测试、自动化测试
【手工测试&自动化测试】
5.按软件测试质量特性划分
【系统测试类型】
功能测试、性能测试、界面测试、安全测试、兼容性测试、易用性测试、压力测试、负载测试、恢复测试
功能测试基本方法
构造正常/异常输入检查输出是否与期望的相同。如果两者不一致,即表明功能有误
功能测试重点在于正确的理解用户需求和如何构造有效的测试数据。
性能测试
测试软件处理业务的速度
检验性能是否符合需求
得到某些性能数据供人们参考(例如用于宣传)
【界面测试】
我们去关注产品界面UI显示,颜色搭配,布局,偏主观性。可以参考同类型的软件
【安全性测试】
是指防止系统被非法入侵的能力,既属于技术问题又属于管理问题
信息安全性测试有如下步骤:
1.为非法入侵设立目标,例如“盗窃某个文件”或“更改数据库记录”等
2.邀请(或悬赏)一些人扮演黑客,让他们想尽办法入侵系统,实现“目标"
3.如果有人成功了,请他详述入侵的过程
【兼容性测试】
又把它叫做平台的移植性,不同操作系统,不同的分辨率,不同的浏览器
【易用性测试】
主观测试,好不好用,是否容易使用,是否符合大众习惯(比如:是在左边、否在中间、取消在最右边)
【压力测试】
属于性能测试的一种,对于系统不断的施加压力,发现它的弱点在哪里,然后修复的一个过程。
【负载测试】
也是属于性能测试的一个内容
【恢复测试】
恢复能力,比如系统蓝屏,会有倒计时重启恢复。
充当用户暴力的使用,到崩溃,能否恢复,恢复的时间是多少。
6.其他测试
主要讲三个,冒烟测试、回归测试、探索性测试(测试思维)
【冒烟测试】
这一术语源自硬件行业。对一个硬件或硬件组件进行更改或修复后,直接给设备加电。如果没有冒烟,则该组件就通过了测试。
在软件中,“冒烟测试”这一术语描述的是在将代码更改嵌入到产品的源树中之前对这些更改进行验证的过程。在检查了代码后,冒烟测试是确定和修复软件缺陷的最经济有效的方法。冒烟测试设计用于确认代码中的更改会按预期运行,且不会破坏整个版本的稳定性。
v01-->冒烟测试--》通过--》正式系统测试--》出具版本报告--》pass-->验收测试--》fail--》打回给开发,修改bug,重新发版本--》
V02(修改bug,增加新的需求)-->冒烟测试--》通过--》--》回归测试(1:验证bug是否被修改,2:提交bug的周边的功能进行简单测试,确认是否有引入新的bug)--》正式系统测试--出具报告
V03(修改bug)-->冒烟测试--》通过--》--》回归测试(1:验证bug是否被修改,2:提交bug的周边的功能进行简单测试,确认是否有引入新的bug)--》出具版本报告.....
后期:基本稳定,bug没有修改
【回归测试】
回归测试是指修改了I旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。自动回归测试将大幅降低系统测试、维护升级等阶段的成本。
回归测试作为软件生命周期的一个组成部分,在整个软件测试过程中占有很大的工作量比重,软件开发的各个阶段都会进行多次回归测试。
验证bug是否被修改是否引入新的bug
【探索性测试】
测试人员在测试程序中可以天马行空地想怎么测就怎么测,利用应用程序所提供的信息自由发挥,没有限制,不受任何约束地探索程序的各种功能。——项目后期,时间充足,人员技术能力比较高。
那么这个就是本章《软件测试分类体系,系统学习》所有的内容
在这一章中间,伙伴们重点要掌握的第一个是概念,软件测试的定义、目的。
软件测试经验性原则,是我们在软件测试工作中需要去遵循的,都是前辈们留下来的宝贵经验。
对于测试分类,这一系列的类别中间,工作中可能你们都会用到,至少你要知道有哪些类别,在哪一个阶段用哪一种技术,。
兼容性测试测什么,界面测试是测试什么,这些都是必须要掌握的。