软件测试开发人员面试题

1. CPU 和 GPU的区别
CPU 力气大啥P事都能干,还要协调。
GPU 上面那家伙的小弟,老大让他处理图形,这方面处理简单,但是量大,老大虽然能处理,可是老大只有那么几个兄弟,所以不如交给小弟处理了,小弟兄弟多,有数百至数千个,而且是专门只干这行和只能干这行。
详细解释
2. 推荐的算法有哪些?
1 基于人口统计学的推荐
2 基于内容的推荐
3 协同过滤
4 混合推荐算法
3. 协同过滤
协同过滤是利用集体智慧的一个典型方法。要理解什么是协同过滤 (Collaborative Filtering, 简称 CF),首先想一个简单的问题,如果你现在想看个电影,但你不知道具体看哪部,你会怎么做?大部分的人会问问周围的朋友,看看最近有什么好看的电影推荐,而我们一般更倾向于从口味比较类似的朋友那里得到推荐。这就是协同过滤的核心思想。
换句话说,就是借鉴和你相关人群的观点来进行推荐。
4. Linux命令
查看整个磁盘还剩多少空间 df -h
查看当前的文件夹下的磁盘使用情况 du –max-depth=1 -h
查看某一个文件(文件夹)的大小 du -sh或du -h –max-depth=0
du命令后面可以跟文件路径,来查看指定路径的大小 du -sh /root
找到一个文件中含有aaa 和 bbb和行 grep ‘aaa’ *.txt|xargs grep ‘bbb’
更多命令
5. 白盒和黑盒测试的方法有哪些?
黑盒测试的测试方法有:等价类划分、边界值分析法、猜错法、随机数法、因果图。
白盒测试的测试方法有:代码检查法、程序变异、静态结构分析法、静态质量度量法、符号测试法、逻辑覆盖法、域测试、Z路径覆盖和基本路径测试法。
6. Python实现字符串替换
a = ‘hello word’
a.replace(‘word’,’python’)或
import re
strinfo = re.compile(‘word’)
b = strinfo.sub(‘python’,a)
print b

链接:https://www.nowcoder.com/discuss/165276?type=0&order=0&pos=21&page=1
来源:牛客网
 

测试工程师面试考点汇总

以下不作为测试工程师的学习路径,只是汇总的校招测试工程师面试考点(因为还有笔试考点,后面结合在一起给大家学习路径),后续会为大家更新10w+字数的测试工程师校招面试题库,还有其他岗位的相关题库和资料,想要什么岗位的可以留言哦~

本篇根据各个公司的面试问的问题的大数据进行总结,后面还会更新面试中考察所占比例,当然,本文只包括技术面,不太包括hr面或者一些其他谈人生理想的

 

附题目

一、软件测试基础知识

1、请你分别介绍一下单元测试、集成测试、系统测试、验收测试、回归测试

1、单元测试:完成最小的软件设计单元(模块)的验证工作,目标是确保模块被正确的编码,使用过程设计描述作为指南,对重要的控制路径进行测试以发现模块内的错误,通常情况下是白盒的,对代码风格和规则、程序设计和结构、业务逻辑等进行静态测试,及早的发现和解决不易显现的错误。

2、集成测试:通过测试发现与模块接口有关的问题。目标是把通过了单元测试的模块拿来,构造一个在设计中所描述的程序结构,应当避免一次性的集成(除非软件规模很小),而采用增量集成。

自顶向下集成:模块集成的顺序是首先集成主模块,然后按照控制层次结构向下进行集成,隶属于主模块的模块按照深度优先或广度优先的方式集成到整个结构中去。

自底向上集成:从原子模块开始来进行构造和测试,因为模块是自底向上集成的,进行时要求所有隶属于某个给顶层次的模块总是存在的,也不再有使用稳定测试桩的必要。

3、系统测试:是基于系统整体需求说明书的黑盒类测试,应覆盖系统所有联合的部件。系统测试是针对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义,找出与需求规格不相符合或与之矛盾的地方。系统测试的对象不仅仅包括需要测试的产品系统的软件,还要包含软件所依赖的硬件、外设甚至包括某些数据、某些支持软件及其接口等。因此,必须将系统中的软件与各种依赖的资源结合起来,在系统实际运行环境下来进行测试.

4、回归测试:回归测试是指在发生修改之后重新测试先前的测试用例以保证修改的正确性。理论上,软件产生新版本,都需要进行回归测试,验证以前发现和修复的错误是否在新软件版本上再次出现。根据修复好了的缺陷再重新进行测试。回归测试的目的在于验证以前出现过但已经修复好的缺陷不再重新出现。一般指对某已知修正的缺陷再次围绕它原来出现时的步骤重新测试。

5、验收测试:验收测试是指系统开发生命周期方法论的一个阶段,这时相关的用户或独立测试人员根据测试计划和结果对系统进行测试和接收。它让系统用户决定是否接收系统。它是一项确定产品是否能够满足合同或用户所规定需求的测试。验收测试包括Alpha测试和Beta测试。

Alpha测试:是由用户在开发者的场所来进行的,在一个受控的环境中进行。

Beta测试:由软件的最终用户在一个或多个用户场所来进行的,开发者通常不在现场,用户记录测试中遇到的问题并报告给开发者,开发者对系统进行最后的修改,并开始准备发布最终的软件。

2、请你回答一下单元测试、集成测试、系统测试、验收测试、回归测试这几步中最重要的是哪一步

这些测试步骤分别在软件开发的不同阶段对软件进行测试,我认为对软件完整功能进行测试的系统测试很重要,因为此时单元测试和集成测试已完成,能够对软件所有功能进行功能测试,能够覆盖系统所有联合的部件,是针对整个产品系统进行的测试,能够验证系统是否满足了需求规格的定义,因此我认为系统测试很重要。

3请回答集成测试和系统测试的区别,以及它们的应用场景主要是什么?

1、测试内容:集成测试是测试各个单元模块之间的接口,系统测试是测试整个系统的功能和性能;

2、测试角度:集成测试偏重于技术的角度进行测试,系统测试是偏重于业务的角度进行测试。

4.请问测试开发需要哪些知识?需要具备什么能力


 

正确高效的沟通能力:测试工程师必须能够痛测试工作所涉及到的所偶有人进行沟通,具有与技术人员(开发人员)和非技术人员(客户,管理人员)的交流能力。

超强责任心:测试工作在很大程度上依赖于测试人员自己,因此责任心应该被定义为软件测试人员的最基本素质

坚持原则:测试工程师需要对产品的质量负责们在这一点上一定要有原则

懂得尊重:工作的技能要求不同,工作化境不同,这样就导致了工作难度不同,虽然不能将测试的工作与其他的工作进行直接对比,但是我们也要其他的同时保持足够的尊重,无论你发现了什么样的缺陷或发现了多少缺陷,这只能说明产品有问题,但不能说明人员能力有问题,因为很多问题的成因非常的复杂,需要多方面来解决。

有较全面的技术知识:较全面的技术知识能够帮助测试人员定位缺陷,也能帮助测试人员与技术人员新型有效的沟通,同时还能提高测试人员的技术水平。

二、软件测试工程师必须具备专业技能

测试的专业技能:包括白盒测试、黑盒测试、静态测试、动态测试等测试策略,以及功能车市、性能测试、界面测试、安装测试等测试方法。

软件编程技能:测试工程师要使用自动化测试工具没这就要求测试工程师鞥故编辑脚本,而编辑脚本则需要测试工程师几倍一定的编辑能力。同时,有一定的编辑能力也有利测试工程师更好的定位缺陷。

网络,操作系统,数据库、中间件等知识:与开发人员相比,测试人员的技术有“全而不精”的特点,这是由于测试工程师需要配置各种测试环境,分析影响性能的各种原因而需局别的技术要求!

5请说一说黑盒与白盒的测试方法

黑盒测试:

黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用。

在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数锯而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。

“黑盒”法着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功能进行测试。

“黑盒”法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。

实际上测试情况有无穷多个,因此不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。

常用的黑盒测试方法有:等价类划分法;边界值分析法;因果图法;场景法;正交实验设计法;判定表驱动分析法;错误推测法;功能图分析法。

 

白盒测试:

白盒测试也称为结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。

它根据程序的控制结构设计测试用例,主要用于软件或程序验证。

白盒测试法检查程序内部逻辑结构,对所有的逻辑路径进行测试,是一种穷举路径的测试方法,但即使每条路径都测试过了,但仍然有可能存在错误。

穷举路径测试无法检查出程序本身是否违反了设计规范,即程序是否是一个错误的程序;穷举路径测试不可能检查出程序因为遗漏路径而出错;穷举路径测试发现不了一些与数据相关的错误。

 

白盒测试需要遵循的原则有:

1. 保证一个模块中的所有独立路径至少被测试一次;

2. 所有逻辑值均需要测试真(true)和假(false);两种情况;

3. 检查程序的内部数据结构,保证其结构的有效性;

4. 在上下边界及可操作范围内运行所有循环。

 

常用白盒测试方法:

静态测试:不用运行程序的测试,包括代码检查、静态结构分析、代码质量度量、文档测试等等,它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具(Fxcop)自动进行。

动态测试:需要执行代码,通过运行程序找到问题,包括功能确认与接口测试、覆盖率分析、性能分析、内存分析等。

白盒测试中的逻辑覆盖包括:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。

 

六种覆盖标准发现错误的能力呈由弱到强的变化:

1.语句覆盖每条语句至少执行一次。

2.判定覆盖每个判定的每个分支至少执行一次。

3.条件覆盖每个判定的每个条件应取到各种可能的值。

4.判定/条件覆盖同时满足判定覆盖条件覆盖。

5.条件组合覆盖每个判定中各条件的每一种组合至少出现一次。

6.路径覆盖使程序中每一条可能的路径至少执行一次。

 

6请说一下手动测试与自动化测试的优缺点

手工测试缺点:

1、重复的手工回归测试,代价昂贵、容易出错。

2、依赖于软件测试人员的能力。

手工测试优点:

1、测试人员具有经验和对错误的猜测能力。

2、测试人员具有审美能力和心理体验。

3、测试人员具有是非判断和逻辑推理能力。

自动化测试的优点:

1、对程序的回归测试更方便。这可能是自动化测试最主要的任务,特别是在程序修改比较频繁时,效果是非常明显的。由于回归测试的动作和用例是完全设计好的,测试期望的结果也是完全可以预料的,将回归测试自动运行,可以极大提高测试效率,缩短回归测试时间。

2、可以运行更多更繁琐的测试。自动化的一个明显的好处是可以在较少的时间内运行更多的测试。

3、可以执行一些手工测试困难或不可能进行的测试。比如,对于大量用户的测试,不可能同时让足够多的测试人员同时进行测试,但是却可以通过自动化测试模拟同时有许多用户,从而达到测试的目的。

4、更好地利用资源。将繁琐的任务自动化,可以提高准确性和测试人员的积极性,将测试技术人员解脱出来投入更多精力设计更好的测试用例。有些测试不适合于自动测试,仅适合于手工测试,将可自动测试的测试自动化后,可以让测试人员专注于手工测试部分,提高手工测试的效率。

5、测试具有一致性和可重复性。由于测试是自动执行的,每次测试的结果和执行的内容的一致性是可以得到保障的,从而达到测试的可重复的效果。

6、测试的复用性。由于自动测试通常采用脚本技术,这样就有可能只需要做少量的甚至不做修改,实现在不同的测试过程中使用相同的用例。

7、增加软件信任度。由于测试是自动执行的,所以不存在执行过程中的疏忽和错误,完全取决于测试的设计质量。一旦软件通过了强有力的自动测试后,软件的信任度自然会增加。

自动化测试的缺点:

1、不能取代手工测试

2、手工测试比自动测试发现的缺陷更多

3、对测试质量的依赖性极大

4、测试自动化不能提高有效性

5、测试自动化可能会制约软件开发。由于自动测试比手动测试更脆弱,所以维护会受到限制,从而制约软件的开发。

6、工具本身并无想像力



 

7.请问你怎么看待软件测试的潜力和挑战

软件测试是正在快速发展,充满挑战的领域。尽管现在许多自动化测试软件的出现使得传统手工测试的方式被代替,但自动化测试工具的开发、安全测试、测试建模、精准测试、性能测试、可靠性测试等专项测试中仍然需要大量具有专业技能与专业素养的测试人员,并且随着云计算、物联网、大数据的发展,传统的测试技术可能不再适用,测试人员也因此面临着挑战,需要深入了解新场景并针对不同场景尝试新的测试方法,同时敏捷测试、Devops的出现也显示了软件测试的潜力。



 

8、你觉得软件测试的核心竞争力是什么

 

测试人员的核心竞争力在于提早发现问题,并能够发现别人无法发现的问题。

1、早发现问题:问题发现的越早,解决的成本越低。如果一个需求在还未实现的时候就能发现需求的漏洞,那么这种问题的价值是最高的。

2、发现别人无法发现的问题:所有人都能发现的问题,你发现了,那就证明你是可以被替代的。别人发现不了,而你可以发现,那么你就是无法被替代。

 

9、你觉得测试和开发需要怎么结合才能使软件的质量得到更好的保障

 

测试和开发应该按照W模型的方式进行结合,测试和开发同步进行,能够尽早发现软件缺陷,降低软件开发的成本。

在V模型中,测试过程被加在开发过程的后半部分,单元测试所检测代码的开发是否符合详细设计的要求。集成测试所检测此前测试过的各组成部分是否能完好地结合到一起。系统测试所检测已集成在一起的产品是否符合系统规格说明书的要求。而验收测试则检测产品是否符合最终用户的需求。V模型的缺陷在于仅仅把测试过程作为在需求分析、系统设计及编码之后的一个阶段,忽视了测试对需求分析、系统设计的验证,因此需求阶段的缺陷很可能一直到后期的验收测试才被发现,此时进行弥补将耗费大量人力物力资源。

相对于V模型,W模型增加了软件各开发阶段中应同步进行的验证和确认活动。W模型由两个V字型模型组成,分别代表测试与开发过程,图中明确表示出了测试与开发的并行关系。

W模型强调:测试伴随着整个软件开发周期,而且测试的对象不仅仅是程序,需求、设计等同样要测试,也就是说,测试与开发是同步进行的。W模型有利于尽早地全面的发现问题。例如,需求分析完成后,测试人员就应该参与到对需求的验证和确认活动中,以尽早地找出缺陷所在。同时,对需求的测试也有利于及时了解项目难度和测试风险,及早制定应对措施,这将显著减少总体测试时间,加快项目进度。

W模型中测试的活动与软件开发同步进行,测试的对象不仅仅是程序,还包括需求和设计,因此能够尽早发现软件缺陷,降低软件开发的成本。

10、你觉得单元测试可行吗

可行,单元测试可以有效地测试某个程序模块的行为,是未来重构代码的信心保证。事前可以保证质量,事后可以快速复现问题,并在修改代码后做回归自测。可行性考虑的是要用一些可行的方法做到关键的代码可测试,如通过边界条件、等价类划分、错误、因果,设计测试用例要覆盖常用的输入组合、边界条件和异常。

11、你觉得自动化测试有什么意义,都需要做些什么

自动化测试的意义在于

1、可以对程序的新版本自动执行回归测试

2、可以执行手工测试困难或者不可能实现的测试,如压力测试,并发测试,

3、能够更好的利用资源,节省时间和人力

执行自动化测试之前首先判断这个项目是否适合自动化测试,然后对项目做需求分析,指定测试计划,搭建自动化测试框架,设计测试用例,执行测试,评估


12、请你回答一下测试的相关流程是什么?

需求测试->概要设计测试->详细设计测试->单元测试->集成测试->系统测试->验收测试
13、请你说一下如何写测试用例

1、测试人员尽早介入,彻底理解清楚需求,这个是写好测试用例的基础

2、如果以前有类似的需求,可以参考类似需求的测试用例,然后还需要看类似需求的bug情况

3、清楚输入、输出的各种可能性,以及各种输入的之间的关联关系,理解清楚需求的执行逻辑,通过等价类、边界值、判定表等方法找出大部分用例

4、找到需求相关的一些特性,补充测试用例

5、根据自己的经验分析遗漏的测试场景

6、多总结类似功能点的测试点,才能够写出质量越来越高的测试用例

7、书写格式一定要清晰


14、请问你觉得测试项目具体工作是什么?

搭建测试环境

撰写测试用例

执行测试用例

写测试计划,测试报告

测试,并提交BUG表单

跟踪bug修改情况

执行自动化测试,编写脚本,执行,分析,报告

进行性能测试,压力测试等其他测试,执行,分析,调优,报告

15、请问如果想进行bug的测评,怎么去评测bug?

Bug的priority()和severity()是两个重要属性,通常人员在提交bug的时候,只定义severity,而将priority交给leader定义,通常bug管理中,severity分为四个等级blocker、critical、major、minor/trivial,而priority分为五个等级immediate、urgent、high、normal、low。

Serverity(严重程度)

1、Blocker(崩溃):阻碍开发或测试工作的问题;造成系统崩溃、死机、死循环,导致数据库数据丢失,与数据库连接错误,主要功能丧失,基本模块缺失等问题。如:代码错误、死循环、数据库发生死锁、重要的一级菜单功能不能使用等。(该问题在测试中较少出现,一旦出现应立即中止当前版本测试)

2、Critical(严重):系统主要功能部分丧失、数据库保存调用错误、用户数据丢失,一级功能菜单不能使用但是不影响其他功能的测试。功能设计与需求严重不符,模块无法启动或调用,程序重启、自动退出,关联程序间调用冲突,安全问题、稳定性等。如:软件中数据保存后数据库中显示错误,用户所要求的功能缺失,程序接口错误,数值计算统计错误等。(该等级问题出现在不影响其他功能测试的情况下可以继续该版本测试)

 3、Major(一般、界面、性能缺陷、兼容性):功能没有完全实现但是不影响使用,功能菜单存在缺陷但不会影响系统稳定性。如:操作时间长、查询时间长、格式错误、边界条件错误,删除没有确认框、数据库表中字段过多等。(该问题实际测试中存在最多,合理安排解决Bug,解决率关系版本的优化程度) 

 4、Minor/Trivial(次要、易用性及建议性问题):界面、性能缺陷,建议类问题,不影响操作功能的执行,可以优化性能的方案等。如:错别字、界面格式不规范,页面显示重叠、不该显示的要隐藏,描述不清楚,提示语丢失,文字排列不整齐,光标位置不正确,用户体验感受不好,可以优化性能的方案等。(此类问题在测试初期较多,优先程度较低;在测试后期出现较少,应及时处理)

Priority(优先级)

1、Immediate(马上解决):表示问题必须马上解决,否则系统根本无法达到预定的需求。

2、Urgent(急需解决):表示问题的修复很紧要,很急迫,关系到系统的主要功能模块能否正常。 

3、High(高度重视):表示有时间就要马上解决,否则系统偏离需求较大或预定功能不能正常实现。

4、Normal(正常处理):进入个人计划解决,表示问题不影响需求的实现,但是影响其他使用方面,比如页面调用出错,调用了错误的等。

5、Low(低优先级):即问题在系统发布以前必须确认解决或确认可以不予解决。

 

16、请你说一说**测试用例的边界

 

17、请你说一下软件质量的六个特征

按照软件质量国家标准GB-T8566--2001G,软件质量可以用下列特征来评价:

a.功能特征:与一组功能及其指定性质有关的一组属性,这里的功能是满足明确或隐含的需求的那些功能。

b.可靠特征:在规定的一段时间和条件下,与软件维持其性能水平的能力有关的一组属性。

c.易用特征:由一组规定或潜在的用户为使用软件所需作的努力和所作的评价有关的一组属性。

d.效率特征:与在规定条件下软件的性能水平与所使用资源量之间关系有关的一组属性。

e.可维护特征:与进行指定的修改所需的努力有关的一组属性。

f.可移植特征:与软件从一个环境转移到另一个环境的能力有关的一组属性。

 

18、请你说一下设计测试用例的方法

黑盒测试:

1.等价类划分

等价类划分是将系统的输入域划分为若干部分,然后从每个部分选取少量代表性数据进行测试。等价类可以划分为有效等价类和无效等价类,设计测试用例的时候要考虑这两种等价类。

2.边界值分析法

边界值分析法是对等价类划分的一种补充,因为大多数错误都在输入输出的边界上。边界值分析就是假定大多数错误出现在输入条件的边界上,如果边界附件取值不会导致程序出错,那么其他取值出错的可能性也就很小。

边界值分析法是通过优先选择不同等价类间的边界值覆盖有效等价类和无效等价类来更有效的进行测试,因此该方法要和等价类划分法结合使用。

3.正交试验法

正交是从大量的试验点中挑选出适量的、有代表性的点。正交试验设计是研究多因素多水平的一种设计方法,他是一种基于正交表的高效率、快速、经济的试验设计方法。

4.状态迁移法

状态迁移法是对一个状态在给定的条件内能够产生需要的状态变化,有没有出现不可达的状态和非法的状态,状态迁移法是设计足够的用例达到对系统状态的覆盖、状态、条件组合、状态迁移路径的覆盖。

5.流程分析法

流程分析法主要针对测试场景类型属于流程测试场景的测试项下的测试子项进行设计,这是从白盒测试中路径覆盖分析法借鉴过来的一种很重要的方法。

6.输入域测试法

输入域测试法是针对输入会有各种各样的输入值的一个测试,他主要考虑 极端测试、中间范围测试,特殊值测试 。

7.输出域分析法

输出域分析法是对输出域进行等价类和边界值分析,确定是要覆盖的输出域样点,反推得到应该输入的输入值,从而构造出测试用例,他的目的是为了达到输出域的等价类和边界值覆盖。

8.判定表分析法

判定表是分析和表达多种输入条件下系统执行不同动作的工具,他可以把复杂的逻辑关系和多种条件组合的情况表达的即具体又明确;

9.因果图法

因果图是用于描述系统输入输出之间的因果关系、约束关系。因果图的绘制过程是对被测系统的外部特征的建模过程,根据输入输出间的因果图可以得到判定表,从而规划出测试用例。

10.错误猜测法

错误猜测法主要是针对系统对于错误操作时对于操作的处理法的猜测法,从而设计测试用例

11.异常分析法

异常分析法是针对系统有可能存在的异常操作,软硬件缺陷引起的故障进行分析,分析发生错误时系统对于错误的处理能力和恢复能力依此设计测试用例。

 

白盒测试:

白盒测试也称为结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。它根据程序的控制结构设计测试用例,主要用于软件或程序验证。白盒测试法检查程序内部逻辑结构,对所有的逻辑路径进行测试,是一种穷举路径的测试方法,但即使每条路径都测试过了,但仍然有可能存在错误。因为:穷举路径测试无法检查出程序本身是否违反了设计规范,即程序是否是一个错误的程序;穷举路径测试不可能检查出程序因为遗漏路径而出错;穷举路径测试发现不了一些与数据相关的错误。

白盒测试需要遵循的原则有:

1. 保证一个模块中的所有独立路径至少被测试一次;

2. 所有逻辑值均需要测试真(true)和假(false);两种情况;

3. 检查程序的内部数据结构,保证其结构的有效性;

4. 在上下边界及可操作范围内运行所有循环。

常用白盒测试方法:

静态测试:不用运行程序的测试,包括代码检查、静态结构分析、代码质量度量、文档测试等等,它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具(Fxcop)自动进行。

动态测试:需要执行代码,通过运行程序找到问题,包括功能确认与接口测试、覆盖率分析、性能分析、内存分析等。

白盒测试中的逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。

 

六种覆盖标准发现错误的能力呈由弱到强的变化:

1.语句覆盖每条语句至少执行一次。

2.判定覆盖每个判定的每个分支至少执行一次。

3.条件覆盖每个判定的每个条件应取到各种可能的值。

4.判定/条件覆盖同时满足判定覆盖条件覆盖。

5.条件组合覆盖每个判定中各条件的每一种组合至少出现一次。

6.路径覆盖使程序中每一条可能的路径至少执行一次。

19、请你说一说测试工程师的必备技能

需要的知识:

• 软件测试基础理论知识,如黑盒测试、白盒测试等;

• 编程语言基础,如C/C++、java、python等;

• 自动化测试工具,如Selenium、Appium、Robotium等;

• 计算机基础知识,如数据库、Linux、计算机网络等;

• 测试框架,如JUnit等。

需要具备的能力:

• 业务分析能力,分析整体业务流程、分析被测业务数据、分析被测系统架构、分析被测业务模块、分析测试所需资源、分析测试完成目标;

• 缺陷洞察能力,一般缺陷的发现能力、隐性问题的发现能力、发现连带问题的能力、发现问题隐患的能力、尽早发现问题的能力、发现问题根源的能力;

• 团队协作能力,合理进行人员分工、协助组员解决问题、配合完成测试任务、配合开发重现缺陷、督促项目整体进度、出现问题勇于承担;

• 专业技术能力,掌握测试基础知识、掌握计算机知识、熟练运用测试工具;

• 逻辑思考能力,判断逻辑的正确性、对可行性逻辑分析、站在客观角度思考;

• 问题解决能力,技术上的问题、工作中的问题、沟通问题;

• 沟通表达能力,和技术人员、产品人员、上下级的沟通;

• 宏观把控能力,有效控制测试时间、有效控制测试成本、有效制定测试计划、有效进行风险评估、有效控制测试方向。

20、请你说一下app性能测试的指标

1、内存:内存消耗测试节点的设计目标是为了让应用不占用过多的系统资源,且及时释放内存,保障整个系统的稳定性。

      

当然关于内存测试,在这里我们需要引入几个概念: 空闲状态、中等规格、满规格。

  • 空闲状态:打开应用后,点击home键让应用后台运行,此时应用处于的状态叫做空闲
  • 中等规格:对应用的操作时间的间隔较长
  • 满规格:对应用的操作时间的间隔较短

内存测试中存在很多测试子项,清单如下:

●空闲状态下的应用内存消耗;

●中等规格状态下的应用内存消耗;

●满规格状态下的应用内存消耗;

●应用内存峰值;

●应用内存泄露;

●应用是否常驻内存;

●压力测试后的内存使用。

 

2、CPU:

使用Android提供的view plaincopy在CODE上查看代码片派生到我的代码片

adbshell dumpsys CPUinfo |grep packagename >/address/CPU.txt来获取;

使用top命令view plaincopy在CODE上查看代码片派生到我的代码片

adbshell top |grep packagename>/address/CPU.txt来获取。

 

3、流量:

网络流量测试是针对大部分应用而言的,可能还有部分应用会关注网速、弱网之类的测试。

流量测试包括以下测试项:

应用首次启动流量提示;

应用后台连续运行2小时的流量值;

应用高负荷运行的流量峰值。

 

4、电量:

●测试手机安装目标APK前后待机功耗无明显差异;

●常见使用场景中能够正常进入待机,待机电流在正常范围内;

●长时间连续使用应用无异常耗电现象。

 

5、启动速度:

第一类:首次启动--应用首次启动所花费的时间;

第二类:非首次启动--应用非首次启动所花费的时间;

第三类:应用界面切换--应用界面内切换所花费的时间。

 

6、滑动速度、界面切换速度

 

7、与服务器交互的网络速度

21、请你说一说app测试的工具

功能测试自动化

a) 轻量接口自动化测试

jmeter,

b) APP UI层面的自动化

android:UI Automator Viewer,Android Junit,Instrumentation,UIAutomator,

iOS:基于Instrument的iOS UI自动化,

 

性能测试

a) Web前端性能测试

网络抓包工具:Wireshark

网页文件大小

webpagetest

pagespeed insight

chrome adb

b) APP端性能测试

Android内存占用分析:MAT

iOS内存问题分析:ARC模式

Android WebView性能分析:

iOS WebView性能分析

c) 后台服务性能测试

负载,压力,耐久性

可拓展性,基准

工具:apacheAB,Jmeter,LoadRunner,

 

专项测试

a) 兼容性测试

手工测试:操作系统,分辨率,rom,网络类型

云平台:testin,脚本编写,Android。

b) 流量测试

Android自带的流量管理,

iOS自带的Network

tcpdump抓包

WiFi代理抓包:Fiddler

流量节省方法:压缩数据,json优于xml;WebP优于传统的JPG,PNG;控制访问的频次;只获取必要的数据;缓存;

c) 电量测试

基于测试设备的方法,购买电量表进行测试。

GSam Battery Monitoe Pro

iOS基于Instrument Energy工具

d) 弱网络测试

手机自带的网络状况模拟工具

基于代理的弱网络的模拟:

工具:windows:Network Delay Simulator

Mac:Network Link Conditioner

22、请你说一说bug的周期,以及描述一下不同类别的bug

1、New:(新的)

当某个“bug”被第一次发现的时候,测试人员需要与项目负责人沟通以确认发现的的确是一个bug,如果被确认是一个bug,就将其记录下来,并将bug的状态设为New

2、Assigned(已指派的)

当一个bug被指认为New之后,将其反馈给开发人员,开发人员将确认这是否是一个bug,如果是,开发组的负责人就将这个bug指定给某位开发人员处理,并将bug的状态设定为“Assigned”

3、Open(打开的)

一旦开发人员开始处理bug的时候,他(她)就将这个bug的状态设置为“Open”,这表示开发人员正在处理这个“bug”

4、Fixed(已修复的)

当开发人员进行处理(并认为已经解决)之后,他就可以将这个bug的状态设置为“Fixed”并将其提交给开发组的负责人,然后开发组的负责人将这个bug返还给测试组

5、Pending Reset(待在测试的)

当bug被返还到测试组后,我们将bug的状态设置为Pending Reset”

6、Reset(再测试)

测试组的负责人将bug指定给某位测试人员进行再测试,并将bug的状态设置为“Reset”

7、Closed(已关闭的)

如果测试人员经过再次测试之后确认bug 已经被解决之后,就将bug的状态设置为“Closed”

8、Reopen(再次打开的)

如果经过再次测试发现bug(指bug本身而不是包括因修复而引发的新bug)仍然存在的话,测试人员将bug再次传递给开发组,并将bug的状态设置为“Reopen”

9、Pending Reject(拒绝中)

如果测试人员传递到开发组的bug被开发人员认为是正常行为而不是bug时,这种情况下开发人员可以拒绝,并将bug的状态设置为“Pending Reject”

10、Rejected(被拒绝的)

测试组的负责人接到上述bug的时候,如果他(她)发现这是产品说明书中定义的正常行为或者经过与开发人员的讨论之后认为这并不能算作bug的时候,开发组负责人就将这个bug的状态设置为“Rejected”

11、Postponed(延期)

有些时候,对于一些特殊的bug的测试需要搁置一段时间,事实上有很多原因可能导致这种情况的发生,比如无效的测试数据,一些特殊的无效的功能等等,在这种情况下,bug的状态就被设置为“Postponed“

不同类别的bug(Bug类型):

•    代码错误

•    界面优化

•    设计缺陷

•    配置相关

•    安装部署

•    安全相关

•    性能问题

•    标准规范

•    测试脚本

•    其他

23、请你说一说PC网络故障,以及如何排除障碍

(1)首先是排除接触故障,即确保你的网线是可以正常使用的。然后禁用网卡后再启用,排除偶然故障。打开网络和共享中心窗口,单击窗口左上侧“更改适配器设置”右击其中的“本地连接“或”无线网络连接”,单击快捷菜单中的“禁用”命令,即可禁用所选网络。接下来重启网络,只需右击后单击启用即可。
(2)使用ipconfig查看计算机的上网参数 1、单击“开始|所有程序|附件|命令提示符“,打开命令提示符窗口 2、输入ipconfig,按Enter确认,可以看到机器的配置信息,输入ipconfig/all,可以看到IP地址和网卡物理地址等相关网络详细信息。
(3)使用ping命令测试网络的连通性,定位故障范围 在命令提示符窗口中输入”ping 127.0.0.1“,数据显示本机分别发送和接受了4个数据包,丢包率为零,可以判断本机网络协议工作正常,如显示”请求超时“,则表明本机网卡的安装或TCP/IP协议有问题,接下来就应该检查网卡和TCP/IP协议,卸载后重装即可。
(4)ping本机IP 在确认127.0.0.1地址能被ping通的情况下,继续使用ping命令测试本机的IP地址能否被ping通,如不能,说明本机的网卡驱动程序不正确,或者网卡与网线之间连接有故障,也有可能是本地的路由表面收到了破坏,此时应检查本机网卡的状态是否为已连接,网络参数是否设置正确,如果正确可是不能ping通,就应该重新安装网卡驱动程序。丢失率为零,可以判断网卡安装配置没有问题,工作正常。
(5)ping网关 网关地址能被ping通的话,表明本机网络连接以及正常,如果命令不成功,可能是网关设备自身存在问题,也可能是本机上网参数设置有误,检查网络参数。

 

 

25、请你说一下黑盒白盒

参考回答:

黑盒测试:

黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数锯而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。

“黑盒”法着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功能进行测试。“黑盒”法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。实际上测试情况有无穷多个,因此不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。

常用的黑盒测试方法有:等价类划分法;边界值分析法;因果图法;场景法;正交实验设计法;判定表驱动分析法;错误推测法;功能图分析法。

白盒测试:

白盒测试也称为结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。它根据程序的控制结构设计测试用例,主要用于软件或程序验证。白盒测试法检查程序内部逻辑结构,对所有的逻辑路径进行测试,是一种穷举路径的测试方法,但即使每条路径都测试过了,但仍然有可能存在错误。因为:穷举路径测试无法检查出程序本身是否违反了设计规范,即程序是否是一个错误的程序;穷举路径测试不可能检查出程序因为遗漏路径而出错;穷举路径测试发现不了一些与数据相关的错误。

白盒测试需要遵循的原则有:1. 保证一个模块中的所有独立路径至少被测试一次;2. 所有逻辑值均需要测试真(true)和假(false);两种情况;3. 检查程序的内部数据结构,保证其结构的有效性;4. 在上下边界及可操作范围内运行所有循环。

常用白盒测试方法:

静态测试:不用运行程序的测试,包括代码检查、静态结构分析、代码质量度量、文档测试等等,它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具(Fxcop)自动进行。

动态测试:需要执行代码,通过运行程序找到问题,包括功能确认与接口测试、覆盖率分析、性能分析、内存分析等。

白盒测试中的逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。六种覆盖标准发现错误的能力呈由弱到强的变化:

1.语句覆盖每条语句至少执行一次。

2.判定覆盖每个判定的每个分支至少执行一次。

3.条件覆盖每个判定的每个条件应取到各种可能的值。

4.判定/条件覆盖同时满足判定覆盖条件覆盖。

5.条件组合覆盖每个判定中各条件的每一种组合至少出现一次。

6.路径覆盖使程序中每一条可能的路径至少执行一次。

26、请你说一说你知道的自动化测试框架

1、模块化测试框架

模块化测试脚本框架(TEST MODulARITY FRAMEWORK)需要创建小而独立的可以描述的模块、片断以及待测应用程序的脚本。这些树状结构的小脚本组合起来,就能组成能用于特定的测试用例的脚本。在五种框架中,模块化框架是最容易掌握和使用的。在一个组件上方建立一个抽象层使其在余下的应用中隐藏起来,这是众所周知的编程技巧。这样应用同组件中的修改隔离开来,提供了程序设计的模块化特性。模块化测试脚本框架使用这一抽象或者封装的原理来提高自动测试组合的可维护性和可升级性。

