因为我已经正式转岗成功,因此趁着有空,把之前自己面试前复习的知识整理起来,既可以帮助到有需要的人,也顺便自己做个总结。
在面试或者准备转岗前,大家都应该对最基本的理论知识能做到熟悉掌握,主要有以下一些:
###软件测试基础
####软件测试的定义
使用人工或者自动的手段来运行或者测量软件系统的过程,以检验软件系统是否满足规定的需求,并找出与预期结果之间的差异。
####测试按阶段分类
- 单元测试
- 集成测试
- 确认测试
- 系统测试
- 验收测试
####按是否需要执行被测试软件分类:
**静态测试:**是指不运行程序本身而寻找程序代码中可能存在的错误或评估程序代码的过程。另外,也称为静态分析,是不实际运行被测软件,而是直接分析软件的形式和结构,查找缺陷。主要包括对源代码、程序界面和各类文档及中间产品(如产品规格说明书、技术设计文档等)所做的测试。
**动态测试:**又称为动态分析,是指需要实际运行被测软件,通过观察程序运行时所表现出来的状态、行为等发现软件缺陷,包括在程序运行时,通过有效的测试用例(对应的输入、输出关系)来分析被测程序的运行情况或进行跟踪对比,发现程序所表现的行为与设计规格或客户需求不一致的地方。
####按是否需要查看代码分类:
- 黑盒测试
- 白盒测试
**黑盒测试:**是将被测试软件看做一个黑盒子,只考虑系统的输入和输出,完全不考虑程序内部逻辑结构和处理过程。黑盒测试的依据是各阶段的需求规格说明(如需求分析阶段是产品的需求规格说明书,单元测试阶段是函数的详细设计说明书)。
**白盒测试:**是将黑盒子打开,研究源代码和程序内部的逻辑结构。白盒测试的依据是程序代码。
利用白盒测试的覆盖指标所设计的测试用例与采用黑盒方法所得到的测试用例常常存在重复。因此,白盒测试一般充当黑盒测试的补充。
####按测试执行时是否需要人工干预分类:
- 手工测试
- 自动测试
**手工测试:**是完全由人工完成测试工作,包括测试计划的制定,测试用例的设计和执行,以及测试结果的检查和分析等,传统的测试工作都是由人工完成的。
**自动测试:**是各种测试活动的管理与实施,是使用自动化测试工具或自动化测试脚本来进行的测试,包括测试脚本的开发与执行等,以某种自动测试工具来验证测试需求。这类测试在执行过程中一般不需要人工干预。通常在功能测试、回归测试和性能测试中使用较为广泛。
其他测试类型:(知道就行,能说出来一两个就行)
**冒烟测试:**对象是每一个新编译的需要正式测试的软件版本,目的是确认软件基本功能正常,可以进行后续正常的测试。
**随机测试:**根据测试者的经验对软件进行功能和性能检查,是保证测试覆盖完整性的有效方式和过程。
**性能测试:**验证软件在正常环境和系统条件下重复使用是否还能满足性能指标。
①压力测试
②负载测试
实际工作中,软件测试过程并没有这么复杂,很多情况为了节约成本都是:
1.根据需求制定测试计划
2.根据测试计划和产品需求编写测试用例
3.执行测试用例
4.回归测试
5.验收测试
####软件测试的规范:这个概念很抽象,需要根据公司具体情况而定。
如果公司的时间和人力成本都比较充足的,那个测试规范就可以定义的比较高要求,测试文档的编写、测试用例的数量、测试数据的高效、手动和自动化测试的分配、测试任务的分配等等的都会比较的完善。
但是如果公司的时间和人力成本有限,这个规范就要适当的降低,编写关键的测试文档,测试数据需要少量的、高效的。测试用例要快速执行,快速反馈。
在面试前,除了做好日常的心理准备和规则的自我介绍以外,就要针对企业岗位要求去完善简历。下面是经过成熟互联网大公司的面试总结:进去公司,人事首先就是给一份试卷我填,时间一小时。这个在我看来,就是考验面试者的水平和态度。那么针对面试,我主要结合我的考题和面试总结以下觉得是必要的知识点:
####针对面试时的问答(面试/笔试)
1、什么是软件质量?
软件质量:软件产品的特性可以满足用户功能、性能需求的能力。
2、软件产品质量的六大特性:
功能性、可靠性、可使用性、效率、可维护性、可移植性
3、软件测试规范文档包括
**1)测试规范:**是根据开发规范而制定的测试标准,测试规范也是后期测试用例编写的重要依据。因为开发规范因公司而异,因产品而异,所以测试规范的标准程度每一个公司都不一样。
从理论到方法到各类报告模板,都属于规范的范畴,当一整套规范形成之后,可使得测试工作进度进行更加稳健,所有问题有据可查。
**2)测试计划包括内容:**a.概述 b.测试目标 c.测试目标和发布标准d. 计划将测试的领域; e.测试方法描述 f.测试进度表 g.测试资源 h.配置范围和测试工具
**3)测试用例:**这个靠自自己去了解,编写规范。后期有时间我会整理出来。
**4)Bug报告(缺陷记录):**编号、bug所属模块、bug描述、bug级别、发现日期、发现人、修改日期、修改人、修改方法、回归结果等等。
4、测试生命周期
①对测试人员进行进行业务培训
②测试需求分析
③编写测试计划
④编写测试案例
⑤测试执行(包括bug跟踪)
⑥编写测试报告
备注:需要重视各步骤结束前的评审工作。
5、Bug生命周期
New–Open–fixed–close(Testdirector)
缺陷的状态一般分为:新建、打开、已分配、已修复、关闭、重新打开。中间会有:延期、重复、拒绝等状态。
①发现缺陷(记录缺陷报告、提交给程序员)
②打开(程序员修改)
③解决(测试员确认、缺陷已修复/关闭报告)
④关闭
6、软件测试工作流程
产品立项----制定计划----准备测试-----测试执行-----测试评估----数据收集----完成标准-----总结报告
7、补充测试方法
Alphaα测试(内测)
公司内部的用户在模拟实际操作环境下进行的受控测试
Beitaβ测试(用户验收测试)
用户在实际使用环境下进行测试,开发者一般不在测试现场。
Αβ测试测试都不能由
系统测试类型
①兼容性测试:测试软件是否可以成功移植到指定的硬件或软件环境中,例如B/S项目中各个不同浏览器之间的测试。
②用户界面测试(UI测试):指软件中的可见外观及其底层与用户交互的部分(菜单、对话框、窗口和其他控件)
用户界面风格是否满足客户需求,文字是否正确、页面是否美观、文字、图片组合是否完美,操作是否友好。
确保用户界面是否符合用户期望或需求、是否符合公司/行业的标准,包括用户友好性,人性化,易操作性测试。
③性能测试(疲劳测试/压力测试/响应时间/接口间测试)
④恢复测试
⑤完整/安全性测试
⑥结构测试
⑦容量测试
⑧功能性测试(容错性【健壮性】测试)
8、软件的缺陷等级应如何划分?
软件缺陷的等级可以用严重性和优先级来描述;
严重性:衡量缺陷对客户满意度影响的满意程度,分为
1,致命错误,可能导致本模块以及其他相关的模块异常,死机等问题;
2.严重错误,问题局限在本模块,导致模块功能失常或异常退出;
3.一般错误,模块功能部分失效;
4.建议模块,有问题提出人对测试模块的改进建议;
优先级:缺陷被修复的紧急程度;
1.立即解决(P1级):缺陷导致系统功能几乎不能使用或者测试不能继续,需立即修复;
2.高优先级(P2级):缺陷严重,影响测试,需优先考虑;
3.正常排队(P3级):缺陷需要正常排队等待修复;
4.低优先级(P4级):缺陷可以在有时间的时候被纠正;
9、软件测试中的“5W”规则,你能说出其中明确内容和过程吗?
“5W”规则指的是“What (做什么)”、“Why (为什么做)”、“When (何时做)”、“Where(在哪里)”、“How (如何做)”。利用“5W”规则创建软件测试计划,可以帮助测试团队理解测试的目的(Why ),明确测试的范围和内容(What ),确定测试的开始和结束日期(When ),指出测试的方法和工具(How ),给出测试文档和软件的存放位置(Where )。
10、您认为做好测试用例设计工作的关键是什么?
白盒测试用例设计的关键是以较少的用例覆盖尽可能多的内部程序逻辑结果
黑盒法用例设计的关键同样也是以较少的用例覆盖模块输出和输入接口。不可能做到完全测试,以最少的用例在合理的时间内发现最多的问题.
11、二进制转十进制(去了解这个基本的运算方法)
11111000111 497
12、测试生命周期:
计划、设计、实施、执行、总结、评估
13、测试流程:
1)根据需求制定测试计划
2)测试设计
3)编写测试用例
4)执行测试用例
5)回归测试
6)验收测试
14、按测试阶段,测试分为:
- 单元测试
- 集成测试
- 确认测试
- 系统测试
- 验收测试
15、单元测试、集成测试、系统测试的侧重点是什么?
答:单元测试是在软件开发过程中要进行的最低级别的测试活动,在单元测试活动中,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试,测试重点是系统的模块,包括子程序的正确性验证等。
集成测试,也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求,组装成为子系统或系统,进行集成测试。实践表明,一些模块虽然能够单独地工作,但并不能保证连接起来也能正常的工作。程序在某些局部反映不出来的问题,在全局上很可能暴露出来,影响功能的实现。测试重点是模块间的衔接以及参数的传递等。
系统测试是将经过测试的子系统装配成一个完整系统来测试。它是检验系统是否确实能提供系统方案说明书中指定功能的有效方法。测试重点是整个系统的运行以及与其他软件的兼容性。
16、开发生命周期
① 计划
② 需求分析
③ 设计
④ 编码
⑤ 测试
⑥ 运行与维护
17、测试结束的标准
- 用例全部测试
- 覆盖率达到达到标准
- 缺陷率达到标准
- 其他指标达到标准
18、针对缺陷采取怎样的管理措施?
答: 1. 要更好的管理缺陷,必须引入缺陷管理工具,商用的或者开源的都可。
2.根据缺陷的生命周期,考虑缺陷提交的管理、缺陷状态的管理和缺陷分析的管理。
3.所有发现的缺陷(不管是测试发现的还是走读代码发现的)都必须全部即时的、准确的提交到缺陷管理工具中,这是缺陷提交的管理。
4.缺陷提交后,需要即时的指派给相应的开发人员,提交缺陷的人需要密切注意缺陷的状态, 帮助缺陷的尽快解决。缺陷解决后需要即时对缺陷的修复进行验证。这样的目的有两个:一个是让缺陷尽快解决;二是方便后面缺陷的分析(保证缺陷相关的信息准确,如龄期等),这是缺陷状态的管理。
5.为了更好的改进开发过程和测试过程,需要对缺陷进行分析,总结如缺陷的类别、缺陷的龄期分布等信息,这是缺陷分析的管理。
19、软件测试应该划分几个阶段?简述各个阶段应重点测试的点?各个阶段的含义?
答:大体上来说可分为单元测试,集成测试,系统测试,验收测试,
每个阶段又分为以下五个步骤: 测试计划,测试设计,用例设计,执行结果,测试报告
初始测试集中在每个模块上,保证源代码的正确性,该阶段成为单元测试,主要用白盒测试方法。 接下来是模块集成和集成以便组成完整的软件包。集成测试集中在证实和程序构成问题上。主要采用黑盒测试方法,辅之以白盒测试方法。
软件集成后,需要完成确认和系统测试。确认测试提供软件满足所有功能、性能需求的最后保证。确认测试仅仅应用黑盒测试方法。
20、什么是设计文档测试?
答:测试设计是否符合全部需求以及设计是否合理。
21、什么是需求文档测试:
答:主要测试需求中是否存在逻辑矛盾以及需求在技术上是否可以实现;
#####第一次面试互联网大公司的题目(笔试+面试)大致包括以下内容,后期你们可以针对拓展。
1、数据库筛选成绩前5名
2、登陆页面,测试考虑的大小方面有哪些
界面 | 性能 | 功能
3、白盒测试、黑盒测试
4、缺陷管理工具
5、selenium自动化测试了解程度
6、测试用例,边界值测试用例
7、给你一个垃圾桶,应该怎么测试?
#####其他:
1、设计用例的方法、依据有那些?
答:白盒测试用例设计有如下方法:基本路径测试\边界值分析\覆盖测试\循环测试\数据流测试\程序插桩测试\变异测试.这时候依据就是详细设计说明书及其代码结构
黑盒测试用例设计方法:基于用户需求的测试\功能图分析方法\等价类划分方法\边界值分析方法\错误推测方法\因果图方法\判定表驱动分析方法\正交实验设计方法.依据是用户需求规格说明书,详细设计说明书。
2、什么是桩模块?
答:比如对函数A做单元测试时,被测的函数单元下还包括了一个函数B,为了更好的错误,定位错误,就要为函数B写桩,来模拟函数B的功能,保证其正确。
3、什么是驱动模块?
答:驱动模块在大多数场合称为"主程序",它接收测试数据并将这些数据传递到被测试模块.单元测试一个函数单元时,被测单元本身是不能独立运行的,需要为其传送数据,为此写驱动
驱动模块主要完成以下事情:
1)接受测试输入;
2)对输入进行判断;
3)将输入传给被测单元,驱动被测单元执行;
4)接受被测单元执行结果,并对结果进行判断;
5)将判断结果作为用例执行结果输出测试报告。
4、描述使用bugzilla缺陷管理工具对软件缺陷(BUG)跟踪的管理的流程
答:1) 测试人员或开发人员发现bug后,判断属于哪个模块的问题,填写bug报告后,系统会自动通过Email通知项目组长或直接通知开发者。
2) 经验证无误后,修改状态为VERIFIED.待整个产品发布后,修改为CLOSED.
3) 还有问题,REOPENED,状态重新变为“New",并发邮件通知。
4) 项目组长根据具体情况,重新reassigned分配给bug所属的开发者。
5) 若是,进行处理,resolved并给出解决方法。(可创建补丁附件及补充说明)
6) 开发者收到Email信息后,判断是否为自己的修改范围。
7) 若不是,重新reassigned分配给项目组长或应该分配的开发者。
8) 测试人员查询开发者已修改的bug,进行重新测试。
5、如果能够执行完美的黑盒测试,还需要进行白盒测试吗?(白盒与黑盒的区别)
答:任何工程产品(注意是任何工程产品)都可以使用以下两种方法之一进行测试。
黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。 白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查。
软件的黑盒测试意味着测试要在软件的接口处进行。这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。因此黑盒测试又叫功能测试或数据驱动测试。黑盒测试主要是为了发现以下几类错误:
1、是否有不正确或遗漏的功能?
2、在接口上,输入是否能正确的接受?能否输出正确的结果?
3、是否有数据结构错误或外部信息(例如数据文件)访问错误?
4、性能上是否能够满足要求?
5、是否有初始化或终止性错误?
软件的白盒测试是对软件的过程性细节做细致的检查。这种方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。白盒测试主要是相对程序模块进行如下检查:
1、对程序模块的所有独立的执行路径至少测试一遍。
2、对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测一遍。
3、在循环的边界和运行的界限内执行循环体。
4、测试内部数据结构的有效性,等等。
以上事实说明,软件测试有一个致命的缺陷,即测试的不完全、不彻底性。由于任何程序只能进行少量(相对于穷举的巨大数量而言)的有限的测试,在未发现错误时,不能说明程序中没有错误。
最后要说的就是,其实看个人面试的岗位要求和自己对薪资的期待,企业职业要求的技术和理论知识都是根据你的经验和技术能力来定义你是否满足需求。而我是一个没项目经验的转岗者,所以我能做的就是强化自己的理论知识和不断拓展自己的加分项,比如学一门语言,我选Java;学数据库我掌握基本SQL的增删改查;还有就是学会selenium的自动化录制,这些都是我能做到的。而后就是面试前,重新复习一遍以上知识点,面试时回答顺畅,逻辑清晰,基本没有什么问题。
把主动权掌握在自己手上,我们才有选择的权利。