软件测试定义
在软件应用程序或程序中发现错误,以使应用程序按照最终用户的要求运行的过程或方法称为软件测试。
描述一种用来促进鉴定软件的正确性、完整性、安全性和质量的过程。据此,您可能会想,软件测试永远不可能完整的确立任意电脑软件的正确性。然而,在可计算理论(计算机科学的一个支派)一个简单的数学证明推断出下列结果:不可能完全解决所谓“死机”,指任意计算机程序是否会进入死循环,或者罢工并产生输出问题。
还有一种定义:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
从上面可以看出,换句话说,软件测试是一种实际输出与预期输出间的审核或者比较过程。
软件测试方法
软件测试有许多方法,但对复杂的产品运行有效测试不仅仅是研究过程,更是创造并严格遵守某些呆板步骤的大事。测试的其中一个定义:为了评估而质疑产品的过程;这里的“质疑”是测试员试着对产品做的事,而产品以测试者脚本行为反应作为回答。虽然大部分测试的智力过程不外乎回顾、检查,然而“测试”这个词意味着产品动态分析──让产品流畅运行。程序质量可能,而且通常会,随系统不同而有差异;不过某些公认特性是共通的:可靠性、稳定性、轻便性、易于维护、以及实用性。
软件测试一般分为黑盒测试和白盒测试。
黑盒测试
黑盒测试(black-boxtesting),也称黑箱测试,是软件测试方法,测试应用程序的功能,而不是其内部结构或运作。测试者不需具备应用程序的代码、内部结构和编程语言的专门知识。测试者只需知道什么是系统应该做的事,即当键入一个特定的输入,可得到一定的输出。测试案例是依应用系统应该做的功能,照规范、规格或要求等设计。测试者选择有效输入和无效输入来验证是否正确的输出。
此测试方法可适合大部分的软件测试,例如集成测试(integrationtesting)以及系统测试(systemtesting)。
白盒测试
白盒测试(white-boxtesting,又称透明盒测试glassboxtesting、结构测试structuraltesting等)是一个测试软件的方法,测试应用程序的内部结构或运作,而不是测试应用程序的功能(即黑盒测试)。在白盒测试时,以编程语言的角度来设计测试案例。测试者输入数据验证数据流在程序中的流动路径,并确定适当的输出,类似测试电路中的节点。
白箱测试可以应用于单元测试(unittesting)、集成测试(integrationtesting)和系统的软件测试流程,可测试在集成过程中每一单元之间的路径,或者主系统跟子系统中的测试。尽管这种测试的方法可以发现许多的错误或问题,它可能无法检测未使用部分的规范。
测试的进程
Alpha测试
Alpha测试通常是阶段性的开发完成后所开始进行,一直持续到进入Beta测试阶段前的阶段。Alpha测试是一种验证测试,在模拟的环境中以模拟的数据来运行。
在这个阶段中,通常是在开发单位由开发人员与测试的测试人员,以模拟或实际操作性的方式进行验证测试。
Beta测试
在系统测试中通常先进行Alpha测试以验证信息系统符合用户以及设计需求所期望的功能。当Alpha阶段完成后,开发过程进入到Beta阶段,由公众参与的测试的阶段。Beta测试可称为确认测试,在一个真实的环境中以实际的数据来运行测试,以确认性能,系统运行有效率,系统撤销与备份作业正常,透过测试让信息系统日后可以更趋完善。
封测与公测
封闭测试(ClosedBeta,常简作封测或CB)是软件或服务等产品在开发完成后、将公开上市前的测试过程。相对于公开测试,封闭测试的主要用途是测试软件的功能和检查程序错误等等,因此通常只提供给少数人进行测试。有些公司会要求参与测试者签署保密协议,以避免测试的产品提前外流。MMORPG的封测结束之后,游戏公司常会将角色数据删除,但也有少数不删的。
公开测试(OpenBeta,常简作公测或OB),一般常指软件或服务等产品在正式上市前开放给不特定人试用,虽然原意是希望试用者能够提报bug,但并不是把试用者当做真正的验证人员。由于通常为免费性质,故常常能够吸引到大批的试用者参与,可视为另一种营销策略。另一方面也节省下测试人员的成本,和验证稳定度(对于多人使用的带宽及机器是否能负载,又称压力测试)的时间。
Gamma测试
Gamma测试是一个很少被提及的非正式测试阶段,该测试阶段对应的是对“存在缺陷”产品的测试。考虑到任何产品都可以被称为“存在缺陷”的产品(测试只能发现产品中存在的问题,不能说明产品不存在问题),因此这个概念存在一定的不确定性。对Alpha和Beta测试常见的一个误解是“Beta测试=黑盒测试”。实际上,Alpha和Beta测试对应在软件产品发布之前的Alpha和Beta阶段,而白盒、黑盒和灰盒测试技术是从技术和方法层面对测试的描述,不应该将这两部分概念混淆。
测试的类型
功能测试
按照测试软件的各个功能划分进行有条理的测试,在功能测试部分要保证测试项覆盖所有功能和各种功能条件组合。
系统测试
对一个完整的软件以用户的角度来进行测试,系统测试和功能测试的区别是,系统测试利用的所有测试数据和测试的方法都要模拟成和用户的实际使用环境完全一样,测试的软件也是经过系统集成以后的完整软件系统,而不是在功能测试阶段利用的每个功能模块单独编译后生成的可执行程序。
极限值测试
对软件在各种特殊条件,特殊环境下能否正常运行和软件的性能进行测试。特殊条件一般指的是软件规定的最大值,最小值,以及在超过最大、最小值条件下的测试。特殊环境一般指的是软件运行的机器处于CPU高负荷,或是网络高负荷状态下的测试,根据软件的不同,特殊环境也有过不同。
性能测试
性能测试是对软件性能的评价。简单的说,软件性能衡量的是软件具有的响应及时度能力。因此,性能测试是采用测试手段对软件的响应及时性进行评价的一种方式。根据软件的不同类型,性能测试的侧重点也不同。
压力测试
压力测试常常和性能测试相混淆。它们主要不同点是,压力测试要求进行超过规定性能指标的测试。例如一个网站设计容量是个人同时点击,压力测试就要是采用个同时点击的条件测试。
压力测试的通常判断准则:
系统能够恢复。压力过程中不要有明显性能下降。
测试的阶段
单元测试
单元测试是对软件组成单元进行测试,其目的是检验软件基本组成单位的正确性,测试的对象是软件设计的最小单位:函数。
集成测试
集成测试也称综合测试、组装测试、联合测试,将程序模块采用适当的集成策略组装起来,对系统的接口及集成后的功能进行正确性检测的测试工作。其主要目的是检查软件单位之间的接口是否正确,集成测试的对象是已经经过单元测试的模块。
系统测试
系统测试主要包括功能测试、界面测试、可靠性测试、易用性测试、性能测试。功能测试主要针对包括功能可用性、功能实现程度(功能流程业务流程、数据处理业务数据处理)方面测试。
回归测试
回归测试指在软件维护阶段,为了检测代码修改而引入的错误所进行的测试活动。回归测试是软件维护阶段的重要工作,有研究表明,回归测试带来的耗费占软件生命周期的1/3总费用以上。
与普通的测试不同,在回归测试过程开始的时候,测试者有一个完整的测试用例集可供使用,因此,如何根据代码的修改情况对已有测试用例集进行有效的复用是回归测试研究的重要方向,此外,回归测试的研究方向还涉及自动化工具,面向对象回归测试,测试用例优先级,回归测试用例补充生成等。