(转)20个常见软件测试面试题
1、软件质量的定义是什么?
软件质量是软件符合明确叙述的功能和性能需求--(简单说就是)符合需求(显式需求,隐式需求,用户的实际需求)
软件质量管理体系:ISO9000:2000版标准;CMM;6Sigma。
软件质量模型:功能性,可靠性,易用性,效率,可维护性,可移植性。
关注以下方面:正确性、健壮性、效率、完整性、可用性、风险(产品运行);可理解性、可维修性、灵活性、可测试性(产品修改);可移植性、可再用性、互运行性(产品转移)
2、软件测试的对象包括哪些?
软件包括程序,数据和文档。
在软件生命周期中,各阶段有不同的测试对象,包括需求规格说明书,概要设计规格说明书,详细设计规格说明书和源程序都应成为软件测试的对象。
软件生命周期有V模型,瀑布模型,W模型和螺旋模型。
3、试结合软件开发流程模型,描述对应不同的阶段测试需要哪些工作?
软件开发模型:
? 瀑布模型(Waterfall Model)
? 增量模型(Incremental Model)
? 螺旋模型(Spiral Model)
? 演化模型(evolution model)
? 喷泉模型(fountain model)
? 智能模型(四代技术(4GL))
? 混合模型(hybrid model)
? RAD模型
软件生命周期包括:计划(Planning),需求分析(Requirement Analysis),设计(Design),程序编码(Coding),测试(Test),运行和维护(Run and Maintenance)。
软件计划阶段工作内容:确定软件开发总目标;确定软件的功能,性能,可靠性及接口等方面的设想;研究完成该项目的可行性,探讨问题解决方案;对可供开发使用的资源,成本,可取得的效益和开发进度作出估计;制定完成开发任务的实施计划。
软件需求分析阶段工作内容:对开发的软件进行详细的定义,由需求分析人员和用户共同讨论决定,哪些需求是可以满足的,并且给予确切的描述,写出软件需求说明书SRS(Software Requirement Specification)
软件设计阶段的工作内容:设计是软件工程的核心技术,这个阶段需要完成设计说明书。概要设计:在设计阶段把各项需求转换成相应的体系结构,每一部分是功能明确的模块;详细设计,对每个模块要完成的工作进行具体的描述。
编码阶段的工作内容:把软件设计转换成计算机可以接受的程序,即写成以某个程序设计语言表示的源程序清单,使用RDBMS工具建立数据库。
测试的工作内容:测试是检验软件是否符合客户需求,达到质量要求,一般由独立的小组执行,测试工作分为:单元测试,集成测试,系统测试。
运行和维护的工作内容:这个阶段将软件交付用户投入正式使用,以后便进入维护阶段,可能有多种原因需要对系统进行修改,如软件错误,系统软件升级,增强软件功能,提高性能等。
测试流程依次如下:
1.需求:阅读需求,理解需求,与客户、开发、架构多方交流,深入了解需求。--testing team
2.测试计划: 根据需求估算测试所需资源(人力、设备等)、所需时间、功能点划分、如何合理分配安排资源等。---testing leader or testing manager
3.用例设计:根据测试计划、任务分配、功能点划分,设计合理的测试用例。---testing leader, senior tester
4.执行测试:根据测试用例的详细步骤,执行测试用例。--every tester(主要是初级测试人员)
5.执行结果记录和bug记录:对每个case记录测试的结果,有bug的在测试管理工具中编写bug记录。--every tester(主要是初级测试人员)
6.defect tracking:追踪leader分配给你追踪的bug.直到 bug fixed。--every tester
7.测试报告:通过不断测试、追踪,直到被测软件达到测试需求要求,并没有重大bug.
8.用户体验、软件发布等……
4、单元测试、集成测试、系统测试、验收测试各测试的正确策略含义和被测对象是什么?
5、单元测试、集成测试、系统测试的侧重点是什么?
单元测试是针对软件的基本组成单元(软件设计的最小单位)来进行正确性检验的测试工作;单元测试的目的是检测软件模块对《详细设计说明书》的符合程度。
集成测试是在单元测试的基础上,将所有模块按照概要设计要求组装成为子系统或系统,验证组装后功能以及模块间接口是否正确的测试工作;集成测试的目的是检测软件模块对《概要设计说明书》的符合程度。
系统测试是将已经集成好的软件系统,作为整个基于计算机系统的一个元素,与计算机硬件、外设 、某些支持软件、数据和人员等其他系统元素结合在一起,在实际运行(使用)环境下,对计算机系统进行一系列的测试工作;系统测试的目的在于通过与《需求规格说明书》作比较,发现软件与系统需求定义不符合或与之矛盾的地方。
单元测试、集成测试、系统测试作比较:
测试方法不同:单元测试属于白盒测试;集成测试属于灰盒测试;系统测试属于黑盒测试,
考察范围不同:单元测试主要测试单元内部的数据结构、逻辑控制、异常处理等;集成测试主要测试模块之间的接口和接口数据传递关系,以及模块组合后的整体功能,
评估基准不同:单元测试的评估基准主要是逻辑覆盖率;集成测试的评估基准主要是测试用例对需求规格的覆盖率。
6、alpha测试和Beta测试的定义是什么?并描述Alpha、Beta测试的区别?
Alpha测试是由一个用户在开发环境下进行的测试,也可以是公司内部的用户在模拟实际操作环境下进行的测试。α测试的目的是评价软件产品的FLURPS(即功能、局域化、可使用性、可靠性、性能和支持)。尤其注重产品的界面和特色。α测试可以从软件产品编码结束之时开始,或在模块(子系统)测试完成之后开始,也可以在确认测试过程中产品达到一定的稳定和可靠程度之后再开始。
Beta测试由软件的最终用户们在一个或多个客房场所进行。与Alpha测试不同,开发者通常不在Beta测试的现场,因Beta测试是软件在开发者不能控制的环境中的“真实”应用。用户Beta测试过程中遇到的一切问题(真实在或想像的),并且定期把这些问题报告给开发者。接收到在Beta测试期间报告的问题之后,开发者对软件产品进行必要的修改,并准备向全体客户发布最终的软件产品。
7、白盒和黑盒测试的定义是什么?
白盒测试是一种测试用例设计方法,也称结构测试或逻辑驱动测试,需要分析函数内部的逻辑结构,包括函数的结构,内部局部数据的定义引用,函数内部各个控制语句组成的不同路径等是否合法。
白盒测试技术分为静态分析和动态分析两类技术。静态分析主要目的是结构优化,函数利用,效率优化(时间、空间);动态分析技术主要是逻辑覆盖率测试(分支,路径测试)、程序插装等。
白盒测试的测试方法有代码检查法、静态结构分析法、静态质量度量法、逻辑覆盖法、基本路径测试法、域测试、符号测试、路径覆盖和程序变异。
白盒测试法的覆盖标准有逻辑覆盖、循环覆盖和基本路径测试。其中逻辑覆盖包括语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖和路径覆盖。
六种覆盖标准:语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖和路径覆盖发现错误的能力呈由弱至强的变化。语句覆盖每条语句至少执行一次。判定覆盖每个判定的每个分支至少执行一次。条件覆盖每个判定的每个条件应取到各种可能的值。判定条件覆盖同时满足判定覆盖条件覆盖。条件组合覆盖每个判定中各条件的每一种组合至少出现一次。路径覆盖使程序中每一条可能的路径至少执行一次。
黑盒测试又叫功能测试,只关注被测软件的功能实现,而不是内部逻辑。
黑盒测试技术:功能性测试,容量测试,安全性测试,负载测试,恢复性测试,标杆测试,稳定性测试,可靠性测试等,还包括alpha测试和Beta测试。
墨盒测试方法有:等价类划分法、边界值分析法、错误推测法、因果图法、判定表驱动法、正交试验设计法、功能图法、场景法等。
白盒测试优点:迫使测试人员去仔细的思考软件的实现,可以检测代码中的每条分支和路径,提示隐藏在代码中的错误,对代码的测试比较彻底,最优化。
白盒测试缺点:昂贵,无法检测代码中遗漏的路径和数据敏感性错误,不验证规格的正确性。
黑盒测试的优点:对于更大的代码单元来说比白盒测试效率要高;测试人员不需要了解实现的细节,包括特定的编程语言;测试人员人编码人员是彼此独立的;从用户的视角进行测试,很容易被大家理解和接受;有助于暴露任何规格不一致或者有歧义的问题;测试用例可以在规格完成之后马上进行。
黑盒测试的缺点:只有一小部分可能的输入被测试到,要测试每个可能的输入流几乎是不可能的,没有清晰和简明的规格,测试用例是很难设计的,如果测试人员不被告知开发人员已经执行过的用例,在测试数据上会存在不必要的重复,会有很多程序路径没有被测试到;不能直接对特定的程序段,这些程序可能非常复杂(可能隐藏更多的问题)
黑盒测试发现以下类型的错误:功能错误或遗漏;界面错误;数据结构或外部数据库访问错误;性能错误;初始化和终止错误。
8、软件测试过程中都有哪些工作要做,分别由哪些不同的角色来完成这些任务?
测试流程依次如下:
1.需求:阅读需求,理解需求,与客户、开发、架构多方交流,深入了解需求。--testing team
2.测试计划: 根据需求估算测试所需资源(人力、设备等)、所需时间、功能点划分、如何合理分配安排资源等。---testing leader or testing manager
3.用例设计:根据测试计划、任务分配、功能点划分,设计合理的测试用例。---testing leader, senior tester
4.执行测试:根据测试用例的详细步骤,执行测试用例。--every tester(主要是初级测试人员)
5.执行结果记录和bug记录:对每个case记录测试的结果,有bug的在测试管理工具中编写bug记录。--every tester(主要是初级测试人员)
6.defect tracking:追踪leader分配给你追踪的bug.直到 bug fixed。--every tester
7.测试报告:通过不断测试、追踪,直到被测软件达到测试需求要求,并没有重大bug.
8.用户体验、软件发布等……
9、测试计划的目的是什么,测试计划主要包括哪些部分,每一部分主要的内容和作用是什么,其中哪些是最重要?做好测试计划工作的关键是什么?
10、测试计划的目的是什么?测试计划的内容都包括哪些?其中哪些是最重要的?
软件测试计划是指导测试过程的纲领性文件,包含了产品概述,测试策略,测试方法,测试区域,测试配置,测试周期,测试资源,风险分析等内容;借助软件测试计划,参与测试的项目成员,可以明确测试任务和测试方法,保持测试实施过程的顺畅沟通,跟踪和控制测试进度,应对测试过程中的各种变更。
测试计划和测试用例间是战略和战术的关系,测试计划主要从宏观上规划测试活动的范围,方法和资源配置;而测试用例是完成测试任务的具体战术。
测试计划中,最重要的是测试策略和测试方法。
11、什么是测试用例,它由哪些基本元素组成?并举例说明
测试用例(Test Case)是为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。
内容包括用例编号、测试项目、测试标题、重要级别、预置条件、测试输入、操作步骤、预期结果。
12、什么是测试脚本,测试用例与测试脚本两者的关系是什么?
测试脚本,根据测试用例编写测试脚本进行自动化测试
可以说测试用例是编写测试脚本的前提,如果没有测试用例,盲目的编写测试脚本,是没有任何依据的
13、你认为提前做好测试用例有用吗?为什么?
14、如果业务层和数据层之间有信赖关系,你该怎么写单元测试?
15、对于产品的用户友好性测试,你认为从哪些方面来测试
16、bug中需要包括哪些内容并举例说明。如何提高bug记录的质量?
17、bug管理系统的主要功能是什么,以及在项目中各个角色的使用者是如何使用bug管理系统的?
18、若你提交了一个bug但开发人员说这不是问题,你该如何处理?
19、你认为一个测试工作人员最基本的素质是什么?从(能力、责任心)选一个,简答为什么?
20、怎么认为测试可以结束了?在你以前的工作中,对于分配给你的模块你用什么标准来衡量自己测试完毕了?
21、你认为一个合格的测试人员应该具备哪些素质?请说明原因
22、你认为性能测试工作的目的是什么?做好性能测试工作的关键是什么?以前做过性能测试吗?使用哪些工具进行的?
23、设要对一个自动饮料售货机软件进行黑盒测试,设软件的规格说明如下:
有一个处理单价为1元5角的盒装饮料的自动售货机软件。若投入1元5角硬币,按下“可乐”“雪碧”或“红茶”按钮,相应的饮料就送出来,若投入2元硬币,在送出饮料的同时退还5角硬币
(1)试用因果图法,建立该软件的因果图;
(2)设计测试该软件的全部测试用例。
分析
原因:① 投入1元5角硬币; ② 投入2元硬币;
③ 按“可乐”按钮; ④ 按“雪碧”按钮; ⑤ 按“红茶”按钮。
中间状态:① 已投币; ② 已按钮。
结果:① 退还5角硬币; ② 送出“可乐”饮料
③ 送出“雪碧”饮料; ④ 送出“红茶”饮料。
24、设计最少的测试用例实现条件覆盖:
if(A>0 and B>0)
X=X/A;
if(A>1 or X>1)
X=X+1;
System.out.printf("X="+x);
25、使用你熟练的一种语言,将一个单向链表反转
26、有两表
表一 AA
种类 T 库存总量 S
A 997
B 1234
表二 BB
种类T 出库数量 S
A 105
A 213
B 115
B 211
B 303
用一条SQL语句求出A、B两类货物库存各剩多少?
select SUM(AA.S) from aa,bb where aa.t = bb.t group by aa.t having aa.t in(A,B)
27、下面是一个注册入口,输入用户名和有效的邮箱,点击“立即注册”按钮。你会在输入的邮箱中收到一个注册验证的邮件,该邮件中有一个链接,点击后,就能注册成功。请你考虑应该从哪些测试要点来展开测试?
功能测试:
用户名是否支持非英文和特殊字符,是否校验用户名已经存在,输入错误的邮箱是否记住用户名,输入太长或太短的用户名和邮箱系统会怎样提示,是否有不支持的邮箱(如sina邮箱,126,yahoo,hotmail等),点击立即注册后是否跳转到正确的页面,注册成功后收到的邮件链接是否可以点击,点击链接后是否跳转到正确的页面
性能测试:
点击注册后多长时间才收到注册邮件;点击邮件连接,提示注册成功,是否可以立即登陆成功,校验用户名是否存在花了多长时间,最好别超过5S
安全性测试:
登录成功后生成的Cookie,是否是httponly (否则容易被脚本盗取)
用户名和密码是否通过加密的方式,发送给Web服务器
用户名和密码的验证,应该是用服务器端验证, 而不能单单是在客户端用javascript验证
用户名和密码的输入框,应该屏蔽SQL 注入攻击
用户名和密码的的输入框,应该禁止输入脚本 (防止XSS攻击)
错误登陆的次数限制(防止暴力破解)
密码是否可以被复制
兼容性测试:
主流的浏览器下能否显示正常已经功能正常(IE,6,7,8,9, Firefox, Chrome, Safari,等)
不同的平台是否能正常工作,比如Windows, Mac
移动设备上是否正常工作,比如Iphone, Andriod
不同的分辨率
可用性测试:
是否可以全用键盘操作,是否有快捷键
输入用户名,密码后按回车,是否可以登陆
浙公网安备 33010602011771号