面试如何谈笑风生,软件测试基础理论整理
2017-09-28 17:29 第二个卿老师 阅读(684) 评论(0) 编辑 收藏 举报从事测试近两年了,发现很多基础概念有点模糊不清,于是借阅各种资料,这里集中整理一下。
什么叫软件测试
● Glen Myers认为测试是为了发现错误而执行的软件程序的过程,一个成功的测试可以发现迄今为止尚未发现的错误。
● Hetzel则认为软件测试是对软件建立信心的一个过程,是以评价一个程序或者系统属性为目标的任何一种活动,测试是对软件质量的度量。
软件测试的两面性
从测试目的出发,可以分为两类。
● 一类是为了验证程序能正常工作的测试。
● 一类是为证明程序不能正常工作的测试。
黑盒与白盒、灰盒测试
同为测试方法,从是否关心代码划分。
● 黑盒测试
指的是把被测的软件看作一个黑盒,我们不去关心盒子里面的结构是什么样子的,只关心软件的输入数据和输出结果。检查程序功能是否按照需求规格说明书的规定实现,是否能接收输入再正确输出。
● 白盒测试
指的是把被测的软件看作一个可视的白盒,理解软件内部结构和程序运行方式。检查程序内部逻辑是否按照需求规格说明书的正确进行,对所有逻辑路径进行测试。
● 灰盒测试
介于黑盒测试与白盒测试之间的一种测试方式,灰盒测试既关注输出对于输入的正确性,同时也关注内部表现。目的是验证软件满足外部指标要求以及软件的所有通道都进行了检验。
注:有人把黑盒比喻成中医,白盒比喻成西医,中医讲望闻问切(望:观察软件的行为是否正常。闻:检查输出的结果是否正确。问:输入各种信息,结合望、闻来观察软件的响应。切:类似把脉,敲击一下软件的某些关节),西医讲究透视分析,使用工具解剖软件,如代码结构不对或逻辑路径不通,就能轻易确症了。
手工、自动化测试
从对软件测试工作的自动化程度划分。
● 手工测试
就是由测试人员一个个地去执行测试用例,通过键盘鼠标等输入一些参数,并查看返回结果是否符合预期结果。
● 自动化测试
自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。根据侧重点不同,常见的分为功能自动化和性能自动化。
注:手工测试并非专业术语,手工测试通常是指我们在系统测试阶段所进行的功能测试,为了更明显地与自动化测试进行区分,这里使用了手工测试这种说法。自动化测试技术包括广泛,任何帮助流程的自动流转、替换手工的动作、解决重复性问题、大批量产生内容,从而帮助测试人员进行测试相关的工作的技术,或工具的使用都叫自动化测试技术。
静态、动态测试
从是否执行程序代码的角度
● 静态测试
是指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。包括代码检查、静态结构分析、代码质量度量等。
● 动态测试
是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性等性能。这种方法由三部分组成:构造测试用例、执行程序、分析程序的输出结果。
注:同一个测试,既有可能属于黑盒测试,也有可能属于动态测试;既有可能属于静态测试,也有可能属于白盒测试。他们之间也有可能交叉。
ISO 质量模型
按照软件质量模型的六大特性划分
● 功能测试
是对产品的各功能进行验证,根据功能测试用例,逐项测试,检查产品是否达到用户要求的功能。
● 可靠性测试
是指软件系统在规定的时间内以及规定的环境条件下,完成规定功能的能力。
● 易用性测试
是指用户使用软件时是否感觉方便,如界面测试,而可用性是指是否可以使用。
● 维护性测试
软件产品可被修改的能力,修改可能包括修正、改进或软件对环境、需求和功能规格说明变化的适应。
● 可移植性测试
测试软件是否可以被成功移植到指定的硬件或软件平台上。如兼容性测试.
● 效率测试(性能测试)
是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。
常见测试阶段
如下V模型是软件开发瀑布模型的变种,它反映了测试活动与分析和设计的关系 。和开发过程相对应,测试过程会依次经历单元测试、集成测试、系统测试、验收测试四个主要阶段。
● 单元测试
是对程序中的单个子程序或具有独立功能的代码段进行测试的过程。通常由开发人员进行。
● 集成测试
是将测试通过的模块按照设计要求组装起来进行测试,主要目的是发现与接口有关的问题。由于在产品提交到测试部门前,产品开发小组都要进行联合调试,因此在大部分企业中集成测试是由开发人员来完成的。
● 系统测试
在集成测试通过后进行的,是针对整个产品系统进行的测试,验证系统是否满足需求规格的定义。主要包括功能测试、界面测试、可靠性测试、易用性测试、性能测试。
● 验收测试
是检验软件质量最后一个测试阶段。验收测试的目的是确保软件准备就绪,向软件购买者展示该软件系统能够满足用户的需求。(验收测试又分为α测试和β测试,其实α测试指的是由用户、测试人员、开发人员等共同参与的内部测试,而β测试指的是内侧后的公测,即完全交给最终用户测试)。
其他常见测试
● 冒烟测试
是指在对一个新版本进行大规模的系统测试之前,先验证一下软件的基本功能是否实现,是否具备可测性。
冒烟测试引入到软件测试中,就是指测试小组在正式测试一个新版本之前,先投入较少的人力和时间验证一个软件的主要功能,如果主要功能都没有运行通过,则打回开发组重新开发。这样做的好处是可以节省时间和人力投入到不可测的项目中。
● 回归测试
是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误。
回归测试一般是在进行第二轮软件测试时开始的,验证第一轮软件测试中发现的问题是否得到修复。当然,回归也是一个循环的过程,如果回归的问题通不过,则需要开发人员修改后再次进行回归,直到所有问题回归通过为止。
● 随机测试
是指测试中的所有输入数据都是随机生成的,其目的是模拟用户的真实操作,并发现一些边缘性的错误。
随机测试可以发现一些隐蔽的错误,但是也有很多缺点,例如测试不系统、无法统计代码覆盖率和需求覆盖率、发现的问题难以重现等。一般是放在测试的最后执行。随机测试更专业的升级版叫做探索性测试。
● 安全测试
是在IT软件产品的生命周期中,特别是产品开发基本完成到发布阶段,对产品进行检验以验证产品符合安全需求定义和产品质量标准的过程 。
安全测试现在越来越受到企业的关注和重视,因为由于安全性问题造成的后果是不可估量的,尤其是互联网产品,最容易遭受各种安全攻击。
● 探索性测试
指同时设计测试和执行测试,探索性测试强调测试人员的主观能动性,抛弃繁杂的测试计划和测试用例设计过程,强调在碰到问题时及时改变测试策略。
探索性测试可以说是一种测试思维技术,它没有很多实际的测试方法、技术和工具,但却是所有测试人员都应该掌握的一种测试思维方式。