常见软件测试面试题

上一篇 / 下一篇  2012-06-12 16:57:17

问题一:为什么要在一个团队中开展软件测试工作
任何软件在开发过程中都会留下缺陷,带有缺陷的软件产品如果提交出去,可能会给公司带来不可估量的损失,我们必须在客户之前发现尽可能多的问题,从而保障客户满意。而发现问题的这个过程称之为测试。

问题二:简述你在以前的工作中做过哪些事情,比较熟悉什么。
      此问题每个人都不一样。我自己的答案如下。
我主要的工作是系统测试自动化测试,也曾少量涉及性能测试。在系统测试中,主要是对BOSS系统的业务逻辑功能,以及软交换系统的Class 5特性进行测试。性能测试中,主要是进行的压力测试,在各个不同数量请求的情况下,获取系统响应时间以及系统资源消耗情况。自动化测试主要是通过自己写脚本以及一些第三方工具的结合来测试软交换的特性测试。

问题三:你所了解的的软件测试类型都有哪些,简单介绍一下。
1.
基本功能验证。主要是对发布的版本进行一些最主要功能的测试。英文常见叫法是Smoking Test, Basic Verification Test或者Sanity Check
2.
功能测试。主要是依据需求或者需求分析文档,对所发布的版本进行测试,看看是否满足需求,是否出现了不必要的功能。
3.
单元测试。是开发人员进行的测试之一,一般是开发人员对很小的模块,比如函数进行测试,一般来说,开发人员还需要开发相应的测试桩来进行此类测试。
4.
集成测试。在大型的开发过程中,软件是模块化进行开发的,将不同的模块揉合在一起的话,需要进行的测试就是集成测试。
5.
系统测试。当软件提交给测试组后,是对整个系统的所有功能进行测试,一般来说,功能测试是系统测试的一个部分。
6.
压力测试。主要是在很大性能的情况下,这个性能已经接近了系统的极限,看看系统运转的情况。
7.
负载测试。主要是用各种不同的性能去检测系统,采集各个数据在这些性能情况下的数据。
8.
黑盒测试。指系统对你来说是完全不透明的,只给你留下了输入和最终输出,这个是功能测试的方法之一。
9.
灰盒测试。指在了解部分系统内部工作机制的情况下,对于系统进行的覆盖性测试。
10.
白盒测试。主要是在单元测试和集成测试的情况下,开发人员已知代码,对这一段的代码进行全路径的覆盖测试。
11.
界面测试。主要是看用户界面的友好性和易用性,是否有文字或者排版错误,是否有输入限制等等。
12.
回归测试。一般是系统发现BUG,开发人员修改后,和BUG直接相关以及可能相关的功能进行的测试。
13.
安装和卸载的测试。
14.
恢复测试。主要是一个系统在发生了灾难的情况下,从错误中是否容易恢复。
15.
兼容性测试。一个系统在不同的语言,操作系统下的系统测试。
16.
安全测试。系统在遇到攻击或者类似情况下的表现。
17.
Alpha
测试。系统在给最终用户前,测试人员在实验室中模拟最终用户的测试。
18.
Beta
测试。由部分最终用户通过使用来进行的测试。
19.
比较测试。和其他具有相同或者类似功能的系统进行对比的测试。
20.
验收测试。一般是最终用户在接受产品前,依据自己所提出的要求进行的测试,很多情况下,验收测试可能委托第三方机构完成。

问题四:测试计划工作的目的是什么?测试计划文档的内容应该包括什么?其中哪些是最重要的?
软件测试计划是指导测试过程的纲领性文件。
包含了产品概述、测试策略、测试方法、测试区域、测试配置、测试周期、测试资源、测试交流、风险分析等内容。借助软件测试计划,参与测试的项目成员,尤其是测试管理人员,可以明确测试任务和测试方法,保持测试实施过程的顺畅沟通,跟踪和控制测试进度,应对测试过程中的各种变更。
测试计划和测试详细规格、测试用例之间是战略和战术的关系,测试计划主要从宏观上规划测试活动的范围、方法和资源配置,而测试详细规格、测试用例是完成测试任务的具体战术。所以其中最重要的是测试测试策略和测试方法(最好是能先评审)。