2、测试库框架

测试库框架(Test Library Architecture)与模块化测试脚本框架很类似,并且具有同样的优点。不同的是测试库框架把待测应用程序分解为过程和函数而不是脚本。这个框架需要创建描述模块、片断以及待测应用程序的功能库文件。

3、关键字驱动或表驱动的测试框架

对于一个独立于应用的自动化框架,关键字驱动(KEYWORD DRIVEN)I9LJJ试和表驱动(TABLE DRIVEN)测试是可以互换的术语。这个框架需要开发数据表和关键字。这些数据表和关键字独立于执行它们的测试自动化工具,并可以用来“驱动"待测应用程序和数据的测试脚本代码,关键宇驱动测试看上去与手工测试用例很类似。在一个关键字驱动测试中,把待测应用程序的功能和每个测试的执行步骤一起写到一个表中。这个测试框架可以通过很少的代码来产生大量的测试用例。同样的代码在用数据表来产生各个测试用例的同时被复用。

4、数据驱动测试框架

数据驱动(DATA DRIVEN),LJ试是一个框架。在这里测试的输入和输出数据是从数据文件中读取(数据池,ODBC源,CSV文件,EXCEL文件,ADO对象等)并且通过捕获工具生成或者手工生成的代码脚本被载入到变量中。在这个框架中,变量不仅被用来存放输入值还被用来存放输出的验证值。整个程序中,测试脚本来读取数值文件,记载测试状态和信息。这类似于表驱动测试,在表驱动测 试中,它的测试用例是包含在数据文件而不是在脚本中,对于数据而言,脚本仅仅是一个“驱动器”,或者是一个传送机构。然而,数据驱动测试不同于表驱动测试,尽管导航数据并不包含在表结构中。在数据驱动测试中,数据文件中只包含测试数据。这个框架意图减少需要执行所有测试用例所需要的总的测试脚本数。数据驱动需要很少的代码来产生大量的测试用例,这与表驱动极其类似。

5、混合测试自动化(Hybrid Test Automation)框架

最普遍的执行框架是上面介绍的所有技术的一个结合,取其长处,弥补其不足。这个混合测试框架是由大部分框架随着时间并经过若干项目演化而来的

27*、请你说一说web测试和app测试的不同点

基础行业的web测试,和手机app测试又有什么的相同点与不同之处呢?

1、相同点

不管是传统行业的web测试,还是新兴的手机app测试,都离不开测试的基础知识,即是不管怎么变,测试的原理依然会融入在这两者当中。

1)设计测试用例时,依然都是依据边界值分析法、等价类划分等;

2)多数采用黑盒的测试方法,来验证业务功能是否得到正确的应用;

3)需要检查界面的布局、风格和按钮等是否简洁美观、是否统一等;

4)测试页面载入和翻页的速度、登录时长、内存是否溢出等;

5)测试应用系统的稳定性等。

 

2、不同点

相对于web测试,手机软件测试,除了要考虑基本的功能测试、性能等,还要考虑手机本身固有的属性特征。所以对比web测试和手机测试,手机测试过程中还需要注意如下几个方面特性:

1)手机作为通信工具,来电、去电、接收短信等操作都会对app应用程序产生影响,所以app测试第一个要考虑的属性特征是:中断测试。

中断测试有人为中断、新任务中断以及意外中断等几种情况,主要从以下几个方面进行验证:

a.来电中断:呼叫挂断、被呼叫挂断、通话挂断、通话被挂断

b.短信中断:接收短信、查看短信

c.其他中断:蓝牙、闹钟、插拔数据线、手机锁定、手机断电、手机问题(系统死机、重启)

2)手机用户对app产品的安装卸载操作:从上一个版本/上两个版本直接升级到最新版本。

全新安装新版本

新版本覆盖旧版本安装

卸载旧版本,安装新版本

卸载新版本,安装新版本

3)web自动化测试使用的工具较常用的是QTP,而android手机自动化测试工具比较常用的是monkey、monkeyrunner。

-------------------------------------------------------------------------------------------------------

web测试与终端app测试本质上没有什么区别,性质都一样!但是实际的测试工作中要考虑的因素有很大的差异性。

web更多的是考虑自身功能的实现与浏览器的兼用;

终端App除了要考虑自身功能实现与否外,还得考虑很多外在因素;如:wifi网络、个硬件按键、不同分辨率设备适配、兼容性、来电、没电等因素。

    web测试和app测试大部分都是手工测试为主;偶尔也会使用自动化测试工具进行简单的测试工作

28、请问你了解什么测试方法

1. 回归测试(Regression Testing)

回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。自动回归测试将大幅降低系统测试、维护升级等阶段的成本。回归测试作为软件生命周期的一个组成部分,在整个软件测试过程中占有很大的工作量比重,软件开发的各个阶段都会进行多次回归测试。在渐进和快速迭代开发中,新版本的连续发布使回归测试进行的更加频繁,而在极端编程方法中,更是要求每天都进行若干次回归测试。因此,通过选择正确的回归测试策略来改进回归测试的效率和有效性是很有意义的。

2. 集成测试(Integration Testing)

集成测试,也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。

集成测试(也叫组装测试,联合测试)是单元测试的逻辑扩展。它最简单的形式是:把两个已经测试过的单元组合成一个组件,测试它们之间的接口。从这一层意义上讲,组件是指多个单元的集成聚合。在现实方案中,许多单元组合成组件,而这些组件又聚合为程序的更大部分。方法是测试片段的组合,并最终扩展成进程,将模块与其他组的模块一起测试。最后,将构成进程的所有模块一起测试。此外,如果程序由多个进程组成,应该成对测试它们,而不是同时测试所有进程。

Bug在哪?

3. 功能测试(Function Testing)

功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能。

4. 内存泄漏测试(Memory Leak Testing)

内存泄漏也称作“存储渗漏”,用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。(其实说白了就是该内存空间使用完毕之后未回收)即所谓内存泄漏。

内存泄漏形象的比喻是“操作系统可提供给所有进程的存储空间正在被某个进程榨干”,最终结果是程序运行时间越长,占用存储空间越来越多,最终用尽全部存储空间,整个系统崩溃。所以“内存泄漏”是从操作系统的角度来看的。这里的存储空间并不是指物理内存,而是指虚拟内存大小,这个虚拟内存大小取决于磁盘交换区设定的大小。由程序申请的一块内存,如果没有任何一个指针指向它,那么这块内存就泄漏了。

5. Alpha测试 & Beta测试

Alpha测试是用户在开发环境下的测试,或者是开发内部的用户在模拟实际环境下的测试;Beta测试是由软件的一个或多个用户在实际使用环境下进行的测试。

两者区别:

Alpha测试由开发人员或测试人员在场,可随时记录下错误和使用中出现的问题。

Beta测试开发人员和测试人员都不在场。

所以,只有当α测试达到一定的可靠程度时,才能开始β测试。它处在整个测试的最后阶段。

6. 软件压力测试(Software testing pressure)

软件压力测试是一种基本的质量保证行为,它是每个重要软件测试工作的一部分。软件压力测试的基本思路很简单:不是在常规条件下运行手动或自动测试,而是在计算机数量较少或系统资源匮乏的条件下运行测试。通常要进行软件压力测试的资源包括内部内存、CPU 可用性、磁盘空间和网络带宽。

还是找不到bug

7. 负载测试(Load testing)

通过测试系统在资源超负荷情况下的表现,以发现设计上的错误或验证系统的负载能力。在这种测试中,将使测试对象承担不同的工作量,以评测和评估测试对象在不同工作量条件下的性能行为,以及持续正常运行的能力。负载测试的目标是确定并确保系统在超出最大预期工作量的情况下仍能正常运行。此外,负载测试还要评估性能特征。例如,响应时间、事务处理速率和其他与时间相关的方面。

8. 性能测试(performance testing)

性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供的最大服务级别的测试。

9. 验收测试(Acceptance testing)

验收测试是部署软件之前的最后一个测试操作。在软件产品完成了单元测试、集成测试和系统测试之后,产品发布之前所进行的软件测试活动。它是技术测试的最后一个阶段,也称为交付测试。验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务。

在工程及其他相关领域中,验收测试是指确认一系统是否符合设计规格或契约之需求内容的测试,可能会包括化学测试、物理测试或是性能测试。在系统工程中验收测试可能包括在系统(例如一套软件系统、许多机械零件或是一批化学制品)交付前的黑箱测试。软件开发者常会将系统开发者进行的验收测试和客户在接受产品前进行的验收测试分开。后者一般会称为使用者验收测试、终端客户测试、实机(验收)测试、现场(验收)测试。在进行主要测试程序之前,常用冒烟测试作为一个此阶段的验收测试。



作者:给你一颗小瓜子
链接:https://www.jianshu.com/p/ca1feb865f99
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


29、请问黑盒测试和白盒测试有哪些方法

 

30、请问你怎么看待测试,知道哪些测试的类型,有用过哪些测试方法?

 

31、请问你怎么测试网络协议

协议测试包括四种类型的测试

1、一致性测试:检测协议实现本身与协议规范的符合程度

2、互操作性测试:基于某一协议检测不同协议实现间互操作互通信的能力

3、性能测试:检测协议实现的性能指标,比如数据传输速度,连接时间,执行速度,吞吐量,并发度,

4、健壮性测试:检测协议是现在各种恶劣环境下运行的能力,比如注入干扰报文,通信故障,信道被切断

32、请你回答一下什么是α测试和β测试,以及什么时候用到他们

α测试:在受控的环境中进行,由用户在开发者的场所进行,并且在开发者对用户的指导下进行测试,开发者负责记录发现的错误和使用中遇到的问题

β测试:在开发者不能控制的环境中的真实应用,由软件的最终用户们在一个或多个客户场所下进行,由用户记录在测试中遇到的一系列问题,并定期报给开发者。

二、软件测试实例

1给你一个字符串,你怎么判断是不是ip地址?手写这段代码,并写出测试用例

2请进行测试用例设计:一串数字,闰年的判别

3请你说一说简单用户界面登陆过程都需要做哪些分析

4请对这个系统做出测试用例:一个系统多个摄像头抓拍车牌识别车牌上传网上网上展示

5请你对吃鸡游戏进行压力测试

6请你根据微信登录界面设计测试用例

7请你对朋友圈点赞功能进行测试

8.如果做一个杯子的检测你如何测试

9.如何对一个页面进行测试

10.如何对水壶进行测试

11*如何对淘宝搜索框进行测试

12.如何对一瓶矿泉水进行测试

13如何测试登陆界面

14.请你说一下jmeter

15.请你进行测试:前端下拉框实现,测试下拉框定位方式

16.请你来聊一聊appium断言

17.请你来说一下购物车测试用例

18.请你进行一下弱网模拟

19、你写的测试程序是怎么样的,你写过前端、后端程序吗?

20、请问你有没有写过测试脚本,怎么写的?
21、请问你有没有写过web测试,怎么写的?
23、请你回答一下如何测试手机开机键?
24、请问你遇到过哪些印象深刻的bug,接口测试出现bug的原因有哪些?
25、你在做项目中有做过压力测试吗,怎么做
26、请问你在项目中关于功能测试和接口测试是怎么做的
27、请问你有用过什么测试工具吗,用过哪些?
28、请你设计一个微信朋友圈点赞的测试用例
29、请问如果用户点击微博的关注图标但是app上面没有反应,应该怎么排查这个问题
30、在做测试的过程中,假如前端和后端吵起来了都在踢皮球觉得对方该改代码,你怎么办?

31、如果广东用户头条app刷不出东西了,你应该怎么排查问题

32、请你说一下能不能用机器学习去进行自动化测试,如何监控异常流量,如果是脉冲呢,如何和正常流量作区分

33、请问如何将大量日志的异常记录或错误揪出来

34、请问如何对登录界面进行测试

35、请你说一说当前工作中涉及的测试问题(测试流程和测试性能)

36、请你说一说洗牌问题的思路并手写代码,并设计测试用例

37、请你测试一下游戏中英雄的技能

38、请你回答一下性能测试有哪些指标,对一个登录功能做性能测试,有哪些指标,怎么测出可同时处理的最大请求数量

39、请问你有没有做过什么单元测试,怎么进行单元测试,对一个没有参数没有返回值但可能对全局变量有影响的怎么进行单元测试

40、请问你有没有做过压力测试
41、对于有系统大量并发访问,你会如何做测试,有什么建议

三、语言基础

 

1、Java

1.请你说一下多态

 

多态概念 (Java)

    多态(英语:polymorphism),是指计算机程序运行时,相同的消息可能会送给多个不同的类别之对象,而系统可依据对象所属类别,引发对应类别的方法,而有不同的行为。简单来说,所谓多态意指相同的消息给予不同的对象会引发不同的动作称之。

多态也可定义为“一种将不同的特殊行为和单个泛化记号相关联的能力”。

多态可分为变量多态与函数多态。变量多态是指:基类型的变量(对于C++是引用或指针)可以被赋值基类型对象,也可以被赋值派生类型的对象。函数多态是指,相同的函数调用界面(函数名与实参表),传送给一个对象变量,可以有不同的行为,这视该对象变量所指向的对象类型而定。因此,变量多态是函数多态的基础。

 

 

例子

    比如有动物(Animal)之类别(Class),而且由动物继承出类别鸡(Chicken)和类别狗(Dog),并对同一源自类别动物(父类别)之一消息有不同、的响应,如类别动物有“叫()”之动作,而类别鸡会“啼叫()”,类别狗则会“吠叫()”,则称之为多态。

 

概括

    上面关于多态的概念看起来有那么一点难以理解,但是我们可以把上述一大段话给归纳成为一句话就是:相同的消息可能会送给多个不同的类别之对象,而系统可依据对象所属类别,引发对应类别的方法,而有不同的行为。

例如:比如有动物(Animal)之类别(Class),而且由动物继承出类别鸡(Chicken)和类别狗(Dog),并对同一源自类别动物(父类别)之一消息有不同的响应。

 

 

解释

        方法的覆盖特性是Java在运行时支持的多态性之一。系统动态的调度方法是由调用一个被覆盖的方法引起的,该调用机制发生在运行时,而不是编译时。

 

  • 当一个被覆盖的方法通过一个父类引用调用时,Java决定执行哪个版本的方法(父类的方法或者被子类覆盖的方法)取决于方法调用发生时,被引用的对象的类型。因此,这一决定实在运行期间做出来的。
  • 在运行期间,哪个版本的被覆盖的方法将会被执行是由被引用的对象的类型决定的而不是引用的类型(值)。
  • 一个父类的引用可以引用一个子类的对象,这也是一些人口中所说的“向上转型”,Java用这个方法来解决程序运行时覆盖方法被调用的问题。

2请问Java中接口与抽象类是否相同?

1. CPU 和 GPU的区别
CPU 力气大啥P事都能干,还要协调。
GPU 上面那家伙的小弟,老大让他处理图形,这方面处理简单,但是量大,老大虽然能处理,可是老大只有那么几个兄弟,所以不如交给小弟处理了,小弟兄弟多,有数百至数千个,而且是专门只干这行和只能干这行。
详细解释
2. 推荐的算法有哪些?
1 基于人口统计学的推荐
2 基于内容的推荐
3 协同过滤
4 混合推荐算法
3. 协同过滤
协同过滤是利用集体智慧的一个典型方法。要理解什么是协同过滤 (Collaborative Filtering, 简称 CF),首先想一个简单的问题,如果你现在想看个电影,但你不知道具体看哪部,你会怎么做?大部分的人会问问周围的朋友,看看最近有什么好看的电影推荐,而我们一般更倾向于从口味比较类似的朋友那里得到推荐。这就是协同过滤的核心思想。
换句话说,就是借鉴和你相关人群的观点来进行推荐。
4. Linux命令
查看整个磁盘还剩多少空间 df -h
查看当前的文件夹下的磁盘使用情况 du –max-depth=1 -h
查看某一个文件(文件夹)的大小 du -sh或du -h –max-depth=0
du命令后面可以跟文件路径,来查看指定路径的大小 du -sh /root
找到一个文件中含有aaa 和 bbb和行 grep ‘aaa’ *.txt|xargs grep ‘bbb’
更多命令
5. 白盒和黑盒测试的方法有哪些?
黑盒测试的测试方法有:等价类划分、边界值分析法、猜错法、随机数法、因果图。
白盒测试的测试方法有:代码检查法、程序变异、静态结构分析法、静态质量度量法、符号测试法、逻辑覆盖法、域测试、Z路径覆盖和基本路径测试法。
6. Python实现字符串替换
a = ‘hello word’
a.replace(‘word’,’python’)或
import re
strinfo = re.compile(‘word’)
b = strinfo.sub(‘python’,a)
print b

链接:https://www.nowcoder.com/discuss/165276?type=0&order=0&pos=21&page=1
来源:牛客网
 

测试工程师面试考点汇总

以下不作为测试工程师的学习路径,只是汇总的校招测试工程师面试考点(因为还有笔试考点,后面结合在一起给大家学习路径),后续会为大家更新10w+字数的测试工程师校招面试题库,还有其他岗位的相关题库和资料,想要什么岗位的可以留言哦~

本篇根据各个公司的面试问的问题的大数据进行总结,后面还会更新面试中考察所占比例,当然,本文只包括技术面,不太包括hr面或者一些其他谈人生理想的

 

附题目

一、软件测试基础知识

1、请你分别介绍一下单元测试、集成测试、系统测试、验收测试、回归测试

1、单元测试:完成最小的软件设计单元(模块)的验证工作,目标是确保模块被正确的编码,使用过程设计描述作为指南,对重要的控制路径进行测试以发现模块内的错误,通常情况下是白盒的,对代码风格和规则、程序设计和结构、业务逻辑等进行静态测试,及早的发现和解决不易显现的错误。

2、集成测试:通过测试发现与模块接口有关的问题。目标是把通过了单元测试的模块拿来,构造一个在设计中所描述的程序结构,应当避免一次性的集成(除非软件规模很小),而采用增量集成。

自顶向下集成:模块集成的顺序是首先集成主模块,然后按照控制层次结构向下进行集成,隶属于主模块的模块按照深度优先或广度优先的方式集成到整个结构中去。

自底向上集成:从原子模块开始来进行构造和测试,因为模块是自底向上集成的,进行时要求所有隶属于某个给顶层次的模块总是存在的,也不再有使用稳定测试桩的必要。

3、系统测试:是基于系统整体需求说明书的黑盒类测试,应覆盖系统所有联合的部件。系统测试是针对整个产品系统进行的测试,目的是验证系统是否满足了需求规格的定义,找出与需求规格不相符合或与之矛盾的地方。系统测试的对象不仅仅包括需要测试的产品系统的软件,还要包含软件所依赖的硬件、外设甚至包括某些数据、某些支持软件及其接口等。因此,必须将系统中的软件与各种依赖的资源结合起来,在系统实际运行环境下来进行测试.

4、回归测试:回归测试是指在发生修改之后重新测试先前的测试用例以保证修改的正确性。理论上,软件产生新版本,都需要进行回归测试,验证以前发现和修复的错误是否在新软件版本上再次出现。根据修复好了的缺陷再重新进行测试。回归测试的目的在于验证以前出现过但已经修复好的缺陷不再重新出现。一般指对某已知修正的缺陷再次围绕它原来出现时的步骤重新测试。

5、验收测试:验收测试是指系统开发生命周期方法论的一个阶段,这时相关的用户或独立测试人员根据测试计划和结果对系统进行测试和接收。它让系统用户决定是否接收系统。它是一项确定产品是否能够满足合同或用户所规定需求的测试。验收测试包括Alpha测试和Beta测试。

Alpha测试:是由用户在开发者的场所来进行的,在一个受控的环境中进行。

Beta测试:由软件的最终用户在一个或多个用户场所来进行的,开发者通常不在现场,用户记录测试中遇到的问题并报告给开发者,开发者对系统进行最后的修改,并开始准备发布最终的软件。

2、请你回答一下单元测试、集成测试、系统测试、验收测试、回归测试这几步中最重要的是哪一步

这些测试步骤分别在软件开发的不同阶段对软件进行测试,我认为对软件完整功能进行测试的系统测试很重要,因为此时单元测试和集成测试已完成,能够对软件所有功能进行功能测试,能够覆盖系统所有联合的部件,是针对整个产品系统进行的测试,能够验证系统是否满足了需求规格的定义,因此我认为系统测试很重要。

3请回答集成测试和系统测试的区别,以及它们的应用场景主要是什么?

1、测试内容:集成测试是测试各个单元模块之间的接口,系统测试是测试整个系统的功能和性能;

2、测试角度:集成测试偏重于技术的角度进行测试,系统测试是偏重于业务的角度进行测试。

4.请问测试开发需要哪些知识?需要具备什么能力


 

正确高效的沟通能力:测试工程师必须能够痛测试工作所涉及到的所偶有人进行沟通,具有与技术人员(开发人员)和非技术人员(客户,管理人员)的交流能力。

超强责任心:测试工作在很大程度上依赖于测试人员自己,因此责任心应该被定义为软件测试人员的最基本素质

坚持原则:测试工程师需要对产品的质量负责们在这一点上一定要有原则

懂得尊重:工作的技能要求不同,工作化境不同,这样就导致了工作难度不同,虽然不能将测试的工作与其他的工作进行直接对比,但是我们也要其他的同时保持足够的尊重,无论你发现了什么样的缺陷或发现了多少缺陷,这只能说明产品有问题,但不能说明人员能力有问题,因为很多问题的成因非常的复杂,需要多方面来解决。

有较全面的技术知识:较全面的技术知识能够帮助测试人员定位缺陷,也能帮助测试人员与技术人员新型有效的沟通,同时还能提高测试人员的技术水平。

二、软件测试工程师必须具备专业技能

测试的专业技能:包括白盒测试、黑盒测试、静态测试、动态测试等测试策略,以及功能车市、性能测试、界面测试、安装测试等测试方法。

软件编程技能:测试工程师要使用自动化测试工具没这就要求测试工程师鞥故编辑脚本,而编辑脚本则需要测试工程师几倍一定的编辑能力。同时,有一定的编辑能力也有利测试工程师更好的定位缺陷。

网络,操作系统,数据库、中间件等知识:与开发人员相比,测试人员的技术有“全而不精”的特点,这是由于测试工程师需要配置各种测试环境,分析影响性能的各种原因而需局别的技术要求!

5请说一说黑盒与白盒的测试方法

黑盒测试:

黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用。

在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数锯而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。

“黑盒”法着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功能进行测试。

“黑盒”法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。

实际上测试情况有无穷多个,因此不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。

常用的黑盒测试方法有:等价类划分法;边界值分析法;因果图法;场景法;正交实验设计法;判定表驱动分析法;错误推测法;功能图分析法。

 

白盒测试:

白盒测试也称为结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。

它根据程序的控制结构设计测试用例,主要用于软件或程序验证。

白盒测试法检查程序内部逻辑结构,对所有的逻辑路径进行测试,是一种穷举路径的测试方法,但即使每条路径都测试过了,但仍然有可能存在错误。

穷举路径测试无法检查出程序本身是否违反了设计规范,即程序是否是一个错误的程序;穷举路径测试不可能检查出程序因为遗漏路径而出错;穷举路径测试发现不了一些与数据相关的错误。

 

白盒测试需要遵循的原则有:

1. 保证一个模块中的所有独立路径至少被测试一次;

2. 所有逻辑值均需要测试真(true)和假(false);两种情况;

3. 检查程序的内部数据结构,保证其结构的有效性;

4. 在上下边界及可操作范围内运行所有循环。

 

常用白盒测试方法:

静态测试:不用运行程序的测试,包括代码检查、静态结构分析、代码质量度量、文档测试等等,它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具(Fxcop)自动进行。

动态测试:需要执行代码,通过运行程序找到问题,包括功能确认与接口测试、覆盖率分析、性能分析、内存分析等。

白盒测试中的逻辑覆盖包括:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。

 

六种覆盖标准发现错误的能力呈由弱到强的变化:

1.语句覆盖每条语句至少执行一次。

2.判定覆盖每个判定的每个分支至少执行一次。

3.条件覆盖每个判定的每个条件应取到各种可能的值。

4.判定/条件覆盖同时满足判定覆盖条件覆盖。

5.条件组合覆盖每个判定中各条件的每一种组合至少出现一次。

6.路径覆盖使程序中每一条可能的路径至少执行一次。

 

6请说一下手动测试与自动化测试的优缺点

手工测试缺点:

1、重复的手工回归测试,代价昂贵、容易出错。

2、依赖于软件测试人员的能力。

手工测试优点:

1、测试人员具有经验和对错误的猜测能力。

2、测试人员具有审美能力和心理体验。

3、测试人员具有是非判断和逻辑推理能力。

自动化测试的优点:

1、对程序的回归测试更方便。这可能是自动化测试最主要的任务,特别是在程序修改比较频繁时,效果是非常明显的。由于回归测试的动作和用例是完全设计好的,测试期望的结果也是完全可以预料的,将回归测试自动运行,可以极大提高测试效率,缩短回归测试时间。

2、可以运行更多更繁琐的测试。自动化的一个明显的好处是可以在较少的时间内运行更多的测试。

3、可以执行一些手工测试困难或不可能进行的测试。比如,对于大量用户的测试,不可能同时让足够多的测试人员同时进行测试,但是却可以通过自动化测试模拟同时有许多用户,从而达到测试的目的。

4、更好地利用资源。将繁琐的任务自动化,可以提高准确性和测试人员的积极性,将测试技术人员解脱出来投入更多精力设计更好的测试用例。有些测试不适合于自动测试,仅适合于手工测试,将可自动测试的测试自动化后,可以让测试人员专注于手工测试部分,提高手工测试的效率。

5、测试具有一致性和可重复性。由于测试是自动执行的,每次测试的结果和执行的内容的一致性是可以得到保障的,从而达到测试的可重复的效果。

6、测试的复用性。由于自动测试通常采用脚本技术,这样就有可能只需要做少量的甚至不做修改,实现在不同的测试过程中使用相同的用例。

7、增加软件信任度。由于测试是自动执行的,所以不存在执行过程中的疏忽和错误,完全取决于测试的设计质量。一旦软件通过了强有力的自动测试后,软件的信任度自然会增加。

自动化测试的缺点:

1、不能取代手工测试

2、手工测试比自动测试发现的缺陷更多

3、对测试质量的依赖性极大

4、测试自动化不能提高有效性

5、测试自动化可能会制约软件开发。由于自动测试比手动测试更脆弱,所以维护会受到限制,从而制约软件的开发。

6、工具本身并无想像力



 

7.请问你怎么看待软件测试的潜力和挑战

软件测试是正在快速发展,充满挑战的领域。尽管现在许多自动化测试软件的出现使得传统手工测试的方式被代替,但自动化测试工具的开发、安全测试、测试建模、精准测试、性能测试、可靠性测试等专项测试中仍然需要大量具有专业技能与专业素养的测试人员,并且随着云计算、物联网、大数据的发展,传统的测试技术可能不再适用,测试人员也因此面临着挑战,需要深入了解新场景并针对不同场景尝试新的测试方法,同时敏捷测试、Devops的出现也显示了软件测试的潜力。



 

8、你觉得软件测试的核心竞争力是什么

 

测试人员的核心竞争力在于提早发现问题,并能够发现别人无法发现的问题。

1、早发现问题:问题发现的越早,解决的成本越低。如果一个需求在还未实现的时候就能发现需求的漏洞,那么这种问题的价值是最高的。

2、发现别人无法发现的问题:所有人都能发现的问题,你发现了,那就证明你是可以被替代的。别人发现不了,而你可以发现,那么你就是无法被替代。

 

9、你觉得测试和开发需要怎么结合才能使软件的质量得到更好的保障

 

测试和开发应该按照W模型的方式进行结合,测试和开发同步进行,能够尽早发现软件缺陷,降低软件开发的成本。

在V模型中,测试过程被加在开发过程的后半部分,单元测试所检测代码的开发是否符合详细设计的要求。集成测试所检测此前测试过的各组成部分是否能完好地结合到一起。系统测试所检测已集成在一起的产品是否符合系统规格说明书的要求。而验收测试则检测产品是否符合最终用户的需求。V模型的缺陷在于仅仅把测试过程作为在需求分析、系统设计及编码之后的一个阶段,忽视了测试对需求分析、系统设计的验证,因此需求阶段的缺陷很可能一直到后期的验收测试才被发现,此时进行弥补将耗费大量人力物力资源。

相对于V模型,W模型增加了软件各开发阶段中应同步进行的验证和确认活动。W模型由两个V字型模型组成,分别代表测试与开发过程,图中明确表示出了测试与开发的并行关系。

W模型强调:测试伴随着整个软件开发周期,而且测试的对象不仅仅是程序,需求、设计等同样要测试,也就是说,测试与开发是同步进行的。W模型有利于尽早地全面的发现问题。例如,需求分析完成后,测试人员就应该参与到对需求的验证和确认活动中,以尽早地找出缺陷所在。同时,对需求的测试也有利于及时了解项目难度和测试风险,及早制定应对措施,这将显著减少总体测试时间,加快项目进度。

W模型中测试的活动与软件开发同步进行,测试的对象不仅仅是程序,还包括需求和设计,因此能够尽早发现软件缺陷,降低软件开发的成本。

10、你觉得单元测试可行吗

可行,单元测试可以有效地测试某个程序模块的行为,是未来重构代码的信心保证。事前可以保证质量,事后可以快速复现问题,并在修改代码后做回归自测。可行性考虑的是要用一些可行的方法做到关键的代码可测试,如通过边界条件、等价类划分、错误、因果,设计测试用例要覆盖常用的输入组合、边界条件和异常。

11、你觉得自动化测试有什么意义,都需要做些什么

自动化测试的意义在于

1、可以对程序的新版本自动执行回归测试

2、可以执行手工测试困难或者不可能实现的测试,如压力测试,并发测试,

3、能够更好的利用资源,节省时间和人力

执行自动化测试之前首先判断这个项目是否适合自动化测试,然后对项目做需求分析,指定测试计划,搭建自动化测试框架,设计测试用例,执行测试,评估


12、请你回答一下测试的相关流程是什么?

需求测试->概要设计测试->详细设计测试->单元测试->集成测试->系统测试->验收测试
13、请你说一下如何写测试用例

1、测试人员尽早介入,彻底理解清楚需求,这个是写好测试用例的基础

2、如果以前有类似的需求,可以参考类似需求的测试用例,然后还需要看类似需求的bug情况

3、清楚输入、输出的各种可能性,以及各种输入的之间的关联关系,理解清楚需求的执行逻辑,通过等价类、边界值、判定表等方法找出大部分用例

4、找到需求相关的一些特性,补充测试用例

5、根据自己的经验分析遗漏的测试场景

6、多总结类似功能点的测试点,才能够写出质量越来越高的测试用例

7、书写格式一定要清晰


14、请问你觉得测试项目具体工作是什么?

搭建测试环境

撰写测试用例

执行测试用例

写测试计划,测试报告

测试,并提交BUG表单

跟踪bug修改情况

执行自动化测试,编写脚本,执行,分析,报告

进行性能测试,压力测试等其他测试,执行,分析,调优,报告

15、请问如果想进行bug的测评,怎么去评测bug?

Bug的priority()和severity()是两个重要属性,通常人员在提交bug的时候,只定义severity,而将priority交给leader定义,通常bug管理中,severity分为四个等级blocker、critical、major、minor/trivial,而priority分为五个等级immediate、urgent、high、normal、low。

Serverity(严重程度)

1、Blocker(崩溃):阻碍开发或测试工作的问题;造成系统崩溃、死机、死循环,导致数据库数据丢失,与数据库连接错误,主要功能丧失,基本模块缺失等问题。如:代码错误、死循环、数据库发生死锁、重要的一级菜单功能不能使用等。(该问题在测试中较少出现,一旦出现应立即中止当前版本测试)

2、Critical(严重):系统主要功能部分丧失、数据库保存调用错误、用户数据丢失,一级功能菜单不能使用但是不影响其他功能的测试。功能设计与需求严重不符,模块无法启动或调用,程序重启、自动退出,关联程序间调用冲突,安全问题、稳定性等。如:软件中数据保存后数据库中显示错误,用户所要求的功能缺失,程序接口错误,数值计算统计错误等。(该等级问题出现在不影响其他功能测试的情况下可以继续该版本测试)

 3、Major(一般、界面、性能缺陷、兼容性):功能没有完全实现但是不影响使用,功能菜单存在缺陷但不会影响系统稳定性。如:操作时间长、查询时间长、格式错误、边界条件错误,删除没有确认框、数据库表中字段过多等。(该问题实际测试中存在最多,合理安排解决Bug,解决率关系版本的优化程度) 

 4、Minor/Trivial(次要、易用性及建议性问题):界面、性能缺陷,建议类问题,不影响操作功能的执行,可以优化性能的方案等。如:错别字、界面格式不规范,页面显示重叠、不该显示的要隐藏,描述不清楚,提示语丢失,文字排列不整齐,光标位置不正确,用户体验感受不好,可以优化性能的方案等。(此类问题在测试初期较多,优先程度较低;在测试后期出现较少,应及时处理)

Priority(优先级)

1、Immediate(马上解决):表示问题必须马上解决,否则系统根本无法达到预定的需求。

2、Urgent(急需解决):表示问题的修复很紧要,很急迫,关系到系统的主要功能模块能否正常。 

3、High(高度重视):表示有时间就要马上解决,否则系统偏离需求较大或预定功能不能正常实现。

4、Normal(正常处理):进入个人计划解决,表示问题不影响需求的实现,但是影响其他使用方面,比如页面调用出错,调用了错误的等。

5、Low(低优先级):即问题在系统发布以前必须确认解决或确认可以不予解决。

 

16、请你说一说**测试用例的边界

 

17、请你说一下软件质量的六个特征

按照软件质量国家标准GB-T8566--2001G,软件质量可以用下列特征来评价:

a.功能特征:与一组功能及其指定性质有关的一组属性,这里的功能是满足明确或隐含的需求的那些功能。

b.可靠特征:在规定的一段时间和条件下,与软件维持其性能水平的能力有关的一组属性。

c.易用特征:由一组规定或潜在的用户为使用软件所需作的努力和所作的评价有关的一组属性。

d.效率特征:与在规定条件下软件的性能水平与所使用资源量之间关系有关的一组属性。

e.可维护特征:与进行指定的修改所需的努力有关的一组属性。

f.可移植特征:与软件从一个环境转移到另一个环境的能力有关的一组属性。

 

18、请你说一下设计测试用例的方法

黑盒测试:

1.等价类划分

等价类划分是将系统的输入域划分为若干部分,然后从每个部分选取少量代表性数据进行测试。等价类可以划分为有效等价类和无效等价类,设计测试用例的时候要考虑这两种等价类。

2.边界值分析法

边界值分析法是对等价类划分的一种补充,因为大多数错误都在输入输出的边界上。边界值分析就是假定大多数错误出现在输入条件的边界上,如果边界附件取值不会导致程序出错,那么其他取值出错的可能性也就很小。

