目录
软件测试基础概念
1、什么是软件测试?其目的是什么?你怎么看待软件测试?
2、软件测试的生命周期?各阶段对应的工作?
3、测试计划和测试方案的内容和区别?
4、需求评审的内容?参与人员?测试人员为什么要参与需求评审?
5、测试用例的设计方法有哪几种,分别对应什么典型业务功能?
6、缺陷的级别及管理流程?
7、测试准入和通过的标准?
8、测试模型有哪些?
9、如何保证测试覆盖率?测试用例评审方式,如何组织,为什么要评审,评审内容?
10、敏捷模型?瀑布模型?
11、测试报告的内容有哪些?
12、测试过程中如果发现不可重现的缺陷怎么处理?
13、测试流程是什么?
14、测试方法有哪些?
15、测试类型有哪些?
16、α测试和β测试的区别?
17、什么是敏捷测试?什么是探索性测试?
18、V模型和W模型的区别?
19、何为上线?之前工作中上线是怎么做的?
20、测试用例的内容、优先级定义、以及如何编写?
21、如何测试一个水杯?
22、拆分需求注意事项?
26、scrum模型中的一些特殊术语?
27、把你熟悉的一个游戏简单分析如何进行测试?
28、如何搭建测试环境?
29、app和web的测试环境有什么区别?
30、系统项目的构成?
31、如何构造测试数据?构造测试数据的方式有哪些(接口测试内容)?
32、如何确认测试数据的正确性?
33、你们测试是否与开发共用一个环境?如果是,如何保证测试结果不受影响?
40、怎么提交一个高质量的缺陷记录?(缺陷报告有哪些内容?)
是为了发现错误而执行程序的过程。在软件投入运行前,对软件需求分析、设计规格说明和编码的最终复审,是软件质量保证的关键步骤。
目的是暴露程序中的错误。发现测试对象与预期的差异。具体地不同测试阶段对应不同测试目的。
软件测试工作者要站在用户的额角度思考问题,从用户的实际使用环境、习惯着手验证被测对象应用表现。与软件开发的创造性思维不同,软测活动的思维模式则是破坏性的通过构建正常、异常输入去考验被测对象的健壮性。测试工作是一项极其重要的质量保证活动。因为测试部门是软件发布质量把控的出口,又可能是用户意见反馈的入口。
测试周期是指从测试项目计划建立到BUG提交的整个测试过程,包括软件项目测试计划,测试需求分析,测试用例设计,测试用例执行,BUG提交五个阶段。软件测试周期与软件生命周期并行,存在于软件生命周期的各个阶段。
需求分析阶段:测试人员了解需求、对需求进行分解、分析,得出测试需求。
测试计划阶段:根据需求编写测试计划/测试方案。确定测试范围,测试通过的标准,测试的时间、人力、物力、资源、风险等。输出测试计划文档
测试设计、测试开发阶段:测试人员搭建测试用例框架,根据需求和设计编写一部分测试用例。输出测试方案文档。
测试执行阶段:测试执行阶段是软件测试人员最为重要的工作阶段,根据测试用例和计划执行测试。
测试评估阶段(BUG提交):在执行的过程中记录、管理缺陷,测试完成后编写测试报告,进行测试评估。
测试计划确定测试范围,测试通过的标准,测试的时间、人力、物力、资源、风险等;
测试方案确定测试的方法、类型;确定用例设计的方法,缺陷管理流程;缺陷严重程度的划分、用例格式等。
测试计划一般由测试经理、测试主管或项目测试负责人制定,属于管理文档,解决的是做什么的问题。测试方案由测试工程师设计,属于技术文档,解决的是怎么做的问题。
内容:同步产品对于需求的详细设计,收集大家对于需求的各种反馈。
参与人员:产品、设计、研发、运营,测试等其他岗位的人
当面同步需求,对于需求的合理性、全面性的反馈。
等价类划分
边界值分析
判定表驱动分析
判定表通常由四个部分组成。
1)条件桩(Condition Stub):列出了问题得所有条件。通常认为列出的条件的次序无关紧要。
2)动作桩(Action Stub):列出了问题规定可能采取的操作。这些操作的排列顺序没有约束。
3)条件项(Condition Entry):列出针对它左列条件的取值。在所有可能情况下的真假值。
4)动作项(Action Entry):列出在条件项的各种取值情况下应该采取的动作。
因果图法
采用因果图法设计测试用例的步骤:
1)分析软件规格说明描述中, 那些是原因(即输入条件或输入条件的等价类),那些是结果(即输出条件), 并给每个原因和结果赋予一个标识符。
2)分析软件规格说明描述中的语义,找出原因与结果之间, 原因与原因之间对应的关系,根据这些关系,画出因果图。
3)由于语法或环境限制, 有些原因与原因之间,原因与结果之间的组合情况不可能出现,为表明这些特殊情况, 在因果图上用一些记号表明约束或限制条件。
4)把因果图转换为判定表。
5)把判定表的每一列拿出来作为依据,设计测试用例。
场景设计
错误推测法
致命(Uregent):主流程无法跑通,系统无法运行,崩溃或业务中断,应用模块无法启动或异常退出,主要功能模块无法使用。如:1.内存泄漏;2.严重的数值计算错误;3.系统容易崩溃;4.功能设计与需求严重不符;5.系统无法登陆;6.循环报错,无法正常退出。
严重(very high):影响系统功能或操作,主要功能存在严重缺陷,但不会影响到系统稳定性。如:1. 功能未实现;2.功能存在报错;3.数值轻微的计算错误
一般(Medium):界面、性能缺陷。如:1.边界条件下错误;2.容错性不好;3.大数据下容易无响应;4.大数据操作时,没有提供进度条
提示(Low):易用性及建议性问题。如:1.界面颜色搭配不好;2.文字排列不整齐;3.出现错别字,但是不影响功能;4.界面格式不规范。
1、测试人员填写bug并(Assign)给测试负责人,状态为New;
2、测试负责人(review)缺陷。主要检查报告规范,以及确认bug。若是有效的bug,状态变化为open,并分配给开发人员;若bug无效则指派(Assign)回给测试人员,bug状态依旧为new
3、开发人员根据缺陷描述确认是否时缺陷,若是则进行修复,修改完成并进行单元测试后,将bug的状态变为fixed,在comment中说明修改方法,并指派给缺陷发现人。若不是缺陷或者延期修改的,将bug状态变化为Rejected,同时也在comment中注明原因。
4、测试人员每天查看自己提交的bug的状态变化,应该成为每个测试人员的例行行为;
5、当bug的状态变为fixed时,测试人员打开该bug,开始对该bug进行回归测试;如果该bug回归测试通过,则状态变为closed。否则bug的状态变为reopen(必须说明reopen、closed状态变化原因或者操作过程);
6、若对(Reject)的缺陷进行再次确认后测试人员认为是缺陷,则需(Reopen)缺陷至开发人员出,并comment原因。
7、如果回归测试通过,可是修改的同时又引入新的bug,则重新提交bug,状态为new。如果需要的时候注明相关联的bug号;
8、只有当所有的bug状态为closed,才可发布版本。
注:每当bug状态改变后,必须给出相应的注释和说明,以便查看bug生命周期的变化情况。
缺点有:测试介入较晚,滞后于研发,如果发现前期问题,修复成本非常高;不利于需求的变更;用户只能在项目交付时才能拿看到成品
缺点:需求、设计、编码等活动被视为串行的,同时,测试和开发活动也保持着一种线性的前后关系,上一阶段完全结束,才可正式开始下一个阶段工作。这样就无法支持迭代的开发模型。对于当前软件开发复杂多变的情况,W模型并不能解除测试管理面临的困惑。
缺点:管理型要求高、要求能够很好的定义每个迭代的规模、测试就绪点分析困难
测试覆盖率:
1、消除产品、开发、测试三方对需求文档理解的偏差
2、保证每个测试人员的质量标准与项目要求标准达成一致;
3、为了减少测试人员执行阶段做无效工作;(执行无效case,提交无效问题)
4、集多人的思想来提高测试的覆盖率。
内容主要有:需求评审、需求实现流程图评审、测试大纲评审、测试用例检查
详见题8
测试报告的内容可以总结为以下目录:
· 首页:标题(报告名称+测试范围)、日期、版本变化历史等
· 引言:目的、背景、缩略语、参考文献
· 测试概要:测试方法(黑盒白盒)、范围(测试用例设计)、测试环境、工具
· 测试结果与缺陷分析:功能、性能(覆盖分析、缺陷曲线图等)
· 测试结论与建议:项目概况、测试时间 测试情况、结论性能汇总
· 附录:缺陷统计
不可重现的原因主要有:测试环境不一致,测试配置不一致、内存泄露、数据接口不一致等
解决:1. 测试环境配置充分细致:严格核对要求,充分考虑环境变化。另外可以使用Ghost对硬件或某个分区进行镜像备份。
2. 捕获系统日志,分析异常信息:测试人员应养成记录系统错误日志的习惯,保留系统在出错时的真实状态。比如将IE浏览器高级选项设置为“显示每个脚本错误的通知”。
3. 监测系统状态,异常及时告警:系统运行监测的一个重要内容是需要及时反馈系统运行异常,并提供异常报告。
4. 测试数据翔实,易于追溯:软件测试开始前,必须制定完整的测试用例,辅以详细的测试数据,并明确测试数据的操作步骤和每一步的预期结果,这样,当软件出现问题,方便重现和定位。
即测试周期,详见第二题
黑盒测试:只关注输入和输出,不关注内部逻辑,是基于需求规格说明书的功能测试。主要验证被测对象的质量及外部特性(功能、性能、界面)。
白盒测试:只关注代码的内部逻辑结构,是结构测试、逻辑驱动测试,是基于程序代码内部构成的测试。单元测试中就常使用白盒测试。
灰盒测试:关注模块之间的数据交互,介于白盒、黑盒之间。同时兼顾被测对象的外部特性和内部结构。如关注日志的集成测试、性能测试和自动化测试
基于风险的测试:指评估测试的优先级。在测试中,首先应该做的是高优先级的测试,如果时间精力不够,低优先级就可以暂时不做。对于一个用户很少用到的功能,出问题的概率很小,就算出了问题,影响也不是很大,可以考虑不做测试。
基于模型测试:指用语言将一个系统的行为描述出来,从而定义出它可能的形态以及形态之间的转换关系,即状态转换图。
功能测试:也叫黑盒测试,主要验证软件业务需求实现与否的一项测试活动。其意义是便于用户理解。
主要检查被测对象是否存在以下3种错误:1、是否有不正确、遗漏或多余的功能。2、是否满足用户需求和系统设计的隐藏需求。3、是都对输入做出正确的响应,输出结构能否正确展示。
性能测试:通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。
负载测试和压力测试都属于性能测试,两者可以结合进行。
其意义是因为现实情况中资源总是有限的。目的是验证系统是否具有宣称的能力
通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。
主要关注cpu、内存、读写(响应速度、并发数、业务成功率和资源占用情况)
界面测试:界面是软件与用户交互的最直接的层,界面的好坏决定用户对软件的第一印象。
另外有兼容性测试、安全测试、可靠性测试、可用性测试、移植测试、维护测试、确认测试、回归测试等
两者都属于验收测试,以用户为主、有用户参与
α测试:在开发环境下进行,测试环境受控,开发在场
β测试:在实际使用环境下(生产环境)进行,测试环境不受控、开发不在场
敏捷测试:是适应敏捷方法而采用的新的测试流程、方法和实践,对传统的测试流程有所剪裁,有所不同的侧重,例如减少测试计划、测试用例设计等工作的比重,增加与产品设计人员、开发人员的交流和协作。在敏捷测试流程中,参与单元测试,关注持续迭代的新功能,针对这些新功能进行足够的验收测试,而对原有功能的回归测试则依赖于自动化测试。由于敏捷方法中迭代周期短,测试人员尽早开始测试,包括及时对需求、开发设计的评审,更重要的是能够及时、持续的对软件产品质量进行反馈。简单地说,敏捷测试就是持续地对软件质量问题进行及时地反馈
探索性测试:强调测试过程中要有更多的发散思维,抛弃繁杂的测试计划和测试用例设计过程,强调在碰到问题时及时改变测试策略。是用户故事测试和自动化回归集的重要补充。由于没有测试脚本,可以使你的测试超出各种明显已经测试过的场景。探索测试将学习,测试设计和测试执行整合在一起,形成一种测试方法。探索性测试的最大特色是在对测试对象进行测试的同时学习测试对象并设计测试,在测试过程中运用获得的关于测试对象的信息设计新的更好的测试。其基本过程如(环节间无绝对顺序):
识别软件系统的目的;
识别软件系统提供的功能;
识别软件系统潜在的不稳定的区域;
在探索软件系统的过程中记录关于软件的消息和问题;
创建一个测试纲要,使用它来执行测试。
v模型:测试往往被加在开发过程的后半部分,测试对象只有程序本身,前期面向程序,后期面向用户。适合工程量小、人力投入少的情况
w模型:测试和开发是同时进行的,测试对象除程序外还有需求、设计等。
上线:软件具备正式运行生产的所有必要条件,并且完成发布工作
流程:上线前准备:1、确定上线策略(上线顺序、修复数据策略、旧数据分析)
2、写上线申请邮件(数据配置、上线注意点)
3、配置线上环境数据
上线:一般上线的权限只有几个人有,所以上线的人员是固定的,上代码时需要先将线上环境的job停掉,我们也是用jenkins进行自动化部署,只是需要人为的打版号、标签,部署版本,停Djob任务,上线完全之后,启动Djob任务等。
上线后:1、灰度测试
2、监控线上数据
全文链接:软件上线前后测试需要做哪些事情? - 知乎
实例:项目上线流程 - 知乎
内容:
+ 用例编号(用例id)
+ 一般使用 系统-测试级别-模块-001 --- 例子:CRM-ST-客户管理-新增客户-001
+ 测试标题(用例标题)---- 验证XXXX 通过/不通过---肯定的语气
+ 测试项(所属模块)
+ 用例属性(测试类型)--一般为功能测试
+ 重要级别(优先级)---- 1-4级或者 极高-高-中-低
优先级定义:
+ 极高---- 冒烟(主业务流程)
+ 高 ---- 流程类,稍重要的流程
+ 中 ---- 一般流程,界面中比较常用的可能
+ 低 ---- 界面中异常情况,或者很少出现的
如何编写:
1、划分功能模块
2、正向功能验证:正常操作功能是否实现
3、单个功能项验证:正向+异常
4、功能之间交互验证:模块之间的数据传递
5、隐形需求:熟悉业务
+ 只要是涉及到输入框的首先考虑输入为空的情况
+ 一条用例只测试一个功能点
+ 测试正常和异常的遵循二八原则
+ 操作步骤和预期结果一一对应
+ 如果条件有多个,在实际测试某一个的时候,默认其他条件都满足
+ 在对一个模块编写用例时,首先先对模块整体的业务走一条冒烟
+ 对一个界面编写用例时,可以先给页面一个界面的用例----针对有界面原型的
+ 优先级为高的在这个模块一般只占5%左右
寻找水杯是否有说明书,如果有需要充分阅读并理解水杯说明书,按说明书描述,测试到所有需求点
按测试关注点划分主要分为以下几个方面:
需求是一个整体,整体拆成模块,模块拆成小需求,小需求拆成功能点,需求点。测试时,分成整体测试,功能点测试,需求点测试。对于每个需求点根据等价类、边界值划分等去分析。一个需求就分成了一个树结构。一层一层的对应。
总体来说主要注意事项如下:
相关题目:给定一句话的需求:“世上无难事,庸人自扰之”,如何拆分测试点来设计测试用例(要求列出测试点)
23、项目组成员包括哪些?
项目经理{开发经理{UI,开发工程师,系统架构师},测试经理{测试设计、测试工程师}}
24、回归测试?回归几轮?
回归测试是对已被测试过的程序在修复缺陷后进行的重复测试,目的是验证修复缺陷有没有引发新的缺陷或问题。简单来说就是看有没有引入新bug。回归策略有选择性回归(一般指针对bug进行回归,在开始几轮时候,bug比较多,包括基于风险、 基于操作、基于缺陷)和完全回归(一般在最后一轮回归的时候,执行所有用例)。
-一般回归3轮(如果3轮还未回归还未修复完bug,再继续回归)
25、什么情况下使用自动化测试?
需求变更有计划性,更新频率不高或不会大幅度改版,每次迭代都需要进行验证;
比如:基础性代码、接口,比较独立的API、没有业务依赖,适合自动;
有角度依赖、较复杂的业务逻辑,场景多、类型不一致、因子数多、重度需要人交互,适合手动;
6. 版本稳定后才进行自动化
scrum模型中主要有产品负责人(Product Owner)、ScrumMaster、团队(Team)。
它由Product backlog开始,经过sprint会议从Prdouct backlog挑选出一些优先级最高的故事(story)形成迭代的sprint backlog(一个sprint一般为1个月)。在sprint中会进行每日站会,迭代结束时会进行演示和回顾会议。
Product Backlog:在项目开始的时候,Product Owner要准备一个根据商业价值排好序的客户需求列表。这个列表就是Prodct Backlog,一个最终会交付给客户的产品特性列表,它们根据商业价值来排列优先级。Scrum team会根据这个来做工作量的估计。Product backlog应该涵盖所有用来构建满足客户需要的产品特性,包括技术上的需求。高优先级的一些产品特性需要足够的细化以便于我们做工作量估计和做测试。对于那些以后将要实现的特性可以不够详细。
Sprint Backlog:Sprint Backlog 是Sprint规划会上产出的一个工作成果. 当Scrum team选择并承诺了Product backlog中要递交的一些高优先级的产品功能点后,这些功能点就会被细化成为Sprint Backlog:一个完成Product Backlog功能点的必需的任务列表.这些点会被细化为更小的任务,工作量小于2天。Sprint backlog完成后,Scrum team会根据它重新估计工作量,如果这些工作量和原始估计的工作量有较大差异,Scrum team和Product Owner 协商,调整合理得工作量到Sprint中,以确保Sprint的成功实施。
Sprint Planning Meeting(Sprint规划会)、Daily Scrum Meeting(每日站会)、Sprint Review Meeting(Sprint评审会)
敏捷开发中的Scrum流程和术语_m0_37561295的博客-CSDN博客
搭建测试环境 - 来一杯大大大可 - 博客园
web项目,b/s架构,基于浏览器的;web测试只要更新了服务器端,客户端就会同步会更新
app项目,c/s结构的,必须要有客户端;app 修改了服务端,则客户端用户所有核心版本都需要进行回归测试一遍
前端、UI界面、客户端、后端、系统服务端代码、WEB服务器(Apache)、应用服务器(Tomcat轻量级的应用服务器)、数据库服务器
1、通过charles工具拦截请求之后,修改响应数据,构造许多数据,模拟mock查看列表及翻页展示
2、如果有数据库权限,可以与开发同学协调,让开发同学帮忙编写sql语句进行数据添加(当然如果有数据关联,需要查看下关联的表结构及关系)。
3、通过UI自动化脚本,录制或循环运行,进行数据添加。
当然Mock方式还是最简单和有效验证的方式。
比如:有些字段返回错误,返回异常的字段类型,空的校验等等,客户端是否有崩溃,异常产生。
接口端的测试只能保证数据格式和字段是否正确,那么Mock+Selenium/Appium则可以配合进行,验证我们客户端的展示是否正确。
一般创建测试数据的方法分为手动创建和采用程序的自动化创建两种方法
软件测试中准备测试数据的一些方法_魔都飘雪的博客-CSDN博客_如何准备测试数据
测试环境的目的是为了使测试结果更加真实有效,应该与开发环境分隔开,使用独立的客户机、服务器和配置管理工具。原则上开发人员是不能碰测试环境和线上环境的,只能看不能动,如果随便哪个人发布了一个包或者修改了代码,那就乱了,因此测试环境涉及到权限管理,对于开发人员来说应该是只读权限。
如果测试和开发一定要共用一个环境的话尽量做好版本管理和权限控制
测试环境和开发环境隔离有必要吗 · TesterHome
34、什么是接口测试?为什么要做接口测试?怎么做接口测试?
35、接口是否通过测试怎么判断你?
36、接口测试用例怎么设计?
37、接口自动化是什么?
38、发现缺陷后怎么定位?
先查数据库,然后查看接口信息,查看前端调试信息,查看相关服务业务处理信息。
ps:夹板思路:先夹大黑盒,再夹小黑盒,逐渐缩小问题发生范围, 也就是三层 前端 服务 数据来夹. 就是大夹板是最大的黑盒 也就是 只管前端 和 数据库落地 的输入和输出,如果这个大夹板没问题,输入也对,落地数据也对,那就基本说明,整个处理链路是通的.
缺陷报告与缺陷定位的那些事 · TesterHome
39、提交的bug研发不认怎么办?
在确保缺陷提交流程是已经得到开发认可的前提下,先从自身入手:
然后与开发确认:
如果还是没有解决的话找权威裁决:
在编写缺陷记录前检查问题是否可重现(如果错误不可再重现,仍然应该写下来,但是必须说明问题的偶然性。一个好的处理原则就是在编写bug report之前反复尝试3次)。
尝试编写bug report之前,必须试着隔离错误。可以采用改变一些变量的方法,如系统的配置,它可能可以改变错误的症状。这些信息可以为开发人员着手调试提供思路。
若问题是已隔离,可重现的,则应对其进行归纳。(同一个问题是否出现在其他的模块或其他的地方?同一个故障是否有更加严重的问题?)
检查该问题是否是回归错误。
在缺陷报告的第一行写上错误的总结。(已发现的错误对客户有何影响)
缺陷报告初稿完成后进行精简、消除歧义、(集中剔除那些没有关系的步骤或词语,隐含的或模糊的说明、对没有任何关系的细节的描述或者那些在重现错误过程中不需要的步骤。同时或其之后随即应该再仔细检查报告是否有会产生误解的地方。测试人员应该尽量避免使用模糊的,会产生歧义的和主观的词语。目标是使用能够表述事实,清楚的,不会产生争执的词语。)
缺陷报告的内容有:+测试的结果
+针对本次测试的一个总结---所用的人力,物力,项目介绍
+ 本次用例情况
+ 缺陷的情况
+ 本次测试的遗留问题
41、各类工具的工作原理是什么?工具都可以用来干什么?为什么要用?
42、禅道如何提交缺陷的?缺陷都有哪些状态?除了管理缺陷以外还能做些什么?
43、Jmeter:接口测试,具体怎么操作的,有哪些控件?
44、Jmeter:依赖性接口如何测试?