问题五:你认为做好测试计划工作的关键是什么?
1.
明确测试的目标,增强测试计划的实用性
编写软件测试计划得重要目的就是使测试过程能够发现更多的软件缺陷,因此软件测试计划的价值取决于它对帮助管理测试项目,并且找出软件潜在的缺陷。因此,软件测试计划中的测试范围必须高度覆盖功能需求,测试方法必须切实可行,测试工具并且具有较高的实用性,便于使用,生成的测试结果直观、准确
2.
坚持“5W”规则,明确内容与过程
5W”规则指的是“What(做什么)”、“Why(为什么做)”、“When(何时做)”、“Where(在哪里)”、“How(如何做)”。利用“5W”规则创建软件测试计划,可以帮助测试团队理解测试的目的(Why),明确测试的范围和内容(What),确定测试的开始和结束日期(When),指出测试的方法和工具(How),给出测试文档和软件的存放位置(Where)。
3.
采用评审和更新机制,保证测试计划满足实际需求
测试计划写作完成后,如果没有经过评审,直接发送给测试团队,测试计划内容的可能不准确或遗漏测试内容,或者软件需求变更引起测试范围的增减,而测试计划的内容没有及时更新,误导测试执行人员。
4.
分别创建测试计划与测试详细规格、测试用例
应把详细的测试技术指标包含到独立创建的测试详细规格文档,把用于指导测试小组执行测试过程的测试用例放到独立创建的测试用例文档或测试用例管理数据库中。测试计划和测试详细规格、测试用例之间是战略和战术的关系,测试计划主要从宏观上规划测试活动的范围、方法和资源配置,而测试详细规格、测试用例是完成测试任务的具体战术。

问题六:常见的测试用例设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。

1.         等价类划分

划分等价类: 等价类是指某个输入域的子集合.在该子集合中,各个输入数据对于揭露程序中的错误都是等效的.并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试.因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据.取得较好的测试结果.等价类划分可有两种不同的情况:有效等价类和无效等价类.

2.         边界值分析法

  边界值分析方法是对等价类划分方法的补充。测试工作经验告诉我,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部.因此针对各种边界情况设计测试用例,可以查出更多的错误.

  使用边界值分析方法设计测试用例,首先应确定边界情况.通常输入和输出等价类的边界,就是应着重测试的边界情况.应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据.

3.         错误推测法

  基于经验和直觉推测程序中所有可能存在的各种错误, 从而有针对性的设计测试用例的方法.

  错误推测方法的基本思想: 列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例. 例如, 在单元测试时曾列出的许多在模块中常见的错误. 以前产品测试中曾经发现的错误等, 这些就是经验的总结. 还有, 输入数据和输出数据为0的情况. 输入表格为空格或输入表格只有一行. 这些都是容易发生错误的情况. 可选择这些情况下的例子作为测试用例.

4.         因果图方法

前面介绍的等价类划分方法和边界值分析方法,都是着重考虑输入条件,但未考虑输入条件之间的联系, 相互组合等. 考虑输入条件之间的相互组合,可能会产生一些新的情况. 但要检查输入条件的组合不是一件容易的事情, 即使把所有输入条件划分成等价类,他们之间的组合情况也相当多. 因此必须考虑采用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来考虑设计测试用例. 这就需要利用因果图(逻辑模型). 因果图方法最终生成的就是判定表. 它适合于检查程序输入条件的各种组合情况.

5.         正交表分析法

有时候,可能因为大量的参数的组合而引起测试用例数量上的激增,同时,这些测试用例并没有明显的优先级上的差距,而测试人员又无法完成这么多数量的测试,就可以通过正交表来进行缩减一些用例,从而达到尽量少的用例覆盖尽量大的范围的可能性。

6.         场景分析方法

指根据用户场景来模拟用户的操作步骤,这个比较类似因果图,但是可能执行的深度和可行性更好。


问题七:您认为做好测试用例设计工作的关键是什么?

白盒测试用例设计的关键是以较少的用例覆盖尽可能多的内部程序逻辑结果

黑盒法用例设计的关键同样也是以较少的用例覆盖模块输出和输入接口。不可能做到完全测试,以最少的用例在合理的时间内发现最多的问题


问题八:详细的描述一个测试活动完整的过程。

1.         项目经理通过和客户的交流,完成需求文档,由开发人员和测试人员共同完成需求文档的评审,评审的内容包括:需求描述不清楚的地方和可能有明显冲突或者无法实现的功能的地方。项目经理通过综合开发人员,测试人员以及客户的意见,完成项目计划。然后SQA进入项目,开始进行统计和跟踪

2.         开发人员根据需求文档完成需求分析文档,测试人员进行评审,评审的主要内容包括是否有遗漏或者双方理解不同的地方。测试人员完成测试计划文档,测试计划包括的内容上面有描述。