边界值分析法是通过优先选择不同等价类间的边界值覆盖有效等价类和无效等价类来更有效的进行测试,因此该方法要和等价类划分法结合使用。

3.正交试验法

正交是从大量的试验点中挑选出适量的、有代表性的点。正交试验设计是研究多因素多水平的一种设计方法,他是一种基于正交表的高效率、快速、经济的试验设计方法。

4.状态迁移法

状态迁移法是对一个状态在给定的条件内能够产生需要的状态变化,有没有出现不可达的状态和非法的状态,状态迁移法是设计足够的用例达到对系统状态的覆盖、状态、条件组合、状态迁移路径的覆盖。

5.流程分析法

流程分析法主要针对测试场景类型属于流程测试场景的测试项下的测试子项进行设计,这是从白盒测试中路径覆盖分析法借鉴过来的一种很重要的方法。

6.输入域测试法

输入域测试法是针对输入会有各种各样的输入值的一个测试,他主要考虑 极端测试、中间范围测试,特殊值测试 。

7.输出域分析法

输出域分析法是对输出域进行等价类和边界值分析,确定是要覆盖的输出域样点,反推得到应该输入的输入值,从而构造出测试用例,他的目的是为了达到输出域的等价类和边界值覆盖。

8.判定表分析法

判定表是分析和表达多种输入条件下系统执行不同动作的工具,他可以把复杂的逻辑关系和多种条件组合的情况表达的即具体又明确;

9.因果图法

因果图是用于描述系统输入输出之间的因果关系、约束关系。因果图的绘制过程是对被测系统的外部特征的建模过程,根据输入输出间的因果图可以得到判定表,从而规划出测试用例。

10.错误猜测法

错误猜测法主要是针对系统对于错误操作时对于操作的处理法的猜测法,从而设计测试用例

11.异常分析法

异常分析法是针对系统有可能存在的异常操作,软硬件缺陷引起的故障进行分析,分析发生错误时系统对于错误的处理能力和恢复能力依此设计测试用例。

 

白盒测试:

白盒测试也称为结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。它根据程序的控制结构设计测试用例,主要用于软件或程序验证。白盒测试法检查程序内部逻辑结构,对所有的逻辑路径进行测试,是一种穷举路径的测试方法,但即使每条路径都测试过了,但仍然有可能存在错误。因为:穷举路径测试无法检查出程序本身是否违反了设计规范,即程序是否是一个错误的程序;穷举路径测试不可能检查出程序因为遗漏路径而出错;穷举路径测试发现不了一些与数据相关的错误。

白盒测试需要遵循的原则有:

1. 保证一个模块中的所有独立路径至少被测试一次;

2. 所有逻辑值均需要测试真(true)和假(false);两种情况;

3. 检查程序的内部数据结构,保证其结构的有效性;

4. 在上下边界及可操作范围内运行所有循环。

常用白盒测试方法:

静态测试:不用运行程序的测试,包括代码检查、静态结构分析、代码质量度量、文档测试等等,它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具(Fxcop)自动进行。

动态测试:需要执行代码,通过运行程序找到问题,包括功能确认与接口测试、覆盖率分析、性能分析、内存分析等。

白盒测试中的逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。

 

六种覆盖标准发现错误的能力呈由弱到强的变化:

1.语句覆盖每条语句至少执行一次。

2.判定覆盖每个判定的每个分支至少执行一次。

3.条件覆盖每个判定的每个条件应取到各种可能的值。

4.判定/条件覆盖同时满足判定覆盖条件覆盖。

5.条件组合覆盖每个判定中各条件的每一种组合至少出现一次。

6.路径覆盖使程序中每一条可能的路径至少执行一次。

19、请你说一说测试工程师的必备技能

需要的知识:

• 软件测试基础理论知识,如黑盒测试、白盒测试等;

• 编程语言基础,如C/C++、java、python等;

• 自动化测试工具,如Selenium、Appium、Robotium等;

• 计算机基础知识,如数据库、Linux、计算机网络等;

• 测试框架,如JUnit等。

需要具备的能力:

• 业务分析能力,分析整体业务流程、分析被测业务数据、分析被测系统架构、分析被测业务模块、分析测试所需资源、分析测试完成目标;

• 缺陷洞察能力,一般缺陷的发现能力、隐性问题的发现能力、发现连带问题的能力、发现问题隐患的能力、尽早发现问题的能力、发现问题根源的能力;

• 团队协作能力,合理进行人员分工、协助组员解决问题、配合完成测试任务、配合开发重现缺陷、督促项目整体进度、出现问题勇于承担;

• 专业技术能力,掌握测试基础知识、掌握计算机知识、熟练运用测试工具;

• 逻辑思考能力,判断逻辑的正确性、对可行性逻辑分析、站在客观角度思考;

• 问题解决能力,技术上的问题、工作中的问题、沟通问题;

• 沟通表达能力,和技术人员、产品人员、上下级的沟通;

• 宏观把控能力,有效控制测试时间、有效控制测试成本、有效制定测试计划、有效进行风险评估、有效控制测试方向。

20、请你说一下app性能测试的指标

1、内存:内存消耗测试节点的设计目标是为了让应用不占用过多的系统资源,且及时释放内存,保障整个系统的稳定性。

      

当然关于内存测试,在这里我们需要引入几个概念: 空闲状态、中等规格、满规格。

  • 空闲状态:打开应用后,点击home键让应用后台运行,此时应用处于的状态叫做空闲
  • 中等规格:对应用的操作时间的间隔较长
  • 满规格:对应用的操作时间的间隔较短

内存测试中存在很多测试子项,清单如下:

●空闲状态下的应用内存消耗;

●中等规格状态下的应用内存消耗;

●满规格状态下的应用内存消耗;

●应用内存峰值;

●应用内存泄露;

●应用是否常驻内存;

●压力测试后的内存使用。

 

2、CPU:

使用Android提供的view plaincopy在CODE上查看代码片派生到我的代码片

adbshell dumpsys CPUinfo |grep packagename >/address/CPU.txt来获取;

使用top命令view plaincopy在CODE上查看代码片派生到我的代码片

adbshell top |grep packagename>/address/CPU.txt来获取。

 

3、流量:

网络流量测试是针对大部分应用而言的,可能还有部分应用会关注网速、弱网之类的测试。

流量测试包括以下测试项:

应用首次启动流量提示;

应用后台连续运行2小时的流量值;

应用高负荷运行的流量峰值。

 

4、电量:

●测试手机安装目标APK前后待机功耗无明显差异;

●常见使用场景中能够正常进入待机,待机电流在正常范围内;

●长时间连续使用应用无异常耗电现象。

 

5、启动速度:

第一类:首次启动--应用首次启动所花费的时间;

第二类:非首次启动--应用非首次启动所花费的时间;

第三类:应用界面切换--应用界面内切换所花费的时间。

 

6、滑动速度、界面切换速度

 

7、与服务器交互的网络速度

21、请你说一说app测试的工具

功能测试自动化

a) 轻量接口自动化测试

jmeter,

b) APP UI层面的自动化

android:UI Automator Viewer,Android Junit,Instrumentation,UIAutomator,

iOS:基于Instrument的iOS UI自动化,

 

性能测试

a) Web前端性能测试

网络抓包工具:Wireshark

网页文件大小

webpagetest

pagespeed insight

chrome adb

b) APP端性能测试

Android内存占用分析:MAT

iOS内存问题分析:ARC模式

Android WebView性能分析:

iOS WebView性能分析

c) 后台服务性能测试

负载,压力,耐久性

可拓展性,基准

工具:apacheAB,Jmeter,LoadRunner,

 

专项测试

a) 兼容性测试

手工测试:操作系统,分辨率,rom,网络类型

云平台:testin,脚本编写,Android。

b) 流量测试

Android自带的流量管理,

iOS自带的Network

tcpdump抓包

WiFi代理抓包:Fiddler

流量节省方法:压缩数据,json优于xml;WebP优于传统的JPG,PNG;控制访问的频次;只获取必要的数据;缓存;

c) 电量测试

基于测试设备的方法,购买电量表进行测试。

GSam Battery Monitoe Pro

iOS基于Instrument Energy工具

d) 弱网络测试

手机自带的网络状况模拟工具

基于代理的弱网络的模拟:

工具:windows:Network Delay Simulator

Mac:Network Link Conditioner

22、请你说一说bug的周期,以及描述一下不同类别的bug

1、New:(新的)

当某个“bug”被第一次发现的时候,测试人员需要与项目负责人沟通以确认发现的的确是一个bug,如果被确认是一个bug,就将其记录下来,并将bug的状态设为New

2、Assigned(已指派的)

当一个bug被指认为New之后,将其反馈给开发人员,开发人员将确认这是否是一个bug,如果是,开发组的负责人就将这个bug指定给某位开发人员处理,并将bug的状态设定为“Assigned”

3、Open(打开的)

一旦开发人员开始处理bug的时候,他(她)就将这个bug的状态设置为“Open”,这表示开发人员正在处理这个“bug”

4、Fixed(已修复的)

当开发人员进行处理(并认为已经解决)之后,他就可以将这个bug的状态设置为“Fixed”并将其提交给开发组的负责人,然后开发组的负责人将这个bug返还给测试组

5、Pending Reset(待在测试的)

当bug被返还到测试组后,我们将bug的状态设置为Pending Reset”

6、Reset(再测试)

测试组的负责人将bug指定给某位测试人员进行再测试,并将bug的状态设置为“Reset”

7、Closed(已关闭的)

如果测试人员经过再次测试之后确认bug 已经被解决之后,就将bug的状态设置为“Closed”

8、Reopen(再次打开的)

如果经过再次测试发现bug(指bug本身而不是包括因修复而引发的新bug)仍然存在的话,测试人员将bug再次传递给开发组,并将bug的状态设置为“Reopen”

9、Pending Reject(拒绝中)

如果测试人员传递到开发组的bug被开发人员认为是正常行为而不是bug时,这种情况下开发人员可以拒绝,并将bug的状态设置为“Pending Reject”

10、Rejected(被拒绝的)

测试组的负责人接到上述bug的时候,如果他(她)发现这是产品说明书中定义的正常行为或者经过与开发人员的讨论之后认为这并不能算作bug的时候,开发组负责人就将这个bug的状态设置为“Rejected”

11、Postponed(延期)

有些时候,对于一些特殊的bug的测试需要搁置一段时间,事实上有很多原因可能导致这种情况的发生,比如无效的测试数据,一些特殊的无效的功能等等,在这种情况下,bug的状态就被设置为“Postponed“

不同类别的bug(Bug类型):

•    代码错误

•    界面优化

•    设计缺陷

•    配置相关

•    安装部署

•    安全相关

•    性能问题

•    标准规范

•    测试脚本

•    其他

23、请你说一说PC网络故障,以及如何排除障碍

(1)首先是排除接触故障,即确保你的网线是可以正常使用的。然后禁用网卡后再启用,排除偶然故障。打开网络和共享中心窗口,单击窗口左上侧“更改适配器设置”右击其中的“本地连接“或”无线网络连接”,单击快捷菜单中的“禁用”命令,即可禁用所选网络。接下来重启网络,只需右击后单击启用即可。
(2)使用ipconfig查看计算机的上网参数 1、单击“开始|所有程序|附件|命令提示符“,打开命令提示符窗口 2、输入ipconfig,按Enter确认,可以看到机器的配置信息,输入ipconfig/all,可以看到IP地址和网卡物理地址等相关网络详细信息。
(3)使用ping命令测试网络的连通性,定位故障范围 在命令提示符窗口中输入”ping 127.0.0.1“,数据显示本机分别发送和接受了4个数据包,丢包率为零,可以判断本机网络协议工作正常,如显示”请求超时“,则表明本机网卡的安装或TCP/IP协议有问题,接下来就应该检查网卡和TCP/IP协议,卸载后重装即可。
(4)ping本机IP 在确认127.0.0.1地址能被ping通的情况下,继续使用ping命令测试本机的IP地址能否被ping通,如不能,说明本机的网卡驱动程序不正确,或者网卡与网线之间连接有故障,也有可能是本地的路由表面收到了破坏,此时应检查本机网卡的状态是否为已连接,网络参数是否设置正确,如果正确可是不能ping通,就应该重新安装网卡驱动程序。丢失率为零,可以判断网卡安装配置没有问题,工作正常。
(5)ping网关 网关地址能被ping通的话,表明本机网络连接以及正常,如果命令不成功,可能是网关设备自身存在问题,也可能是本机上网参数设置有误,检查网络参数。

 

 

25、请你说一下黑盒白盒

参考回答:

黑盒测试:

黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,测试者在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数锯而产生正确的输出信息,并且保持外部信息(如数据库或文件)的完整性。

“黑盒”法着眼于程序外部结构、不考虑内部逻辑结构、针对软件界面和软件功能进行测试。“黑盒”法是穷举输入测试,只有把所有可能的输入都作为测试情况使用,才能以这种方法查出程序中所有的错误。实际上测试情况有无穷多个,因此不仅要测试所有合法的输入,而且还要对那些不合法但是可能的输入进行测试。

常用的黑盒测试方法有:等价类划分法;边界值分析法;因果图法;场景法;正交实验设计法;判定表驱动分析法;错误推测法;功能图分析法。

白盒测试:

白盒测试也称为结构测试或逻辑驱动测试,是针对被测单元内部是如何进行工作的测试。它根据程序的控制结构设计测试用例,主要用于软件或程序验证。白盒测试法检查程序内部逻辑结构,对所有的逻辑路径进行测试,是一种穷举路径的测试方法,但即使每条路径都测试过了,但仍然有可能存在错误。因为:穷举路径测试无法检查出程序本身是否违反了设计规范,即程序是否是一个错误的程序;穷举路径测试不可能检查出程序因为遗漏路径而出错;穷举路径测试发现不了一些与数据相关的错误。

白盒测试需要遵循的原则有:1. 保证一个模块中的所有独立路径至少被测试一次;2. 所有逻辑值均需要测试真(true)和假(false);两种情况;3. 检查程序的内部数据结构,保证其结构的有效性;4. 在上下边界及可操作范围内运行所有循环。

常用白盒测试方法:

静态测试:不用运行程序的测试,包括代码检查、静态结构分析、代码质量度量、文档测试等等,它可以由人工进行,充分发挥人的逻辑思维优势,也可以借助软件工具(Fxcop)自动进行。

动态测试:需要执行代码,通过运行程序找到问题,包括功能确认与接口测试、覆盖率分析、性能分析、内存分析等。

白盒测试中的逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖和路径覆盖。六种覆盖标准发现错误的能力呈由弱到强的变化:

1.语句覆盖每条语句至少执行一次。

2.判定覆盖每个判定的每个分支至少执行一次。

3.条件覆盖每个判定的每个条件应取到各种可能的值。

4.判定/条件覆盖同时满足判定覆盖条件覆盖。

5.条件组合覆盖每个判定中各条件的每一种组合至少出现一次。

6.路径覆盖使程序中每一条可能的路径至少执行一次。

26、请你说一说你知道的自动化测试框架

1、模块化测试框架

模块化测试脚本框架(TEST MODulARITY FRAMEWORK)需要创建小而独立的可以描述的模块、片断以及待测应用程序的脚本。这些树状结构的小脚本组合起来,就能组成能用于特定的测试用例的脚本。在五种框架中,模块化框架是最容易掌握和使用的。在一个组件上方建立一个抽象层使其在余下的应用中隐藏起来,这是众所周知的编程技巧。这样应用同组件中的修改隔离开来,提供了程序设计的模块化特性。模块化测试脚本框架使用这一抽象或者封装的原理来提高自动测试组合的可维护性和可升级性。

2、测试库框架

测试库框架(Test Library Architecture)与模块化测试脚本框架很类似,并且具有同样的优点。不同的是测试库框架把待测应用程序分解为过程和函数而不是脚本。这个框架需要创建描述模块、片断以及待测应用程序的功能库文件。

3、关键字驱动或表驱动的测试框架

对于一个独立于应用的自动化框架,关键字驱动(KEYWORD DRIVEN)I9LJJ试和表驱动(TABLE DRIVEN)测试是可以互换的术语。这个框架需要开发数据表和关键字。这些数据表和关键字独立于执行它们的测试自动化工具,并可以用来“驱动"待测应用程序和数据的测试脚本代码,关键宇驱动测试看上去与手工测试用例很类似。在一个关键字驱动测试中,把待测应用程序的功能和每个测试的执行步骤一起写到一个表中。这个测试框架可以通过很少的代码来产生大量的测试用例。同样的代码在用数据表来产生各个测试用例的同时被复用。

4、数据驱动测试框架

数据驱动(DATA DRIVEN),LJ试是一个框架。在这里测试的输入和输出数据是从数据文件中读取(数据池,ODBC源,CSV文件,EXCEL文件,ADO对象等)并且通过捕获工具生成或者手工生成的代码脚本被载入到变量中。在这个框架中,变量不仅被用来存放输入值还被用来存放输出的验证值。整个程序中,测试脚本来读取数值文件,记载测试状态和信息。这类似于表驱动测试,在表驱动测 试中,它的测试用例是包含在数据文件而不是在脚本中,对于数据而言,脚本仅仅是一个“驱动器”,或者是一个传送机构。然而,数据驱动测试不同于表驱动测试,尽管导航数据并不包含在表结构中。在数据驱动测试中,数据文件中只包含测试数据。这个框架意图减少需要执行所有测试用例所需要的总的测试脚本数。数据驱动需要很少的代码来产生大量的测试用例,这与表驱动极其类似。

5、混合测试自动化(Hybrid Test Automation)框架

最普遍的执行框架是上面介绍的所有技术的一个结合,取其长处,弥补其不足。这个混合测试框架是由大部分框架随着时间并经过若干项目演化而来的

27*、请你说一说web测试和app测试的不同点

基础行业的web测试,和手机app测试又有什么的相同点与不同之处呢?

1、相同点

不管是传统行业的web测试,还是新兴的手机app测试,都离不开测试的基础知识,即是不管怎么变,测试的原理依然会融入在这两者当中。

1)设计测试用例时,依然都是依据边界值分析法、等价类划分等;

2)多数采用黑盒的测试方法,来验证业务功能是否得到正确的应用;

3)需要检查界面的布局、风格和按钮等是否简洁美观、是否统一等;

4)测试页面载入和翻页的速度、登录时长、内存是否溢出等;

5)测试应用系统的稳定性等。

 

2、不同点

相对于web测试,手机软件测试,除了要考虑基本的功能测试、性能等,还要考虑手机本身固有的属性特征。所以对比web测试和手机测试,手机测试过程中还需要注意如下几个方面特性:

1)手机作为通信工具,来电、去电、接收短信等操作都会对app应用程序产生影响,所以app测试第一个要考虑的属性特征是:中断测试。

中断测试有人为中断、新任务中断以及意外中断等几种情况,主要从以下几个方面进行验证:

a.来电中断:呼叫挂断、被呼叫挂断、通话挂断、通话被挂断

b.短信中断:接收短信、查看短信

c.其他中断:蓝牙、闹钟、插拔数据线、手机锁定、手机断电、手机问题(系统死机、重启)

2)手机用户对app产品的安装卸载操作:从上一个版本/上两个版本直接升级到最新版本。

全新安装新版本

新版本覆盖旧版本安装

卸载旧版本,安装新版本

卸载新版本,安装新版本

3)web自动化测试使用的工具较常用的是QTP,而android手机自动化测试工具比较常用的是monkey、monkeyrunner。

-------------------------------------------------------------------------------------------------------

web测试与终端app测试本质上没有什么区别,性质都一样!但是实际的测试工作中要考虑的因素有很大的差异性。

web更多的是考虑自身功能的实现与浏览器的兼用;

终端App除了要考虑自身功能实现与否外,还得考虑很多外在因素;如:wifi网络、个硬件按键、不同分辨率设备适配、兼容性、来电、没电等因素。

    web测试和app测试大部分都是手工测试为主;偶尔也会使用自动化测试工具进行简单的测试工作

28、请问你了解什么测试方法

1. 回归测试(Regression Testing)

回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。自动回归测试将大幅降低系统测试、维护升级等阶段的成本。回归测试作为软件生命周期的一个组成部分,在整个软件测试过程中占有很大的工作量比重,软件开发的各个阶段都会进行多次回归测试。在渐进和快速迭代开发中,新版本的连续发布使回归测试进行的更加频繁,而在极端编程方法中,更是要求每天都进行若干次回归测试。因此,通过选择正确的回归测试策略来改进回归测试的效率和有效性是很有意义的。

2. 集成测试(Integration Testing)

集成测试,也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。

集成测试(也叫组装测试,联合测试)是单元测试的逻辑扩展。它最简单的形式是:把两个已经测试过的单元组合成一个组件,测试它们之间的接口。从这一层意义上讲,组件是指多个单元的集成聚合。在现实方案中,许多单元组合成组件,而这些组件又聚合为程序的更大部分。方法是测试片段的组合,并最终扩展成进程,将模块与其他组的模块一起测试。最后,将构成进程的所有模块一起测试。此外,如果程序由多个进程组成,应该成对测试它们,而不是同时测试所有进程。

Bug在哪?

3. 功能测试(Function Testing)

功能测试就是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能。

4. 内存泄漏测试(Memory Leak Testing)

内存泄漏也称作“存储渗漏”,用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。(其实说白了就是该内存空间使用完毕之后未回收)即所谓内存泄漏。

内存泄漏形象的比喻是“操作系统可提供给所有进程的存储空间正在被某个进程榨干”,最终结果是程序运行时间越长,占用存储空间越来越多,最终用尽全部存储空间,整个系统崩溃。所以“内存泄漏”是从操作系统的角度来看的。这里的存储空间并不是指物理内存,而是指虚拟内存大小,这个虚拟内存大小取决于磁盘交换区设定的大小。由程序申请的一块内存,如果没有任何一个指针指向它,那么这块内存就泄漏了。

5. Alpha测试 & Beta测试

Alpha测试是用户在开发环境下的测试,或者是开发内部的用户在模拟实际环境下的测试;Beta测试是由软件的一个或多个用户在实际使用环境下进行的测试。

两者区别:

Alpha测试由开发人员或测试人员在场,可随时记录下错误和使用中出现的问题。

Beta测试开发人员和测试人员都不在场。

所以,只有当α测试达到一定的可靠程度时,才能开始β测试。它处在整个测试的最后阶段。

6. 软件压力测试(Software testing pressure)

软件压力测试是一种基本的质量保证行为,它是每个重要软件测试工作的一部分。软件压力测试的基本思路很简单:不是在常规条件下运行手动或自动测试,而是在计算机数量较少或系统资源匮乏的条件下运行测试。通常要进行软件压力测试的资源包括内部内存、CPU 可用性、磁盘空间和网络带宽。

还是找不到bug

7. 负载测试(Load testing)

通过测试系统在资源超负荷情况下的表现,以发现设计上的错误或验证系统的负载能力。在这种测试中,将使测试对象承担不同的工作量,以评测和评估测试对象在不同工作量条件下的性能行为,以及持续正常运行的能力。负载测试的目标是确定并确保系统在超出最大预期工作量的情况下仍能正常运行。此外,负载测试还要评估性能特征。例如,响应时间、事务处理速率和其他与时间相关的方面。

8. 性能测试(performance testing)

性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接受的性能点,来获得系统能提供的最大服务级别的测试。

9. 验收测试(Acceptance testing)

验收测试是部署软件之前的最后一个测试操作。在软件产品完成了单元测试、集成测试和系统测试之后,产品发布之前所进行的软件测试活动。它是技术测试的最后一个阶段,也称为交付测试。验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务。

在工程及其他相关领域中,验收测试是指确认一系统是否符合设计规格或契约之需求内容的测试,可能会包括化学测试、物理测试或是性能测试。在系统工程中验收测试可能包括在系统(例如一套软件系统、许多机械零件或是一批化学制品)交付前的黑箱测试。软件开发者常会将系统开发者进行的验收测试和客户在接受产品前进行的验收测试分开。后者一般会称为使用者验收测试、终端客户测试、实机(验收)测试、现场(验收)测试。在进行主要测试程序之前,常用冒烟测试作为一个此阶段的验收测试。



作者:给你一颗小瓜子
链接:https://www.jianshu.com/p/ca1feb865f99
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


29、请问黑盒测试和白盒测试有哪些方法

 

30、请问你怎么看待测试,知道哪些测试的类型,有用过哪些测试方法?

 

31、请问你怎么测试网络协议

协议测试包括四种类型的测试

1、一致性测试:检测协议实现本身与协议规范的符合程度

2、互操作性测试:基于某一协议检测不同协议实现间互操作互通信的能力

3、性能测试:检测协议实现的性能指标,比如数据传输速度,连接时间,执行速度,吞吐量,并发度,

4、健壮性测试:检测协议是现在各种恶劣环境下运行的能力,比如注入干扰报文,通信故障,信道被切断

32、请你回答一下什么是α测试和β测试,以及什么时候用到他们

α测试:在受控的环境中进行,由用户在开发者的场所进行,并且在开发者对用户的指导下进行测试,开发者负责记录发现的错误和使用中遇到的问题

β测试:在开发者不能控制的环境中的真实应用,由软件的最终用户们在一个或多个客户场所下进行,由用户记录在测试中遇到的一系列问题,并定期报给开发者。

二、软件测试实例

1给你一个字符串,你怎么判断是不是ip地址?手写这段代码,并写出测试用例

2请进行测试用例设计:一串数字,闰年的判别

3请你说一说简单用户界面登陆过程都需要做哪些分析

4请对这个系统做出测试用例:一个系统多个摄像头抓拍车牌识别车牌上传网上网上展示

5请你对吃鸡游戏进行压力测试

6请你根据微信登录界面设计测试用例

7请你对朋友圈点赞功能进行测试

8.如果做一个杯子的检测你如何测试

9.如何对一个页面进行测试

10.如何对水壶进行测试

11*如何对淘宝搜索框进行测试

12.如何对一瓶矿泉水进行测试

13如何测试登陆界面

14.请你说一下jmeter

15.请你进行测试:前端下拉框实现,测试下拉框定位方式

16.请你来聊一聊appium断言

17.请你来说一下购物车测试用例

18.请你进行一下弱网模拟

19、你写的测试程序是怎么样的,你写过前端、后端程序吗?

20、请问你有没有写过测试脚本,怎么写的?
21、请问你有没有写过web测试,怎么写的?
23、请你回答一下如何测试手机开机键?
24、请问你遇到过哪些印象深刻的bug,接口测试出现bug的原因有哪些?
25、你在做项目中有做过压力测试吗,怎么做
26、请问你在项目中关于功能测试和接口测试是怎么做的
27、请问你有用过什么测试工具吗,用过哪些?
28、请你设计一个微信朋友圈点赞的测试用例
29、请问如果用户点击微博的关注图标但是app上面没有反应,应该怎么排查这个问题
30、在做测试的过程中,假如前端和后端吵起来了都在踢皮球觉得对方该改代码,你怎么办?

31、如果广东用户头条app刷不出东西了,你应该怎么排查问题

32、请你说一下能不能用机器学习去进行自动化测试,如何监控异常流量,如果是脉冲呢,如何和正常流量作区分

33、请问如何将大量日志的异常记录或错误揪出来

34、请问如何对登录界面进行测试

35、请你说一说当前工作中涉及的测试问题(测试流程和测试性能)

36、请你说一说洗牌问题的思路并手写代码,并设计测试用例

37、请你测试一下游戏中英雄的技能

38、请你回答一下性能测试有哪些指标,对一个登录功能做性能测试,有哪些指标,怎么测出可同时处理的最大请求数量

39、请问你有没有做过什么单元测试,怎么进行单元测试,对一个没有参数没有返回值但可能对全局变量有影响的怎么进行单元测试

40、请问你有没有做过压力测试
41、对于有系统大量并发访问,你会如何做测试,有什么建议

三、语言基础

 

1、Java

1.请你说一下多态

 

多态概念 (Java)

    多态(英语:polymorphism),是指计算机程序运行时,相同的消息可能会送给多个不同的类别之对象,而系统可依据对象所属类别,引发对应类别的方法,而有不同的行为。简单来说,所谓多态意指相同的消息给予不同的对象会引发不同的动作称之。

多态也可定义为“一种将不同的特殊行为和单个泛化记号相关联的能力”。

多态可分为变量多态与函数多态。变量多态是指:基类型的变量(对于C++是引用或指针)可以被赋值基类型对象,也可以被赋值派生类型的对象。函数多态是指,相同的函数调用界面(函数名与实参表),传送给一个对象变量,可以有不同的行为,这视该对象变量所指向的对象类型而定。因此,变量多态是函数多态的基础。

 

 

例子

    比如有动物(Animal)之类别(Class),而且由动物继承出类别鸡(Chicken)和类别狗(Dog),并对同一源自类别动物(父类别)之一消息有不同、的响应,如类别动物有“叫()”之动作,而类别鸡会“啼叫()”,类别狗则会“吠叫()”,则称之为多态。

 

概括

    上面关于多态的概念看起来有那么一点难以理解,但是我们可以把上述一大段话给归纳成为一句话就是:相同的消息可能会送给多个不同的类别之对象,而系统可依据对象所属类别,引发对应类别的方法,而有不同的行为。

例如:比如有动物(Animal)之类别(Class),而且由动物继承出类别鸡(Chicken)和类别狗(Dog),并对同一源自类别动物(父类别)之一消息有不同的响应。

 

 

解释

        方法的覆盖特性是Java在运行时支持的多态性之一。系统动态的调度方法是由调用一个被覆盖的方法引起的,该调用机制发生在运行时,而不是编译时。

 

  • 当一个被覆盖的方法通过一个父类引用调用时,Java决定执行哪个版本的方法(父类的方法或者被子类覆盖的方法)取决于方法调用发生时,被引用的对象的类型。因此,这一决定实在运行期间做出来的。
  • 在运行期间,哪个版本的被覆盖的方法将会被执行是由被引用的对象的类型决定的而不是引用的类型(值)。
  • 一个父类的引用可以引用一个子类的对象,这也是一些人口中所说的“向上转型”,Java用这个方法来解决程序运行时覆盖方法被调用的问题。

2请问Java中接口与抽象类是否相同?

参数抽象类接口
默认的方法实现它可以有默认的方法实现接口完全是抽象的,不存在方法的实现
实现子类使用 extends 关键字来继承抽象类。如果子类不是抽象类的话,它需要提供抽象类中所有声明的方法的实现。子类使用关键字 implements 来实现接口。它需要提供接口中所有声明的方法的实现
构造器抽象类可以有构造器接口不能有构造器
与正常 Java 类的区别除了你不能实例化抽象类之外,它和普通Java 类没有任何区别接口是完全不同的类型
访问修饰符抽象方法可以有 public、protected 和default 这些修饰符接口方法默认修饰符是 public,不可以使用其它修饰符
main方法抽象方法可以有 main 方法并且可以运行接口没有main 方法
多继承抽象方法可以继承一个类和实现多个接口接口只可以继承一个或多个其它接口
速度它比接口速度要快接口是稍微有点慢的,因为它需要时间去寻找在类中实现的方法
添加新方法如果你往抽象类中添加新的方法,你可以给它提供默认的实现。因此你不需要改变你现在的代码。如果你往接口中添加方法,那么你必须改变实现该接口的类

3.请你说一下垃圾回收机制

4请你说一下Java中的异常处理机制

5.请问多线程是什么?

6请你来聊一聊集合类内存

7.请你说一下java jvm内存机制

8.请你说一说有哪几种垃圾回收算法

9.请你说一说垃圾收集机制

10.请你回答一下GC Root可以是哪些

11.请你说一下OOM可能发生在哪,怎么查看,怎么调优

12.请你说一下类加载

13.请你说一下AQS

14.请你说一下volatile

15请你说一下死锁原因以及如何打破如何查看死锁进程状态

16.请你说一下内存泄漏

17.请你说一说class和interface的区别

18.请你说一下内存泄漏的原因

19.请你说一说强引用和弱引用

20.请说一下你对多态的理解

21、手写代码:求n以内的最大质数

22、请你说一下java里内存泄漏和溢出的区别

23、请问你用过什么语言,用这些语言写过什么程序

24、你知道java里面的内存管理机制吗,比如创建和回收是怎么管理的?

25请你说一下Java里integer和int的区别,以及如何比较相等

26请你介绍下Java学习情况,学习一门新的语言需要多快

27请你介绍一下gc,另外如果Java里写一个方法,这个方法里只有一条语句,即new一个对象请问**方法结束以后这个对象怎么回收的?

28请你回答一下protected,public,private的区别

29请你说一下抽象类和接口的区别

30请你说一下List和ArrayList的区别,以及arrayList和HashSet区别

31、请你回答一下**Java的内存结构是什么,全局变量,临时变量,静态变量分别存在哪里,堆分为哪几块,比如说新生代老生代,那么新生代又分为什么

32手写代码:给出一个int类型123,写一个函数,返回反转的值321

33请你回答一下c++和java的区别

34请你回答一下怎么判断哪些对象是可以删除的,可达是什么意思

35请你说一说接口有什么限制

36请问Java中线程如何实现,如何实现多线程,线程安全在Java中是如何实现的,线程的工作区是哪里**

37请你说一说内存溢出和内存泄漏是怎么回事

38请你介绍一HashMap,HashTable,ConcurrentHashMap

39请你说一下Hashset有什么特性,以及**hashset判断存入的对象是否重复是如何比较的

40、请你说一下Java的反射,你目前主要用他做什么,以及Java的泛型,他的主要作用是什么

41请问类加载器你了解吗

42ReentranceLock 和 synchronized 有什么区别

43请问object的hash该怎么设计

 

2、c++

1.请你说一下数组和指针的区别

2.请你说一说STL常用的容器

3请你说一下虚函数

4.请你说一下动态内存分配

5.请你说一下深copy浅copy

6.请你说一下C 中申请和释放内存的方法

7.请你说一说C++和C的区别

8.请你回答一下C++中的多态是怎么实现的

9请你说一下C语言的内存分配

10请你回答一下什么是指针以及指针和数组的区别指针和引用的区别

11请你说一下const和指针的区别,以及运算符优先级是怎么样的

12手写代码:写一个程序算出100以内7的倍数
13手写代码:写一个函数,不用加法和乘法,返回他的八倍
14请你说一下new和malloc的区别
15请你说一说C++语言的三大特性
16请你说一说虚函数和纯虚函数区别

17请你说一下static作用

18请问你怎么理解多态,他有什么好处

19手写代码:求两个数的最大公约数
20手写代码:将字符串转int类型,要求不能用已有的方法
21手写代码:求x的n次方

3、Python

1.手写代码:比较两个json数据是否相等

2请问怎么拿到python的输入方式?以及python怎么打开文件?

4、Shell

1、请你说一下shell的基本命令,怎么看到行号?怎么查进程的id?

 

2请你回答一下常用到的shell指令中与网络相关的有哪些,netstat、ping、ifconfig这三个的区别,分别是什么功能,netstat里面一般服务器启动后的端口状态是什么

 

四、算法与数据结构

1、链表

