功能测试
功能测试是针对应用程序的业务需求而进行的测试类型。它涉及完整的集成系统,以评估系统是否符合其指定要求。基于功能规范文档,将执行此类测试。在实际测试中,测试人员需要验证代码的特定操作或功能。
软件测试
定义
软件测试就是利用测试工具按照测试方案和流程对产品进行功能和性能测试,甚至根据需要编写不同的测试工具,设计和维护测试系统,对测试方案可能出现的问题进行分析和评估。执行测试用例后,需要跟踪故障,以确保开发的产品适合需求。
测试目标
发现一些可以通过测试避免的开发风险;实施测试来降低所发现的风险;确定测试何时可以结束;在开发项目的过程中将测试看作是一个标准项目。
测试原则
- 测试应该尽早进行,最好在需求阶段就开始介入,因为最严重的的错误是系统不能满足用户的需求
- 程序员应该避免检查自己的程序,软件测试应该有测试人员负责。
- 设计测试用例时应考虑到合法的输入和不合法的输入以及各种边界条件,特殊情况下不要制造极端状态和意外状态。
- 应该充分注意测试中的群集现象。测试发现问题越多的地方,也是存在错误最多的地方。
- 测试的对策是对错误结果进行确认的过程。
- 制定严格的测试计划。
- 妥善保存测试计划、测试用例、出错统计和最终分析报告,为维护提供方便。
测试过程
一般来说,开发过程与测试过程是一个相互对应的过程。测试一般从模块(单元)测试开始,然后是整体测试,确定测试,知道系统测试完结,其针对编码、设计、需求和系统及各部分。
测试数据流程
测试阶段数据流有别于测试的过程步骤,它是测试数据流动状况。一个完整的测试一般要经过测试,评价和纠错三个过程。其入口流是系统配置和测试配置。系统配置是指系统产品在不同阶段时期的组合,这种组合随着开发工作的警醒而不断变化。测试配置包括测试计划、测试工具、测试用例和测试结果期望值。一般测试配置包含在系统配置中。
系统测试方法
黑盒测试
黑盒测试也称功能测试,它通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。
白盒测试
与黑盒测试相反,白盒测试重点侧重于程序的结构,即用解剖的方法,透视的方法了解程序的结构,从而发现程序存在的问题和错误所在。它是一种针对程序细节进行的测试和检查,通过测试不同逻辑路径来确定程序与需求设计期望值是否一致。
灰盒测试
灰盒测试,是介于白盒测试与黑盒测试之间的测试。灰盒测试关注输出对于输入的正确性,同时也关注内部表现,但这种关注不像白盒那样详细、完整,只是通过一些表征性的现象、事件、标志来判断内部的运行状态,有时候输出是正确的,但内部其实已经错误了,这种情况非常多,如果每次都通过白盒测试来操作,效率会很低,因此需要采取这样的一种灰盒的方法。
静态分析
静态测试不要求在计算机上实际执行所测程序,主要以一些人工的方式和技术对软件进行分析和测试。应该指出,静态分析也包括对需求说明书、概要设计说明书、详细设计报告、测序代码、测试计划等进行的静态审查;而软件的动态测试是通过输入一组预先按照一定的测试准则构造的实例数据来动态运行程序,而达到发现程序错误的过程。在动态分析技术中,最重要的技术是路径和分支测试。
系统测试的策略
单元测试
单元测试,是指对软件中的最小可测试单元进行检查和验证。单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。
整体测试
整体测试就是讨论组装软件的系统测试技术,按设计要求把通过单元测试的各个模块组装在一起之后,进行整体测试以便发现与接口有关的各种错误。
确认测试
整体测试之后,软件已组装完成,接口方面的错误也已排除,软件测试的下一步工作是确认测试。确认测试的目的是向未来的用户表明系统能够像预定要求那样工作。
有效性测试
有效性测试的目的是通过测试,以及与需求的比较,发现软件与需求定义之间的差异和不同。有效性测试的依据是需求分析说明书,而不是合同的规定,这是有效性测试与确认测试的区别。
系统测试
系统测试与有效性测试与确认测试不同,它由若干个不同测试组成,目的是充分运行系统,验证系统各部件是否都能正常工作并完成所赋予的任务。
验收测试
验收测试,系统开发生命周期方法论的一个阶段,这时相关的用户和/或独立测试人员根据测试计划和结果对系统进行测试和接收。它让系统用户决定是否接收系统,是一项确定产品是否能够满足合同或用户所规定需求的测试。这是管理性和防御性控制。
非功能测试
它涉及完整的集成系统,以评估系统是否符合其指定要求。基于功能规范文档,将执行此类测试。在实际测试中,测试人员需要验证代码的特定操作或功能。非功能测试包括性能、负载、安全、可靠性和其他很多方面。
国际标准化组织(ISO)在 ISO 9216 和 ISO 25000:2005 中定义了几个非功能属性。这些属性包括:
可靠性
软件使用者期望软件能够无误运行。可靠性是度量软件如何在主流情形和非预期情形下维持它的功能,有时也包括软件出错时的自恢复能力。
可用性
如果用户不明白应该如何使用,那么,即使是零差错的软件也会变得毫无用处。可用性测量的是用户学习和控制软件以达到用户需求的容易程度。进行可用性研究、重视顾客反馈意见和对错误信息和交互内容的检查都能提高可用性。
可维护性
可维护性描述了修改软件而不引入新错误所需的工作量。产品代码和测试代码都必须具备高度的可维
护性。团队成员对代码的熟悉程度、产品的可测性和复杂度都对可维护性有影响。
可移植性
可移植性指一种计算机上的软件转置到其它计算机上的能力。软件移植是实现功能的等价联系,而不是等同联系。从狭义上讲,是指可移植软件应独立于计算机的硬件环境;从广义上讲,可移植软件还应独立于计算机的软件,即高级的标准化的软件,它的功能与机器系统结构无关,可跨越很多机器界限。
性能测试
性能测试目的是验证软件系统是否能够达到用户提出的性能指标,同时发现软件系统中存在的性能瓶颈,优化软件,最后起到优化系统的目的。性能测试类型包括压力测试、负载测试,强度测试,容量测试等。因为各属性之间在范围上有重叠,很多非功能属性的名字是可以通用的。
压力测试
一般来说,压力测试的目的是要通过模拟比预期要大的工作负载来让只在峰值条件下才出现的缺陷曝光。内存泄漏、竞态条件、数据库中的线程或数据行之间的死锁条件、和其他同步问题等等,都是压力测试能发掘出来的常见缺陷。 压力测试主要是为了测试硬件系统是否达到需求文档设计的性能目标,譬如在一定时期内,系统的 cpu 利用率,内存使用率,磁盘 I/O 吞吐率,网络吞吐量等。
负载测试
负载测试是要探讨在高峰或高于正常水平的负载下,系统或应用软件会发生什么情况。例如,一个网络服务的负载测试会试图模拟几千名用户同时连线使用该服务。测试的主要是软件系统的性能,譬如软件在一定时期内,最大支持多少并发用户数,软件请求出错率等。
平均无故障时间(MTBF)测试
MTBF 测试是测量系统或应用软件在出错或当机前的平均运行时间。这一测试有几个变体,包括平均无错时间(MTTF)或平均无当机时间(MTTC)。技术含义略有不同,但实践上,这些词汇都是一个意思。
低资源测试
低资源测试是要确定当系统在重要资源(内存、硬盘空间或其他系统定义的资源)降低或完全没有的情况下会出现的状况。重要的是要预估将会发生什么,例如为文件存盘而无足够空间、或一个应用程序的内存分配失败时将会发生什么。
容量测试
与负载测试非常相似,容量测试一般是用来执行服务器或服务测试。目的是要确定系统最大承受量,譬如系统最大用户数,最大存储量,最多处理的数据流量等。容量模型通常建立在容量测试数据基础上。有了这些数据,营运团队(Operations)就能定计划什么时候增加系统容量:要么增加单机资源,如 RAM、CPU 和磁盘空间等;要么干脆增加计算机数目。
重复性测试
重复性测试是为了确定重复某一程序或场景的效果而采取的一项简单而“粗暴”(brute force)的技术。这个技术的精髓是循环运行测试直到达到一个具体界限或临界值,或者是不妙的境况。
兼容性测试
兼容性测试是指测试软件在特定的硬件平台上、不同的应用软件之间、不同的操纵系统平台上、不同的网络等环境中是否能够很友好的运行的测试。主要测试软件是否能在不同的操作系统平台上兼容,或测试软件是否能在同一操作平台的不同版本上兼容;软件本身能否向前或向后兼容;测试软件能否与其他相关的软件兼容;数据兼容性测试,主要是指数据能否共享等。
安全性测试
安全性测试是检查系统对非法侵入的防范能力。主要包括用户认证、系统网络安全和数据库安全方面的测试。安全测试期间,测试人员假扮非法入侵者,采用各种办法试图突破防线。
辅助功能测试
辅助功能测试保证软件公司开发的软件能被伤残人使用。其中任何应用程序都必须测试的特性包括:操作系统的设置测试、“内置”辅助特性的测试(包括 Tab 键顺序、热键和快捷键)、编程访问的测试、以及辅助的技术工具的测试。辅助功能测试的一个重要方面就是使用辅助功能工具去测试应用程序, 这些工具包括,屏幕阅读器、放大镜、语音识别或者其他输入程序。
本地化测试
本地化就是将软件版本语言进行更改,本地化测试的对象是软件的本地化版本。本地化测试的目的是测试特定目标区域设置的软件本地化质量。本地化测试的环境是在本地化的操作系统上安装本地化的软件。从测试方法上可以分为基本功能测试,安装/卸载测试,当地区域的软硬件兼容性测试。测试的内容主要包括软件本地化后的界面布局和软件翻译的语言质量,包含软件、文档和联机帮助等部分。
配置测试
配置测试就是测试软件是否和系统的其他与之交互的元素之间兼容,如浏览器、操作系统、硬件等,验证被测软件在不同的软件和硬件配置中的运行情况。配置测试执行的环境是所支持软件运行的环境。测试环境适合与否严重影响测试结果的真实性和正确性。硬件环境指测试必须的服务器、客户端、网络连接设备、打印机等,软件环境指被测试软件运行时的操作系统、软件平台、数据库其他应用软件构成的环境。
可用性测试
可用性测试是在产品或产品原型阶段实施的通过观察或访谈或二者相结合的方法,发现产品或产品原型存在的可用性问题,为设计改进提供依据。可用性测试不是用来评估产品整体的用户体验,主要是发现潜在的误解或功能在使用时存在的错误。