3.         测试人员根据修改好的需求分析文档开始写测试用例,同时开发人员完成概要设计文档,详细设计文档。此两份文档成为测试人员撰写测试用例的补充材料。

4.         测试用例完成后,测试和开发需要进行评审。

5.         测试人员搭建环境

6.         开发人员提交第一个版本,可能存在未完成功能,需要说明。测试人员进行测试,发现BUG后提交给BugZilla。

7.         开发提交第二个版本,包括Bug Fix以及增加了部分功能,测试人员进行测试。

8.         重复上面的工作,一般是3-4个版本后BUG数量减少,达到出货的要求。

9.         如果有客户反馈的问题,需要测试人员协助重现以及回归测试。


问题九:以往是否曾经从事过性能测试工作?请尽可能的详细描述您以往的性能测试工作的完整过程。

       曾经做过一套网管系统的性能测试,主要测试该软件在同时管理大量终端的情况下,在响应时间,CPU/磁盘/内存等参数是否满足要求。

       也曾经做过软交换系统的呼叫性能测试,主要是测试软交换系统在有大量呼叫的情况下,响应时间,呼叫成功率,CPU/磁盘/内存等参数是否满足设计要求。


问题十:您在从事性能测试工作时,是否使用过一些测试工具?如果有,请试述该工具的工作原理,并以一个具体的工作中的例子描述该工具是如何在实际工作中应用的。

       测试网管系统中,使用的Mimic来模拟终端,能够大量的节省成本。

       测试软交换系统的时候,使用的Prolab来模拟终端并发送呼叫软交换,他完成了同时数百人才能完成的摘机拨号工作,主要工作原理是产生一些符合要求的IP包并发送给软交换系统,同时对软交换系统的回应进行处理,决定下一步动作。


问题十一:您认为性能测试工作的目的是什么?做好性能测试工作的关键是什么?

主要是保障在大量用户的情况下,服务能正常使用。


问题十二:在您以往的工作中,一条软件缺陷(或者叫Bug)记录都包含了哪些内容?如何提交高质量的软件缺陷(Bug)记录?

1.         在传统的BugZilla中,BUG描述应该包括以下的信息

2.         和BUG产生对应的软件版本

3.         开发的接口人员

4.         BUG的优先级

5.         BUG的严重程度

6.         BUG可能属于的模块,如果不能确认,可以用开发人员来判断

7.         BUG标题,需要清晰的描述现象

8.         BUG描述,需要尽量给出重新Bug的步骤

9.         BUG附件中能给出相关的日志和截图。

       高质量的BUG记录就是指很容易理解的BUG记录,所以,对于描述的要求高,能提供的信息多且准确,很好的帮助开发人员定位。

问题十二:BUG管理工具的跟踪过程

       用BugZilla为例子      

测试人员发现了BUG,提交到Bugzilla中,状态为new,BUG的接受者为开发接口人员

开发接口将BUG分配给相关的模块的开发人员,状态修改为已分配

开发人员和测试确认BUG,如果是本人的BUG,则设置为接收;如果是别的开发人员的问题,则转发出去,由下一个开发人员来进行此行为;如果认为不是问题,则需要大家讨论并确认后,拒绝这个BUG,然后测试人员关闭此问题。

如果开发人员接受了BUG,并修改好以后,将BUG状态修改为已修复,并告知测试在哪个版本中可以测试。

测试人员在新版本中测试,如果发现问题依然存在,则拒绝修改;如果已经修复,则关闭BUG。


问题十二:您认为在测试人员同开发人员的沟通过程中,如何提高沟通的效率和改善沟通的效果?维持测试人员同开发团队中其他成员良好的人际关系的关键是什么?

       尽量能有面对面的沟通,如果做不到,那么尽量能直接通过电话沟通,如果只能通过Email等非及时沟通工具的话,强调必须对特性的理解深刻以及能表达清楚。

       一是真诚,二是团队精神,三是在专业上有共同语言,当然也可以通过直接指出一些小问题,而不是进入BUG Tracking System来增加对方的好感。


问题十三:在您以往的测试工作中,最让您感到不满意或者不堪回首的事情是什么?您是如何来对待这些事情的?

       某次性能测试覆盖不足,造成系统崩溃。


问题十四:你对测试最大的兴趣在哪里?为什么?

最大的兴趣就是测试有难度,有挑战性!做测试越久越能感觉到做好测试有多难。曾经在无忧测试网上看到一篇文章,是关于如何做好一名测试工程师。一共罗列了11,12点,有部分是和人的性格有关,有部分需要后天的努力。但除了性格有关的1,2点我没有把握,其他点我都很有信心做好它。

