1.1 测试基础知识
【考点讲解】
伴随着软件测试的蓬勃发展,软件测试的先驱者们经过多年的实践,总结了一整套成体系的原理和方法论,这些原理和方法论对于当前乃至未来的测试工作,都将产生深远的影响。
我们在设计测试用例时,常常会运用黑盒测试的测试方法,譬如边界值法、等价类划分、场景法等等。
我们在进行单元测试时,常常会运用白盒测试的测试方法,譬如语句覆盖、条件覆盖、路径覆盖等等。
软件测试基础知识在面试过程中的提问方式非常多元化,既可以直接提问原理性的知识,同时也可以结合具体的测试场景来进行提问,不仅考察求职者对于测试基础的掌握情况,还考察求职者的应变能力。
我们应该如何准备软件测试的基础知识的复习呢?
首先需要对基本的理论有所掌握,理论的东西不是死记硬背,而是把理论理解、吃透,然后不断的把理论知识结合到实际当中。
软件测试的目的、原则、分类、流程等基础知识要熟稔于心,建议复习的时候,可以阅读《软件测试的艺术》和《软件测试》这两本书进行复习。
黑盒测试和白盒测试是测试工作中常用的测试方法,一般面试中假如问到设计测试用例的问题,回答的时候可以结合黑盒测试的常用方法和白盒测试的常用方法进行作答。
缺陷的分级和缺陷的生命周期在面试中也会经常被问到,需要掌握缺陷分级的作用和缺陷分级的方式,此外,了解缺陷的生命周期,对我们今后从事测试工作,评估测试风险和把控测试进度都很有帮助。
性能测试和自动化测试是理论和实践相结合的具体案例,应该掌握其基本原理、优缺点、常用的测试工具和测试手段。
可以说,软件测试基础知识是每个测试者在测试生涯中的必修课,我们需要重点掌握。
下面列举测试岗面试中有关测试基础知识的比较高频的考点:
- 软件测试的目的
- 软件测试的原则
- 软件测试的分类
- 软件测试的流程
- 黑盒测试
- 白盒测试
- 缺陷管理
- 性能测试
- 自动化测试
【例题示例】
1.1.1 请谈谈你对软件测试的理解。
【考点映射】
- 软件测试的目的
- 软件测试的原则
【出现频度】★★
【难度】☆
【参考答案】
软件测试是使用人工或自动的手段,检测一个被测系统的过程。在这个过程中,主要目的是验证系统是否和预期结果(及用户需求)保持一致,通过精心地设计测试用例,执行测试用例,尽可能地发现更多待测系统的缺陷,进而修复缺陷,保证待测系统的质量。
软件测试的原则主要有:
- 越早进入测试,缺陷修复的成本越低。
- 程序员应当避免检查自己的程序,由第三方进行测试更客观、更有效。
- 穷举测试是不可能的。
【知识点延伸】
(1)测试的定义
测试是使用人工或自动的手段来运行或测定某个软件系统的过程,其目的在于检验它是否满足规定的需求或弄清预期结果与实际结果之间的差别。(IEEE给出的定义)
测试是为发现错误而执行一个程序或者系统的过程。(Glen Ford Myers 在《软件测试的艺术》中提出的观点)
(2)关于测试的原则的详细版本(13项原则)
- 所有测试的标准都应建立在用户需求之上,测试目的在于检测系统是否满足规定的需求。
- 测试可以证明缺陷存在,但不能证明缺陷不存在。
- 越早进入测试,缺陷修复的成本越低。
- 程序员应当避免检查自己的程序,由第三方进行测试更客观、更有效。
- 杀虫剂悖论。如果同样的测试用例被一再重复地执行,会减少其有效性。先前没有发现的缺陷也不会被发现。因此,为了维持测试的有效性,战胜这种“抗性药”,应当对测试用例进行不断修改和更新。
- 没有失效就是有用系统是一种谬论。找到失效、修正缺陷并不能保证整个系统可以满足用户的预期要求和需要。在开发过程中用户的早期介入和原型系统的使用就是为了避免问题的预防性措施。
- 充分注意测试群集现象。一段程序中发现的错误越多,其中存在的概率就越大,所以发现错误较多的程序段,需要更深入的测试。
- 设计测试用例,需要包含合理的输入和不合理的输入,需要考虑边界条件和异常场景。
- 注意回归测试的关联性,修改一个缺陷,有可能会引起另一个缺陷。
- 测试应从“小规模”开始,逐步转向“大规模”。
- 测试用例是设计出来的,不是写出来的。单一校验点的测试用例更方便查看,对后期指导自动化测试的设计也十分有帮助,另外要注意测试用例的可执行性。
- 需要妥善保存测试过程相关文档(测试计划、测试用例和测试报告等)
- 对于测试不通过的结果,要有一个确认过程。
参考《软件测试技术与实践》西安电子科技大学出版社
1.1.2 软件测试都有哪些分类。
【考点映射】软件测试的分类
【出现频度】★★☆
【难度】★
【参考答案】
软件测试分类,可以按软件工程发展历史、软件开发的阶段、实施组织、软件特性和软件测试技术进行划分。
比较常见的分类方式是按照软件开发的阶段去进行划分,可以分为:单元测试、集成测试、系统测试、确认测试和验收测试。
单元测试:又称为模块测试,针对软件设计的最小单元(程序模块)进行测试。检测程序是否能够满足技术方案所要求的功能、性能、接口协议和设计约束等。单元测试更多时候由程序开发者进行自测完成。
集成测试:又称为组装测试,一般在单元测试通过之后。把程序模块进行组装,并进行有序和递增的测试。就好比测试一个电商应用的交易链路,把促销、价签、购物车、结算、支付环节分别进行测试,这就是集成测试。集成测试可以分为非增量式和增量式两种集成策略,非增量式就是把所有模块进行组装,整体进行测试。与之相反的是增量式集成方法,程序一段一段扩展,最后再集成成整体进行测试,满足测试应从“小规模”开始,逐步转向“大规模”的测试原则。
系统测试:将系统部署到仿真的测试环境中,不仅仅是测试系统本身,还对系统的运行情况进行测试,包括系统的功能、性能、各种依赖、配置、网络环境、数据库存储等等都进行测试,检测系统各部件是否都能正常工作并完成赋予的任务。我们在测试工作中,花费大量时间在系统测试环节。
确认测试:确认测试是通过检验和客观证据,证实系统是否满足特定预期用途的需求。
验收测试:验收测试是按照项目任务书或合同、供需双方约定的验收依据文档,对整个系统的测试和评审,以决定是否接收或拒收系统。
【知识点延伸】
1.1.3 α测试和β测试的区别是什么?
【考点映射】软件测试的分类
【出现频度】★★☆
【难度】★
【参考答案】
α测试:又称为“验证测试”或“开发方测试”。开发方在软件测试环境下,通过检测和提供客观证据,证实软件的实现是否满足规定的要求。α测试的测试者是开发方。
β测试:又称为“用户测试”或“UAT测试”。软件开发商有计划地把软件免费分发到目标用户市场,在实际应用环境下,用户通过运行和使用软件,找到软件的缺陷,并通过反馈渠道将缺陷上报给软件开发者进行改良,以此方式来检测软件是否符合用户预期。β测试的测试者是用户。