什么是软件测试
有人喜欢创造世界,他们做了开发者;有的人喜欢开发者,他们做了测试员。什么是软件测试?软件测试就是一场本该在用户面前发生的灾难提前在自己面前发生了,这会让他们生出一种救世主的感觉,拯救了用户,也就拯救者这个软件,避免了他们被卸载的命运。
正向思维:验证程序是否正常运行,以及是否达到了用户预期的需求
逆向思维:通过执行测试用例发现程序的错误和缺陷
(一)定义
使用人工或自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。
(二)目的
狭义
就是找Bug广义
- 找出软件中潜在的错误和缺陷,通过修复错误和缺陷提高软件的质量,回避软件发布后因缺陷或错误带来的商业分风险- 为了检验产品是否符合用户需求- 为了提高用户的体验 流畅度、性能范畴五、软件生命周期
需求采集- 潜在性,看是否有价值
- 岗位:商业分析师/需求部门
计划
项目的计划(需求分析、研发设计、测试部署等等的工作时间计划)。由项目经理完成。## 需求分析搜集客户需要,形成需求文档。软件需求规格说明书(SRS)software requirements specification
设计 - 概要设计(HLD)High Level Design
- 详细设计(LLD)Low Level Design
编码
开发编写代码## 测试进行测试。手工测试、自动化测试、性能测试等等,但不是一个项目任何测试类型都要做。上线、部署、运维软件维护是软件生命周期持续时间最长的阶段,在软件开发完成并投入使用后,由于多方面的原因,软件不能继续适用用户的需求,要延续软件的使用寿命,就必须对软件进行维护。软件的维护主要包括纠错性维护和改进性维护两个方面。
QA和QC的差别
QA:品质保证- 从流程角度把控质量,看的是整个流程有没有问题,有没有执行到位。跟踪开发/测试的代码、文档进度、质量。
QC:品质控制- QC就是测试人员所做的。测试从技术技术角度保证软件质量。
七、软件项目组人员组成
- 项目经理
- 需求分析人员
- 设计人员 UI- 开发人员
前端、后端- 测试人员 手工测试人员、自动化测试人员- 配置管理人员 不一定有单独的人员 - SQA() 质量管理。测试从技术技术角度保证软件质量,SQA是从流程角度把控质量,跟踪开发/测试的代码、文档进度、质量。
常见项目架构
软件开发组
- 开发经理
- 分析人员
- 设计人员
- 开发人员
软件测试组 - 测试经理
- 测试人员
配置管理组- 配置经理 - CMO(配置管理员)
软件测试分类
(一)产品软件和项目软件
- 产品软件(产品经理):面向大众开发的产品,软件所有权归开发方所有,通过投入市场来盈利。比如微信,QQ就是产品。
- 项目软件(项目经理):客户私人订制,软件所有权归出资方(甲方)所有。比如A企业想要一个电商网站。B企业就给做一个电商网站
(二)按测试技术划分(方法)
根据代码的可见度来决定
1.黑盒测试(数据驱动测试,功能测试)
不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。**因此黑盒测试又叫功能测试或数据驱动测试。
- 系统测试属于黑盒测试
- 主要通过软件界面的交互来进行
2.白盒测试(逻辑驱动测试,结构测试)
已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否已经过检查- 玻璃盒子/透明盒子
- 单元测试属于白盒测试
- 覆盖率—单个或者所有用例,对代码/分支
3.灰盒测试- 大致知道代码逻辑,不需要看懂所有代码
- 接口测试属于灰盒测试
(三)测试类型
静态- 不涉及代码的运行
不运行被测程序本身,通过评审文档和阅读代码等方式测试软件 > 怎么个阅读法 就是让代码在你大脑运行,看是否有错误。黑盒测试人员一般不参与。开发的代码你不一定懂,比如Java、C/C++、Js等语言
动态- 运行代码
通过运行被测程序,检查运行结果与预期结果的差异,通常使用白盒和黑盒测试从不同的角度设计测试用例来查找代码中的错误 > 怎么个运行 比如测试环境需要部署在Linux中,那么代码就在运行
(四)按不同的测试手段划分
手工不依赖代码,完全依赖于人的操作
自动化- 利用测试脚本来驱动被测试对象完成的测试- 工具或代码实现- 哪些适合自动化测试?(经典面试题)
- 长期稳定,需求不容易变更,大量重复性工作
- 常用于回归测试
- 人力无法实现的场景
(五)按测试阶段划分
单元测试
- 主要测试程序代码,为了确保各单元模块被正确的编译,比如有具体到模块的测试,也有具体到类、函数、方法的测试等等。开发自测(白盒测试)
集成测试
- 首先单独测试各个模块。将所有模块组合在一起的测试叫集成测试。
验证组装后功能及模块间接口是否正确、数据能否正常传递接口测试
系统测试
- 把软件系统搭建起来,按照软件需求规格说明书中所要求,测试软件其性能功能等是否和用户需求相符合,在系统中运行是否存在漏洞等。最重要,最常见(Web,App)
用户验收测试
- 验收测试根据合同、《需求规格说明书》或《验收测试计划》对成品进行验收测试。分为α测试、β测试、γ测试- 主要就是用户在拿到软件的时候,在使用现场,根据前边所提到的需求,以及规格说明书来做相应测试,以确定软件达到符合效果的。
α测试alpha
部分客户或客户代表,来我们公司,然后在公司开发环境进行验收,由公司人员演示项目功能,开发在旁边记录反馈的结果
开发不放心测试人员测试,把客户指定到开发环境下,现场挑正常功能测试(预先测试没问题的功能)。不希望测试人员牵扯进来,测试一旦测试出Bug,现场就尴尬。
产品成熟度不够
β测试beta将软件部署到客户的正式环境,让所有用户使用软件,进行验收测试。与α测试不同 的是,β测试时开发者通常不在测试现场。因为β测试是在开发者无法控制的环境下进行的软件现场应用。
γ测试gamma发行前的最后一版测试,是第三个阶段,此时产品已经相当成熟,只需在个别地方再做进一步的优化处理即可上市发行
交付测试- 是应用于项目的。和验收测试是有区别的- 项目部署在用户环境下进行测试。用户也有可能有自己的测试团队,也会聘请第三方测试团队进行测试
其他测试
冒烟测试
- 主要看基本功能是否正常- 在新版本出来的时候,将软件的全部功能过一遍,功能可以正常进行不会影响测试进度,这个版本就可以真正测试了。主要确认新的版本是否存在致命性bug。
回归测试
- 已经成型,而且已经进行过一轮测试,要对原有的功能进行测试,或者是对原有测试用例还有缺陷进行测试的行为,就是回归测试。
- 新版本里面运行上一个版本的用例,看一下是否被修复或者新的缺陷
测试时发现bug ->开发修改 ->打了新包 ->重新测试,保证程序在修正了bug之后正常运行,且不会带来新的错误
冒烟测试和回归测试的区别
冒烟测试:
新版本验证测试,主要确认新的版本是否存在致命性bug,功能可以正常运行,不会影响下一轮测试,不要求覆盖面有多广,但是要保证被测对象的主功能点得到测试,还要保证所有被修改过以及修改相关的功能都是可用的,若都通过则可以进行系统测试
回归测试:
是软件维护阶段对软件修改后进行的测试,指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误
mokey测试
本地化测试
国际化测试
基于协议的测试
- http
- ftp
系统测试的16个测试策略
功能测试,安全测试,容量测试,性能测试,压力测试,稳定性测试,可用性测试,健壮性测试,GUI测试,安装测试,配置测试,异常测试,备份测试,文档测试,在线帮助测试,网络测试