1手写代码:一个单向链表,每个节点上都有一个value;给定 一个 value,将该 value 之前的所有 value返回
2、手写代码:**怎么判断链表有环,怎么找环节点

 

3手写代码:一个单向链表,给出头结点,找出倒数第N个结点,要求O(N)的时间复杂度;

4.请问如何判断一个单向链表存在回路?

5请问如何判断一个链表是否有环

6请问如何判断两个链表是否相交

7手写代码:将一个数组指定offset后面的元素前置,可采用链表实现

8、手写代码:循环链表插入元素

2、数组

1、手写代码合并两个排序数组

2.手写代码:最大子数组问题(要求时间复杂度最佳)

3.手写代码:筛选数组arr中重复的元素,考虑时间复杂度。

4.写出一个函数,输入是两个数组,输出是将两个数组中所有元素排序以后用一个数组输出。

5、 请看一下这个小型的算法题,有一个长度未知的无序数组(无法获取数组长度,不许排序,数组元素为int范围内的任意值),如何找出第一个连续出现的重复的数(比如 4 3 4 3 5 5,找出的数是5)

6手写代码:合并两个有序数组

7.手写代码:有三种面值的硬币k1 < k2 < k3 ,找k面值的零钱,最少需要多少硬币

8手写代码:合并有序数组

9.手写代码:一个数组找出重复的元素

10.请问如何防止数组越界

11请回答数组和链表的区别,以及优缺点,另外有没有什么办法能够结合两者的优点

3、复杂度

1.一行里有很多IP地址,互相之间用 || 隔开,共有一万行。要求:取双竖线分隔的倒数第二列所有的IP地址并且去重并输出每个IP地址的出现次数。

2、手写代码:硬币找零问题(要求时间复杂度最佳)

2、排序

1、请问Java中collection的sort方法,默认的排序方法是什么

2、手写代码合并两个排序数组

3.请问有哪些排序算法

4.手写代码:冒泡排序

5手写代码:统计排序数组中出现次数最多的元素出现的次数?

6.请你说一下堆排序的思想?以及怎么初始建堆?是否稳定?

7、手写代码:数组的2-sum,3-sum,问题(leetcode原题)

8手写代码:5个扑克牌是否是顺子,大小王当成任意的

9、请你说一说快速排序并手写代码

10、你最熟悉什么算法?给我说一下原理或者排序过程?它的优缺点是什么?你知道什么排序算法,介绍他们的实现方法,时间复杂度和空间复杂度,是否稳定,快排基准点怎么选择,

11请你说一下快排如何实现?

3、

1、请你说一下BST的特点,**手写代码判断一棵树是不是BST
2手写代码:给一个二叉树,怎么得到这棵树的镜像

3手写代码:通过前序和中序还原二叉树

4.手写代码:求二叉树每层最大值

5手写代码:两个平衡二叉树合并是怎么做的

6手写代码:求全体二叉树节点最大值

7、手写代码二叉树深度优先遍历

 

4、递归

1.手写代码:青蛙跳台阶

 

5、字符串

1手写代码:两个字符串的最长公共子序列?

2、手写代码:字符串逆序

3.手写代码:字符串复制函数

4.手写代码:驼峰字符串问题,给定一个驼峰样式的字符串例如“AaABbBcBbcvQv........”->“bc”,两个一样的字符夹着一个不一样的字符, 处理这个字符串去掉所有的驼峰。

5、手写代码:给一个字符串找出第一个只出现一次的字符位置

 

6、堆与栈

1.请你说一说区别*

2请问有一些数,每次可以插入,或者取出第1/4大的数,应该用什么数据结构?

 

7、动态规划

1.系统会给定一串数字让玩家选择,如果玩家选中一个数字,比如M,那么玩家获得M分,但同时当前选中的M,以及这串数字中所有的M+1和M-1将会全部消失。玩家可以继续选择得分,直到串为空。最终系统会根据玩家获得的积分发送奖励,积分越高,奖励越丰厚。例如系统给定的数字是[2,3,3,3,4], 如果玩家选定了2,玩家得2分,并且选中的2和所有的1和3会消失,那么数组只剩下[4],玩家再选择4,数组为空,此时一共获得6分如果玩家首先选中的是3,那么玩家得3分,选中的3,以及2和4都会消失,数字剩下[3,3],第二次和第三次玩家可以再次选择3,这样选择一共得9分,这也是最优的选择方式。

2.手写代码:给一个英文文本“i have a dream i am a human you can have dream too.”再给一个文本“i you am ”,要求计算出第一个文本中包含第二个文本每个单词的最短文本,比如例子中最短文本就是“i am a human you”。**

3.手写代码:给你一个格子,一个人在格子的左上角,他只能向右走一步,或者向下走一步,他走到右下角共有多少种方法**

4请你讲一下动态链表和静态链表的区别

5、请你说一下递归和动态规划的区别?

6手写代码:01背包

 

8、高级算法

1手写代码:LCS问题

2请问你知道什么加密算法吗

3、手写代码斐波那契数列

 

9、查找

1手写代码:二分查找的代码

2、一个二维坐标系,给你n个点的坐标,画一条直线把他们分成两份(任意直线),要求数量尽量等分,复杂度不能太高。

 

10、哈希

1请你说一下哈希表是做什么的?另外哈希表的实现原理说一下

2、现在有100W个账户密码,要存起来,要求查找时速度尽可能快,你选择什么数据结构?为什么?

 

11、

1请问你对图论算法了解多少?(BFS,DFS,最短路径,最小生成树,最小割最大流...)平常有用过吗?

 

五、框架

1、Spring

1请问Spring 声明一个 bean 如何对其进行个性化定制

2请你说一下Spring AOP

3请问J2EE 上 request 请求先经过谁 然后再转交到 SpringMVC上

4请你回答一下Filter主要是做什么的,filter和Servlet先过哪个,FilterChain 是什么意思

 

六、Linux,SQL等

1.请问linux两台机器之间传文件,用的什么端口

2.请你说一说关于linux查看进程

3.请你说几个基本Linux命令

4.请你说一说Linux命令(查看进程、top命令、查看磁盘)

5请你说几个**inux指令

6.请你说一下vector的特性

7、查看端口号、进程的指令是?动态查看日志的指令?怎么判断一个端口存不存在,磁盘满了怎么处理,删除一个目录下的txt文件,你还熟悉其他什么linux指令?

8、请你说一下vi里面怎么替换字符串

9请问contrab,uptime,du,netstat这几个指令有什么作用,如何查看磁盘分区状态

10请问如何将文本中的T全部替换成t,将其中的一行复制新的一行出来

 

七、前端

1、请你说一下**前端数据存储方式(cookies,localstorage,sessionstorage,indexedDB)

 

八、开发工具

1.请你说一下eclipse的常用操作快捷键

九、设计模式

1**.请你说一下常用设计模式;**

2**.请你手写一下单例模式**

3**请问设计模式是什么?**

4**请你手写一下单例模式代码**

十、场景题

1.上亿数量的链接,如何找出点击量排名前十的链接?

2.请你说几个海量数据存储常见问题**以及如何解答

3.请顾问有两个文件,如何将这两个文件按行依次交叉存入第三个文件中

4请你回答一下:统计文本中出现次数前十的单词,文件很大,不能一次性读入内存?

5请你回答一下QQ怎么实现在线大文件的传输

6请你回答一下新增一个dota2英雄要怎么设计,应该考虑哪些

7请你说一下你用过哪些电商app,**比较他们的好坏

8、有一款还没有进入杭州市场的铅笔,怎么估计他的月销售量

9请你说一下ping百度途径的主机是如何展示出来的

10、1-100,100个数,取走一个,怎么快速知道我取走了哪个数。

十一、大数据

1、Hadoop

1.请你说一下分布式集群的概念。

2、Hadoop你也有了解的,那你有了解他的备份机制吧?请问怎么做到数据保持一致?

 

十二、计算机基础

1、计算机网络

1.请你说一下HTTP的报文段是什么样的?

2.请你回答一下HTTP用的什么连接?

3.请你说一说TCP的三次握手?

4.请你说一下在浏览器中输入一个网址它的运行过程是怎样的?

5请你说一说http rest

6.请你说一说http请求报文

7.请你说一说get post区别

8.请你说一下tcp和udp的区别

9.请你说一下get和post的区别

10.请你说一下为什么tcp可靠,哪些方法保证可靠

11.请你说一说TCP的流量控制

12.请你回答一下TCP三次握手,以及为什么不是两次

13.请你回答一下ipv6的位数

14.请你说一说osi七层模型

15.请你说一说DNS解析过程

16*请你说一说http和https区别

17.请你说一说get和post区别

18.请你说一下**https中SSL层原理

19.请你说一说TCP断连过程,以及单向连接关闭后还能否通信

20.请你说说TCP和UDP用一个端口发送信息是否冲突

21.请你说说HTTP常见头

22.请你说说**HTTP状态码

23.请你说说soket编程和http协议

24请你说说tcp三次握手四次挥手

25请你说说post和get的区别

26.请你说说HTTP状态码,HTTP请求协议

26、请你说一说http缓存问题,缓存寿命,以及怎么判断文件在服务器是否更改的

27.请你回答一下搜索敏感词汇时,页面被重置的原理

28请你说一说两个机器之间的通讯过程?以及计算机网络为什么有七层?

29请你说一说http缓存问题,缓存寿命,怎么判断文件在服务器是否更改的

30请你说一说什么是http协议,http的数据段包括什么?http 为什么是无状态的,http和https的区别?ip地址的abcd类是怎样分的,ABCD分层协议为什么如此分层,什么是长连接和短链接**

31请你说一说**tcp数据段都包括什么?tcp三次握手四次挥手过程、为什么挥手是四次

32请你说一下tcp与udp的区别,以及**tcp为什么可靠,tcp滑动窗口,同传,拆包组装包是如何实现的

33请你说一下tcp/ip四层网络协议

34手写代码:从网络日志中,提取出date 字段,并排序。

35、从打开浏览器输入url到到达服务器上项目中某一个Controller上,请你来描述一下这一串过程

36请你介绍下session

37请问你知道跨域吗,条件是什么,在header里需要加什么,有几种方案 

38请你来回答一下,比如淘宝的搜索算法,输入关键词,会给出搜索出来的商品结果,对于这样的算法,如何评价它的好坏?

39、商品的种类有几十万种,在这种大数据的情况下,如何评价搜索算法的好坏?

2、数据库

1.请问什么是数据库事物

2.请你说一下数据库连接泄露的含义

3请你解释一下数据库事务的含义

4请你写一下mysql删除语句

5.请你说一下**数据库mysql中CHAR和VCHAR的区别

6.请你写两个sql语句,统计XX人数、选出课程编号不为XX的学生学号

7请你说一下**SQL左连接以及使用场景

8.请你写一下SQL查询、更新某一列语句

9.请你写一下SQL语句多表查询

10请你说说redis

11.请你写一些基本的SQL语句

12.某个表格中有10条一模一样的数据,现在要删掉其中的9条请你写一下sql语句

13某个表格存着 s_name subject score 三个字段,比如某一行是 张三 数学 76,现在要选取出所有科目成绩都大于80分的学生名字请写出sql语句

14.请你说一说数据库中的聚类查询

15请问如果mysql中用户密码丢了怎么办,建一个数据库表,授权命令是什么

16写出sql语句:数据库统计总成绩取前十名的学生

17请你说一下数据库事务、主键与外键的区别?

18、请问对缓存技术了解吗

19请问count和sum的区别,以及count()和count(列名)的区别*

20请问你数据库是用的MySQL吗?平常数据库的语句都是怎么写的? join作用想删除一行怎么做

21请问如何对数据库作优化

22、请问什么是幻读

23请你说一下MyBatis有什么优势,他如何做事务管理

24请你说一下事务的隔离级别,以及你一般使用的事务是哪种

3、操作系统

1.请你说一下多进程、多线程,操作系统层面的差别和联系

2.请你说一下线程通信的方法、线程的五种状态

3.请你说一下虚拟内存

4.请你说一下线程的同步和互斥以及应用常见

5.请你说一下线程的五种状态以及转换

6.请你说一说消息队列、信号量的实现方式

7请你说一下进程和线程的区别

8请你说一下死锁的概念、原因、解决方法

9请你说一下多线程

10.请你说一下线程之间通信的手段

11.请你说一下死锁

12.请你回答一下进程同步的方法

13请问进程线程的区别,进程间怎么相互通信,什么是多线程,什么是并发

十三、智力题

1.5只猫 五分钟捉5只老鼠 请问100分钟捉100只老鼠需要多少只猫?

2.圆桌,两个人,轮流放硬币,不能重叠,半径为1,某一方不能放下去,则为输。问先手赢 后手赢。

3.逻辑题:3升的杯子一个,5升的杯子一个,杯子不规则形状 问怎么得到4升的水 水无限多

4.晚上有四个人过桥,一次只能过两个人,但是只有一只手电筒,四个人过桥时间分别是1,2,5,8,求最短过桥时间

5.两个容积分别为5升和6升的桶,最后如何只装3升?

6.有十张扑克牌,每次可以只出一张,也可以只出两张,要出完有多少种出法

7、井盖为什么是圆的

8、用5L和6L的桶,没有刻度,怎么量出3L的水

9从前有座山,山脚下有5个海盗抢到了100枚金币,每一颗都一样的大小和价值。他们决定通过抽签的方式,按顺序提出分配方案决定金币的归属。

首先,由1号提出方案,5个人进行表决,半数人以上(包括半数)同意时,方案通过,否则他将被扔入大海喂鲨鱼,剩余海盗继续按顺序提出方案,依次类推。

假设每个海盗都是足够理性及机智,会考虑到利害及利益最大化问题,那么,1号海盗提出怎样的分配方案才能顺利通过考验并拿到可能性内最多的金币呢?

1*0、烧一根不均匀的绳子,从头烧到尾总共需要1个小时,问如何用烧绳子的方法来确定15分钟?

11、两个盲人各买了一白一黑两双袜子,不小心弄混了,问他们自己怎么分成刚好每人一白一黑

12、一个圆桌,两个人往上放硬币,只能平铺不能重合,最后一个放的人胜利(接下来硬币无处可放了),问先放的赢还是后放的赢。

十四、职业规划

1、为什么要投测试工程师?

十五、技术发展

1、对于大数据有什么了解

2、有没有关注什么最新的技术

3、对加班的看法、

4、介绍实习经验

5、印象最深刻的一个项目,用英文将这个项目说一遍

6、实习过程中有没有想过开发一些自动化测试工具

7、你在学校的成绩,

8、你觉得你做的比较出彩的事情

9、就发表的论文讨论

10、发表的论文印象最深的?

11、那你觉得文章效果好,好在哪里呢?

12、那你能给我总结一下,它的创新点在哪里?

13、打断一下,是有监督的学习还是无监督的?

14、怎么看待你的岗位?

15、标签的搜集是怎么搜集的?

16、那握手用的什么协议?上层的协议的用的那个协议?

17、数字认证认证成功是要通过用户名和密码么?

18、怎么判断是不是伪造?

19、具体怎么判断?信道信息能模拟么?

20、换了时间,信息就不一样了

21、相似性多大才会认为是合法的呢?

22、你们用的什么机器学习算法?

23、那你分类选的啥?你用其他算法去对比了么?)

24、近几年有什么职业规划?

25、打算一辈子做测试吗?

26、你有遇到什么困难吗?

27、你的短板是什么?

28、项目里最成功的是什么?你自己做的吗?多大规模?你怎么实现的,从开始到实现流程是怎样的?

29、你为什么要做测试?结合你自己的优势说(这里我强调了一下,我的学习成绩,学习能力强)

30、你有哪些与众不同的优点**

31、让我介绍下自己,自己的优点和缺点,同学和朋友怎么看你

32、和别人合作过项目没(答曰做过项目负责人),是怎么协调组员合作的,有过冲突和矛盾还有困难?怎么解决的

33、问拿到的offer,谈谈为什么选择头条

34、你了解头条多少,下载APP没,怎么看待

35、你有什么擅长的技术

36、对测试开发有什么了解

37、问成绩、实习时间、实习时间能不能延期、开题报告了没、论文定了什么内容没?

38、你有没有意愿做系统测试?

39、你自己比较偏向于做测试开发?还是系统测试?

40、问我亚索的e在一小段时间内是不能对同一目标使用的,怎么测

41、玩过dota吗,说一下你当时玩dota的时候发现的bug

42、游戏手感是什么?能不能用数据来描述?**43、FPS啥意思?**

44、读过什么源码吗

十六、Hr面

1、有没有家属在腾讯?

2、有没有患过重大疾病、精神疾病、心里疾病?

3、有没有亲属在深圳?

4、意向工作城市?

5、还投过哪些公司?

6、为什么想来腾讯?

7、成绩、实习时间,实习能不能延期?

8、职业规划,为什么来北京

9、对于互联网现状的认识

10、参加过什么竞赛,你在里面担任了什么角色

11、大学这几年怎么过的

12、有没有测试的什么经验

13、如果说来实习,你住的地方怎么解决呢?大概入职时间?

14、你觉得自己是个什么样的人?

15、你对未来同事、老大、团队、公司都有什么期望?

16、如果老大给你一些资料让你看,然后你看不懂,老大又非常忙,你该怎么办?

17、你觉得在公司里什么样的事情会让你很有成就感呢?

18、项目主要解决的问题,从项目中学到的最好的技术,项目经验对做我们这个岗位的好处

19、玩过哪些游戏? 

 

蚂蚁金服面试题

蚂蚁金服】

一、自我介绍

二、Tcp和udp:

        

1.链路层(数据链路层/网络接口层):包括操作系统中的设备驱动程序、计算机中对应的网络接口卡

2.网络层(互联网层):处理分组在网络中的活动,比如分组的选路

3.运输层:主要为两台主机上的应用提供端到端的通信

4.应用层:负责处理特定的应用程序细节


三、TCP三次握手和四次分手

三次握手

客户端发送SYN信号,表示告诉服务器,我要建立连接
服务器返回ACK=1和SYN=1给客户端,表示我已经接收到了客户端的请求,并接收了请求。
客户端收到来自服务端响应后,知道服务端已经接受连接请求,再次发送ACK给服务器,确认服务端的SYN,其实也就是一个确认的再确认。
四次握手

主动方A发送一个FIN(终止信号)给被动方B,表示要终结主动方A到被动方B的连接;
被动方B收到了FIN信号,返回ACK信号给主动方,表示从主动方到被动方的连接关闭了,也就是主动方不能再发送数据给被动方。
被动方B在发送完数据后,给主动方A发送一个FIN信号,请求要终结被动方B到主动方A的连接;


主动方A收到了FIN信号,返回ACK信号给被动方B,表示从被动方B到主动方A的连接关闭了,也就是被动方不能再发送数据给主动方


四、Dns的作用

DNS(Domain Name System,域名系统),万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串

DNS系统:通过域名,最终得到该域名对应的IP地址的过程叫做域名解析(或主机名解析),DNS协议运行在UDP协议之上,使用端口号53
五、接口和抽象类的区别

1、接口
接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情

2、抽象类
抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板


六、怎么理解测试这项工作的

就是利用测试工具按照测试方案和流程对产品进行功能和性能测试,甚至根据需要编写不同的测试工具,设计和维护测试系统,对测试方案可能出现的问题进行分析和评估。执行测试用例后,需要跟踪故障,以确保开发的产品适合需求。使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别


七、Qtp怎么使用的

QTP:QuickTest Professional,关键字驱动(如控件)的功能测试工具,能够对各种编程语言开发的软件进行功能测试,可以用VBScript脚本语言编写程序

执行计划的步骤

创建测试脚本:按照计划录制脚本并保存

增强测试脚本

执行测试

分析测试结果

https://www.cnblogs.com/xiezhidong/p/6784684.html


八、写测试用例

测试用例主要由8部分构成:所属的模块、名称、编号、等级、描述、预制条件、操作步骤、预期结果


九、Linux

常用命令:


十、软件测试里的元素定位

非xPath方式和xPath方式
十一、TestNG怎么使用???

1、Selenium是浏览器自动化工具,主要用来Web的自动化测试

TestNG是一个设计用来简化广泛的测试需求的测试框架

编写测试的过程:

编写测试的业务逻辑并在代码中插入TestNG Annotation

将测试信息添加到testng.xml文件或者build.xml中

运行TestNG

注:TestNG设计的出发点,不仅仅是单元测试,而且可以用于集成测试。设计目标的不同,对比junit的只适合用于单元测试

2、测试信息尤其是测试数据不再写死在测试代码中,好处就是修改测试数据时不需要修改代码/编译了,从而有助于将测试人员引入单元测试/集成测试

3、注解:

@BeforeSuite: 被注释的方法将在所有测试运行前运行
@AfterSuite:被注释的方法将在所有测试运行后运行
@BeforeTest: 被注释的方法将在测试运行前运行
@AfterTest: 被注释的方法将在测试运行后运行
@BeforeGroups: 被配置的方法将在列表中的gourp前运行。这个方法保证在第一个属于这些组的测试方法调用前立即执行。
@AfterGroups: 被配置的方法将在列表中的gourp后运行。这个方法保证在最后一个属于这些组的测试方法调用后立即执行。
@BeforeClass: 被注释的方法将在当前类的第一个测试方法调用前运行。
@AfterClass: 被注释的方法将在当前类的所有测试方法调用后运行。
@BeforeMethod: 被注释的方法将在每一个测试方法调用前运行。
@AfterMethod: 被注释的方法将在每一个测试方法调用后运行。
属性:
@alwaysRun 对于每个bufore方法(beforeSuite, beforeTest, beforeTestClass 和 beforeTestMethod, 但是不包括 beforeGroups)

如果设置为true,被配置的方法将总是运行而不管它属于哪个组。

对于after方法(afterSuite, afterClass, ...): 如果设置为true,被配置的方法甚至在一个或多个先调用的方法失败或被忽略时也将运行。
@dependsOnGroups 这个方法依赖的组列表
@dependsOnMethods 这个方法依赖的方法列表
@enabled 这个类的方法是否激活
@groups 这个类或方法所属的分组列表
@inheritGroups 如果设置为true,这个方法被属于在类级别被@Test annotation指定的组
@DataProvider 标记一个方法用于为测试方法提供数据。

被注释的方法必须返回Object[][], 其中每个Object[]可以指派为这个测试方法的参数列表。从这个DataProvider接收数据@Test方法需要使用一个和当前注释相同名称的dataProvider名称

@name 这个DataProvider的名称
@Factory 标记方法作为一个返回对象的工厂,这些对象将被TestNG用于作为测试类。这个方法必须返回Object[]
@Parameters描述如何传递参数给@Test方法

value 用于填充这个方法的参数的变量列表
@Test 标记一个类或方法作为测试的一部分
@ alwaysRun 如果设置为true,这个测试方法将总是运行,甚至当它依赖的方法失败时
@ dataProvider 这个测试方法的data provider的名称
@ dataProviderClass 用于查找data provider的类。
 如果不指定,将在当前测试方法所在的类或者它的基类上查找data provider。
 如果这个属性被指定, 则data provider方法需要是指定类的static方法。
@ dependsOnGroups 当前方法依赖的组列表
@ dependsOnMethods 当前方法依赖的方法列表
@ description 当前方法的描述
@ enabled 当前类的方法/方法是否被激活
@ expectedExceptions 测试方法期望抛出的异常列表。如果没有异常或者抛出的不是列表中的任何一个,当前方法都将标记为失败.
@ groups 当前类/方法所属的组列表
@ invocationCount 当前方法被调用的次数
@ successPercentage 当前方法期望的成功率
@ sequential 如果设置为true,当前测试类上的所有方法保证按照顺序运行。甚至测试们在parallel="true"的情况下.
@ 这个属性只能用于类级别,如果用于方法级别将被忽略。
@ timeOut 当前方法容许花费的最大时间,单位毫秒。
@ threadPoolSize 当前方法的线程池大小。方法将被多线程调用,次数由invocationCount参数指定

注意:如果invocationCount没有指定则这个属性将被忽略

https://blog.csdn.net/lykangjia/article/details/56485295

 

十二、事务(DB)

四大特性:数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。原子性:指事务包含的所有操作要么全部成功,要么全部失败回滚

一致性:指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
隔离性:当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
持久性:指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
事务

不考虑事务的隔离性,会发生的几种问题:

脏读:指在一个事务处理过程中读取了另一个未提交的事务中的数据
不可重复读:指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了
虚读(幻读)
事务非独立执行时发生的一种现象。例如事务T1对一个表中所有的行的某个数据项做了从“1”修改为“2”的操作,这时事务T2又对这个表中插入了一行数据项,而这个数据项的数值还是为“1”并且提交给数据库。

MySQL数据库为我们提供的四种隔离级别:

① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。

② Repeatable read (可重复读):可避免脏读、不可重复读的发生。

③ Read committed (读已提交):可避免脏读的发生。

④ Read uncommitted (读未提交):最低级别,任何情况都无法保证

 

 


十三、假如你现在来测试登陆这个模块的话,你怎么测试

(1)基本功能测试点

输入正确的用户名和密码登录成功
输入错误的用户名密码登录失败
用户名正确,密码错误,是否提示输入密码错误?
用户名错误,密码正常,是否提示输入用户名错误?
用户名和密码都错误,是否有相应提示?
用户名密码为空时,是否有相应提示?
如果用户未注册,提示请先注册,然后进行登录
已经注销的用户登录失败,提示信息友好?
密码框是否加密显示?
用户名是否支持中文、特殊字符?
用户名是否有长度限制?
密码是否支持中文,特殊字符?
密码是否有长度限制?
密码是否区分大小写?
密码为一些简单常用字符串时,是否提示修改?如:123456
密码存储方式?是否加密?
登录功能是否需要输入验证码?
验证码有效时间?
验证码输入错误,登录失败,提示信息是否友好?
输入过期的验证能否登录成功?
验证码是否容易识别?
验证码换一张功能是否可用?点击验证码图片是否可以更换验证码?
用户体系:比如系统分普通用户、高级用户,不同用户登录系统后可的权限不同。
如果使用第三方账号(QQ,微博账号)登录,那么第三方账号与本系统的账号体系对应关系如何保存?首次登录需要极权等
(2)页面测试

登录页面显示是否正常?文字和图片能否正常显示,相应的提示信息是否正确,按钮的设置和排列是否正常,页面是否简洁壮观等。
页面默认焦点是否定位在用户名的输入框中
首次登录时相应的输入框是否为空?或者如果有默认文案,当点击输入框时默认方案是否消失?
相应的按钮如登录、重置等,是否可用;页面的前进、后退、刷新按钮是否可用?
快捷键Tab,Esc,Enter 等,能否控制使用
兼容性测试:不同浏览器,不同操作系统,不同分辨率下界面是否正常
(3)安全测试

不登录:浏览器中直接输入登录后的地址,看是否可以直接进入
登录成功后生成的Cookie,是否是httponly (否则容易被脚本盗取)
用户名和密码是否通过加密的方式,发送给Web服务器 
用户名和密码的验证,应该是用服务器端验证, 而不能单单是在客户端用javascript验证
用户名和密码的输入框,应该屏蔽SQL 注入攻击
用户名和密码的的输入框,应该禁止输入脚本 (防止XSS攻击)
错误登陆的次数限制(防止暴力破解)
考虑是否支持多用户在同一机器上登录;
考虑一用户在多台机器上登录
性能测试
单用户登录系统的响应时间是否符合"3-5-8"原则
用户数在临界点时并发登录是否还能符合"3-5-8"原则
压力:大量并发用户登录,系统的响应时间是多少?系统会出现宕机、内存泄露、cpu饱和、无法登录吗?
稳定性: 系统能否处理并发用户数在临界点以内连续登录N个时的场景?
其他测试
连续输入3次或以上错误密码,用记是否被锁一定时间(如:15分钟)?时间内不允许登录,超出时间点是否可以继续登录。
用户session过期后,重新登录是否还能重新返回这前session过期的页面?
用户名和密码输入框是事支持键盘快捷键?如:撤销、复制、粘贴等等
是否允许同名用户同时登录进行操作?考虑web和app同时登录
手机登录时,是否先判断网络可用?
手机登录时,是否先判断app存在新版本?
是否支持单点登录?
是否有埋点接口
十四、你是测试工程师,如何保证软件的质量

从两个角度:1.质量是全员质量,公司每个成员都有责任参与质量保证。2.从测试角度来保证质量,测试也分为多个层次。

1、质量管理

(1)代码质量:开发通过单元测试保证

(2)让用户参与UAT测试,保证用户体验(使用质量)

(3)引入QA,保存过程环节质量

(4)系统测试工程师保证系统质量满足需求

2、质量保证

(1)测试策略:质量是多维度的,功能测试、性能测试、兼容性测试等多种测试类型的结合

(2)用例质量:采用合适的用例方法,如何进行需求分析,用例评审

(3)执行质量:如何保证执行深度(界面、关联模块、数据库、日志)与广度(系统测试类型

(4)缺陷质量:Bug评审,引入合适的Bug流程

(5)过程质量:合理的软件测试流程,测试过程监控
 

电话一面(35min)
1、冒泡排序,找下纸笔手写代码
1.5 讲述下不同排序算法的优缺点(时间复杂度、稳定性、海量数据排序)

2、栈的原理和应用:左右括号是否正确匹配的经典问题

3、介绍你研究生期间的项目、用到了哪些算法(机器学习方向)
3.5 Kmeans算法的原理,有什么可以改进的

4、实验室项目之外有什么经历、

5、有没有拿奖、或者参加计算机类竞赛

感谢一面的面试官,很有耐心,即使面对的是我这种没时间准备面试的。

电话二面(42min)
面试官:我将分为几个大的部分开展问题,做一下准备;

0、先介绍下你在实验室做的项目,
用到了KNN,那就讲一下机器学习中的几种距离(欧几里得距离、曼哈顿距离和切比雪夫距离)

1、机器学习:详细说明下“梯度下降”的公式推导?

1.5、答不上来,没关系,我再问一个:最大期望算法的原理,另外这和上一个问题之间有什么联系么?

2、数据结构方面:简述下堆排序的原理?

3、计算机网络方面:多线程通信的方式,系统产生死锁的原因(四个必要条件)?

4、简历上项目中的数据噪点是怎样去除的?

因为楼主是C++,所以基本不涉及Java方面的知识。

终结
今天不知道怎么了,就想去官网上看看状态。发现已经变成Rejected了,还是有点伤心的。
其实上面的问题有一些回答不是很满意,后来去牛客网上看了下,大概明白了:
也有可能是前面的技术综合评价不够高吧,然后一直备胎中…后来出现比你好的了…就被刷了…

后面的大家加油,阿里校招的HC一向不多,所以要有更强的实力和更充足的准备!

推荐
《大话数据结构》 && 《统计学习方法》(李航博士的蓝皮书)
---------------------
 

测试开发工程师常见面试题

一.功能测试用例的设计

举例:

(一).我想要回家,让你给我买一张票,然后设计测试用例

答案:

1.确定需求(回家回哪,需要什么票,买什么时候的票)

2.开始测试

2.1功能测试(我去买票(买火车票,飞机票),买到票(什么时候),回来给你)

2.2可靠性测试(我去买票过程中被撞死了,票买不到怎么办,延期了,买那个点的票没了怎么办让我帮他买票的人的身份,比如是否有特殊优待,如军人,1米2以下儿童等,身份证丢了,或者票丢了,责任划分)

2.3可维护性测试(票是否可保存完好)

2.4兼容性(还不同人的去买,我中间招人去买,我坐车走路)

2.5算法测试(我通过不同的渠道买票花费的时间)

2.6竞品测试(别的人怎么买的票)

2.7安全性测试(身份信息保密)

2.8性能测试(一个身份证买多张票,同时多张身份证买多张票)

 

二.工作测试流程:

(一).功能测试流程

1.需求评审(重点,你发挥的作用是什么,需求可执行性,关联影响的功能模块,异常情况处理)

2.评估测试时间(测试计划)

3.测试用例设计(正交,边界值,等价类。。)

4.用例review(领导,开发,产品)

5.提测(确认开发进行过自测,功能主流程畅通,然后开始介入测试)(产品开发测试一块走流程)

6.codediff(代码改动点,从根源发现开发的问题,代码中明显测试代码(return,写死值),

公共静态变量在发生高并发时容易出问题,所以不能让这个变量的值去内存里面取)

7.执行用例

8.提bug(jira)

9.回归测试

10.确认测试(准生产环境确认)(分情况)

11.发布(线上回归))

12.BUG review(总结问题)

注意点:

发布测试来控制,测试环境部署测试来控制

发布过程中,开发运维做监控。(分批发布)

 

三.app专项测试:

1.CPU,内存,流量,电量,弱网,兼容性,FPS,中断,安装,稳定性

   怎么自动化实现,写一些自动化框架方法封装起来,重复的使用

2.冷热启动的区别

冷启动:在个人电脑中,冷启动是切断电源后重新启动。App类似,就是完全退出(不在后台运行)后重启启动。

热启动:非冷启动情况都可以称为热启动。热启动比冷启动多了一个触发点,那就是在后台启动App,比如双击苹果的HOME键,进行App的热启动。同时热启动通常会有一个计时器,特别是一些理财和银行的类的App会做此处理,当你间隔一段时间触发了热启动后,会让你再次登录(通过密码/手势/指纹)。也有比如网易新闻客户端这样的,当你间隔一段时间后触发热启动,会弹出广告页。

 

四.工具使用:

postman:接口,功能测试,可以做参数化

httprequester:接口,功能测试

jemter:接口功能性能工具

lr:接口功能性能

fiddler:抓包,设置代理,设置断点,mock数据

charles:抓包,设置代理,设置断点,mock数据

robot:功能自动化

uft(qtp):功能自动化

docker:容器

monkey:性能稳定性(app)

jenkins:自动持续集成

git,svn:代码管理

xmind/visio:脑图

soapUI:接口功能测试(HTTP,WEBSERVICE协议)

xshell/SecureCRT/putty:

slor:关键字分词

slor:我测试:我   测试分别去数据库搜索结果

nginx(反向代理)

tomcat(动态网页发布)

 

五.基础概念:

什么是性能测试

HTTP协议(哪些方法,什么区别(GET\POST),怎么组成,状态码)

TCP三次握手四次离手

线程,进程区别联系

内存泄露,内存溢出

死锁

 

六.自动化测试:

自动化测试脚本的应用场景:

1.重复性较多的,写脚本能省时间,节省效率,

接口重复回归,功能重复回归

2.手动做不了的测试

上万数据的准确性校验,脚本跑,错误数据筛选出来

数据更新机制的调整,全量变成增量更新()

自动化框架的搭建:

接口自动化框架

1.结构(1.框架思想(数据,关键字,行为,事件,混合)

2.读取用例的模块(excel,txt,mysql,xml)

3.发请求的模块(requests封装)

4.断言模块(re,遍历断言)

5.日志模块

6.测试报告生成模块

7.发邮件模块

8.配置文件)

2.怎么设计测试用例,注意哪些点()

3.怎么断言

功能自动化框架

1.和接口自动化类似

2.对页面各个控件的api封装(哪些封装,下拉框,选择框,对隐形控件怎么处理)

