(以下内容是从相关网站整理出来的软件测试基础知识汇总,写在这里供日后自己回顾和大家参考,内容比较多,个别内容需要详细扩展的,后续再进一步做扩展学习和整理)
1.什么是软件测试?
从广义上说,软件测试是软件生命周期中的所有检查、评审和确认工作,包括在分析、设计阶段,以及完成开发后确认阶段的各类文档、代码的审查和确认。
从狭义上说,是识别软件缺陷的过程,即实际结果与预期结果不一致。
(IEEE(ISO/IEC/IEEE 29119)(国际电子电器公司协会)规范定义)使用人工或自动的手段来运行或测量软件系统的过程,以检测软件系统是否满足规定的要求,并找出与预期结果之间的差异。
2.软件测试的目标
软件测试的目标是保证软件的质量,确保软件功能符合用户需求,在产品发布或交付前尽可能多的发现并改正缺陷。
3.软件测试的对象
软件测试不仅仅是对程序的测试,而且贯穿于软件定义和开发的整个过程。因此,软件开发过程中产生的需求分析、概要设计、详细设计以及编码等各个阶段所得到的文档,包括需求规格说明、概要设计规格说明、详细设计规格说明以及源程序,都是软件测试的对象。
(即 需求规格说明(产品功能、性能)、概要设计规格说明、详细设计规格说明、运行环境、源代码、可运行程序)
4.软件测试的要素有哪些?
1.质量。软件质量是软件测试的目标,也是软件测试工作的中心。一切从质量出发,也就是一切从客户需求出发。任何违背质量的东西都是问题,测试就是要找出这些问题。
2.人员。人是决定的因素,测试人员的态度、素质、能力决定着测试的效果,对测试产品的质量也有很大的影响。测试人员因素包括测试组织结构、角色和责任的定义。
3.技术。软件测试技术,包括方法、工具。
4.资源。主要是指测试环境中所需要的硬件设备、网络环境,甚至包括测试数据。另一个重要因素就是测试时间,时间也是测试的资源。
5.流程。从测试计划和测试用例的创建、评审到测试的执行、报告,设定每个阶段的进出标准。
5.软件质量的内涵
正确性、可靠性、可维护性、可读性(文档、注释)、结构化、可测试性、可移植性、可扩展性、用户界面友好性、易用性、健壮性等
6.软件测试遵循的原则
1.测试和及时的测试,测试应当从软件产品初始阶段开始;
2.测试只能表明有缺陷存在,但不能证明没有缺陷;
3.保证测试的覆盖度,穷尽测试是不可能的,应设定及时终止的条件;
4.所有测试都应追溯到用户需求;
5.测试的规模由小到大,(单元测试、集成测试、确认测试、系统测试)
6.测试的二八原则。要对缺陷发生率高的模块投入更多的测试。少量的模块往往隐藏了大部分的缺陷。缺陷发生率高的模块往往与需求不清、设计不当、编码复杂度高等内在原因关联,所以从风险的角度来看必然较高。
7.杀虫剂悖论。相同的测试再重复多次后就无法再找到缺陷了。测试用例要不断评审修改,不断添加新的和不同的测试,就有可能找到更多缺陷。
8.不能为了便于测试擅自修改程序;
9.既应该测试软件应该做什么,也应该测试软件不应该做什么;
10.为了尽可能的发现错误,应由独立的第三方进行测试
11.测试是上下文关联的。测试在不同上下文环境中的执行是不同的。
12.无错谬论。即使修改了系统中存在的大部分缺陷,但若系统本身背离了用户需求,那么发现和修复缺陷就毫无帮助了。
7.软件测试的度量
1.测试覆盖率:有多少需求、代码已经被测试了。
2.缺陷发现率:缺陷是何时被发现,且有多少缺陷已经被发现,缺陷可以根据严重性来分类,需要记录的数据有:缺陷数量、缺陷的严重等级等。
3.测试成功率:有多少测试用例已经通过,且有多少运行正常的,需要记录的数据有:通过的测试用例数、未通过的测试用例数、已执行的测试用例数等。
8.多少测试才足够?
取决于风险程度(商业风险和技术风险)和项目约束条件(时间和经费)
9.调试和测试的区别?
调试:开发人员发现缺陷原因,修复代码并确认缺陷已经被修复
测试:测试人员识别缺陷
10.测试的主要步骤
计划与控制;分析与设计;实施与执行;评估出口准则和报告;测试活动结束。
11.什么是回归测试?
回归测试是指修改了旧代码后,重新测试以确认修改没有引入新的错误或导致其他代码产生错误。
12.测试的标准是什么?
测试的标准是用户的需求
13.为什么要避免测试自己的程序?
测试自己的程序时,容易顺着写代码的思路进行测试,很少从其他角度思考,基于这种思维定势,就难以发现潜在的错误。
由于心理因素,人们潜意识都不希望找到自己的错误。基于这种思维定势,人们难以发现自己的错误。一定程度的独立测试可以更加高效的发现软件缺陷和软件存在的失效。
14.什么是软件质量?
经典的“软件质量”定义:软件质量特性的总和,软件满足规定或潜在用户需求的能力。简单地说,软件质量就是客户的满意度。
15.软件测试与软件质量保证的区别?
软件测试只是保证工作中的一个环节,软件质量保证与软件测试是软件质量工程的两个不同层面的工作。
从性质上看,软件测试属于技术性工作,而软件质量保证属于管理性工作;从对象上看,软件测试的对象是软件产品,而质量保证的对象是整个软件过程,覆盖公司层面的各个领域;从手段上看,软件测试以事后测试检验为主,而软件质量保证则强调缺陷的预防。
16.测试团队的基本责任
1.尽早的发现软件产品中尽可能多的缺陷;
2.督促和帮助开发人员尽早解决产品中的缺陷;
3.协助项目管理人员制定合理的开发计划和项目测试计划;
4.对缺陷进行跟踪、分析和总结,以便项目经理和相关测试人员能够及时、清楚的了解产品当前的质量状态。
5.评估软件产品的当前质量状态,以评估是否达到发布水平。
6.培养测试工程师的测试技能
7.帮助改善开发流程、提升产品开发效率
8.促进程序编写的规范性、易读性、可维护性等
17.什么是缺陷发现率(DDP)?
DDP=Bugs(tester)/(Bugs(tester)+Bugs(customer))
测试人员发现的bug/(测试人员发现的bug+用户发现的bug)
18.什么是单元测试?
定义:又称模块测试,是针对软件设计的最小单位程序模块进行正确性检查的测试工作;可以从程序的内部结构出发设计测试用例,多个模块测试可以平行的独立进行测试。
目的:发现模块内部可能存在的各种差错。
内容:模块接口测试(数据的流入流出)、局部数据结构测试、路径测试、错误处理测试、便捷测试。
19.什么是集成测试?
定义:有成组装测试或联合测试,在单元测试基础上,将所有模块按照概要设计和详细设计进行组装。
目的:发现模块连接中的接口可能存在的各种差错。
内容:穿越模块之间的数据是否会丢失;一个模块组装后是否会对另一个模块或其他模块存在影响;各个子功能组装在一起是否会达到预期的父功能;全局数据结构是否有问题。
组装方法:一次性组装、增殖式组装。
完成标志:成功地执行了测试计划中规定的所有测试用例;修正了所发现的错误;测试结果通过专门小组的评审。
20.什么是系统测试?
目的:验证和确认是否达到其原始目标,而对集成的硬件和软件系统进行测试。
测试内容:在真实或模拟系统运行环境下,检查完整的程序系统能否和系统(硬件、网络、软件)正确配置、连接,满足用户需求。
21.什么是验收测试?
目的:在用户环境中进行测试,以确定系统和产品是否能满足合同或用户所规定的需求。
内容:根据任务书或合同、供需双方约定的验收依据文档进行对整个系统的测试和评审,确认是否接收或拒绝系统。
22.什么是静态测试?
又称为静态分析技术,不执行被测试软件,对需求分析说明书、软件设计说明书、源程序做结构检测、流图分析、符号执行等找出软件的错误。
23.什么是动态测试?
通过输入一组预先按照一定的测试准则构造的实例数据动态运行程序,而达到发现程序错误的过程。
24.什么是自动化测试?
自动化测试是把以人为驱动的测试转化为机器执行的一种过程。
25.测试用例有哪些设计原则?
1.单个用例覆盖最小化原则。每个测试用例应该尽可能的简单,只验证你所要验证的内容。
2.测试用例替代产品文档功能原则。
3.单次投入成本和多次投入成本原则。
4.使测试结果分析和调试最简单化原则(针对自动化测试用例的扩展和延续)。
26.什么是Alpha测试?
是验收测试的一种,是由用户在开发者的场所来进行的,Alpha测试是在一个受控的环境中进行的。
27.什么是Beta测试?
是验收测试的一种,由软件的最终用户在一个或多个用户场所来进行的,开发者通常不在现场,用户记录测试中遇到的问题并报告给开发者。
28.如何进行单元测试?
内容有:接口测试、内部数据结构、全局数据结构、便捷测试、路经测试、错误处理测试。
29.手工测试和自动测试的优缺点
手工测试缺点:
1.测试工作量大、重复多、回归测试难以实现。
2.手工完成测试的全部过程无法保证测试的科学性和严密性:
修改的缺陷越多,回归测试越困难;
没有人能想决策层提供精确的数据以度量当前的工作进度及工作效率;
反复测试带来的卷带情绪及其他人为因素使得测试标准前后不一;
测试花费的时间越长,测试的严格性也就越低。
------------------------------------------------------分割线------------------------------------------------------
自动测试:利用软件测试工具自动实现全部或部分测试工作,管理、设计、执行和报告,节省大量的测试开销,并且能够完成一些手工测试无法实现的测试。
自动测试将测试人员从反复、烦杂的测试执行中解放出来,用更多的时间进行测试设计和结果分析:
自动测试的缺点:
1.软件测试不可能完全自动化;
2.不能完成所有手工测试任务;
3.无创造性且灵活性差,不能改进测试的有效性;
4.过程中可能会遇到许多意想不到的问题,特别是当软件不稳定时;
5.测试脚本的维护成本高。
30.测试用例设计有哪些方法?
等价类划分法、边界值分析法、场景法、正交试验法、因果图、决策表、错误推测法。
31.什么是测试计划?
根据项目相关文档制定的、用于指导整个测试过程的文档,需要定义测试范围、测试策略、人员分配、软硬件配置、进度表及测试过程每个阶段要达到的目标。
32.测试用例包含哪些关键内容?
用例编号、用例描述、前提条件、测试步骤、预期结果六项关键内容。
33.查找漏洞问题的方法有哪些?
说明书是基础和标准;相关变动邮件、讨论记录;不定期阅读别人的缺陷;多和开发人员沟通;有选择的重新验证以前的缺陷;关注变化;简单思维方式,以主线为主,减少大遗漏。
34.敏捷开发的理念:以人为核心、迭代、循序渐进的开发方式。
个体和交互 胜过 过程和工具;
可以工作的软件 胜过 面面俱到的文档;
客户合作 胜过 合同谈判;
相应变化 胜过 遵循计划。
35.敏捷开发遵循的原则
通过尽早、持续的交付有价值的软件来使客户满意;
即使到了开发的后期,也欢迎改变需求,敏捷过程利用变化来为客户创造竞争优势;
经常性的交付可以工作的软件,交付的间隔可以从几个星期到几个月,交付时间越短越好;
在整个项目开发期间,业务人员和开发人员必须天天都在一起工作;
围绕被激励起来的个体来构建项目,给他们提供所需的环境和支持,并且信任他们能够完成工作;
在团队内部,最具有效果并富有效率的传递信息的方法,就是面对面交谈;
工作的软件是首要的进度肚量标准;
敏捷过程提倡可持续的开发速度,责任人、开发者和用户应该能够保持一个长期的、恒定的开发速度;
不断的关注优秀的技能和好的设计会增强敏捷能力;
简单是最基本的;
最好的架构、需求和设计出自自组织团队;
每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应的对自己的行为进行调整。
34.什么是敏捷测试?
敏捷测试是适应敏捷开发方法而采用的新的测试流程、方法和实践。
简单地说,敏捷测试就是持续的对软件质量问题进行及时的反馈。