定义:通过人工或自动的技术手段来检验软件系统是否满足规定的要求,并进行判断和评估的过程。
目的:验证软件是否满足需求,发现并减少软件缺陷,保障软件质量。
原则:
编写需求分析并评审→编写测试计划并评审→设计测试用例并评审→搭建测试环境、执行测试用例、提交缺陷报告→进行评估和总结
1. 测试需求分析
对需求进行评审、理解,分析需求点,确保各部门需求理解一致。
2. 测试计划制定
编写测试计划,测试计划包括测试的安排、时间节点、进度、人力及环境等,整体测试策略的制定,风险评估与预警,提前暴露问题等。
3. 测试设计阶段
根据需求分析设计和编写测试用例,并进行用例评审,查漏补缺。
4. 测试执行阶段
开发完成编码之后,提交测试,测试人员搭建测试环境,根据测试用例执行测试,提交缺陷报告并跟踪、记录,确保bug全部解决。
5. 测试评估,上线
进行测试评估、总结,验收通过后,部署上线,测试人员再进行线上功能验证,通过之后,发送测试报告。
软件测试工程师的工作内容
单元测试又称模块测试,是对软件的组成单元进行的测试。【例如:登录测试】
集成测试又称联合测试(联调)、组装测试、接口测试,是将程序模块采用集成策略组装起来,对系统的接口及集成后的功能进行正确性检测的测试工作。【例如:京东购物用微信支付】
对软件整个系统进行测试,包括对功能、性能以及软件所运行的硬软件环境等进行测试。时间大部分在系统测试执行阶段,包括回归测试和冒烟测试。【例如:QQ能不能注册、登录、聊天发消息(功能) ,人数太多会不会卡顿(性能)】
(1)回归测试(Regression Tesing)
回归测试指的在软件进行更新迭代之后,新增加的内容和原来的功能进行测试,以确认修改没有引入新的错误或导致其他代码产生错误。
在整个软件的过程中占有很大的工作量比重,软件开发的各个阶段都会运行多次回归测试。
(2)冒烟测试(Regression Tesing)
对一个硬件或硬件组件进行更改或修复后,直接给设备加电,如果没有冒烟就认为该组件通过了测试。
冒烟测试一般是开发人员开发完毕之后送给测试人员进行测试时,测试人员要先进行冒烟,用以保证基本功能是正确的,不会阻碍后续的测试。
验收测试也叫做交付测试,是部署软件之前的最后一个测试操作。
属于验收测试,是公司内部的用户在模拟实际操作环境下进行的测试(用户在开发环境下进行的测试)。α测试是由用户测试的,测试和开发人员不得参与。
目的:评价软件产品的FLURPS(即功能、局域化、可使用性、可靠性、性能和支持)
属于回归测试,指的是在不同场所下,最终用户在一个或者多个场所中进行测试。
介于开发方和用户方间组织的测试。
静态测试是指不运行被测程序本身,仅通过分析和检查源程序的语法、结构、过程、接口等来检查程序的正确性。根据需求文档,对代码的逻辑、结构、语法等进行检查、找错。【静态测试属于白盒测试】
动态测试指的是运行被测的程序。检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性的等性能,这种方法主要是由三部分进行组成的:编写测试用例、执行程序、分析程序运行结果。
大多数的软件测试就是属于动态测试的。
黑盒测试又称功能测试,测试中把被测的软件当成一个黑盒子,不关心代码的内部实现过程,只关心代码运行的最终结果。【源代码不可见,功能可见】
——主要应用于系统测试阶段
白盒测试又称结构测试,透明盒测试、逻辑驱动测试或基于代码的测试。白盒是指可以看见里面的代码,要分析研究源代码的实现过程等。【全部代码可见,功能不可见】 接口测试也是一种白盒测试。
——主要应用于单元测试阶段
灰盒测试是介于白盒测试与黑盒测试之间的一种测试,主要用于集成测试阶段。不仅关心输入输出结果,同时还要关心代码内部实现过程。【部分代码可见,功能不可见】
——主要应用于集成测试阶段
黑盒测试
白盒测试
手工测试是手动一个一个的输入用例,然后观察结果,属于比较原始但是必须的一种。
自动化测试就是将手工测试的过程转换成代码,让机器去执行。
测试人员把系统的所有模块组合起来,模拟用户实际运行过程,对满足用户需求的程序的所有功能进行测试。
界面测试(简称UI测试),对页面布局,颜色搭配,整体色调,风格的测试。
测试用户界面的功能模块的布局是否合理、整体风格是否一致、各个控件的放置位置是否符合客户使用习惯,此外还要测试界面操作便捷性、导航简单易懂性,页面元素的可用性,界面中文字是否正确,命名是否统一,页面是否美观,文字、图片组合是否完美等。
主要包含两个方面:应对小错误的测试和应对灾难性错误的测试。
文档测试关注的点:文档的术语、格式、正确性、完整性、一致性、易用性等。
兼容性测试主要指软件之间能否很好的运作,软、硬件之间能否发挥好,会不会影响导致系统的崩溃。
在每次迭代、更新、修改bug之后都要进行。最常见的就是浏览器的兼容性测试,因为不同的浏览器在解析css和js时会导致页面的显示不同。
易用性是交互的适应性、功能性和有效性的集中体现,看放不方便用户使用。
检查系统是否满足需求规格说明书中规定的性能。通常表现在以下方面:
测试软件应对恶意攻击的操作。
【如:WEB的安全测试、需要熟悉各种网络协议、防火墙、CDN、熟悉各种操作系统的漏洞、熟悉路由器等。】
测试程序的安装、卸载。
本地化测试的对象是软件的本地化版本。之前所有讲的都是基于本地化进行测试的。
软件的国际化和软件的本地化是开发面向全球不同地区用户使用的软件系统的两个过程。
本地化和国际化的软件测试的一些测试要点。
瀑布模型是所有其他模型的基础框架。瀑布模型每个阶段都只执行一次,是线性顺序进行的软件开发模式,适用于需求比较稳定的项目。
优点:计划周密,阶段性强,每个阶段较独立,看重前期的需求分析和后期的测试阶段。
缺点:测试在编码之后才进入,导致前期的问题后期才发现,失去及早纠正的机会。
一般在软件开发初期阶段,需求不是很明确时,采用渐进式的开发模式。螺旋模型是渐进式开发模型的代表之一,适合规模庞大、复杂度高、风险大的项目。
**增量:逐块增加,一部分一部分来。**先完成模块A,再模块B。
**迭代:反复求精的过程,先整体再细化。**先完成所有模块的基础功能(轮廓),再进行模块的升级和细化。
敏捷开发以用户需求为核心,采用迭代、循序渐进的方法进行软件开发。轻文档、轻流程、重目标,重产出。
V模型是瀑布模型的变种,左右每个阶段之间一一对应,左边是右边测试阶段的依据。
V模型流程是从上至下,从左到右。测试和开发是串行的。
单元和集成测试检测程序的执行是否满足软件设计的要求;系统测试检测系统功能、性能的质量 特性是否达到系统要求的指标;验收测试确定软件的实现是否满足用户需要或合同的要求。
W模型由两个V字型模型组成,分别代表测试与开发过程,克服了V模型的缺点,测试与开发是并行的关系,开发的同时进行验证和确认,即:测试与开发是同步进行的。
相对于V模型和W模型,H模型将测试活动完全独立出来,使测试流程形成了一个完全独立的流程,将测试准备活动和测试执行活动清晰地体现出来。
测试用例组成元素(具体元素视公司规定)
【以QQ的登录模块为例】
测试用例需要被开发、审阅、使用、维护和保存。
设计原则
设计方法
通俗来讲,将具有某种共同特征的数据集合进行划分。
等价类划分原则
【案例:找6-10位长度自然数】
【案例】
需求:通过边界值法验证标题长度的合法性
要求:标题大于0,小于等于30个字符
当输入很多,并且不同的输入组合对应这不同的输出,这个时候用因果图法来分析不同输入组合和输出之间的对应关系。(相当于逻辑图)
逻辑关系:恒等 与 或 非
【案例:淘宝618活动,订单满300,或者有红包,测提交订单后享受优惠。】
研究多因素多水平的一种方法,根据正交性选出最优的水平组合进行实验,用实验的结果来分析这个测试用例的结果。(选择最优的组合)
根据测试人员的直觉,知识,经验,判断软件的哪一块有问题,专门针对性的设计测试用例,适合作为一种补充设计测试用例的方法。
典型的应用是用业务流把各个孤立的功能点串起来,为测试人员建立整体业务感觉,从而避免陷入功能细节忽视业务流程要点的错误倾向。
【ATM机取款场景】
功能点:插卡——输入密码——输入钱数——取款(主要功能,核心流程)