3.不同环境处理

4.xpath定位方法()

5.js定位方法()

平台工具:

1.接口自动化集成到平台上;

2.平台做测试环境,线上环境的监控

3.做公用统计线上badcase的统计

 

七.算法:

(会多门语言(前端了解。java熟练,python熟练))

排序算法:

冒泡

快排

查找算法:

二分查找,

队列,堆,栈实现:

 

八.linux:

常用命令背下来,熟悉,知道怎么用

ls -alih()

看日志(cat,head,tail,more)

grep|wc -l

 

九.数据库:

关系型数据库:

mangodb

mysql(sql,慢查询,配置)

oracal

GP数据库

非关系型数据库:

redis

 

十.服务架构:

服务分布式架构(超融合):概念实现理解

 

十一.网络

IP

网关

路由

根据子网掩码算网关

NAT

VPN

交换机配置

 

十二.典型例题

(一).Web页面出现空白页怎么定位问题

1.抓包(抓包)

2.看服务日志

3.看你当前url 用接口实际访问模拟下请求

4.mock数据,给请求,确认是那部分问题

 

(二).Web页面响应过慢怎么定位问题

从一个浏览器输入url到形成页面经历了什么

 

(三).你所测试的系统架构

 
---------------------

经典的测试开发面试题

 

(整理自网络)

1、你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解决?

首先,将问题提交到缺陷管理库进行备案。

然后,要获取判断的依据和标准:

  • 根绝需求说明书,产品说明、设计文档等,确认实际结果是否与计划有不一致的地方,提供缺陷是都确认的直接依据;
  • 如果没有文档依据,根据类似软件的一般特性来说明是否存在不一致的地方,来确认是否是缺陷;
  • 根据用户的一般使用习惯,来确认是否是缺陷;
  • 与设计人员,开发人员和客户代表等相关人员探讨,确认是否是缺陷;

合理论述,客观严谨的向测试经理说明自己的判断理由;

等待测试经历做出最终决定,如果仍然存在争议,可以通过公司政策所提供的渠道,向上级反应,并由上级做出决定

2、给你一个网站,你如何测试?

首先,查找需求说明、网站设计等相关文档,分析测试需求;

制定测试计划,确定测试范围和测试策略,一般包括以下及部分,功能性测试、界面测试、性能测试、数据库测试、安全性测试、兼容性测试;

设计测试用例:

功能测试(包括不限于):

链接测试。链接是否正确跳转,是否存在空页面和无效页面,是否有不正确的出错信息返回

提交功能的测试

多媒体元素是否可以正确加载和显示

多语言支持是否能够正确显示选择的语言

界面测试(包括但不限于):

页面是否风格统一,美观

页面布局是否合理,重点内容和热点内容是否突出

空间是否正常使用

对于必须但未安装的控件,是否提供自动下载并安装的功能

文字检查

性能测试:

压力测试

负载测试

强度测试

数据库测试:

具体决定是否需要展开。数据库一般需要考虑连结性,对数据的存取操作,数据内容的验证等方面。

安全性测试:

基本的登陆功能的检查

是否存在溢出错误,导致系统崩溃或者权限泄露

相关开发语言的常见安全性问题检查,例如:SQL注入

如果需要高级的安全性问题,确定获得专业安全公司的帮助,外包测试,或者获取支持

兼容性测试,根据需求说明的内容,确定支持的平台组合:

浏览器的兼容性

操作系统的兼容性

软件平台的兼容性

数据库的兼容性

开展测试,并记录缺陷,合理的安排调整测试进度,提前获取测试所需的资源,建立管理体系(例如:需求变更,风险,配置,测试文档,缺陷报告,人力资源等内容)

定期评审,对测试进行评估和总结,调整测试内容

3、在搜索引擎中输入汉字就可以解析到对应的域名,请问如何使用LoadRunner进行测试

建立测试计划,确定测试标准和测试范围

设计典型场景的测试用例,都改常用业务流程和不常用的业务流程等

根据测试用例,开发自动化测试脚本和场景

录制测试脚本:新建一个脚本(Web/HTML协议);点击录制按钮,在弹出的对话框的URL中输入”about:blank”;在打开的浏览器中进行正常操作流程后,结束录制;调试脚本并保存,可能要注意到字符集的关联。

设置测试场景:针对性能设置测试场景,主要判断在正常情况下,系统的平均事务响应时间是否达标;针对压力负载设置测试场景,主要判断在长时间处于满负荷或者超出系统承载能力的条件下,系统是否会崩溃;执行测试,获取测试结果,分析测试结果

4、目前主要的测试用例方法是?

白盒测试:路径覆盖、代码走查、静态分析

黑盒测试:边界值分析,等价类划分,错误推测法,因果图,状态图法

5、软件测安全性从哪几个方面测试?

软件安全性测试包括:程序、数据库安全测试

  • 用户认证安全的测试要考虑问题: 明确区分系统中不同用户权限 、系统中会不会出现用户冲突 、系统会不会因用户的权限的改变造成混乱 、用户登陆密码是否是可见、可复制 、是否可以通过绝对途径登陆系统(拷贝用户登陆后的链接直接进入系统)、用户退出系统后是否删除了所有鉴权标记,是否可以使用后退键而不通过输入口令进入 系统 、系统网络安全的测试要考虑问题 、测试采取的防护措施是否正确装配好,有关系统的补丁是否打上 、模拟非授权攻击,看防护系统是否坚固 、采用成熟的网络漏洞检查工具检查系统相关漏洞(即用最专业的黑客攻击工具攻击试一下,现在最常用的是 NBSI 系列和 IPhacker IP ) 、采用各种木马检查工具检查系统木马情况 、采用各种防外挂工具检查系统各组程序的外挂漏洞
  • 数据库安全考虑问题: 系统数据是否机密、系统数据的完整性 、系统数据可管理性 、系统数据的独立性 、系统数据可备份和恢复能力(数据备份是否完整,可否恢复,恢复是否可以完整)

6、什么是测试用例?什么是测试脚本?两者关系?

测试用例:为实现测试而向被测试系统提供的输入数据、操作或各种环境设置以及期望结果的一个特定的合集

测试脚本:为了进行自动化测试而编写的脚本

关系:测试脚本的编写必须对应相应的测试用例

7、简述     静态测试、动态测试、黑盒测试、白盒测试、α测试 、β测试

静态测试:不运行程序本身而寻找程序代码中可能存在的错误或评估程序代码的过程

动态测试:实际运行被测程序,输入相应的测试实例,检查运行结果与预期结果的差异,判定执行结果是否符合要求,从而检测程序的正确性、可靠性、有效性、并分析系统运行效率和健壮性等性能

黑盒测试:一般用来确认软件功能的正确性和可操作性,目的是检测软件的各个功能是否得以实现,把北侧程序当作一个黑盒,不考虑其内部结构,在知道该程序的输入和输出之间的关系或程序功能的情况下,依靠软件规格说明书来确定测试用例和推断测试结果的正确性

白盒测试:根据软件内部的逻辑结构分析来进行测试,是基于代码的测试,测试人员通过阅读程序代码或者通过使用开发工具中的单步调试来判断软件的质量,一般黑盒测试由项目经理在程序员开发中来实现。

α测:由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的受控测试,Alpha测试不能由程序员或测试员完成

β测试: 软件的多个用户在一个或多个用户的实际使用环境下进行的测试,开发者通常不在测试现场,Beta测试不能由程序员或测试员完成

8、软件测试分为几个阶段,各阶段的测试策略和要求是什么?

和开发过程相对应,测试过程会依次经历单元测试、集成测试、系统测试、验收测试四个主要阶段:

  • 单元测试:单元测试是针对软件设计的最小单位––程序模块甚至代码段进行正确性检验的测试工作,通常由开发人员进行。
  • 集成测试:集成测试是将模块按照设计要求组装起来进行测试,主要目的是发现与接口有关的问题。由于在产品提交到测试部门前,产品开发小组都要进行联合调试,因此在大部分企业中集成测试是由开发人员来完成的。
  • 系统测试:系统测试是在集成测试通过后进行的,目的是充分运行系统,验证各子系统是否都能正常工作并完成设计的要求。它主要由测试部门进行,是测试部门最大最重要的一个测试,对产品的质量有重大的影响。
  • 验收测试:验收测试以需求阶段的《需求规格说明书》为验收标准,测试时要求模拟实际用户的运行环境。对于实际项目可以和客户共同进行,对于产品来说就是最后一次的系统测试。测试内容为对功能模块的全面测试,尤其要进行文档测试。

单元测试测试策略:

自顶向下的单元测试策略:比孤立单元测试的成本高很多,不是单元测试的一个好的选择。

自底向上的单元测试策略:比较合理的单元测试策略,但测试周期较长。

孤立单元测试策略:最好的单元测试策略。

集成测试的测试策略:

大爆炸集成:适应于一个维护型项目或被测试系统较小

自顶向下集成:适应于产品控制结构比较清晰和稳定;高层接口变化较小;底层接口未定义或经常可能被修改;产口控制组件具有较大的技术风险,需要尽早被验证;希望尽早能看到产品的系统功能行为。

自底向上集成:适应于底层接口比较稳定;高层接口变化比较频繁;底层组件较早被完成。

基于进度的集成
     优点:具有较高的并行度;能够有效缩短项目的开发进度。
     缺点:桩和驱动工作量较大;有些接口测试不充分;有些测试重复和浪费。

系统测试的测试策略:

数据和数据库完整性测试;功能测试;用户界面测试;性能评测;负载测试;强度测试;容量测试;安全性和访问控制测试;故障转移和恢复测试;配置测试;安装测试;加密测试;可用性测试;版本验证测试;文档测试

9、测试人员在软件开发过程中的任务是什么?

1、尽可能早的找出系统中的Bug;
2、避免软件开发过程中缺陷的出现;
3、衡量软件的品质,保证系统的质量;
4、关注用户的需求,并保证系统符合用户需求。
总的目标是:确保软件的质量。

10、在您以往的工作中,一条软件缺陷(或者叫Bug)记录都包含了哪些内容?如何提交高质量的软件缺陷(Bug)记录?

一条Bug记录最基本应包含:

bug编号;
bug严重级别,优先级;
bug产生的模块;
首先要有bug摘要,阐述bug大体的内容;
bug对应的版本;
bug详细现象描述,包括一些截图、录像....等等;
bug出现时的测试环境,产生的条件即对应操作步骤;

高质量的Bug记录:
1) 通用UI要统一、准确
缺陷报告的UI要与测试的软件UI保持一致,便于查找定位。
2) 尽量使用业界惯用的表达术语和表达方法
使用业界惯用的表达术语和表达方法,保证表达准确,体现专业化。
3) 每条缺陷报告只包括一个缺陷
每条缺陷报告只包括一个缺陷,可以使缺陷修正者迅速定位一个缺陷,集中精力每次只修正一个缺陷。校验者每次只校验一个缺陷是否已经正确修正。
4) 不可重现的缺陷也要报告
首先缺陷报告必须展示重现缺陷的能力。不可重现的缺陷要尽力重现,若尽力之后仍不能重现,仍然要报告此缺陷,但在报告中要注明无法再现,缺陷出现的频率。
5) 明确指明缺陷类型
根据缺陷的现象,总结判断缺陷的类型。例如,即功能缺陷、界面缺陷、数据缺陷,合理化建议这是最常见的缺陷或缺陷类型,其他形式的缺陷或缺陷也从属于其中某种形式。
6) 明确指明缺陷严重等级和优先等级
时刻明确严重等级和优先等级之间的差别。高严重问题可能不值得解决,小装饰性问题可能被当作高优先级。
7) 描述 (Description) ,简洁、准确,完整,揭示缺陷实质,记录缺陷或缺陷出现的位置
描述要准确反映缺陷的本质内容,简短明了。为了便于在软件缺陷管理数据库中寻找制定的测试缺陷,包含缺陷发生时的用户界面(UI)是个良好的习惯。例如记录对话框的标题、菜单、按钮等控件的名称。
8) 短行之间使用自动数字序号,使用相同的字体、字号、行间距
短行之间使用自动数字序号,使用相同的字体、字号、行间距,可以保证各条记录格式一致,做到规范专业。
9) 每一个步骤尽量只记录一个操作
保证简洁、条理井然,容易重复操作步骤。
10) 确认步骤完整,准确,简短
保证快速准确的重复缺陷,“完整”即没有缺漏,“准确”即步骤正确,“简短”即没有多余的步骤。
11) 根据缺陷,可选择是否进行图象捕捉
为了直观的观察缺陷或缺陷现象,通常需要附加缺陷或缺陷出现的界面,以图片的形式作为附件附着在记录的“附件”部分。为了节省空间,又能真实反映缺陷或缺陷本质,可以捕捉缺陷或缺陷产生时的全屏幕,活动窗口和局部区域。为了迅速定位、修正缺陷或缺陷位置,通常要求附加中文对照图。
 附加必要的特殊文档和个人建议和注解
如果打开某个特殊的文档而产生的缺陷或缺陷,则必须附加该文档,从而可以迅速再现缺陷或缺陷。有时,为了使缺陷或缺陷修正者进一步明确缺陷或缺陷的表现,可以附加个人的修改建议或注解。
12) 检查拼写和语法缺陷
在提交每条缺陷或缺陷之前,检查拼写和语法,确保内容正确,正确的描述缺陷。
13) 尽量使用短语和短句,避免复杂句型句式
软件缺陷管理数据库的目的是便于定位缺陷,因此,要求客观的描述操作步骤,不需要修饰性的词汇和复杂的句型,增强可读性。
以上概括了报告测试缺陷的规范要求,随着软件的测试要求不同,测试者经过长期测试,积累了相应的测试经验,将会逐渐养成良好的专业习惯,不断补充新的规范书写要求。此外,经常阅读、学习其他测试工程师的测试缺陷报告,结合自己以前的测试缺陷报告进行对比和思考,可以不断提高技巧。
14) 缺陷描述内容
缺陷描述的内容可以包含缺陷操作步骤,实际结果和期望结果。操作步骤可以方便开发人员再现缺陷进行修正,有些开发的再现缺陷能力很差,虽然他明白你所指的缺陷,但就是无法再现特别是对系统不熟悉的新加入开发人员,介绍步骤可以方便他们再现。实际结果可以让开发明白错误是什么,期望结果可以让开发了解正确的结果应该是如何。

 11、黑盒测试和白盒测试是软件测试的两种基本方法,请分别说明各自的优点和缺点!

黑盒测试

优点:比较简单,不需要了解程序内部的代码及实现;与软件的内部实现无关;  从用户角度出发,能很容易的知道用户会用到哪些功能,会遇到哪些问题;基于软件开发文档,所以也能知道软件实现了文档中的哪些功能;在做软件自动化测试时较为方便。

缺点:不可能覆盖所有的代码,覆盖率较低,大概只能达到总代码量的30%;自动化测试的复用性较低。

白盒测试

优点:帮助软件测试人员增大代码的覆盖率,提高代码的质量,发现代码中隐    藏的问题。

缺点:程序运行会有很多不同的路径,不可能测试所有的运行路径;测试基于代码,只能测试开发人员做的对不对,而不能知道设计的正确与否,可能会漏掉一些功能需求;系统庞大时,测试开销会非常大。

 12、如何测试一个纸杯?

用户文档:使用手册是否对杯子的用法、限制、使用条件等有详细描述

功能度:用水杯装水看漏不漏;水能不能被喝到

安全性:杯子有没有毒或细菌

可靠性:杯子从不同高度落下的损坏程度

可移植性:杯子在不同的地方、温度等环境下是否都可以正常使用

兼容性:杯子是否能够容纳果汁、白水、酒精、汽油等

易用性:杯子是否烫手、是否有防滑措施、是否方便饮用

疲劳测试:将杯子盛上水(案例一)放24小时检查泄漏时间和情况;盛上汽油(案例二)放24小时检查泄漏时间和情况等

压力测试:用根针并在针上面不断加重量,看压强多大时会穿透

13、测试计划工作的目的是什么?测试计划文档的内容应该包括什么?其中哪些是最重要的?

软件测试计划是指导测试过程的纲领性文件:

  • 领导能够根据测试计划进行宏观调控,进行相应资源配置等
  • 测试人员能够了解整个项目测试情况以及项目测试不同阶段的所要进行的工作等
  • 便于其他人员了解测试人员的工作内容,进行有关配合工作

包含了产品概述、测试策略、测试方法、测试区域、测试配置、测试周期、测试资源、测试交流、风险分析等内容。借助软件测试计划,参与测试的项目成员,尤其是测试管理人员,可以明确测试任务和测试方法,保持测试实施过程的顺畅沟通,跟踪和控制测试进度,应对测试过程中的各种变更。

测试计划编写6要素(5W1H):

  • why——为什么要进行这些测试;

  • what—测试哪些方面,不同阶段的工作内容;

  • when—测试不同阶段的起止时间;

  • where—相应文档,缺陷的存放位置,测试环境等;

  • who—项目有关人员组成,安排哪些测试人员进行测试;

  • how—如何去做,使用哪些测试工具以及测试方法进行测试

测试计划和测试详细规格、测试用例之间是战略和战术的关系,测试计划主要从宏观上规划测试活动的范围、方法和资源配置,而测试详细规格、测试用例是完成测试任务的具体战术。所以其中最重要的是测试测试策略和测试方法(最好是能先评审)。

14、详细的描述一个测试活动完整的过程

(以瀑布模型为例)

项目经理通过和客户的交流,完成需求文档,由开发人员和测试人员共同完成需求文档的评审,评审的内容包括:需求描述不清楚的地方和可能有明显冲突或者无法实现的功能的地方。项目经理通过综合开发人员,测试人员以及客户的意见,完成项目计划。然后SQA进入项目,开始进行统计和跟踪

开发人员根据需求文档完成需求分析文档,测试人员进行评审,评审的主要内容包括是否有遗漏或双方理解不同的地方。测试人员完成测试计划文档,测试计划包括的内容上面有描述。

测试人员根据修改好的需求分析文档开始写测试用例,同时开发人员完成概要设计文档,详细设计文档。此两份文档成为测试人员撰写测试用例的补充材料。

测试用例完成后,测试和开发需要进行评审。

测试人员搭建环境

开发人员提交第一个版本,可能存在未完成功能,需要说明。测试人员进行测试,发现BUG后提交给BugZilla。

开发提交第二个版本,包括Bug Fix以及增加了部分功能,测试人员进行测试。

重复上面的工作,一般是3-4个版本后BUG数量减少,达到出货的要求。

如果有客户反馈的问题,需要测试人员协助重现并重新测试。

15、BUG管理工具的跟踪过程(用BugZilla为例子)

测试人员发现了BUG,提交到Bugzilla中,状态为new,BUG的接受者为开发接口人员

开发接口将BUG分配给相关的模块的开发人员,状态修改为已分配,开发人员和测试确认BUG,如果是本人的BUG,则设置为接收;如果是别的开发人员的问题,则转发出去,由下一个开发人员来进行此行为;如果认为不是问题,则需要大家讨论并确认后,拒绝这个BUG,然后测试人员关闭此问题。

如果开发人员接受了BUG,并修改好以后,将BUG状态修改为已修复,并告知测试在哪个版本中可以测试。

测试人员在新版本中测试,如果发现问题依然存在,则拒绝验证;如果已经修复,则关闭BUG。

 

16、软件产品质量特性是什么?

功能性:适应性、准确性、互操作性、依从性、安全性。

可靠性:成熟性、容错性、易恢复性。

可使用性:易理解性、易学习性、易操作性。

效率:时间特性、资源特性。

可维护性:易分析性、易变更性、稳定性、易测试性。

可移植性: 适应性、易安装性、遵循性、易替换性

 

17、一台客户端有三百个客户与三百个客户端有三百个客户对服务器施压,有什么区别?

  • 300个用户在一个客户端上,会占用客户机更多的资源,而影响测试的结果。线程之间可能发生干扰,而产生一些异常。
  • 300个用户在一个客户端上,需要更大的带宽。
  • IP地址的问题,可能需要使用IP Spoof来绕过服务器对于单一IP地址最大连接数的限制。
  • 所有用户在一个客户端上,不必考虑分布式管理的问题;而用户分布在不同的客户端上,需要考虑使用控制器来整体调配不同客户机上的用户。同时,还需要给予相应的权限配置和防火墙设置。

18、试述软件的概念和特点?软件复用的含义?构件包括哪些?

软件是计算机系统中与硬件相互依存的另一部分,与计算机系统操作有关的计算机程序、规程、规则,以及可能有的文件、文档及数据。

软件复用(SoftWare Reuse)是将已有软件的各种有关知识用于建立新的软件,以缩减软件开发和维护的花费。软件复用是提高软件生产力和质量的一种重要技术。早期的软件复用主要是代码级复用,被复用的知识专指程序,后来扩大到包括领域知识、开发经验、设计决定、体系结构、需求、设计、代码和文档等一切有关方面。

可以被复用的软件成分一般称作可复用构件

6、软件生存周期及其模型是什么?

软件生存周期(Software life cycle)又称为软件生命周期,生存期。是指从形成开发软件概念起,所开发的软件使用以后,直到失去使用价值消亡为止的整个过程。一般来说,整个生存周期包括,计划、开发、运行(维护)三个时期,每个时期又划分为若干个阶段,每个阶段有明确的任务。

周期模型(典型的几种):

  • 瀑布模型
  • 快速原型模型:快速原型模型允许在需求分析阶段对软件的需求进行初步而非完全的分析和定义,快速设计开发出软件系统的原型,该原型向用户展示待开发软件的全部或部分功能和性能;用户对该原型进行测试评定,给出具体改进意见以丰富细化软件需求;开发人员据此对软件进行修改完善,直至用户满意认可之后,进行软件的完整实现及测试、维护。
  • 迭代模型:迭代包括产生产品发布(稳定、可执行的产品版本)的全部开发活动和要使用该发布必需的所有其他外围元素。在某种程度上,开发迭代是一次 完整地经过所有工作流程的过程:需求分析、设计、实施和测试工作流程。实质上,它类似小型的瀑布式项目。RUP认为,所有的阶段都可以细分为迭代。每一次 的迭代都会产生一个可以发布的产品,这个产品是最终产品的一个子集。

生命周期阶段:

  • 软件计划与可行性分析
  • 需求分析
  • 软件设计
  • 编码
  • 软件测试
  • 运行与维护

19、什么是软件测试?目的和原则?

在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程

软件测试的目的:

  • 测试是程序的执行过程,目的在于发现错误
  • 一个成功的测试用例在于发现至今未发现的错误
  • 一个成功测试是发现了至今未发现的错误的测试
  • 确保产品完成了她所承受或公布的功能,并且用户可以访问到的功能都有明确的书面说明
  • 确保产品满足性能和效率的要求
  • 确保产品是健壮的和适应用户环境的

软件测试的原则:

  • 测试用例中一个必须部分是对预期输出或接过进行定义
  • 程序员应避免测试自己编写的程序
  • 编写软件的组织不应当测试自己编写的软件
  • 应当彻底检查每个测试的执行结果
  • 测试用例的编写不仅应当根据有效和预料到的输入情况,而且也应当根据无效和未预料到的输入情况
  • 检擦程序是否“未做其应该做的”仅是测试的一半,测试的另一半是检查程序是否“做了其不应该做的”
  • 应避免测试用例用后即弃,除非软件本身就是个一次性的软件
  • 计划测试工作时不应默许假定不会发现错误
  • 程序某部分存在更多错误的可能性,与该部分已经发现错误的数量成正比
  • 软件测试是一项极富创造性,极具智力的挑战性的工作

20、软件质量保证体系是什么 国家标准中与质量保证管理相关的几个标准是什么?他们的编号和全称是什么?

SQA由一套软件工程过程和方法组成,以保证(软件的)质量。SQA贯穿整个软件开发过程,(它)应包括需求文档评审、代码控制、代码评审、变更管理、配置管理、版本管理和软件测试。

软件质量保证(SQA-Software Quality Assurance)是建立一套有计划,有系统的方法,来向管理层保证拟定出的标准、步骤、实践和方法能够正确地被所有项目所采用。软件质量保证的目的是使软件过程对于管理人员来说是可见的。它通过对软件产品和活动进行评审和审计来验证软件是合乎标准的。软件质量保证组在项目开始时就一起参与建立计划、标准和过程。这些将使软件项目满足机构方针的要求。

27、您认为在测试人员同开发人员的沟通过程中,如何提高沟通的效率和改善沟通的效果?维持测试人员同开发团队中其他成员良好的人际关系的关键是什么?

尽量面对面的沟通,其次是能直接通过电话沟通,如果只能通过Email等非及时沟通工具的话,强调必须对特性的理解深刻以及能表达清楚。

运用一些测试管理工具如TestDirector进行管理也是较有效的方法,同时要注意在TestDirector中对BUG有准确的描述。

在团队中建立测试人员与开发人员良好沟通中注意以下几点:

一真诚、二是团队精神、三是在专业上有共同语言、四是要对事不对人,工作至上

当然也可以通过直接指出一些小问题,而不是进入BUG Tracking System来增加对方的好感。

 

28、你对测试最大的兴趣在哪里?为什么?

回答这个面试题,没有固定统一的答案,但可能是许多企业都会问到的。提供以下答案供考:

最大的兴趣,感觉这是一个有挑战性的工作;

测试是一个经验行业,工作越久越能感觉到做好测试的难度和乐趣

通过自己的工作,能使软件产品越来越完善,从中体会到乐趣

回答此类问题注意以下几个方面:

尽可能的切合招聘企业的技术路线来表达你的兴趣,例如该企业是数据库应用的企业,那么表示你的兴趣在数据库的测试,并且希望通过测试提升自己的数据库掌握能力。

表明你做测试的目的是为了提升能力,也是为了更好的做好测试;提升能力不是为了以后转开发或其他的,除非用人企业有这样的安排。

不要过多的表达你的兴趣在招聘企业的范畴这外。比如招聘企业是做财务软件的,可是你表现出来的是对游戏软件的兴趣;或招聘是做JAVA开发的,而你的兴趣是在C类语言程序的开发。

 

29、你自认为测试的优势在哪里?

该面试也没有固定不变的答案,但可参考以下几点,并结合自身特点:

有韧性、有耐心、做事有条理性、喜欢面对挑战、有信心做好每一件事情、较强的沟通能力、从以前的经理处都得到了很好的评价表明我做的很好

 

33、简述你在以前的工作中做过哪些事情,比较熟悉什么。参考答案如下。

我过去的主要工作是系统测试和自动化测试。在系统测试中,主要是对BOSS系统的业务逻辑功能,以及软交换系统的Class 5特性进行测试。性能测试中,主要是进行的压力测试,在各个不同数量请求的情况下,获取系统响应时间以及系统资源消耗情况。自动化测试主要是通过自己写脚本以及一些第三方工具的结合来测试软交换的特性测试。

在测试中,我感觉对用户需求的完全准确的理解非常重要。另外,就是对BUG的管理,要以需求为依据,并不是所有BUG均需要修改。

测试工作需要耐心和细致,因为在新版本中,虽然多数原来发现的BUG得到了修复,但原来正确的功能也可能变得不正确。因此要注重迭代测试和回归测试。

 

34、在C/C++中static有什么用途?(请至少说明两种)
1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用

 

35、引用与指针有什么区别?
    1) 引用必须被初始化,指针不必。
    2) 引用初始化以后不能被改变,指针可以改变所指的对象。
    3) 不存在指向空值的引用,但是存在指向空值的指针。

 

36、Internet采用哪种网络协议?该协议的主要层次结构?Internet物理地址和IP地址转换采用什么协议?

TCP/IP协议主要层次结构为: 应用层/传输层/网络层/数链路层。

ARP (Address Resolution Protocol)(地据址解析协议)

 

37、说说你对集成测试中自顶向下集成和自底向上集成两个策略的理解,要谈出它们各自的优缺点和主要适应于哪种类型测试

自顶向下集成

优点:较早地验证了主要控制和判断点;按深度优先可以首先实现和验证一个完整的软件功能;功能较早证实,带来信心;只需一个驱动,减少驱动器开发的费用;支持故障隔离。

缺点:柱的开发量大;底层验证被推迟;底层组件测试不充分。

适应于产品控制结构比较清晰和稳定;高层接口变化较小;底层接口未定义或经常可能被修改;产口控制组件具有较大的技术风险,需要尽早被验证;希望尽早能看到产品的系统功能行为。

2、自底向上集成

优点:对底层组件行为较早验证;工作最初可以并行集成,比自顶向下效率高;减少了桩的工作量;支持故障隔离。

缺点:驱动的开发工作量大;对高层的验证被推迟,设计上的错误不能被及时发现。
适应于底层接口比较稳定;高层接口变化比较频繁;底层组件较早被完成。

 

38、软件验收测试包括正式验收测试、alpha测试、beta测试三种测试。


39、系统测试的策略有很多种的,有性能测试、负载测试、强度测试、易用性测试、安全测试、配置测试、安装测试、文档测试、故障恢复测试、用户界面测试、恢复测试、分布测试、可用性测试。

40、设计系统测试计划需要参考的项目文档有软件测试计划、软件需求工件、和迭代计划


41.通过画因果图来写测试用例的步骤为___、___、___、___及把因果图转换为状态图共五个步骤。 利用因果图生成测试用例的基本步骤是:

§ 分析软件规格说明描述中,哪些是原因(即输入条件或输入条件的等价类),哪些是结果(即输出条件),并给每个原因和结果赋予一个标识符。

§ 分析软件规格说明描述中的语义,找出原因与结果之间,原因与原因之间对应的是什么关系? 根据这些关系,画出因果图。

§ 由于语法或环境限制,有些原因与原因之间,原因与结果之间的组合情况不可能出现。为表明这些特殊情况,在因果图上用一些记号标明约束或限制条件。 § 把因果图转换成判定表。

§ 把判定表的每一列拿出来作为依据,设计测试用例。

 

43、请说出这些测试最好由那些人员完成,测试的是什么?

代码、函数级测试一般由白盒测试人员完成,他们针对每段代码或函数进行正确性检验,检查其是否正确的实现了规定的功能。

模块、组件级测试主要依据是程序结构设计测试模块间的集成和调用关系,一般由测试人员完成。

系统测试在于模块测试与单元测试的基础上进行测试。了解系统功能与性能,根据测试用例进行全面的测试。

 

44、 设计测试用例时应该考虑哪些方面,即不同的测试用例针对那些方面进行测试?

设计测试用例时需要注意的是,除了对整体流程及功能注意外,还要注意强度测试、性能测试、压力测试、边界值测试、稳定性测试、安全性测试等多方面。(测试用例需要考虑的四个基本要素是输入、输出、操作和测试环境;另外,测试用例需要考虑的是测试类型(功能、性能、安全……),这部分可以参照TP做答。此外,还需要考虑用例的重要性和优先级)

 

45、 在windows下保存一个文本文件时会弹出保存对话框,如果为文件名建立测试用例,等价类应该怎样划分?

单字节,如A;双字节, AA、我我;特殊字符 /‘。‘;、=-等;保留字,如com;文件格式为8.3格式的;文件名格式为非8.3格式的;/,\,*等九个特殊字符。

 

46、假设有一个文本框要求输入10个字符的邮政编码,对于该文本框应该怎样划分等价类?

特殊字符,如10个*或¥;英文字母,如ABCDefghik;小于十个字符,如123;大于十个字符,如11111111111;数字和其他混合,如123AAAAAAA;空字符;保留字符

 

47.软件测试项目从什么时候开始,?为什么? 
软件测试应该在需求分析阶段就介入,因为测试的对象不仅仅是程序编码,应该对软件开发过程中产生的所有产品都测试,并且软件缺陷存在放大趋势.缺陷发现的越晚,修复它所花费的成本就越大.
 

48、什么是回归测试?

回归测试: (regression   testing): 回归测试有两类:用例回归和错误回归;用例回归是过一段时间以后再回头对以前使用过的用例在重新进行测试,看看会重新发现问题。错误回归,就是在新版本中,对以前版本中出现并修复的缺陷进行再次验证,并以缺陷为核心,对相关修改的部分进行测试的方法。


49.单元测试、集成测试、系统测试的侧重点是什么? 
  单元测试针对的是软件设计的最小单元--程序模块(面向过程中是函数、过程;面向对象中是类。),进行正确性检验的测试工作,在于发现每个程序模块内部可能存在的差错.一般有两个步骤:人工静态检查\动态执行跟踪 
  集成测试针对的是通过了单元测试的各个模块所集成起来的组件进行检验,其主要内容是各个单元模块之间的接口,以及各个模块集成后所实现的功能. 
  系统测试针对的是集成好的软件系统,作为整个计算机系统的一个元素,与计算机硬件\外设\某些支持软件\数据和人员等其他系统元素结合在一起,要在实际的运行环境中,对计算机系统进行一系列的集成测试和确认测试.


51.一个测试工程师应具备那些素质? 
1、责任心2、沟通能力3、团队合作精神4、耐心、细心、信心5、时时保持怀疑态度,并且有缺陷预防的意识6、具备一定的编程经验


53:你所了解的的软件测试类型都有哪些,简单介绍一下。

按测试策略分类:1、静态与动态测试2、黑盒与白盒测试 3、手工和自动测试 4、冒烟测试 5、回归测试;

按测试阶段分类:单元测试、集成测试、系统测试;

其他常见测试方法:1、功能测试 2、性能测试 3、压力测试 4、负载测试 5、易用性测试 6、安装测试 7、界面测试 8、配置测试 9、文档测试 10、兼容性测试 11、安全性测试 12、恢复测试

 

54:你认为做好测试计划工作的关键是什么?

明确测试的目标,增强测试计划的实用性

编写软件测试计划得重要目的就是使测试过程能够发现更多的软件缺陷,因此软件测试计划的价值取决于它对帮助管理测试项目,并且找出软件潜在的缺陷。因此,软件测试计划中的测试范围必须高度覆盖功能需求,测试方法必须切实可行,测试工具并且具有较高的实用性,便于使用,生成的测试结果直观、准确

坚持“5W”规则,明确内容与过程

“5W”规则指的是“What(做什么)”、“Why(为什么做)”、“When(何时做)”、“Where(在哪里)”、“How(如何做)”。利用“5W”规则创建软件测试计划,可以帮助测试团队理解测试的目的(Why),明确测试的范围和内容(What),确定测试的开始和结束日期(When),指出测试的方法和工具(How),给出测试文档和软件的存放位置(Where)。

采用评审和更新机制,保证测试计划满足实际需求

测试计划写作完成后,如果没有经过评审,直接发送给测试团队,测试计划内容的可能不准确或遗漏测试内容,或者软件需求变更引起测试范围的增减,而测试计划的内容没有及时更新,误导测试执行人员。

分别创建测试计划与测试详细规格、测试用例

应把详细的测试技术指标包含到独立创建的测试详细规格文档,把用于指导测试小组执行测试过程的测试用例放到独立创建的测试用例文档或测试用例管理数据库中。测试计划和测试详细规格、测试用例之间是战略和战术的关系,测试计划主要从宏观上规划测试活动的范围、方法和资源配置,而测试详细规格、测试用例是完成测试任务的具体战术。

 

 