刚开始进入测试行业时,对测试的认识是从无忧测试网上了解到的一些资料,当时是冲着做测试需要很多技能才能做的好,虽然入门容易,但做好很难,比开发更难,虽然当时我很想做开发(学校专业课我基本上不缺席,因为我喜欢我的专业),但看到测试比开发更难更有挑战性,想做好测试的意志就更坚定了。

我觉得做测试整个过程中有2点让我觉得很有难度(对我来说,有难度的东西我就非常感兴趣),第一是测试用例的设计,因为测试的精华就在测试用例的设计上了,要在版本出来之前,把用例写好,用什么测试方法写?(也就是测试计划或测试策略),如果你刚测试一个新任务时,你得花一定的时间去消化业务需求和技术基础,业务需求很好理解(多和产品经理和开发人员沟通就能达到目的),而技术基础可就没那么简单了,这需要你自觉的学习能力,比如说网站吧,最基本的技术知识你要知道网站内部是怎么运作的的,后台是怎么响应用户请求的?测试环境如何搭建?这些都需要最早的学好。至少在开始测试之前能做好基本的准备,可能会遇到什么难题?需求细节是不是没有确定好?这些问题都能在设计用例的时候发现。

第二是发现BUG的时候了,这应该是测试人员最基本的任务了,一般按测试用例开始测试就能发现大部分的bug,还有一部分bug需要测试的过程中更了解所测版本的情况获得更多信息,补充测试用例,测试出bug。还有如何发现bug?这就需要在测试用例有效的情况下,通过细心和耐心去发现bug了,每个用例都有可能发现bug,每个地方都有可能出错,所以测试过程中思维要清晰(测试过程数据流及结果都得看仔细了,bug都在里面发现的)。如何描述bug也很有讲究,bug在什么情况下会产生,如果条件变化一点点,就不会有这个bug,以哪些最少的操作步骤就能重现这个bug,这个bug产生的规律是什么?如果你够厉害的话,可以帮开发人员初步定位问题。


问题十五:你的测试职业发展目标是什么?

测试经验越多,测试能力越高。所以我的职业发展是需要时间累积的,一步步向着高级测试工程师奔去。而且我也有初步的职业规划,前3年累积测试经验,按如何做好测试工程师的11,12点要求自己,不断的更新自己改正自己,做好测试任务。


问题十六:你自认为测试的优势在哪里?

有韧性

有能力面对挑战

有信心做好每一件事情

有比较好的教育背景

从以前的经理处都得到了很好的评价表明我做的很好


问题十七:当开发人员说不是BUG时,你如何应付?

如果确实是自己理解错误,则承认错误,没什么大不了

如果是需求不明,请项目经理补充清楚

如果双方理解不一致,且都不能互相说服,则请项目经理判断。


问题十八:你为什么想离开目前的职务?


问题十九:你对我们公司了解有多少?


问题二十:你找工作时,最重要的考虑因素为何?

工作的性质和内容是否能让我发挥所长,并不断成长。


问题二十一:为什么我们应该录取你?

您可以由我过去的工作表现所呈现的客观数据,明显地看出我全力以赴的工作态度。


问题二十二:请谈谈你个人的最大特色。

我的坚持度很高,事情没有做到一个令人满意的结果,绝不罢手。


问题二十三:一个测试工程师应具备那些素质和技能?


问题二十四:集成测试通常都有那些策略?

       自上而下,自下而上,平面集成


问题二十五:测试结束的标准是什么?

       从微观上来说,在测试计划中定义,比如系统在一定性能下平稳运行72小时,目前Bug Tracking System中,本版本中没有一般严重的BUG,普通BUG的数量在3以下,BUG修复率90%以上等等参数,然后由开发经理,测试经理,项目经理共同签字认同版本Release。

       如果说宏观的,则是当这个软件彻底的消失以后,测试就结束了。


问题二十六:软件验收测试除了alpha,beta测试以外,还有哪一种?

第三方验收测试


问题二十七:为什么选择测试这行?

最开始么,公司安排的,然后么,干一行爱一行,发现测试中间还是有很多东西需要学习的,再就是测试中有很多东西值得改进和研究。


问题二十六:为什么值得他们公司雇用?

      用自己的经验和其他同事一起发现更多的问题,同时不同行业的观点可以互相借鉴。


问题二十七:如果我雇用你,你能给部门带来什么贡献?

      分享我的测试经验和测试技能,提高测试部门技术水平




TAG:

 

评分:0

我来说两句

Open Toolbar