55:您认为做好测试用例设计工作的关键是什么?

白盒测试用例设计的关键是以较少的用例覆盖尽可能多的内部程序逻辑结果

黑盒法用例设计的关键同样也是以较少的用例覆盖模块输出和输入接口。不可能做到完全测试,以最少的用例在合理的时间内发现最多的问题 

 

56:你的测试职业发展目标是什么?

测试经验越多,测试能力越高。所以我的职业发展是需要时间累积的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前3年累积测试经验,不断的更新自己改正自己,做好测试任务。

 

57:测试结束的标准是什么?

从微观上来说,在测试计划中定义,比如系统在一定性能下平稳运行72小时,目前Bug Tracking System中,本版本中没有一般严重的BUG,普通BUG的数量在3以下,BUG修复率90%以上等等参数,然后由开发经理,测试经理,项目经理共同签字认同版本Release。

如果说宏观的,则是当这个软件彻底的消失以后,测试就结束了。

 

59、一套完整的测试应该由哪些阶段组成? 
可行性分析、需求分析、概要设计、详细设计、编码、单元测试、集成测试、系统测试、验收测试

 

61、您是否了解以往所工作的企业的软件开发过程?如果了解,请试述一个完整的开发过程需要完成哪些工作?分别由哪些不同的角色来完成这些工作?您在以往的测试工作中都曾经具体从事过哪些工作?其中最擅长哪部分工作?

开发过程---需求调研(需求人员)、需求分析(需求人员)、概要设计(设计人员)、详细设计(设计人员)、编码(开发人员)

测试过程---需求评审、系统测试设计、概要设计评审、集成测试设计、详细设计评审、单元测试设计、测试执行

测试工作的整个过程都做过,擅长做测试设计

过程决定质量,软件的过程改进正是为了提高软件的质量,将过往的种种经验教训积累起来。

 

62、测试用例设计的原则是什么?目前主要的测试用例设计方法有哪些?

代表性:能够代表并覆盖各种合理的和不合理、合法的和非法的、边界的和越界的、以及极限的输入数据、操作和环境设置等.

可判定性:即测试执行结果的正确性是可判定的,每一个测试用例都应有相应的期望结果.

可再现性:即对同样的测试用例,系统的执行结果应当是相同的。

方法有等价类、边界值、因果图、状态图、正交法、大纲法

 

63、面向对象的测试用例设计有几种方法?如何实现?

给类中的每个构造函数设计一组测试用例

组合类中的类变量、实例变量

组合类中的各种方法

根据前置条件和后置条件设计测试用例

根据代码设计测试用例

 

64、LoadRunner分为哪三个模块?请简述各模块的主要功能。

Virtual User Generator:用于录制脚步

Mercury LoadRunner Controller:用于创建、运行和监控场景

Mercury LoadRunner Analysis:用于分析测试结果

 

65、你对测试最大的兴趣在哪里?为什么?

最大的兴趣就是测试有难度,有挑战性!做测试越久越能感觉到做好测试有多难。曾经在无忧测试网上看到一篇文章,是关于如何做好一名测试工程师。一共罗列了11,12点,有部分是和人的性格有关,有部分需要后天的努力。但除了性格有关的1,2点我没有把握,其他点我都很有信心做好它。

刚开始进入测试行业时,对测试的认识是从无忧测试网上了解到的一些资料,当时是冲着做测试需要很多技能才能做的好,虽然入门容易,但做好很难,比开发更难,虽然当时我很想做开发(学校专业课我基本上不缺席,因为我喜欢我的专业),但看到测试比开发更难更有挑战性,想做好测试的意志就更坚定了。

我觉得做测试整个过程中有2点让我觉得很有难度(对我来说,有难度的东西我就非常感兴趣),第一是测试用例的设计,因为测试的精华就在测试用例的设计上了,要在版本出来之前,把用例写好,用什么测试方法写?(也就是测试计划或测试策略),如果你刚测试一个新任务时,你得花一定的时间去消化业务需求和技术基础,业务需求很好理解(多和产品经理和开发人员沟通就能达到目的),而技术基础可就没那么简单了,这需要你自觉的学习能力,比如说网站吧,最基本的技术知识你要知道网站内部是怎么运作的的,后台是怎么响应用户请求的?测试环境如何搭建?这些都需要最早的学好。至少在开始测试之前能做好基本的准备,可能会遇到什么难题?需求细节是不是没有确定好?这些问题都能在设计用例的时候发现。

第二是发现BUG的时候了,这应该是测试人员最基本的任务了,一般按测试用例开始测试就能发现大部分的bug,还有一部分bug需要测试的过程中更了解所测版本的情况获得更多信息,补充测试用例,测试出bug。还有如何发现bug?这就需要在测试用例有效的情况下,通过细心和耐心去发现bug了,每个用例都有可能发现bug,每个地方都有可能出错,所以测试过程中思维要清晰(测试过程数据流及结果都得看仔细了,bug都在里面发现的)。如何描述bug也很有讲究,bug在什么情况下会产生,如果条件变化一点点,就不会有这个bug,以哪些最少的操作步骤就能重现这个bug,这个bug产生的规律是什么?如果你够厉害的话,可以帮开发人员初步定位问题。

 

66、您所熟悉的软件测试类型都有哪些?请试着分别比较这些不同的测试类型的区别与联系(如功能测试、性能测试……)
  测试类型有:功能测试,性能测试,界面测试。
  功能测试在测试工作中占的比例最大,功能测试也叫黑盒测试。是把测试对象看作一个黑盒子。利用黑盒测试法进行动态测试时,需要测试软件产品的功能,不需测试软件产品的内部结构和处理过程。采用黑盒技术设计测试用例的方法有:等价类划分、边界值分析、错误推测、因果图和综合策略。 
  性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。
  界面测试,界面是软件与用户交互的最直接的层,界面的好坏决定用户对软件的第一印象。而且设计良好的界面能够引导用户自己完成相应的操作,起到向导的作用。同时界面如同人的面孔,具有吸引用户的直接优势。设计合理的界面能给用户带来轻松愉悦的感受和成功的感觉,相反由于界面设计的失败,让用户有挫败感,再实用强大的功能都可能在用户的畏惧与放弃中付诸东流。
  区别在于,功能测试关注产品的所有功能上,要考虑到每个细节功能,每个可能存在的功能问题。性能测试主要关注于产品整体的多用户并发下的稳定性和健壮性。界面测试更关注于用户体验上,用户使用该产品的时候是否易用,是否易懂,是否规范(快捷键之类的),是否美观(能否吸引用户的注意力),是否安全(尽量在前台避免用户无意输入无效的数据,当然考虑到体验性,不能太粗鲁的弹出警告)?做某个性能测试的时候,首先它可能是个功能点,首先要保证它的功能是没问题的,然后再考虑该功能点的性能测试

 

67、请试着比较一下黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别与联系。
  黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。
  白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查。
  软件的黑盒测试意味着测试要在软件的接口处进行。这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。因此黑盒测试又叫功能测试或数据驱动测试。黑盒测试主要是为了发现以下几类错误:
  1、是否有不正确或遗漏的功能?2、在接口上,输入是否能正确的接受?能否输出正确的结果?3、是否有数据结构错误或外部信息(例如数据文件)访问错误?4、性能上是否能够满足要求?5、是否有初始化或终止性错误?
  软件的白盒测试是对软件的过程性细节做细致的检查。这种方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。白盒测试主要是想对程序模块进行如下检查:
  1、对程序模块的所有独立的执行路径至少测试一遍。
  2、对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测一遍。
  3、在循环的边界和运行的界限内执行循环体。
  4、测试内部数据结构的有效性,等等。
  单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。
  单元测试是由程序员自己来完成,最终受益的也是程序员自己。可以这么说,程序员有责任编写功能代码,同时也就有责任为自己的代码编写单元测试。执行单元测试,就是为了证明这段代码的行为和我们期望的一致。
  集成测试(也叫组装测试,联合测试)是单元测试的逻辑扩展。它的最简单的形式是:两个已经测试过的单元组合成一个组件,并且测试它们之间的接口。从这一层意义上讲,组件是指多个单元的集成聚合。在现实方案中,许多单元组合成组件,而这些组件又聚合成程序的更大部分。方法是测试片段的组合,并最终扩展进程,将您的模块与其他组的模块一起测试。最后,将构成进程的所有模块一起测试。
  系统测试是将经过测试的子系统装配成一个完整系统来测试。它是检验系统是否确实能提供系统方案说明书中指定功能的有效方法。(常见的联调测试)
  系统测试的目的是对最终软件系统进行全面的测试,确保最终软件系统满足产品需求并且遵循系统设计。
  验收测试是部署软件之前的最后一个测试操作。验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务。
验收测试是向未来的用户表明系统能够像预定要求那样工作。经集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,接着就应该进一步验证软件的有效性,这就是验收测试的任务,即软件的功能性能如同用户所合理期待的那样。

 

68、当开发人员说不是BUG时,你如何应付?
  开发人员说不是bug,有2种情况,一是需求没有确定,所以我可以这么做,这个时候可以找来产品经理进行确认,需不需要改动,3方商量确定好后再看要不要改。二是这种情况不可能发生,所以不需要修改,这个时候,我可以先尽可能的说出是BUG的依据是什么?如果被用户发现或出了问题,会有什么不良结果?程序员可能会给你很多理由,你可以对他的解释进行反驳。如果还是不行,那我可以给这个问题提出来,跟开发经理和测试经理进行确认,如果要修改就改,如果不要修改就不改。其实有些真的不是bug,我也只是建议的方式写进TD中,如果开发人员不修改也没有大问题。如果确定是bug的话,一定要坚持自己的立场,让问题得到最后的确认。

 

69、为什么要在一个团队中开展软件测试工作?

因为没有经过测试的软件很难在发布之前知道该软件的质量,就好比ISO质量认证一样,测试同样也需要质量的保证,这个时候就需要在团队中开展软件测试的工作。在测试的过程发现软件中存在的问题,及时让开发人员得知并修改问题,在即将发布时,从测试报告中得出软件的质量情况。

 

71、一份测试计划应该包括哪些内容?

背景、项目简介、目的、测试范围、测试策略、人员分工、资源要求、进度计划、参考文档、常用术语、提交文档、风险分析。

 

72、针对于软件的行业背景,你如何理解软件的业务?

阅读用户手册了解软件的功能和操作流程;看一些业务的专业书籍补充业务知识;如果有用户实际的数据,可以拿实际的数据进行参考;参考以前的用例和BUG报告;在使用软件的过程中多思考;多与产品经理交流。

 

74、如何定位测试用例的作用?

组织性:编写、组织性、功能覆盖、重复性、跟踪、测试确认

 

76、什么是兼容性测试?请举例说明如何利用兼容性测试列表进行测试。

主要验证软件产品在不同版本之间的兼容性。包括向下兼容和交错兼容,向下兼容是测试软件新版本保留它早期版本功能的情况,交错兼容是验证共同存在的两个相关但不相同的产品之间的兼容性。

 

77、对某软件进行测试,发现在WIN98上运行得很慢,怎么判别是该软件存在问题还是其软硬件运行环境存在问题?

看软件的运行环境要求。如果符合要求则是程序存在问题,若不符合要求则是硬件系统存在问题

 

78、需求测试的注意事项有哪些?

是否使用了公司的模板、文档内容是否符合规范、所有的需求是分级是否清析适当、所有的需求是否具有一致性、需求是否可行(即,该需求组合有解决方案)、需求可否用己知的约束来实现、需求是否足够(即,可以把它送到一个规范的开发组织,并有一个生产出所需要产品的合理的可能性)、所有的其它需求是交叉引用是否正确、用户描述是否清楚、是否用客户的语言来描述需求、每个需求描述是否清楚没有岐义,可以移交给一个独立的组去实现时也能理解、是否所有的需求都是可验证的、是否每条需求都具有独立性,即使发生了变化也不会影响其它需求、性能指标是否明确、非功能性需求是否得到充分表现、是否完整列出适用的标准或协议、标准和协议之间是否存在冲突

 

81、主键、外键的作用,索引的优点与不足?

  答:主键:是表中的唯一标示键。作用:保证实体的完整性;加快数据库的操作速度;增加新的表记录时,数据库会自动检索新记录的主键值,不允许该值与其他表中记录的主键重复;数据库会按主键值的顺序显示记录,如果没有设定主键,则按输入的顺序显示记录。

  外键:是主键的从属,表示了两个表之间的联系。作用:使用外键可以避免冗余。

索引的优点: 1、通过创建唯一性的索引,可以保证表中数据的唯一性; 2、加速数据的检索速度; 3、加快表与表之间的连接; 4、在使用分组与排序数据检索时,可以显著检索分组与排序的时间; 5、在查询的过程中使用优化隐藏器,提供系统性能。

缺点: 1、创建索引需要时间,且随着数据量的增加而增加; 2、索引需要占用物理空间;

        3、当对表中数据进行修改时,索引也要动态维护,降低了数据的维护速度。

 

84、性能测试的流程?

  1.测试需求分析2.测试计划制定与评审3.测试用例设计与开发4.测试执行与监控5.分析测试结果6.编写性能测试报告7.测试经验总结

 

88、简述bug的生命周期?

  1, 有效地记录BUG 2, 使用BUG模板 3, 评价BUG优先级和严重性 4, BUG的生命 5, 维护BUG数据库

 

 

89、缺陷记录应包含的内容?

  缺陷标识、缺陷类型、缺陷严重程度、缺陷产生可能性、缺陷优先级、缺陷状态、缺陷起源、缺陷来源、缺陷原因; 

 

91 您所熟悉的软件测试类型都有哪些?请试着分别比较这些不同的测试类型的区别与联系(如功能测试、性能测试……)

  易用性测试-界面的友好性,操作方便性等。

  功能测试-系统中功能性需求的满足

  安全性测试-系统是否存在安全隐患和漏洞

  性能测试-系统在大并发下的响应速度和健壮性

 

93、您认为做好测试计划工作的关键是什么?

  了解项目或系统的业务需求

  和项目经理协调好,了解项目的进度计划安排情况 

 

 

95您认为做好测试用例设计工作的关键是什么?

  对业务和软件需求非常清楚,可以根据需求不同选择不同的测试用例设计

 

 

96、.您以往的工作中是否曾开展过测试用例的评审工作?如果有,请描述测试用例评审的过程和评审的内容

  评审计划->预审->评审;

  评审内容主要是测试用例对软件需求的覆盖程度,对于相关边界是否考虑,是否针对复杂流程准备多套测试数据,是否有专门针对非功能性需求的测试。 

 

 

98.您认为性能测试工作的目的是什么?做好性能测试工作的关键是什么?

  关键是测试脚本的录制,测试时候测试环境的干净。

100、.您以往所从事的软件测试工作中,是否使用了一些工具来进行软件缺陷(Bug)的管理?如果有,请结合该工具描述软件缺陷(Bug)跟踪管理的流程。

  CQ,也可以使用BugFree等免费工具。

101、.您如何看待软件过程改进?在您曾经工作过的企业中,是否有一些需要改进的东西呢?您期望的理想的测试人员的工作环境是怎样的?

  将先进的经验或思想固化到过程中,通过过程改进和能力提高来改进软件质量

  
   
   
   
   
   
   
   
   
   

3.请你说一下垃圾回收机制

4请你说一下Java中的异常处理机制

5.请问多线程是什么?

6请你来聊一聊集合类内存

7.请你说一下java jvm内存机制

8.请你说一说有哪几种垃圾回收算法

9.请你说一说垃圾收集机制

10.请你回答一下GC Root可以是哪些

11.请你说一下OOM可能发生在哪,怎么查看,怎么调优

12.请你说一下类加载

13.请你说一下AQS

14.请你说一下volatile

15请你说一下死锁原因以及如何打破如何查看死锁进程状态

16.请你说一下内存泄漏

17.请你说一说class和interface的区别

18.请你说一下内存泄漏的原因

19.请你说一说强引用和弱引用

20.请说一下你对多态的理解

21、手写代码:求n以内的最大质数

22、请你说一下java里内存泄漏和溢出的区别

23、请问你用过什么语言,用这些语言写过什么程序

24、你知道java里面的内存管理机制吗,比如创建和回收是怎么管理的?

25请你说一下Java里integer和int的区别,以及如何比较相等

26请你介绍下Java学习情况,学习一门新的语言需要多快

27请你介绍一下gc,另外如果Java里写一个方法,这个方法里只有一条语句,即new一个对象请问**方法结束以后这个对象怎么回收的?

28请你回答一下protected,public,private的区别

29请你说一下抽象类和接口的区别

30请你说一下List和ArrayList的区别,以及arrayList和HashSet区别

31、请你回答一下**Java的内存结构是什么,全局变量,临时变量,静态变量分别存在哪里,堆分为哪几块,比如说新生代老生代,那么新生代又分为什么

32手写代码:给出一个int类型123,写一个函数,返回反转的值321

33请你回答一下c++和java的区别

34请你回答一下怎么判断哪些对象是可以删除的,可达是什么意思

35请你说一说接口有什么限制

36请问Java中线程如何实现,如何实现多线程,线程安全在Java中是如何实现的,线程的工作区是哪里**

37请你说一说内存溢出和内存泄漏是怎么回事

38请你介绍一HashMap,HashTable,ConcurrentHashMap

39请你说一下Hashset有什么特性,以及**hashset判断存入的对象是否重复是如何比较的

40、请你说一下Java的反射,你目前主要用他做什么,以及Java的泛型,他的主要作用是什么

41请问类加载器你了解吗

42ReentranceLock 和 synchronized 有什么区别

43请问object的hash该怎么设计

 

2、c++

1.请你说一下数组和指针的区别

2.请你说一说STL常用的容器

3请你说一下虚函数

4.请你说一下动态内存分配

5.请你说一下深copy浅copy

6.请你说一下C 中申请和释放内存的方法

7.请你说一说C++和C的区别

8.请你回答一下C++中的多态是怎么实现的

9请你说一下C语言的内存分配

10请你回答一下什么是指针以及指针和数组的区别指针和引用的区别

11请你说一下const和指针的区别,以及运算符优先级是怎么样的

12手写代码:写一个程序算出100以内7的倍数
13手写代码:写一个函数,不用加法和乘法,返回他的八倍
14请你说一下new和malloc的区别
15请你说一说C++语言的三大特性
16请你说一说虚函数和纯虚函数区别

17请你说一下static作用

18请问你怎么理解多态,他有什么好处

19手写代码:求两个数的最大公约数
20手写代码:将字符串转int类型,要求不能用已有的方法
21手写代码:求x的n次方

3、Python

1.手写代码:比较两个json数据是否相等

2请问怎么拿到python的输入方式?以及python怎么打开文件?

4、Shell

1、请你说一下shell的基本命令,怎么看到行号?怎么查进程的id?

 

2请你回答一下常用到的shell指令中与网络相关的有哪些,netstat、ping、ifconfig这三个的区别,分别是什么功能,netstat里面一般服务器启动后的端口状态是什么

 

四、算法与数据结构

1、链表

1手写代码:一个单向链表,每个节点上都有一个value;给定 一个 value,将该 value 之前的所有 value返回
2、手写代码:**怎么判断链表有环,怎么找环节点

 

3手写代码:一个单向链表,给出头结点,找出倒数第N个结点,要求O(N)的时间复杂度;

4.请问如何判断一个单向链表存在回路?

5请问如何判断一个链表是否有环

6请问如何判断两个链表是否相交

7手写代码:将一个数组指定offset后面的元素前置,可采用链表实现

8、手写代码:循环链表插入元素

2、数组

1、手写代码合并两个排序数组

2.手写代码:最大子数组问题(要求时间复杂度最佳)

3.手写代码:筛选数组arr中重复的元素,考虑时间复杂度。

4.写出一个函数,输入是两个数组,输出是将两个数组中所有元素排序以后用一个数组输出。

5、 请看一下这个小型的算法题,有一个长度未知的无序数组(无法获取数组长度,不许排序,数组元素为int范围内的任意值),如何找出第一个连续出现的重复的数(比如 4 3 4 3 5 5,找出的数是5)

6手写代码:合并两个有序数组

7.手写代码:有三种面值的硬币k1 < k2 < k3 ,找k面值的零钱,最少需要多少硬币

8手写代码:合并有序数组

9.手写代码:一个数组找出重复的元素

10.请问如何防止数组越界

11请回答数组和链表的区别,以及优缺点,另外有没有什么办法能够结合两者的优点

3、复杂度

1.一行里有很多IP地址,互相之间用 || 隔开,共有一万行。要求:取双竖线分隔的倒数第二列所有的IP地址并且去重并输出每个IP地址的出现次数。

2、手写代码:硬币找零问题(要求时间复杂度最佳)

2、排序

1、请问Java中collection的sort方法,默认的排序方法是什么

2、手写代码合并两个排序数组

3.请问有哪些排序算法

4.手写代码:冒泡排序

5手写代码:统计排序数组中出现次数最多的元素出现的次数?

6.请你说一下堆排序的思想?以及怎么初始建堆?是否稳定?

7、手写代码:数组的2-sum,3-sum,问题(leetcode原题)

8手写代码:5个扑克牌是否是顺子,大小王当成任意的

9、请你说一说快速排序并手写代码

10、你最熟悉什么算法?给我说一下原理或者排序过程?它的优缺点是什么?你知道什么排序算法,介绍他们的实现方法,时间复杂度和空间复杂度,是否稳定,快排基准点怎么选择,

11请你说一下快排如何实现?

3、

1、请你说一下BST的特点,**手写代码判断一棵树是不是BST
2手写代码:给一个二叉树,怎么得到这棵树的镜像

3手写代码:通过前序和中序还原二叉树

4.手写代码:求二叉树每层最大值

5手写代码:两个平衡二叉树合并是怎么做的

6手写代码:求全体二叉树节点最大值

7、手写代码二叉树深度优先遍历

 

4、递归

1.手写代码:青蛙跳台阶

 

5、字符串

1手写代码:两个字符串的最长公共子序列?

2、手写代码:字符串逆序

3.手写代码:字符串复制函数

4.手写代码:驼峰字符串问题,给定一个驼峰样式的字符串例如“AaABbBcBbcvQv........”->“bc”,两个一样的字符夹着一个不一样的字符, 处理这个字符串去掉所有的驼峰。

5、手写代码:给一个字符串找出第一个只出现一次的字符位置

 

6、堆与栈

1.请你说一说区别*

2请问有一些数,每次可以插入,或者取出第1/4大的数,应该用什么数据结构?

 

7、动态规划

1.系统会给定一串数字让玩家选择,如果玩家选中一个数字,比如M,那么玩家获得M分,但同时当前选中的M,以及这串数字中所有的M+1和M-1将会全部消失。玩家可以继续选择得分,直到串为空。最终系统会根据玩家获得的积分发送奖励,积分越高,奖励越丰厚。例如系统给定的数字是[2,3,3,3,4], 如果玩家选定了2,玩家得2分,并且选中的2和所有的1和3会消失,那么数组只剩下[4],玩家再选择4,数组为空,此时一共获得6分如果玩家首先选中的是3,那么玩家得3分,选中的3,以及2和4都会消失,数字剩下[3,3],第二次和第三次玩家可以再次选择3,这样选择一共得9分,这也是最优的选择方式。

2.手写代码:给一个英文文本“i have a dream i am a human you can have dream too.”再给一个文本“i you am ”,要求计算出第一个文本中包含第二个文本每个单词的最短文本,比如例子中最短文本就是“i am a human you”。**

3.手写代码:给你一个格子,一个人在格子的左上角,他只能向右走一步,或者向下走一步,他走到右下角共有多少种方法**

4请你讲一下动态链表和静态链表的区别

5、请你说一下递归和动态规划的区别?

6手写代码:01背包

 

8、高级算法

1手写代码:LCS问题

2请问你知道什么加密算法吗

3、手写代码斐波那契数列

 

9、查找

1手写代码:二分查找的代码

2、一个二维坐标系,给你n个点的坐标,画一条直线把他们分成两份(任意直线),要求数量尽量等分,复杂度不能太高。

 

10、哈希

1请你说一下哈希表是做什么的?另外哈希表的实现原理说一下

2、现在有100W个账户密码,要存起来,要求查找时速度尽可能快,你选择什么数据结构?为什么?

 

11、

1请问你对图论算法了解多少?(BFS,DFS,最短路径,最小生成树,最小割最大流...)平常有用过吗?

 

五、框架

1、Spring

1请问Spring 声明一个 bean 如何对其进行个性化定制

2请你说一下Spring AOP

3请问J2EE 上 request 请求先经过谁 然后再转交到 SpringMVC上

4请你回答一下Filter主要是做什么的,filter和Servlet先过哪个,FilterChain 是什么意思

 

六、Linux,SQL等

1.请问linux两台机器之间传文件,用的什么端口

2.请你说一说关于linux查看进程

3.请你说几个基本Linux命令

4.请你说一说Linux命令(查看进程、top命令、查看磁盘)

5请你说几个**inux指令

6.请你说一下vector的特性

7、查看端口号、进程的指令是?动态查看日志的指令?怎么判断一个端口存不存在,磁盘满了怎么处理,删除一个目录下的txt文件,你还熟悉其他什么linux指令?

8、请你说一下vi里面怎么替换字符串

9请问contrab,uptime,du,netstat这几个指令有什么作用,如何查看磁盘分区状态

10请问如何将文本中的T全部替换成t,将其中的一行复制新的一行出来

 

七、前端

1、请你说一下**前端数据存储方式(cookies,localstorage,sessionstorage,indexedDB)

 

八、开发工具

1.请你说一下eclipse的常用操作快捷键

九、设计模式

1**.请你说一下常用设计模式;**

2**.请你手写一下单例模式**

3**请问设计模式是什么?**

4**请你手写一下单例模式代码**

十、场景题

1.上亿数量的链接,如何找出点击量排名前十的链接?

2.请你说几个海量数据存储常见问题**以及如何解答

3.请顾问有两个文件,如何将这两个文件按行依次交叉存入第三个文件中

4请你回答一下:统计文本中出现次数前十的单词,文件很大,不能一次性读入内存?

5请你回答一下QQ怎么实现在线大文件的传输

6请你回答一下新增一个dota2英雄要怎么设计,应该考虑哪些

7请你说一下你用过哪些电商app,**比较他们的好坏

8、有一款还没有进入杭州市场的铅笔,怎么估计他的月销售量

9请你说一下ping百度途径的主机是如何展示出来的

10、1-100,100个数,取走一个,怎么快速知道我取走了哪个数。

十一、大数据

1、Hadoop

1.请你说一下分布式集群的概念。

2、Hadoop你也有了解的,那你有了解他的备份机制吧?请问怎么做到数据保持一致?

 

十二、计算机基础

1、计算机网络

1.请你说一下HTTP的报文段是什么样的?

2.请你回答一下HTTP用的什么连接?

3.请你说一说TCP的三次握手?

4.请你说一下在浏览器中输入一个网址它的运行过程是怎样的?

5请你说一说http rest

6.请你说一说http请求报文

7.请你说一说get post区别

8.请你说一下tcp和udp的区别

9.请你说一下get和post的区别

10.请你说一下为什么tcp可靠,哪些方法保证可靠

11.请你说一说TCP的流量控制

12.请你回答一下TCP三次握手,以及为什么不是两次

13.请你回答一下ipv6的位数

14.请你说一说osi七层模型

15.请你说一说DNS解析过程

16*请你说一说http和https区别

17.请你说一说get和post区别

18.请你说一下**https中SSL层原理

19.请你说一说TCP断连过程,以及单向连接关闭后还能否通信

20.请你说说TCP和UDP用一个端口发送信息是否冲突

21.请你说说HTTP常见头

22.请你说说**HTTP状态码

23.请你说说soket编程和http协议

24请你说说tcp三次握手四次挥手

25请你说说post和get的区别

26.请你说说HTTP状态码,HTTP请求协议

26、请你说一说http缓存问题,缓存寿命,以及怎么判断文件在服务器是否更改的

27.请你回答一下搜索敏感词汇时,页面被重置的原理

28请你说一说两个机器之间的通讯过程?以及计算机网络为什么有七层?

29请你说一说http缓存问题,缓存寿命,怎么判断文件在服务器是否更改的

30请你说一说什么是http协议,http的数据段包括什么?http 为什么是无状态的,http和https的区别?ip地址的abcd类是怎样分的,ABCD分层协议为什么如此分层,什么是长连接和短链接**

31请你说一说**tcp数据段都包括什么?tcp三次握手四次挥手过程、为什么挥手是四次

32请你说一下tcp与udp的区别,以及**tcp为什么可靠,tcp滑动窗口,同传,拆包组装包是如何实现的

33请你说一下tcp/ip四层网络协议

34手写代码:从网络日志中,提取出date 字段,并排序。

35、从打开浏览器输入url到到达服务器上项目中某一个Controller上,请你来描述一下这一串过程

36请你介绍下session

37请问你知道跨域吗,条件是什么,在header里需要加什么,有几种方案 

38请你来回答一下,比如淘宝的搜索算法,输入关键词,会给出搜索出来的商品结果,对于这样的算法,如何评价它的好坏?

39、商品的种类有几十万种,在这种大数据的情况下,如何评价搜索算法的好坏?

2、数据库

1.请问什么是数据库事物

2.请你说一下数据库连接泄露的含义

3请你解释一下数据库事务的含义

4请你写一下mysql删除语句

5.请你说一下**数据库mysql中CHAR和VCHAR的区别

6.请你写两个sql语句,统计XX人数、选出课程编号不为XX的学生学号

7请你说一下**SQL左连接以及使用场景

8.请你写一下SQL查询、更新某一列语句

9.请你写一下SQL语句多表查询

10请你说说redis

11.请你写一些基本的SQL语句

12.某个表格中有10条一模一样的数据,现在要删掉其中的9条请你写一下sql语句

13某个表格存着 s_name subject score 三个字段,比如某一行是 张三 数学 76,现在要选取出所有科目成绩都大于80分的学生名字请写出sql语句

14.请你说一说数据库中的聚类查询

15请问如果mysql中用户密码丢了怎么办,建一个数据库表,授权命令是什么

16写出sql语句:数据库统计总成绩取前十名的学生

17请你说一下数据库事务、主键与外键的区别?

18、请问对缓存技术了解吗

19请问count和sum的区别,以及count()和count(列名)的区别*

20请问你数据库是用的MySQL吗?平常数据库的语句都是怎么写的? join作用想删除一行怎么做

21请问如何对数据库作优化

22、请问什么是幻读

23请你说一下MyBatis有什么优势,他如何做事务管理

24请你说一下事务的隔离级别,以及你一般使用的事务是哪种

3、操作系统

1.请你说一下多进程、多线程,操作系统层面的差别和联系

2.请你说一下线程通信的方法、线程的五种状态

3.请你说一下虚拟内存

4.请你说一下线程的同步和互斥以及应用常见

5.请你说一下线程的五种状态以及转换

6.请你说一说消息队列、信号量的实现方式

7请你说一下进程和线程的区别

8请你说一下死锁的概念、原因、解决方法

9请你说一下多线程

10.请你说一下线程之间通信的手段

11.请你说一下死锁

12.请你回答一下进程同步的方法

13请问进程线程的区别,进程间怎么相互通信,什么是多线程,什么是并发

十三、智力题

1.5只猫 五分钟捉5只老鼠 请问100分钟捉100只老鼠需要多少只猫?

2.圆桌,两个人,轮流放硬币,不能重叠,半径为1,某一方不能放下去,则为输。问先手赢 后手赢。

3.逻辑题:3升的杯子一个,5升的杯子一个,杯子不规则形状 问怎么得到4升的水 水无限多

4.晚上有四个人过桥,一次只能过两个人,但是只有一只手电筒,四个人过桥时间分别是1,2,5,8,求最短过桥时间

5.两个容积分别为5升和6升的桶,最后如何只装3升?

6.有十张扑克牌,每次可以只出一张,也可以只出两张,要出完有多少种出法

7、井盖为什么是圆的

8、用5L和6L的桶,没有刻度,怎么量出3L的水

9从前有座山,山脚下有5个海盗抢到了100枚金币,每一颗都一样的大小和价值。他们决定通过抽签的方式,按顺序提出分配方案决定金币的归属。

首先,由1号提出方案,5个人进行表决,半数人以上(包括半数)同意时,方案通过,否则他将被扔入大海喂鲨鱼,剩余海盗继续按顺序提出方案,依次类推。

假设每个海盗都是足够理性及机智,会考虑到利害及利益最大化问题,那么,1号海盗提出怎样的分配方案才能顺利通过考验并拿到可能性内最多的金币呢?

1*0、烧一根不均匀的绳子,从头烧到尾总共需要1个小时,问如何用烧绳子的方法来确定15分钟?

11、两个盲人各买了一白一黑两双袜子,不小心弄混了,问他们自己怎么分成刚好每人一白一黑

12、一个圆桌,两个人往上放硬币,只能平铺不能重合,最后一个放的人胜利(接下来硬币无处可放了),问先放的赢还是后放的赢。

十四、职业规划

1、为什么要投测试工程师?

十五、技术发展

1、对于大数据有什么了解

2、有没有关注什么最新的技术

3、对加班的看法、

4、介绍实习经验

5、印象最深刻的一个项目,用英文将这个项目说一遍

6、实习过程中有没有想过开发一些自动化测试工具

7、你在学校的成绩,

8、你觉得你做的比较出彩的事情

9、就发表的论文讨论

10、发表的论文印象最深的?

11、那你觉得文章效果好,好在哪里呢?

12、那你能给我总结一下,它的创新点在哪里?

13、打断一下,是有监督的学习还是无监督的?

14、怎么看待你的岗位?

15、标签的搜集是怎么搜集的?

16、那握手用的什么协议?上层的协议的用的那个协议?

17、数字认证认证成功是要通过用户名和密码么?

18、怎么判断是不是伪造?

19、具体怎么判断?信道信息能模拟么?

20、换了时间,信息就不一样了

21、相似性多大才会认为是合法的呢?

22、你们用的什么机器学习算法?

23、那你分类选的啥?你用其他算法去对比了么?)

24、近几年有什么职业规划?

25、打算一辈子做测试吗?

26、你有遇到什么困难吗?

27、你的短板是什么?

28、项目里最成功的是什么?你自己做的吗?多大规模?你怎么实现的,从开始到实现流程是怎样的?

29、你为什么要做测试?结合你自己的优势说(这里我强调了一下,我的学习成绩,学习能力强)

30、你有哪些与众不同的优点**

31、让我介绍下自己,自己的优点和缺点,同学和朋友怎么看你

32、和别人合作过项目没(答曰做过项目负责人),是怎么协调组员合作的,有过冲突和矛盾还有困难?怎么解决的

33、问拿到的offer,谈谈为什么选择头条

34、你了解头条多少,下载APP没,怎么看待

35、你有什么擅长的技术

36、对测试开发有什么了解

37、问成绩、实习时间、实习时间能不能延期、开题报告了没、论文定了什么内容没?

38、你有没有意愿做系统测试?

39、你自己比较偏向于做测试开发?还是系统测试?

40、问我亚索的e在一小段时间内是不能对同一目标使用的,怎么测

41、玩过dota吗,说一下你当时玩dota的时候发现的bug

42、游戏手感是什么?能不能用数据来描述?**43、FPS啥意思?**

44、读过什么源码吗

十六、Hr面

1、有没有家属在腾讯?

2、有没有患过重大疾病、精神疾病、心里疾病?

3、有没有亲属在深圳?

4、意向工作城市?

5、还投过哪些公司?

6、为什么想来腾讯?

7、成绩、实习时间,实习能不能延期?

8、职业规划,为什么来北京

9、对于互联网现状的认识

10、参加过什么竞赛,你在里面担任了什么角色

11、大学这几年怎么过的

12、有没有测试的什么经验

13、如果说来实习,你住的地方怎么解决呢?大概入职时间?

14、你觉得自己是个什么样的人?

15、你对未来同事、老大、团队、公司都有什么期望?

16、如果老大给你一些资料让你看,然后你看不懂,老大又非常忙,你该怎么办?

17、你觉得在公司里什么样的事情会让你很有成就感呢?

18、项目主要解决的问题,从项目中学到的最好的技术,项目经验对做我们这个岗位的好处

19、玩过哪些游戏? 

 

蚂蚁金服面试题

蚂蚁金服】

一、自我介绍

二、Tcp和udp:

        

1.链路层(数据链路层/网络接口层):包括操作系统中的设备驱动程序、计算机中对应的网络接口卡

2.网络层(互联网层):处理分组在网络中的活动,比如分组的选路

3.运输层:主要为两台主机上的应用提供端到端的通信

4.应用层:负责处理特定的应用程序细节


三、TCP三次握手和四次分手

三次握手

客户端发送SYN信号,表示告诉服务器,我要建立连接
服务器返回ACK=1和SYN=1给客户端,表示我已经接收到了客户端的请求,并接收了请求。
客户端收到来自服务端响应后,知道服务端已经接受连接请求,再次发送ACK给服务器,确认服务端的SYN,其实也就是一个确认的再确认。
四次握手

主动方A发送一个FIN(终止信号)给被动方B,表示要终结主动方A到被动方B的连接;
被动方B收到了FIN信号,返回ACK信号给主动方,表示从主动方到被动方的连接关闭了,也就是主动方不能再发送数据给被动方。
被动方B在发送完数据后,给主动方A发送一个FIN信号,请求要终结被动方B到主动方A的连接;


主动方A收到了FIN信号,返回ACK信号给被动方B,表示从被动方B到主动方A的连接关闭了,也就是被动方不能再发送数据给主动方


四、Dns的作用

DNS(Domain Name System,域名系统),万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串

DNS系统:通过域名,最终得到该域名对应的IP地址的过程叫做域名解析(或主机名解析),DNS协议运行在UDP协议之上,使用端口号53
五、接口和抽象类的区别

1、接口
接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情

2、抽象类
抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板


六、怎么理解测试这项工作的

就是利用测试工具按照测试方案和流程对产品进行功能和性能测试,甚至根据需要编写不同的测试工具,设计和维护测试系统,对测试方案可能出现的问题进行分析和评估。执行测试用例后,需要跟踪故障,以确保开发的产品适合需求。使用人工或者自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别


七、Qtp怎么使用的

QTP:QuickTest Professional,关键字驱动(如控件)的功能测试工具,能够对各种编程语言开发的软件进行功能测试,可以用VBScript脚本语言编写程序

执行计划的步骤

创建测试脚本:按照计划录制脚本并保存

增强测试脚本

执行测试

分析测试结果

https://www.cnblogs.com/xiezhidong/p/6784684.html


八、写测试用例

测试用例主要由8部分构成:所属的模块、名称、编号、等级、描述、预制条件、操作步骤、预期结果


九、Linux

常用命令:


十、软件测试里的元素定位

非xPath方式和xPath方式
十一、TestNG怎么使用???

1、Selenium是浏览器自动化工具,主要用来Web的自动化测试

TestNG是一个设计用来简化广泛的测试需求的测试框架

编写测试的过程:

编写测试的业务逻辑并在代码中插入TestNG Annotation

将测试信息添加到testng.xml文件或者build.xml中

运行TestNG

注:TestNG设计的出发点,不仅仅是单元测试,而且可以用于集成测试。设计目标的不同,对比junit的只适合用于单元测试

2、测试信息尤其是测试数据不再写死在测试代码中,好处就是修改测试数据时不需要修改代码/编译了,从而有助于将测试人员引入单元测试/集成测试

3、注解:

@BeforeSuite: 被注释的方法将在所有测试运行前运行
@AfterSuite:被注释的方法将在所有测试运行后运行
@BeforeTest: 被注释的方法将在测试运行前运行
@AfterTest: 被注释的方法将在测试运行后运行
@BeforeGroups: 被配置的方法将在列表中的gourp前运行。这个方法保证在第一个属于这些组的测试方法调用前立即执行。
@AfterGroups: 被配置的方法将在列表中的gourp后运行。这个方法保证在最后一个属于这些组的测试方法调用后立即执行。
@BeforeClass: 被注释的方法将在当前类的第一个测试方法调用前运行。
@AfterClass: 被注释的方法将在当前类的所有测试方法调用后运行。
@BeforeMethod: 被注释的方法将在每一个测试方法调用前运行。
@AfterMethod: 被注释的方法将在每一个测试方法调用后运行。
属性:
@alwaysRun 对于每个bufore方法(beforeSuite, beforeTest, beforeTestClass 和 beforeTestMethod, 但是不包括 beforeGroups)

如果设置为true,被配置的方法将总是运行而不管它属于哪个组。

对于after方法(afterSuite, afterClass, ...): 如果设置为true,被配置的方法甚至在一个或多个先调用的方法失败或被忽略时也将运行。
@dependsOnGroups 这个方法依赖的组列表
@dependsOnMethods 这个方法依赖的方法列表
@enabled 这个类的方法是否激活
@groups 这个类或方法所属的分组列表
@inheritGroups 如果设置为true,这个方法被属于在类级别被@Test annotation指定的组
@DataProvider 标记一个方法用于为测试方法提供数据。

被注释的方法必须返回Object[][], 其中每个Object[]可以指派为这个测试方法的参数列表。从这个DataProvider接收数据@Test方法需要使用一个和当前注释相同名称的dataProvider名称

@name 这个DataProvider的名称
@Factory 标记方法作为一个返回对象的工厂,这些对象将被TestNG用于作为测试类。这个方法必须返回Object[]
@Parameters描述如何传递参数给@Test方法

value 用于填充这个方法的参数的变量列表
@Test 标记一个类或方法作为测试的一部分
@ alwaysRun 如果设置为true,这个测试方法将总是运行,甚至当它依赖的方法失败时
@ dataProvider 这个测试方法的data provider的名称
@ dataProviderClass 用于查找data provider的类。
 如果不指定,将在当前测试方法所在的类或者它的基类上查找data provider。
 如果这个属性被指定, 则data provider方法需要是指定类的static方法。
@ dependsOnGroups 当前方法依赖的组列表
@ dependsOnMethods 当前方法依赖的方法列表
@ description 当前方法的描述
@ enabled 当前类的方法/方法是否被激活
@ expectedExceptions 测试方法期望抛出的异常列表。如果没有异常或者抛出的不是列表中的任何一个,当前方法都将标记为失败.
@ groups 当前类/方法所属的组列表
@ invocationCount 当前方法被调用的次数
@ successPercentage 当前方法期望的成功率
@ sequential 如果设置为true,当前测试类上的所有方法保证按照顺序运行。甚至测试们在parallel="true"的情况下.
@ 这个属性只能用于类级别,如果用于方法级别将被忽略。
@ timeOut 当前方法容许花费的最大时间,单位毫秒。
@ threadPoolSize 当前方法的线程池大小。方法将被多线程调用,次数由invocationCount参数指定

注意:如果invocationCount没有指定则这个属性将被忽略

https://blog.csdn.net/lykangjia/article/details/56485295

 

十二、事务(DB)

四大特性:数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。原子性:指事务包含的所有操作要么全部成功,要么全部失败回滚

一致性:指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
隔离性:当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
持久性:指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
事务

不考虑事务的隔离性,会发生的几种问题:

脏读:指在一个事务处理过程中读取了另一个未提交的事务中的数据
不可重复读:指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了
虚读(幻读)
事务非独立执行时发生的一种现象。例如事务T1对一个表中所有的行的某个数据项做了从“1”修改为“2”的操作,这时事务T2又对这个表中插入了一行数据项,而这个数据项的数值还是为“1”并且提交给数据库。

MySQL数据库为我们提供的四种隔离级别:

① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。

② Repeatable read (可重复读):可避免脏读、不可重复读的发生。

③ Read committed (读已提交):可避免脏读的发生。

④ Read uncommitted (读未提交):最低级别,任何情况都无法保证

 

 


十三、假如你现在来测试登陆这个模块的话,你怎么测试

(1)基本功能测试点

输入正确的用户名和密码登录成功
输入错误的用户名密码登录失败
用户名正确,密码错误,是否提示输入密码错误?
用户名错误,密码正常,是否提示输入用户名错误?
用户名和密码都错误,是否有相应提示?
用户名密码为空时,是否有相应提示?
如果用户未注册,提示请先注册,然后进行登录
已经注销的用户登录失败,提示信息友好?
密码框是否加密显示?
用户名是否支持中文、特殊字符?
用户名是否有长度限制?
密码是否支持中文,特殊字符?
密码是否有长度限制?
密码是否区分大小写?
密码为一些简单常用字符串时,是否提示修改?如:123456
密码存储方式?是否加密?
登录功能是否需要输入验证码?
验证码有效时间?
验证码输入错误,登录失败,提示信息是否友好?
输入过期的验证能否登录成功?
验证码是否容易识别?
验证码换一张功能是否可用?点击验证码图片是否可以更换验证码?
用户体系:比如系统分普通用户、高级用户,不同用户登录系统后可的权限不同。
如果使用第三方账号(QQ,微博账号)登录,那么第三方账号与本系统的账号体系对应关系如何保存?首次登录需要极权等
(2)页面测试

登录页面显示是否正常?文字和图片能否正常显示,相应的提示信息是否正确,按钮的设置和排列是否正常,页面是否简洁壮观等。
页面默认焦点是否定位在用户名的输入框中
首次登录时相应的输入框是否为空?或者如果有默认文案,当点击输入框时默认方案是否消失?
相应的按钮如登录、重置等,是否可用;页面的前进、后退、刷新按钮是否可用?
快捷键Tab,Esc,Enter 等,能否控制使用
兼容性测试:不同浏览器,不同操作系统,不同分辨率下界面是否正常
(3)安全测试

不登录:浏览器中直接输入登录后的地址,看是否可以直接进入
登录成功后生成的Cookie,是否是httponly (否则容易被脚本盗取)
用户名和密码是否通过加密的方式,发送给Web服务器 
用户名和密码的验证,应该是用服务器端验证, 而不能单单是在客户端用javascript验证
用户名和密码的输入框,应该屏蔽SQL 注入攻击
用户名和密码的的输入框,应该禁止输入脚本 (防止XSS攻击)
错误登陆的次数限制(防止暴力破解)
考虑是否支持多用户在同一机器上登录;
考虑一用户在多台机器上登录
性能测试
单用户登录系统的响应时间是否符合"3-5-8"原则
用户数在临界点时并发登录是否还能符合"3-5-8"原则
压力:大量并发用户登录,系统的响应时间是多少?系统会出现宕机、内存泄露、cpu饱和、无法登录吗?
稳定性: 系统能否处理并发用户数在临界点以内连续登录N个时的场景?
其他测试
连续输入3次或以上错误密码,用记是否被锁一定时间(如:15分钟)?时间内不允许登录,超出时间点是否可以继续登录。
用户session过期后,重新登录是否还能重新返回这前session过期的页面?
用户名和密码输入框是事支持键盘快捷键?如:撤销、复制、粘贴等等
是否允许同名用户同时登录进行操作?考虑web和app同时登录
手机登录时,是否先判断网络可用?
手机登录时,是否先判断app存在新版本?
是否支持单点登录?
是否有埋点接口
十四、你是测试工程师,如何保证软件的质量

从两个角度:1.质量是全员质量,公司每个成员都有责任参与质量保证。2.从测试角度来保证质量,测试也分为多个层次。

1、质量管理

(1)代码质量:开发通过单元测试保证

(2)让用户参与UAT测试,保证用户体验(使用质量)

(3)引入QA,保存过程环节质量

(4)系统测试工程师保证系统质量满足需求

2、质量保证

(1)测试策略:质量是多维度的,功能测试、性能测试、兼容性测试等多种测试类型的结合

(2)用例质量:采用合适的用例方法,如何进行需求分析,用例评审

(3)执行质量:如何保证执行深度(界面、关联模块、数据库、日志)与广度(系统测试类型

(4)缺陷质量:Bug评审,引入合适的Bug流程

(5)过程质量:合理的软件测试流程,测试过程监控
 

电话一面(35min)
1、冒泡排序,找下纸笔手写代码
1.5 讲述下不同排序算法的优缺点(时间复杂度、稳定性、海量数据排序)

2、栈的原理和应用:左右括号是否正确匹配的经典问题

3、介绍你研究生期间的项目、用到了哪些算法(机器学习方向)
3.5 Kmeans算法的原理,有什么可以改进的

4、实验室项目之外有什么经历、

5、有没有拿奖、或者参加计算机类竞赛

感谢一面的面试官,很有耐心,即使面对的是我这种没时间准备面试的。

电话二面(42min)
面试官:我将分为几个大的部分开展问题,做一下准备;

0、先介绍下你在实验室做的项目,
用到了KNN,那就讲一下机器学习中的几种距离(欧几里得距离、曼哈顿距离和切比雪夫距离)

1、机器学习:详细说明下“梯度下降”的公式推导?

1.5、答不上来,没关系,我再问一个:最大期望算法的原理,另外这和上一个问题之间有什么联系么?

2、数据结构方面:简述下堆排序的原理?

3、计算机网络方面:多线程通信的方式,系统产生死锁的原因(四个必要条件)?

4、简历上项目中的数据噪点是怎样去除的?

因为楼主是C++,所以基本不涉及Java方面的知识。

终结
今天不知道怎么了,就想去官网上看看状态。发现已经变成Rejected了,还是有点伤心的。
其实上面的问题有一些回答不是很满意,后来去牛客网上看了下,大概明白了:
也有可能是前面的技术综合评价不够高吧,然后一直备胎中…后来出现比你好的了…就被刷了…

后面的大家加油,阿里校招的HC一向不多,所以要有更强的实力和更充足的准备!

推荐
《大话数据结构》 && 《统计学习方法》(李航博士的蓝皮书)
---------------------
 

测试开发工程师常见面试题

一.功能测试用例的设计

举例:

(一).我想要回家,让你给我买一张票,然后设计测试用例

答案:

1.确定需求(回家回哪,需要什么票,买什么时候的票)

2.开始测试

2.1功能测试(我去买票(买火车票,飞机票),买到票(什么时候),回来给你)

2.2可靠性测试(我去买票过程中被撞死了,票买不到怎么办,延期了,买那个点的票没了怎么办让我帮他买票的人的身份,比如是否有特殊优待,如军人,1米2以下儿童等,身份证丢了,或者票丢了,责任划分)

2.3可维护性测试(票是否可保存完好)

2.4兼容性(还不同人的去买,我中间招人去买,我坐车走路)

2.5算法测试(我通过不同的渠道买票花费的时间)

2.6竞品测试(别的人怎么买的票)

2.7安全性测试(身份信息保密)

2.8性能测试(一个身份证买多张票,同时多张身份证买多张票)

 

二.工作测试流程:

(一).功能测试流程

1.需求评审(重点,你发挥的作用是什么,需求可执行性,关联影响的功能模块,异常情况处理)

2.评估测试时间(测试计划)

3.测试用例设计(正交,边界值,等价类。。)

4.用例review(领导,开发,产品)

5.提测(确认开发进行过自测,功能主流程畅通,然后开始介入测试)(产品开发测试一块走流程)

6.codediff(代码改动点,从根源发现开发的问题,代码中明显测试代码(return,写死值),

公共静态变量在发生高并发时容易出问题,所以不能让这个变量的值去内存里面取)

7.执行用例

8.提bug(jira)

9.回归测试

10.确认测试(准生产环境确认)(分情况)

11.发布(线上回归))

12.BUG review(总结问题)

注意点:

发布测试来控制,测试环境部署测试来控制

发布过程中,开发运维做监控。(分批发布)

 

三.app专项测试:

1.CPU,内存,流量,电量,弱网,兼容性,FPS,中断,安装,稳定性

   怎么自动化实现,写一些自动化框架方法封装起来,重复的使用

2.冷热启动的区别

冷启动:在个人电脑中,冷启动是切断电源后重新启动。App类似,就是完全退出(不在后台运行)后重启启动。

热启动:非冷启动情况都可以称为热启动。热启动比冷启动多了一个触发点,那就是在后台启动App,比如双击苹果的HOME键,进行App的热启动。同时热启动通常会有一个计时器,特别是一些理财和银行的类的App会做此处理,当你间隔一段时间触发了热启动后,会让你再次登录(通过密码/手势/指纹)。也有比如网易新闻客户端这样的,当你间隔一段时间后触发热启动,会弹出广告页。

 

四.工具使用:

postman:接口,功能测试,可以做参数化

httprequester:接口,功能测试

jemter:接口功能性能工具

lr:接口功能性能

fiddler:抓包,设置代理,设置断点,mock数据

charles:抓包,设置代理,设置断点,mock数据

robot:功能自动化

uft(qtp):功能自动化

docker:容器

monkey:性能稳定性(app)

jenkins:自动持续集成

git,svn:代码管理

xmind/visio:脑图

soapUI:接口功能测试(HTTP,WEBSERVICE协议)

xshell/SecureCRT/putty:

slor:关键字分词

slor:我测试:我   测试分别去数据库搜索结果

nginx(反向代理)

tomcat(动态网页发布)

 

五.基础概念:

什么是性能测试

HTTP协议(哪些方法,什么区别(GET\POST),怎么组成,状态码)

TCP三次握手四次离手

线程,进程区别联系

内存泄露,内存溢出

死锁

 

六.自动化测试:

自动化测试脚本的应用场景:

1.重复性较多的,写脚本能省时间,节省效率,

接口重复回归,功能重复回归

2.手动做不了的测试

上万数据的准确性校验,脚本跑,错误数据筛选出来

数据更新机制的调整,全量变成增量更新()

自动化框架的搭建:

接口自动化框架

1.结构(1.框架思想(数据,关键字,行为,事件,混合)

2.读取用例的模块(excel,txt,mysql,xml)

3.发请求的模块(requests封装)

4.断言模块(re,遍历断言)

5.日志模块

6.测试报告生成模块

7.发邮件模块

8.配置文件)

2.怎么设计测试用例,注意哪些点()

3.怎么断言

功能自动化框架

1.和接口自动化类似

2.对页面各个控件的api封装(哪些封装,下拉框,选择框,对隐形控件怎么处理)

3.不同环境处理

4.xpath定位方法()

5.js定位方法()

平台工具:

1.接口自动化集成到平台上;

2.平台做测试环境,线上环境的监控

3.做公用统计线上badcase的统计

 

七.算法:

(会多门语言(前端了解。java熟练,python熟练))

排序算法:

冒泡

快排

查找算法:

二分查找,

队列,堆,栈实现:

 

八.linux:

常用命令背下来,熟悉,知道怎么用

ls -alih()

看日志(cat,head,tail,more)

grep|wc -l

 

九.数据库:

关系型数据库:

mangodb

mysql(sql,慢查询,配置)

oracal

GP数据库

非关系型数据库:

redis

 

十.服务架构:

服务分布式架构(超融合):概念实现理解

 

十一.网络

IP

网关

路由

根据子网掩码算网关

NAT

VPN

交换机配置

 

十二.典型例题

(一).Web页面出现空白页怎么定位问题

1.抓包(抓包)

2.看服务日志

3.看你当前url 用接口实际访问模拟下请求

4.mock数据,给请求,确认是那部分问题

 

(二).Web页面响应过慢怎么定位问题

从一个浏览器输入url到形成页面经历了什么

 

(三).你所测试的系统架构

 
---------------------

经典的测试开发面试题

 

(整理自网络)

1、你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解决?

首先,将问题提交到缺陷管理库进行备案。

然后,要获取判断的依据和标准:

  • 根绝需求说明书,产品说明、设计文档等,确认实际结果是否与计划有不一致的地方,提供缺陷是都确认的直接依据;
  • 如果没有文档依据,根据类似软件的一般特性来说明是否存在不一致的地方,来确认是否是缺陷;
  • 根据用户的一般使用习惯,来确认是否是缺陷;
  • 与设计人员,开发人员和客户代表等相关人员探讨,确认是否是缺陷;

合理论述,客观严谨的向测试经理说明自己的判断理由;

等待测试经历做出最终决定,如果仍然存在争议,可以通过公司政策所提供的渠道,向上级反应,并由上级做出决定

2、给你一个网站,你如何测试?

首先,查找需求说明、网站设计等相关文档,分析测试需求;

制定测试计划,确定测试范围和测试策略,一般包括以下及部分,功能性测试、界面测试、性能测试、数据库测试、安全性测试、兼容性测试;

设计测试用例:

功能测试(包括不限于):

链接测试。链接是否正确跳转,是否存在空页面和无效页面,是否有不正确的出错信息返回

提交功能的测试

多媒体元素是否可以正确加载和显示

多语言支持是否能够正确显示选择的语言

界面测试(包括但不限于):

页面是否风格统一,美观

页面布局是否合理,重点内容和热点内容是否突出

空间是否正常使用

对于必须但未安装的控件,是否提供自动下载并安装的功能

文字检查

性能测试:

压力测试

负载测试

强度测试

数据库测试:

具体决定是否需要展开。数据库一般需要考虑连结性,对数据的存取操作,数据内容的验证等方面。

安全性测试:

基本的登陆功能的检查

是否存在溢出错误,导致系统崩溃或者权限泄露

相关开发语言的常见安全性问题检查,例如:SQL注入

如果需要高级的安全性问题,确定获得专业安全公司的帮助,外包测试,或者获取支持

兼容性测试,根据需求说明的内容,确定支持的平台组合:

浏览器的兼容性

操作系统的兼容性

软件平台的兼容性

数据库的兼容性

开展测试,并记录缺陷,合理的安排调整测试进度,提前获取测试所需的资源,建立管理体系(例如:需求变更,风险,配置,测试文档,缺陷报告,人力资源等内容)

定期评审,对测试进行评估和总结,调整测试内容

3、在搜索引擎中输入汉字就可以解析到对应的域名,请问如何使用LoadRunner进行测试

建立测试计划,确定测试标准和测试范围

设计典型场景的测试用例,都改常用业务流程和不常用的业务流程等

根据测试用例,开发自动化测试脚本和场景

录制测试脚本:新建一个脚本(Web/HTML协议);点击录制按钮,在弹出的对话框的URL中输入”about:blank”;在打开的浏览器中进行正常操作流程后,结束录制;调试脚本并保存,可能要注意到字符集的关联。

设置测试场景:针对性能设置测试场景,主要判断在正常情况下,系统的平均事务响应时间是否达标;针对压力负载设置测试场景,主要判断在长时间处于满负荷或者超出系统承载能力的条件下,系统是否会崩溃;执行测试,获取测试结果,分析测试结果

4、目前主要的测试用例方法是?

白盒测试:路径覆盖、代码走查、静态分析

黑盒测试:边界值分析,等价类划分,错误推测法,因果图,状态图法

5、软件测安全性从哪几个方面测试?

软件安全性测试包括:程序、数据库安全测试

  • 用户认证安全的测试要考虑问题: 明确区分系统中不同用户权限 、系统中会不会出现用户冲突 、系统会不会因用户的权限的改变造成混乱 、用户登陆密码是否是可见、可复制 、是否可以通过绝对途径登陆系统(拷贝用户登陆后的链接直接进入系统)、用户退出系统后是否删除了所有鉴权标记,是否可以使用后退键而不通过输入口令进入 系统 、系统网络安全的测试要考虑问题 、测试采取的防护措施是否正确装配好,有关系统的补丁是否打上 、模拟非授权攻击,看防护系统是否坚固 、采用成熟的网络漏洞检查工具检查系统相关漏洞(即用最专业的黑客攻击工具攻击试一下,现在最常用的是 NBSI 系列和 IPhacker IP ) 、采用各种木马检查工具检查系统木马情况 、采用各种防外挂工具检查系统各组程序的外挂漏洞
  • 数据库安全考虑问题: 系统数据是否机密、系统数据的完整性 、系统数据可管理性 、系统数据的独立性 、系统数据可备份和恢复能力(数据备份是否完整,可否恢复,恢复是否可以完整)

6、什么是测试用例?什么是测试脚本?两者关系?

测试用例:为实现测试而向被测试系统提供的输入数据、操作或各种环境设置以及期望结果的一个特定的合集

测试脚本:为了进行自动化测试而编写的脚本

关系:测试脚本的编写必须对应相应的测试用例

7、简述     静态测试、动态测试、黑盒测试、白盒测试、α测试 、β测试

静态测试:不运行程序本身而寻找程序代码中可能存在的错误或评估程序代码的过程

动态测试:实际运行被测程序,输入相应的测试实例,检查运行结果与预期结果的差异,判定执行结果是否符合要求,从而检测程序的正确性、可靠性、有效性、并分析系统运行效率和健壮性等性能

黑盒测试:一般用来确认软件功能的正确性和可操作性,目的是检测软件的各个功能是否得以实现,把北侧程序当作一个黑盒,不考虑其内部结构,在知道该程序的输入和输出之间的关系或程序功能的情况下,依靠软件规格说明书来确定测试用例和推断测试结果的正确性

白盒测试:根据软件内部的逻辑结构分析来进行测试,是基于代码的测试,测试人员通过阅读程序代码或者通过使用开发工具中的单步调试来判断软件的质量,一般黑盒测试由项目经理在程序员开发中来实现。

α测:由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的受控测试,Alpha测试不能由程序员或测试员完成

β测试: 软件的多个用户在一个或多个用户的实际使用环境下进行的测试,开发者通常不在测试现场,Beta测试不能由程序员或测试员完成

8、软件测试分为几个阶段,各阶段的测试策略和要求是什么?

和开发过程相对应,测试过程会依次经历单元测试、集成测试、系统测试、验收测试四个主要阶段:

  • 单元测试:单元测试是针对软件设计的最小单位––程序模块甚至代码段进行正确性检验的测试工作,通常由开发人员进行。
  • 集成测试:集成测试是将模块按照设计要求组装起来进行测试,主要目的是发现与接口有关的问题。由于在产品提交到测试部门前,产品开发小组都要进行联合调试,因此在大部分企业中集成测试是由开发人员来完成的。
  • 系统测试:系统测试是在集成测试通过后进行的,目的是充分运行系统,验证各子系统是否都能正常工作并完成设计的要求。它主要由测试部门进行,是测试部门最大最重要的一个测试,对产品的质量有重大的影响。
  • 验收测试:验收测试以需求阶段的《需求规格说明书》为验收标准,测试时要求模拟实际用户的运行环境。对于实际项目可以和客户共同进行,对于产品来说就是最后一次的系统测试。测试内容为对功能模块的全面测试,尤其要进行文档测试。

单元测试测试策略:

自顶向下的单元测试策略:比孤立单元测试的成本高很多,不是单元测试的一个好的选择。

自底向上的单元测试策略:比较合理的单元测试策略,但测试周期较长。

孤立单元测试策略:最好的单元测试策略。

集成测试的测试策略:

大爆炸集成:适应于一个维护型项目或被测试系统较小

自顶向下集成:适应于产品控制结构比较清晰和稳定;高层接口变化较小;底层接口未定义或经常可能被修改;产口控制组件具有较大的技术风险,需要尽早被验证;希望尽早能看到产品的系统功能行为。

自底向上集成:适应于底层接口比较稳定;高层接口变化比较频繁;底层组件较早被完成。

基于进度的集成
     优点:具有较高的并行度;能够有效缩短项目的开发进度。
     缺点:桩和驱动工作量较大;有些接口测试不充分;有些测试重复和浪费。

系统测试的测试策略:

数据和数据库完整性测试;功能测试;用户界面测试;性能评测;负载测试;强度测试;容量测试;安全性和访问控制测试;故障转移和恢复测试;配置测试;安装测试;加密测试;可用性测试;版本验证测试;文档测试

9、测试人员在软件开发过程中的任务是什么?

1、尽可能早的找出系统中的Bug;
2、避免软件开发过程中缺陷的出现;
3、衡量软件的品质,保证系统的质量;
4、关注用户的需求,并保证系统符合用户需求。
总的目标是:确保软件的质量。

10、在您以往的工作中,一条软件缺陷(或者叫Bug)记录都包含了哪些内容?如何提交高质量的软件缺陷(Bug)记录?

一条Bug记录最基本应包含:

bug编号;
bug严重级别,优先级;
bug产生的模块;
首先要有bug摘要,阐述bug大体的内容;
bug对应的版本;
bug详细现象描述,包括一些截图、录像....等等;
bug出现时的测试环境,产生的条件即对应操作步骤;

高质量的Bug记录:
1) 通用UI要统一、准确
缺陷报告的UI要与测试的软件UI保持一致,便于查找定位。
2) 尽量使用业界惯用的表达术语和表达方法
使用业界惯用的表达术语和表达方法,保证表达准确,体现专业化。
3) 每条缺陷报告只包括一个缺陷
每条缺陷报告只包括一个缺陷,可以使缺陷修正者迅速定位一个缺陷,集中精力每次只修正一个缺陷。校验者每次只校验一个缺陷是否已经正确修正。
4) 不可重现的缺陷也要报告
首先缺陷报告必须展示重现缺陷的能力。不可重现的缺陷要尽力重现,若尽力之后仍不能重现,仍然要报告此缺陷,但在报告中要注明无法再现,缺陷出现的频率。
5) 明确指明缺陷类型
根据缺陷的现象,总结判断缺陷的类型。例如,即功能缺陷、界面缺陷、数据缺陷,合理化建议这是最常见的缺陷或缺陷类型,其他形式的缺陷或缺陷也从属于其中某种形式。
6) 明确指明缺陷严重等级和优先等级
时刻明确严重等级和优先等级之间的差别。高严重问题可能不值得解决,小装饰性问题可能被当作高优先级。
7) 描述 (Description) ,简洁、准确,完整,揭示缺陷实质,记录缺陷或缺陷出现的位置
描述要准确反映缺陷的本质内容,简短明了。为了便于在软件缺陷管理数据库中寻找制定的测试缺陷,包含缺陷发生时的用户界面(UI)是个良好的习惯。例如记录对话框的标题、菜单、按钮等控件的名称。
8) 短行之间使用自动数字序号,使用相同的字体、字号、行间距
短行之间使用自动数字序号,使用相同的字体、字号、行间距,可以保证各条记录格式一致,做到规范专业。
9) 每一个步骤尽量只记录一个操作
保证简洁、条理井然,容易重复操作步骤。
10) 确认步骤完整,准确,简短
保证快速准确的重复缺陷,“完整”即没有缺漏,“准确”即步骤正确,“简短”即没有多余的步骤。
11) 根据缺陷,可选择是否进行图象捕捉
为了直观的观察缺陷或缺陷现象,通常需要附加缺陷或缺陷出现的界面,以图片的形式作为附件附着在记录的“附件”部分。为了节省空间,又能真实反映缺陷或缺陷本质,可以捕捉缺陷或缺陷产生时的全屏幕,活动窗口和局部区域。为了迅速定位、修正缺陷或缺陷位置,通常要求附加中文对照图。
 附加必要的特殊文档和个人建议和注解
如果打开某个特殊的文档而产生的缺陷或缺陷,则必须附加该文档,从而可以迅速再现缺陷或缺陷。有时,为了使缺陷或缺陷修正者进一步明确缺陷或缺陷的表现,可以附加个人的修改建议或注解。
12) 检查拼写和语法缺陷
在提交每条缺陷或缺陷之前,检查拼写和语法,确保内容正确,正确的描述缺陷。
13) 尽量使用短语和短句,避免复杂句型句式
软件缺陷管理数据库的目的是便于定位缺陷,因此,要求客观的描述操作步骤,不需要修饰性的词汇和复杂的句型,增强可读性。
以上概括了报告测试缺陷的规范要求,随着软件的测试要求不同,测试者经过长期测试,积累了相应的测试经验,将会逐渐养成良好的专业习惯,不断补充新的规范书写要求。此外,经常阅读、学习其他测试工程师的测试缺陷报告,结合自己以前的测试缺陷报告进行对比和思考,可以不断提高技巧。
14) 缺陷描述内容
缺陷描述的内容可以包含缺陷操作步骤,实际结果和期望结果。操作步骤可以方便开发人员再现缺陷进行修正,有些开发的再现缺陷能力很差,虽然他明白你所指的缺陷,但就是无法再现特别是对系统不熟悉的新加入开发人员,介绍步骤可以方便他们再现。实际结果可以让开发明白错误是什么,期望结果可以让开发了解正确的结果应该是如何。

 11、黑盒测试和白盒测试是软件测试的两种基本方法,请分别说明各自的优点和缺点!

黑盒测试

优点:比较简单,不需要了解程序内部的代码及实现;与软件的内部实现无关;  从用户角度出发,能很容易的知道用户会用到哪些功能,会遇到哪些问题;基于软件开发文档,所以也能知道软件实现了文档中的哪些功能;在做软件自动化测试时较为方便。

缺点:不可能覆盖所有的代码,覆盖率较低,大概只能达到总代码量的30%;自动化测试的复用性较低。

白盒测试

优点:帮助软件测试人员增大代码的覆盖率,提高代码的质量,发现代码中隐    藏的问题。

缺点:程序运行会有很多不同的路径,不可能测试所有的运行路径;测试基于代码,只能测试开发人员做的对不对,而不能知道设计的正确与否,可能会漏掉一些功能需求;系统庞大时,测试开销会非常大。

 12、如何测试一个纸杯?

用户文档:使用手册是否对杯子的用法、限制、使用条件等有详细描述

功能度:用水杯装水看漏不漏;水能不能被喝到

安全性:杯子有没有毒或细菌

可靠性:杯子从不同高度落下的损坏程度

可移植性:杯子在不同的地方、温度等环境下是否都可以正常使用

兼容性:杯子是否能够容纳果汁、白水、酒精、汽油等

易用性:杯子是否烫手、是否有防滑措施、是否方便饮用

疲劳测试:将杯子盛上水(案例一)放24小时检查泄漏时间和情况;盛上汽油(案例二)放24小时检查泄漏时间和情况等

压力测试:用根针并在针上面不断加重量,看压强多大时会穿透

13、测试计划工作的目的是什么?测试计划文档的内容应该包括什么?其中哪些是最重要的?

软件测试计划是指导测试过程的纲领性文件:

  • 领导能够根据测试计划进行宏观调控,进行相应资源配置等
  • 测试人员能够了解整个项目测试情况以及项目测试不同阶段的所要进行的工作等
  • 便于其他人员了解测试人员的工作内容,进行有关配合工作

包含了产品概述、测试策略、测试方法、测试区域、测试配置、测试周期、测试资源、测试交流、风险分析等内容。借助软件测试计划,参与测试的项目成员,尤其是测试管理人员,可以明确测试任务和测试方法,保持测试实施过程的顺畅沟通,跟踪和控制测试进度,应对测试过程中的各种变更。

测试计划编写6要素(5W1H):

  • why——为什么要进行这些测试;

  • what—测试哪些方面,不同阶段的工作内容;

  • when—测试不同阶段的起止时间;

  • where—相应文档,缺陷的存放位置,测试环境等;

  • who—项目有关人员组成,安排哪些测试人员进行测试;

  • how—如何去做,使用哪些测试工具以及测试方法进行测试

测试计划和测试详细规格、测试用例之间是战略和战术的关系,测试计划主要从宏观上规划测试活动的范围、方法和资源配置,而测试详细规格、测试用例是完成测试任务的具体战术。所以其中最重要的是测试测试策略和测试方法(最好是能先评审)。

14、详细的描述一个测试活动完整的过程

(以瀑布模型为例)

项目经理通过和客户的交流,完成需求文档,由开发人员和测试人员共同完成需求文档的评审,评审的内容包括:需求描述不清楚的地方和可能有明显冲突或者无法实现的功能的地方。项目经理通过综合开发人员,测试人员以及客户的意见,完成项目计划。然后SQA进入项目,开始进行统计和跟踪

开发人员根据需求文档完成需求分析文档,测试人员进行评审,评审的主要内容包括是否有遗漏或双方理解不同的地方。测试人员完成测试计划文档,测试计划包括的内容上面有描述。

测试人员根据修改好的需求分析文档开始写测试用例,同时开发人员完成概要设计文档,详细设计文档。此两份文档成为测试人员撰写测试用例的补充材料。

测试用例完成后,测试和开发需要进行评审。

测试人员搭建环境

开发人员提交第一个版本,可能存在未完成功能,需要说明。测试人员进行测试,发现BUG后提交给BugZilla。

开发提交第二个版本,包括Bug Fix以及增加了部分功能,测试人员进行测试。

重复上面的工作,一般是3-4个版本后BUG数量减少,达到出货的要求。

如果有客户反馈的问题,需要测试人员协助重现并重新测试。

15、BUG管理工具的跟踪过程(用BugZilla为例子)

测试人员发现了BUG,提交到Bugzilla中,状态为new,BUG的接受者为开发接口人员

开发接口将BUG分配给相关的模块的开发人员,状态修改为已分配,开发人员和测试确认BUG,如果是本人的BUG,则设置为接收;如果是别的开发人员的问题,则转发出去,由下一个开发人员来进行此行为;如果认为不是问题,则需要大家讨论并确认后,拒绝这个BUG,然后测试人员关闭此问题。

如果开发人员接受了BUG,并修改好以后,将BUG状态修改为已修复,并告知测试在哪个版本中可以测试。

测试人员在新版本中测试,如果发现问题依然存在,则拒绝验证;如果已经修复,则关闭BUG。

 

16、软件产品质量特性是什么?

功能性:适应性、准确性、互操作性、依从性、安全性。

可靠性:成熟性、容错性、易恢复性。

可使用性:易理解性、易学习性、易操作性。

效率:时间特性、资源特性。

可维护性:易分析性、易变更性、稳定性、易测试性。

可移植性: 适应性、易安装性、遵循性、易替换性

 

17、一台客户端有三百个客户与三百个客户端有三百个客户对服务器施压,有什么区别?

  • 300个用户在一个客户端上,会占用客户机更多的资源,而影响测试的结果。线程之间可能发生干扰,而产生一些异常。
  • 300个用户在一个客户端上,需要更大的带宽。
  • IP地址的问题,可能需要使用IP Spoof来绕过服务器对于单一IP地址最大连接数的限制。
  • 所有用户在一个客户端上,不必考虑分布式管理的问题;而用户分布在不同的客户端上,需要考虑使用控制器来整体调配不同客户机上的用户。同时,还需要给予相应的权限配置和防火墙设置。

18、试述软件的概念和特点?软件复用的含义?构件包括哪些?

软件是计算机系统中与硬件相互依存的另一部分,与计算机系统操作有关的计算机程序、规程、规则,以及可能有的文件、文档及数据。

软件复用(SoftWare Reuse)是将已有软件的各种有关知识用于建立新的软件,以缩减软件开发和维护的花费。软件复用是提高软件生产力和质量的一种重要技术。早期的软件复用主要是代码级复用,被复用的知识专指程序,后来扩大到包括领域知识、开发经验、设计决定、体系结构、需求、设计、代码和文档等一切有关方面。

可以被复用的软件成分一般称作可复用构件

6、软件生存周期及其模型是什么?

软件生存周期(Software life cycle)又称为软件生命周期,生存期。是指从形成开发软件概念起,所开发的软件使用以后,直到失去使用价值消亡为止的整个过程。一般来说,整个生存周期包括,计划、开发、运行(维护)三个时期,每个时期又划分为若干个阶段,每个阶段有明确的任务。

周期模型(典型的几种):

  • 瀑布模型
  • 快速原型模型:快速原型模型允许在需求分析阶段对软件的需求进行初步而非完全的分析和定义,快速设计开发出软件系统的原型,该原型向用户展示待开发软件的全部或部分功能和性能;用户对该原型进行测试评定,给出具体改进意见以丰富细化软件需求;开发人员据此对软件进行修改完善,直至用户满意认可之后,进行软件的完整实现及测试、维护。
  • 迭代模型:迭代包括产生产品发布(稳定、可执行的产品版本)的全部开发活动和要使用该发布必需的所有其他外围元素。在某种程度上,开发迭代是一次 完整地经过所有工作流程的过程:需求分析、设计、实施和测试工作流程。实质上,它类似小型的瀑布式项目。RUP认为,所有的阶段都可以细分为迭代。每一次 的迭代都会产生一个可以发布的产品,这个产品是最终产品的一个子集。

生命周期阶段:

  • 软件计划与可行性分析
  • 需求分析
  • 软件设计
  • 编码
  • 软件测试
  • 运行与维护

19、什么是软件测试?目的和原则?

在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程

软件测试的目的:

  • 测试是程序的执行过程,目的在于发现错误
  • 一个成功的测试用例在于发现至今未发现的错误
  • 一个成功测试是发现了至今未发现的错误的测试
  • 确保产品完成了她所承受或公布的功能,并且用户可以访问到的功能都有明确的书面说明
  • 确保产品满足性能和效率的要求
  • 确保产品是健壮的和适应用户环境的

软件测试的原则:

  • 测试用例中一个必须部分是对预期输出或接过进行定义
  • 程序员应避免测试自己编写的程序
  • 编写软件的组织不应当测试自己编写的软件
  • 应当彻底检查每个测试的执行结果
  • 测试用例的编写不仅应当根据有效和预料到的输入情况,而且也应当根据无效和未预料到的输入情况
  • 检擦程序是否“未做其应该做的”仅是测试的一半,测试的另一半是检查程序是否“做了其不应该做的”
  • 应避免测试用例用后即弃,除非软件本身就是个一次性的软件
  • 计划测试工作时不应默许假定不会发现错误
  • 程序某部分存在更多错误的可能性,与该部分已经发现错误的数量成正比
  • 软件测试是一项极富创造性,极具智力的挑战性的工作

20、软件质量保证体系是什么 国家标准中与质量保证管理相关的几个标准是什么?他们的编号和全称是什么?

SQA由一套软件工程过程和方法组成,以保证(软件的)质量。SQA贯穿整个软件开发过程,(它)应包括需求文档评审、代码控制、代码评审、变更管理、配置管理、版本管理和软件测试。

软件质量保证(SQA-Software Quality Assurance)是建立一套有计划,有系统的方法,来向管理层保证拟定出的标准、步骤、实践和方法能够正确地被所有项目所采用。软件质量保证的目的是使软件过程对于管理人员来说是可见的。它通过对软件产品和活动进行评审和审计来验证软件是合乎标准的。软件质量保证组在项目开始时就一起参与建立计划、标准和过程。这些将使软件项目满足机构方针的要求。

27、您认为在测试人员同开发人员的沟通过程中,如何提高沟通的效率和改善沟通的效果?维持测试人员同开发团队中其他成员良好的人际关系的关键是什么?

尽量面对面的沟通,其次是能直接通过电话沟通,如果只能通过Email等非及时沟通工具的话,强调必须对特性的理解深刻以及能表达清楚。

运用一些测试管理工具如TestDirector进行管理也是较有效的方法,同时要注意在TestDirector中对BUG有准确的描述。

在团队中建立测试人员与开发人员良好沟通中注意以下几点:

一真诚、二是团队精神、三是在专业上有共同语言、四是要对事不对人,工作至上

当然也可以通过直接指出一些小问题,而不是进入BUG Tracking System来增加对方的好感。

 

28、你对测试最大的兴趣在哪里?为什么?

回答这个面试题,没有固定统一的答案,但可能是许多企业都会问到的。提供以下答案供考:

最大的兴趣,感觉这是一个有挑战性的工作;

测试是一个经验行业,工作越久越能感觉到做好测试的难度和乐趣

通过自己的工作,能使软件产品越来越完善,从中体会到乐趣

回答此类问题注意以下几个方面:

尽可能的切合招聘企业的技术路线来表达你的兴趣,例如该企业是数据库应用的企业,那么表示你的兴趣在数据库的测试,并且希望通过测试提升自己的数据库掌握能力。

表明你做测试的目的是为了提升能力,也是为了更好的做好测试;提升能力不是为了以后转开发或其他的,除非用人企业有这样的安排。

不要过多的表达你的兴趣在招聘企业的范畴这外。比如招聘企业是做财务软件的,可是你表现出来的是对游戏软件的兴趣;或招聘是做JAVA开发的,而你的兴趣是在C类语言程序的开发。

 

29、你自认为测试的优势在哪里?

该面试也没有固定不变的答案,但可参考以下几点,并结合自身特点:

有韧性、有耐心、做事有条理性、喜欢面对挑战、有信心做好每一件事情、较强的沟通能力、从以前的经理处都得到了很好的评价表明我做的很好

 

33、简述你在以前的工作中做过哪些事情,比较熟悉什么。参考答案如下。

我过去的主要工作是系统测试和自动化测试。在系统测试中,主要是对BOSS系统的业务逻辑功能,以及软交换系统的Class 5特性进行测试。性能测试中,主要是进行的压力测试,在各个不同数量请求的情况下,获取系统响应时间以及系统资源消耗情况。自动化测试主要是通过自己写脚本以及一些第三方工具的结合来测试软交换的特性测试。

在测试中,我感觉对用户需求的完全准确的理解非常重要。另外,就是对BUG的管理,要以需求为依据,并不是所有BUG均需要修改。

测试工作需要耐心和细致,因为在新版本中,虽然多数原来发现的BUG得到了修复,但原来正确的功能也可能变得不正确。因此要注重迭代测试和回归测试。

 

34、在C/C++中static有什么用途?(请至少说明两种)
1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
2) 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。
3) 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用

 

35、引用与指针有什么区别?
    1) 引用必须被初始化,指针不必。
    2) 引用初始化以后不能被改变,指针可以改变所指的对象。
    3) 不存在指向空值的引用,但是存在指向空值的指针。

 

36、Internet采用哪种网络协议?该协议的主要层次结构?Internet物理地址和IP地址转换采用什么协议?

TCP/IP协议主要层次结构为: 应用层/传输层/网络层/数链路层。

ARP (Address Resolution Protocol)(地据址解析协议)

 

37、说说你对集成测试中自顶向下集成和自底向上集成两个策略的理解,要谈出它们各自的优缺点和主要适应于哪种类型测试

自顶向下集成

优点:较早地验证了主要控制和判断点;按深度优先可以首先实现和验证一个完整的软件功能;功能较早证实,带来信心;只需一个驱动,减少驱动器开发的费用;支持故障隔离。

缺点:柱的开发量大;底层验证被推迟;底层组件测试不充分。

适应于产品控制结构比较清晰和稳定;高层接口变化较小;底层接口未定义或经常可能被修改;产口控制组件具有较大的技术风险,需要尽早被验证;希望尽早能看到产品的系统功能行为。

2、自底向上集成

优点:对底层组件行为较早验证;工作最初可以并行集成,比自顶向下效率高;减少了桩的工作量;支持故障隔离。

缺点:驱动的开发工作量大;对高层的验证被推迟,设计上的错误不能被及时发现。
适应于底层接口比较稳定;高层接口变化比较频繁;底层组件较早被完成。

 

38、软件验收测试包括正式验收测试、alpha测试、beta测试三种测试。


39、系统测试的策略有很多种的,有性能测试、负载测试、强度测试、易用性测试、安全测试、配置测试、安装测试、文档测试、故障恢复测试、用户界面测试、恢复测试、分布测试、可用性测试。

40、设计系统测试计划需要参考的项目文档有软件测试计划、软件需求工件、和迭代计划


41.通过画因果图来写测试用例的步骤为___、___、___、___及把因果图转换为状态图共五个步骤。 利用因果图生成测试用例的基本步骤是:

§ 分析软件规格说明描述中,哪些是原因(即输入条件或输入条件的等价类),哪些是结果(即输出条件),并给每个原因和结果赋予一个标识符。

§ 分析软件规格说明描述中的语义,找出原因与结果之间,原因与原因之间对应的是什么关系? 根据这些关系,画出因果图。

§ 由于语法或环境限制,有些原因与原因之间,原因与结果之间的组合情况不可能出现。为表明这些特殊情况,在因果图上用一些记号标明约束或限制条件。 § 把因果图转换成判定表。

§ 把判定表的每一列拿出来作为依据,设计测试用例。

 

43、请说出这些测试最好由那些人员完成,测试的是什么?

代码、函数级测试一般由白盒测试人员完成,他们针对每段代码或函数进行正确性检验,检查其是否正确的实现了规定的功能。

模块、组件级测试主要依据是程序结构设计测试模块间的集成和调用关系,一般由测试人员完成。

系统测试在于模块测试与单元测试的基础上进行测试。了解系统功能与性能,根据测试用例进行全面的测试。

 

44、 设计测试用例时应该考虑哪些方面,即不同的测试用例针对那些方面进行测试?

设计测试用例时需要注意的是,除了对整体流程及功能注意外,还要注意强度测试、性能测试、压力测试、边界值测试、稳定性测试、安全性测试等多方面。(测试用例需要考虑的四个基本要素是输入、输出、操作和测试环境;另外,测试用例需要考虑的是测试类型(功能、性能、安全……),这部分可以参照TP做答。此外,还需要考虑用例的重要性和优先级)

 

45、 在windows下保存一个文本文件时会弹出保存对话框,如果为文件名建立测试用例,等价类应该怎样划分?

单字节,如A;双字节, AA、我我;特殊字符 /‘。‘;、=-等;保留字,如com;文件格式为8.3格式的;文件名格式为非8.3格式的;/,\,*等九个特殊字符。

 

46、假设有一个文本框要求输入10个字符的邮政编码,对于该文本框应该怎样划分等价类?

特殊字符,如10个*或¥;英文字母,如ABCDefghik;小于十个字符,如123;大于十个字符,如11111111111;数字和其他混合,如123AAAAAAA;空字符;保留字符

 

47.软件测试项目从什么时候开始,?为什么? 
软件测试应该在需求分析阶段就介入,因为测试的对象不仅仅是程序编码,应该对软件开发过程中产生的所有产品都测试,并且软件缺陷存在放大趋势.缺陷发现的越晚,修复它所花费的成本就越大.
 

48、什么是回归测试?

回归测试: (regression   testing): 回归测试有两类:用例回归和错误回归;用例回归是过一段时间以后再回头对以前使用过的用例在重新进行测试,看看会重新发现问题。错误回归,就是在新版本中,对以前版本中出现并修复的缺陷进行再次验证,并以缺陷为核心,对相关修改的部分进行测试的方法。


49.单元测试、集成测试、系统测试的侧重点是什么? 
  单元测试针对的是软件设计的最小单元--程序模块(面向过程中是函数、过程;面向对象中是类。),进行正确性检验的测试工作,在于发现每个程序模块内部可能存在的差错.一般有两个步骤:人工静态检查\动态执行跟踪 
  集成测试针对的是通过了单元测试的各个模块所集成起来的组件进行检验,其主要内容是各个单元模块之间的接口,以及各个模块集成后所实现的功能. 
  系统测试针对的是集成好的软件系统,作为整个计算机系统的一个元素,与计算机硬件\外设\某些支持软件\数据和人员等其他系统元素结合在一起,要在实际的运行环境中,对计算机系统进行一系列的集成测试和确认测试.


51.一个测试工程师应具备那些素质? 
1、责任心2、沟通能力3、团队合作精神4、耐心、细心、信心5、时时保持怀疑态度,并且有缺陷预防的意识6、具备一定的编程经验


53:你所了解的的软件测试类型都有哪些,简单介绍一下。

按测试策略分类:1、静态与动态测试2、黑盒与白盒测试 3、手工和自动测试 4、冒烟测试 5、回归测试;

按测试阶段分类:单元测试、集成测试、系统测试;

其他常见测试方法:1、功能测试 2、性能测试 3、压力测试 4、负载测试 5、易用性测试 6、安装测试 7、界面测试 8、配置测试 9、文档测试 10、兼容性测试 11、安全性测试 12、恢复测试

 

54:你认为做好测试计划工作的关键是什么?

明确测试的目标,增强测试计划的实用性

编写软件测试计划得重要目的就是使测试过程能够发现更多的软件缺陷,因此软件测试计划的价值取决于它对帮助管理测试项目,并且找出软件潜在的缺陷。因此,软件测试计划中的测试范围必须高度覆盖功能需求,测试方法必须切实可行,测试工具并且具有较高的实用性,便于使用,生成的测试结果直观、准确

坚持“5W”规则,明确内容与过程

“5W”规则指的是“What(做什么)”、“Why(为什么做)”、“When(何时做)”、“Where(在哪里)”、“How(如何做)”。利用“5W”规则创建软件测试计划,可以帮助测试团队理解测试的目的(Why),明确测试的范围和内容(What),确定测试的开始和结束日期(When),指出测试的方法和工具(How),给出测试文档和软件的存放位置(Where)。

采用评审和更新机制,保证测试计划满足实际需求

测试计划写作完成后,如果没有经过评审,直接发送给测试团队,测试计划内容的可能不准确或遗漏测试内容,或者软件需求变更引起测试范围的增减,而测试计划的内容没有及时更新,误导测试执行人员。

分别创建测试计划与测试详细规格、测试用例

应把详细的测试技术指标包含到独立创建的测试详细规格文档,把用于指导测试小组执行测试过程的测试用例放到独立创建的测试用例文档或测试用例管理数据库中。测试计划和测试详细规格、测试用例之间是战略和战术的关系,测试计划主要从宏观上规划测试活动的范围、方法和资源配置,而测试详细规格、测试用例是完成测试任务的具体战术。

 

 

55:您认为做好测试用例设计工作的关键是什么?

白盒测试用例设计的关键是以较少的用例覆盖尽可能多的内部程序逻辑结果

黑盒法用例设计的关键同样也是以较少的用例覆盖模块输出和输入接口。不可能做到完全测试,以最少的用例在合理的时间内发现最多的问题 

 

56:你的测试职业发展目标是什么?

测试经验越多,测试能力越高。所以我的职业发展是需要时间累积的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前3年累积测试经验,不断的更新自己改正自己,做好测试任务。

 

57:测试结束的标准是什么?

从微观上来说,在测试计划中定义,比如系统在一定性能下平稳运行72小时,目前Bug Tracking System中,本版本中没有一般严重的BUG,普通BUG的数量在3以下,BUG修复率90%以上等等参数,然后由开发经理,测试经理,项目经理共同签字认同版本Release。

如果说宏观的,则是当这个软件彻底的消失以后,测试就结束了。

 

59、一套完整的测试应该由哪些阶段组成? 
可行性分析、需求分析、概要设计、详细设计、编码、单元测试、集成测试、系统测试、验收测试

 

61、您是否了解以往所工作的企业的软件开发过程?如果了解,请试述一个完整的开发过程需要完成哪些工作?分别由哪些不同的角色来完成这些工作?您在以往的测试工作中都曾经具体从事过哪些工作?其中最擅长哪部分工作?

开发过程---需求调研(需求人员)、需求分析(需求人员)、概要设计(设计人员)、详细设计(设计人员)、编码(开发人员)

测试过程---需求评审、系统测试设计、概要设计评审、集成测试设计、详细设计评审、单元测试设计、测试执行

测试工作的整个过程都做过,擅长做测试设计

过程决定质量,软件的过程改进正是为了提高软件的质量,将过往的种种经验教训积累起来。

 

62、测试用例设计的原则是什么?目前主要的测试用例设计方法有哪些?

代表性:能够代表并覆盖各种合理的和不合理、合法的和非法的、边界的和越界的、以及极限的输入数据、操作和环境设置等.

可判定性:即测试执行结果的正确性是可判定的,每一个测试用例都应有相应的期望结果.

可再现性:即对同样的测试用例,系统的执行结果应当是相同的。

方法有等价类、边界值、因果图、状态图、正交法、大纲法

 

63、面向对象的测试用例设计有几种方法?如何实现?

给类中的每个构造函数设计一组测试用例

组合类中的类变量、实例变量

组合类中的各种方法

根据前置条件和后置条件设计测试用例

根据代码设计测试用例

 

64、LoadRunner分为哪三个模块?请简述各模块的主要功能。

Virtual User Generator:用于录制脚步

Mercury LoadRunner Controller:用于创建、运行和监控场景

Mercury LoadRunner Analysis:用于分析测试结果

 

65、你对测试最大的兴趣在哪里?为什么?

最大的兴趣就是测试有难度,有挑战性!做测试越久越能感觉到做好测试有多难。曾经在无忧测试网上看到一篇文章,是关于如何做好一名测试工程师。一共罗列了11,12点,有部分是和人的性格有关,有部分需要后天的努力。但除了性格有关的1,2点我没有把握,其他点我都很有信心做好它。

刚开始进入测试行业时,对测试的认识是从无忧测试网上了解到的一些资料,当时是冲着做测试需要很多技能才能做的好,虽然入门容易,但做好很难,比开发更难,虽然当时我很想做开发(学校专业课我基本上不缺席,因为我喜欢我的专业),但看到测试比开发更难更有挑战性,想做好测试的意志就更坚定了。

我觉得做测试整个过程中有2点让我觉得很有难度(对我来说,有难度的东西我就非常感兴趣),第一是测试用例的设计,因为测试的精华就在测试用例的设计上了,要在版本出来之前,把用例写好,用什么测试方法写?(也就是测试计划或测试策略),如果你刚测试一个新任务时,你得花一定的时间去消化业务需求和技术基础,业务需求很好理解(多和产品经理和开发人员沟通就能达到目的),而技术基础可就没那么简单了,这需要你自觉的学习能力,比如说网站吧,最基本的技术知识你要知道网站内部是怎么运作的的,后台是怎么响应用户请求的?测试环境如何搭建?这些都需要最早的学好。至少在开始测试之前能做好基本的准备,可能会遇到什么难题?需求细节是不是没有确定好?这些问题都能在设计用例的时候发现。

第二是发现BUG的时候了,这应该是测试人员最基本的任务了,一般按测试用例开始测试就能发现大部分的bug,还有一部分bug需要测试的过程中更了解所测版本的情况获得更多信息,补充测试用例,测试出bug。还有如何发现bug?这就需要在测试用例有效的情况下,通过细心和耐心去发现bug了,每个用例都有可能发现bug,每个地方都有可能出错,所以测试过程中思维要清晰(测试过程数据流及结果都得看仔细了,bug都在里面发现的)。如何描述bug也很有讲究,bug在什么情况下会产生,如果条件变化一点点,就不会有这个bug,以哪些最少的操作步骤就能重现这个bug,这个bug产生的规律是什么?如果你够厉害的话,可以帮开发人员初步定位问题。

 

66、您所熟悉的软件测试类型都有哪些?请试着分别比较这些不同的测试类型的区别与联系(如功能测试、性能测试……)
  测试类型有:功能测试,性能测试,界面测试。
  功能测试在测试工作中占的比例最大,功能测试也叫黑盒测试。是把测试对象看作一个黑盒子。利用黑盒测试法进行动态测试时,需要测试软件产品的功能,不需测试软件产品的内部结构和处理过程。采用黑盒技术设计测试用例的方法有:等价类划分、边界值分析、错误推测、因果图和综合策略。 
  性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。负载测试和压力测试都属于性能测试,两者可以结合进行。通过负载测试,确定在各种工作负载下系统的性能,目标是测试当负载逐渐增加时,系统各项性能指标的变化情况。压力测试是通过确定一个系统的瓶颈或者不能接收的性能点,来获得系统能提供的最大服务级别的测试。
  界面测试,界面是软件与用户交互的最直接的层,界面的好坏决定用户对软件的第一印象。而且设计良好的界面能够引导用户自己完成相应的操作,起到向导的作用。同时界面如同人的面孔,具有吸引用户的直接优势。设计合理的界面能给用户带来轻松愉悦的感受和成功的感觉,相反由于界面设计的失败,让用户有挫败感,再实用强大的功能都可能在用户的畏惧与放弃中付诸东流。
  区别在于,功能测试关注产品的所有功能上,要考虑到每个细节功能,每个可能存在的功能问题。性能测试主要关注于产品整体的多用户并发下的稳定性和健壮性。界面测试更关注于用户体验上,用户使用该产品的时候是否易用,是否易懂,是否规范(快捷键之类的),是否美观(能否吸引用户的注意力),是否安全(尽量在前台避免用户无意输入无效的数据,当然考虑到体验性,不能太粗鲁的弹出警告)?做某个性能测试的时候,首先它可能是个功能点,首先要保证它的功能是没问题的,然后再考虑该功能点的性能测试

 

67、请试着比较一下黑盒测试、白盒测试、单元测试、集成测试、系统测试、验收测试的区别与联系。
  黑盒测试:已知产品的功能设计规格,可以进行测试证明每个实现了的功能是否符合要求。
  白盒测试:已知产品的内部工作过程,可以通过测试证明每种内部操作是否符合设计规格要求,所有内部成分是否以经过检查。
  软件的黑盒测试意味着测试要在软件的接口处进行。这种方法是把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。因此黑盒测试又叫功能测试或数据驱动测试。黑盒测试主要是为了发现以下几类错误:
  1、是否有不正确或遗漏的功能?2、在接口上,输入是否能正确的接受?能否输出正确的结果?3、是否有数据结构错误或外部信息(例如数据文件)访问错误?4、性能上是否能够满足要求?5、是否有初始化或终止性错误?
  软件的白盒测试是对软件的过程性细节做细致的检查。这种方法是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。白盒测试主要是想对程序模块进行如下检查:
  1、对程序模块的所有独立的执行路径至少测试一遍。
  2、对所有的逻辑判定,取“真”与取“假”的两种情况都能至少测一遍。
  3、在循环的边界和运行的界限内执行循环体。
  4、测试内部数据结构的有效性,等等。
  单元测试(模块测试)是开发者编写的一小段代码,用于检验被测代码的一个很小的、很明确的功能是否正确。通常而言,一个单元测试是用于判断某个特定条件(或者场景)下某个特定函数的行为。
  单元测试是由程序员自己来完成,最终受益的也是程序员自己。可以这么说,程序员有责任编写功能代码,同时也就有责任为自己的代码编写单元测试。执行单元测试,就是为了证明这段代码的行为和我们期望的一致。
  集成测试(也叫组装测试,联合测试)是单元测试的逻辑扩展。它的最简单的形式是:两个已经测试过的单元组合成一个组件,并且测试它们之间的接口。从这一层意义上讲,组件是指多个单元的集成聚合。在现实方案中,许多单元组合成组件,而这些组件又聚合成程序的更大部分。方法是测试片段的组合,并最终扩展进程,将您的模块与其他组的模块一起测试。最后,将构成进程的所有模块一起测试。
  系统测试是将经过测试的子系统装配成一个完整系统来测试。它是检验系统是否确实能提供系统方案说明书中指定功能的有效方法。(常见的联调测试)
  系统测试的目的是对最终软件系统进行全面的测试,确保最终软件系统满足产品需求并且遵循系统设计。
  验收测试是部署软件之前的最后一个测试操作。验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务。
验收测试是向未来的用户表明系统能够像预定要求那样工作。经集成测试后,已经按照设计把所有的模块组装成一个完整的软件系统,接口错误也已经基本排除了,接着就应该进一步验证软件的有效性,这就是验收测试的任务,即软件的功能性能如同用户所合理期待的那样。

 

68、当开发人员说不是BUG时,你如何应付?
  开发人员说不是bug,有2种情况,一是需求没有确定,所以我可以这么做,这个时候可以找来产品经理进行确认,需不需要改动,3方商量确定好后再看要不要改。二是这种情况不可能发生,所以不需要修改,这个时候,我可以先尽可能的说出是BUG的依据是什么?如果被用户发现或出了问题,会有什么不良结果?程序员可能会给你很多理由,你可以对他的解释进行反驳。如果还是不行,那我可以给这个问题提出来,跟开发经理和测试经理进行确认,如果要修改就改,如果不要修改就不改。其实有些真的不是bug,我也只是建议的方式写进TD中,如果开发人员不修改也没有大问题。如果确定是bug的话,一定要坚持自己的立场,让问题得到最后的确认。

 

69、为什么要在一个团队中开展软件测试工作?

因为没有经过测试的软件很难在发布之前知道该软件的质量,就好比ISO质量认证一样,测试同样也需要质量的保证,这个时候就需要在团队中开展软件测试的工作。在测试的过程发现软件中存在的问题,及时让开发人员得知并修改问题,在即将发布时,从测试报告中得出软件的质量情况。

 

71、一份测试计划应该包括哪些内容?

背景、项目简介、目的、测试范围、测试策略、人员分工、资源要求、进度计划、参考文档、常用术语、提交文档、风险分析。

 

72、针对于软件的行业背景,你如何理解软件的业务?

阅读用户手册了解软件的功能和操作流程;看一些业务的专业书籍补充业务知识;如果有用户实际的数据,可以拿实际的数据进行参考;参考以前的用例和BUG报告;在使用软件的过程中多思考;多与产品经理交流。

 

74、如何定位测试用例的作用?

组织性:编写、组织性、功能覆盖、重复性、跟踪、测试确认

 

76、什么是兼容性测试?请举例说明如何利用兼容性测试列表进行测试。

主要验证软件产品在不同版本之间的兼容性。包括向下兼容和交错兼容,向下兼容是测试软件新版本保留它早期版本功能的情况,交错兼容是验证共同存在的两个相关但不相同的产品之间的兼容性。

 

77、对某软件进行测试,发现在WIN98上运行得很慢,怎么判别是该软件存在问题还是其软硬件运行环境存在问题?

看软件的运行环境要求。如果符合要求则是程序存在问题,若不符合要求则是硬件系统存在问题

 

78、需求测试的注意事项有哪些?

是否使用了公司的模板、文档内容是否符合规范、所有的需求是分级是否清析适当、所有的需求是否具有一致性、需求是否可行(即,该需求组合有解决方案)、需求可否用己知的约束来实现、需求是否足够(即,可以把它送到一个规范的开发组织,并有一个生产出所需要产品的合理的可能性)、所有的其它需求是交叉引用是否正确、用户描述是否清楚、是否用客户的语言来描述需求、每个需求描述是否清楚没有岐义,可以移交给一个独立的组去实现时也能理解、是否所有的需求都是可验证的、是否每条需求都具有独立性,即使发生了变化也不会影响其它需求、性能指标是否明确、非功能性需求是否得到充分表现、是否完整列出适用的标准或协议、标准和协议之间是否存在冲突

 

81、主键、外键的作用,索引的优点与不足?

  答:主键:是表中的唯一标示键。作用:保证实体的完整性;加快数据库的操作速度;增加新的表记录时,数据库会自动检索新记录的主键值,不允许该值与其他表中记录的主键重复;数据库会按主键值的顺序显示记录,如果没有设定主键,则按输入的顺序显示记录。

  外键:是主键的从属,表示了两个表之间的联系。作用:使用外键可以避免冗余。

索引的优点: 1、通过创建唯一性的索引,可以保证表中数据的唯一性; 2、加速数据的检索速度; 3、加快表与表之间的连接; 4、在使用分组与排序数据检索时,可以显著检索分组与排序的时间; 5、在查询的过程中使用优化隐藏器,提供系统性能。

缺点: 1、创建索引需要时间,且随着数据量的增加而增加; 2、索引需要占用物理空间;

        3、当对表中数据进行修改时,索引也要动态维护,降低了数据的维护速度。

 

84、性能测试的流程?

  1.测试需求分析2.测试计划制定与评审3.测试用例设计与开发4.测试执行与监控5.分析测试结果6.编写性能测试报告7.测试经验总结

 

88、简述bug的生命周期?

  1, 有效地记录BUG 2, 使用BUG模板 3, 评价BUG优先级和严重性 4, BUG的生命 5, 维护BUG数据库

 

 

89、缺陷记录应包含的内容?

  缺陷标识、缺陷类型、缺陷严重程度、缺陷产生可能性、缺陷优先级、缺陷状态、缺陷起源、缺陷来源、缺陷原因; 

 

91 您所熟悉的软件测试类型都有哪些?请试着分别比较这些不同的测试类型的区别与联系(如功能测试、性能测试……)

  易用性测试-界面的友好性,操作方便性等。

  功能测试-系统中功能性需求的满足

  安全性测试-系统是否存在安全隐患和漏洞

  性能测试-系统在大并发下的响应速度和健壮性

 

93、您认为做好测试计划工作的关键是什么?

  了解项目或系统的业务需求

  和项目经理协调好,了解项目的进度计划安排情况 

 

 

95您认为做好测试用例设计工作的关键是什么?

  对业务和软件需求非常清楚,可以根据需求不同选择不同的测试用例设计

 

 

96、.您以往的工作中是否曾开展过测试用例的评审工作?如果有,请描述测试用例评审的过程和评审的内容

  评审计划->预审->评审;

  评审内容主要是测试用例对软件需求的覆盖程度,对于相关边界是否考虑,是否针对复杂流程准备多套测试数据,是否有专门针对非功能性需求的测试。 

 

 

98.您认为性能测试工作的目的是什么?做好性能测试工作的关键是什么?

  关键是测试脚本的录制,测试时候测试环境的干净。

100、.您以往所从事的软件测试工作中,是否使用了一些工具来进行软件缺陷(Bug)的管理?如果有,请结合该工具描述软件缺陷(Bug)跟踪管理的流程。

  CQ,也可以使用BugFree等免费工具。

101、.您如何看待软件过程改进?在您曾经工作过的企业中,是否有一些需要改进的东西呢?您期望的理想的测试人员的工作环境是怎样的?

  将先进的经验或思想固化到过程中,通过过程改进和能力提高来改进软件质量

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页