按测试(开发)阶段分类

 

A.->单元测试(unit test):

 

是指对软件中的最小可测试单元进行检查和验证。

 

是对软件中的基本组成单位进行的测试,如一个模块、一个过程等等。它是软件动态测试的最基本的部分,也是最重要的部分之一,其目的是检验软件基本组成单位的正确性。一个软件单元的正确性是相对于该单元的规约(详细设计)而言的。因此,单元测试以被测试单位的规约为基准。

 

单元测试方法包括:控制流测试、数据流测试、排错测试、分域测试等。

 

B.->集成测试( integration test):

 

也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。

 

是在软件系统集成过程中所进行的测试,其主要目的是检查软件单位之间的接口是否正确。它根据集成测试计划,一边将模块或其他软件单位组合成越来越大的系统,一边运行该系统,以分析所组成的系统是否正确,各组成部分是否合拍。

 

(1)一次性集成:是一种非增殖式组装方式。也叫做整体拼装。使用这种方式,首先对每个模块分别进行模块测试,然后再把所有模块组装在一起进行测试,最终得到要求的软件系统。

 

(2)增殖式集成:这种集成方式又称渐增式集成,首先对一个个模块进行模块测试,然后将这些模块逐步组装成较大的系统。在集成的过程中边连接边测试,以发现连接过程中产生的问题,通过增殖逐步组装成为要求的软件系统。

 

 

集成测试的策略主要实施方案

a.自顶向下的集成

是从主控模块(主程序,即根结点)开始,按照系统程序结构,沿着控制层次从上而下,逐渐将各模块组装起来。在从上向下的集成测试过程中,需对那些未经集成的模块开发桩模块。在集成过程中,可以采用宽度优先或深度优先的策略向下推进。

 

b.自底向上的集成(常用)

是从最底层模块(即叶子结点)开始,按照调用图的结构,从下而上,逐层将各模块组装起来。在从下而上的集成测试环境中,需对那些未经集成测试的模块开发驱动模块。

 

c.还有Bigbang/大爆炸/一次性集成

把大部分已经开放的模块耦合起来,形成一个完成的软件系统或者一个系统的主要部分,并把它拿来做集成测试。

 

d.核心系统集成

把核心的部件挑选出来,并对这些部件进行集成测试,在测试通过的基础上再逐步扩张到外围的部件,直至形成稳定的软件体系。

 

e.高频集成

指的是同步于软件开发过程,每隔一段时间开发就对现有的代码进行一次集成测试。

 

C.->系统测试(system test):

 

是对整个系统的测试,将硬件、软件、操作人员看作一个整体,检验它是否有不符合系统说明书的地方。

 

是对已经集成好的软件系统进行彻底的测试,以验证软件系统的正确性和性能等满足其规约所指定的要求,检查软件的行为和输出是否正确并非一项简单的任务,它被称为测试的“先知者问题”。因此,系统测试应该按照测试计划进行,其输入、输出和其他动态运行行为应该与软件规约进行对比。

 

软件系统测试方法很多,主要有:功能测试、性能测试、随机测试等。

 

D.->验收测试(Acceptance Test Procedure):

 

是部署软件之前的最后一个测试操作。在软件产品完成了单元测试集成测试系统测试之后,产品发布之前所进行的软件测试活动。它是技术测试的最后一个阶段,也称为交付测试

 

验收测试分为:用户验收和运行验收。由客户或最终用户执行,旨在向软件的购买者展示该软件系统满足其用户的需求。它的测试数据通常是系统测试的测试数据的子集。所不同的是,验收测试常常有软件系统的购买者代表在现场,甚至是在软件安装使用的现场。这是软件在投入使用之前的最后测试。

 

按测试技术分类

 

A.->白盒测试:

 

是对软件的过程性细节做细致的检查。是把测试对象看做一个打开的盒子,它允许测试人员利用程序内部的逻辑结构及有关信息,设计或选择测试用例,对程序所有逻辑路径进行测试。通过在不同点检查程序状态,确定实际状态是否与预期的状态一致。因此白盒测试又称为结构测试或逻辑驱动测试。

 

白盒测试方法包括:语句覆盖、判定覆盖、条件覆盖、判定/条件覆盖、条件组合覆盖、路径覆盖等。

 

B.->黑盒测试:

 

把测试对象看做一个黑盒子,测试人员完全不考虑程序内部的逻辑结构和内部特性,只依据程序的需求规格说明书,检查程序的功能是否符合它的功能说明。因此黑盒测试又叫功能测试或数据驱动测试。

 

黑盒测试方法包括:

 

a.等价类划分:

是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的。并合理地假定:测试某等价类的代表值就等于对这一类其它值的测试。因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据。取得较好的测试结果。等价类划分可有两种不同的情况:有效等价类和无效等价类。

 

b.边界值分析:

对等价类划分方法的补充。测试工作经验告诉我,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部.因此针对各种边界情况设计测试用例,可以查出更多的错误. 使用边界值分析方法设计测试用例,首先应确定边界情况.通常输入和输出等价类的边界,就是应着重测试的边界情况.应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据而不是选取等价类中的典型值或任意值作为测试数据。

 

c.因果图分析:

前面介绍的等价类划分方法和边界值分析方法,都是着重考虑输入条件,但未考虑输入条件之间的联系, 相互组合等。考虑输入条件之间的相互组合,可能会产生一些新的情况。但要检查输入条件的组合不是一件容易的事情, 即使把所有输入条件划分成等价类,他们之间的组合情况也相当多。因此必须考虑采用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来考虑设计测试用例。这就需要利用因果图(逻辑模型)。因果图方法最终生成的就是判定表。它适合于检查程序输入条件的各种组合情况。

 

d.错误推测法:

基于经验和直觉推测程序中所有可能存在的各种错误, 从而有针对性的设计测试用例的方法。错误推测方法的基本思想: 列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例。例如, 在单元测试时曾列出的许多在模块中常见的错误. 以前产品测试中曾经发现的错误等, 这些就是经验的总结. 还有, 输入数据和输出数据为0的情况。输入表格为空格或输入表格只有一行。这些都是容易发生错误的情况。可选择这些情况下的例子作为测试用例。

 

e.功能图分析:

 

C.->灰盒测试:

 

介于白盒和黑盒测试之间,关注输出对于输入的正确性,也关注程序的内部结构,但没有白盒测试那样详细、完整。

 

按状态分类

 

A.静态测试

 

是指不运行被测程序本身,仅通过分析或检查源程序的语法、结构、过程、接口等来检查程序的正确性。对需求规格说明书、软件设计说明书、源程序做结构分析、流程图分析、符号执行来找错。静态方法通过程序静态特性的分析,找出欠缺和可疑之处,例如不匹配的参数、不适当的循环嵌套和分支嵌套、不允许的递归、未使用过的变量、空指针的引用和可疑的计算等。静态测试结果可用于进一步的查错,并为测试用例选取提供指导。

 

B.动态测试

 

是指通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率和健壮性等性能,这种方法由三部分组成:构造测试实例、执行程序、分析程序的输出结果。所谓软件的动态测试,就是通过运行软件来检验软件的动态行为和运行结果的正确性。目前,动态测试也是公司的测试工作的主要方式。

 

按性能分类

 

A.负载测试(Load Testing):

负载测试是一种主要为了测试软件系统是否达到需求文档设计的目标,譬如软件在一定时期内,最大支持多少并发用户数,软件请求出错率等,测试的主要是软件系统的性能。

 

B.强度测试(Stress Testing):

强度测试也就是压力测试,压力测试主要是为了测试硬件系统是否达到需求文档设计的性能目标,譬如在一定时期内,系统的cpu利用率,内存使用率,磁盘I/O吞吐率,网络吞吐量等,压力测试和负载测试最大的差别在于测试目的不同。

 

C.容量测试(Volume Testing):

确定系统最大承受量,譬如系统最大用户数,最大存储量,最多处理的数据流量等。

 

按测试的执行方式分类

 

A.手工测试

是由专门的测试人员从用户视角来验证软件是否满足设计要求的行为,更适合用于深度的测试和强调主观判断的测试。探索性测试和众包测试都属于能够手工测试。

 

B.自动化测试

利用测试工具软件来控制测试的自动化执行以及对预期和结果进行检查。一般来说单元测试、接口测试和性能测试等就是利用自动化测试完成。

 

按测试类型来分类

 

A.功能测试

根据产品特性,操作描述和用户方案,测试一个产品的特性和可操作行为以确定它们满足设计需求。针对的问题主要是功能错误/遗漏,界面问题,性能错误,数据以及访问错误,初始化及终止错误。这里性能错误指的是软件本身的性能问题。

功能自动化测试主要的工具:QTP(基于关键字驱动),silkTest,Rational robot,selenium(开源针对web应用),Watir,sikuli(基于截图)

 

B.性能测试

验证软件系统的性能能够满足需求所需求的性能指标。性能测试一般分为负载测试,压力测试,稳定性测试。性能指标包括并发用户数(VU),每秒事物数(TPS),系统相应时间,设备性能。

性能测试工具:loadrunner,silkperformer,Jmeter,WebLoad等

web应用性能测试重点:静态性能评估,开发web应用时,基于一系列web应有页面性能优化的最佳实践对Web应用的页面进行静态分析,并给出评估结果的性能分析方法。业内有YSlow和PageSpeed两种主流的评判标准/工具,都是浏览器插件。

应用性能管理(APM)主要是提供给系统的实时监控以实现性能管理,故障管理的解决方案。

 

C.安全测试

对软件产品进行测试以保证软件符合产品安全需求和质量标准。渗透测试通过模拟对软件系统的恶意攻击行为来评估系统安全性的一种测试,是取得用户一种授权的一种攻击测试。

开放的web应用安全项目OWASP:http://www.owasp.org

安全测试工具:Appscan针对web应用的漏洞扫描工具,Webinspect,Nessus针对服务器主机类的漏洞扫描工具,Nmap端口嗅探的工具,MetaSploit攻击框架,Fortify针对白盒测试

 

D.兼容性测试

软件本身的兼容性,对历史版本的功能和数据进行兼容;不同平台的兼容,可能在多个平台上运行,需要考虑多个平台的验证;软件对运行设备的兼容性,不同的设备不同的软件表现;软件的互操作性,同一个厂商的不同软件在同一台设备可能会有相互操作。对于web应用,不同的浏览器之间的兼容,IE,FireFox,Chrome,Opera

兼容性的测试工具:BrowserShots,BrowserSandbox

 

E.文档测试

针对软件的交付品,配套的文档类部件的测试。如用户手册,使用说明,用户帮助文档等。文档测试的注意点主要有完整性,正确性,一致性,易理解性,易浏览性等等。

 

其他测试方法

A.Alpha测试

由用户在开发者的场所进行,并且在开发者对用户的“指导”下进行测试。开发者负责记录发现在错误和使用中遇到的问题。总之,Alpha测试是在受控的环境中进行的。

 

B.Beta测试

由软件的最终用户们在一个或多个客房场所进行。与Alpha测试不同,开发者通常在Beta测试的现场,因Beta测试是软件在开发者不能控制的环境中的“真实”应用。用户Beta测试过程中遇到的一切问题(真实在或想像的),并且定期把这些问题报告给开发者。接收到在Beta测试期间报告的问题之后,开发者对软件产品进行必要的修改,并准备向全体客户发布最终的软件产品。

 

C.冒烟测试

可以根据其名称理解为该种测试耗时短,仅用一袋烟功夫足够了;其实是对软件基本的功能进行测试,测试的对象是每一个新编译的需要正式测试的软件版本,目的是确认软件基本的功能正常,保证软件系统能跑的起来,可以进行后续的正式测试工作。

 

D.随机测试

主要是根据测试者的经验对软件进行功能和性能抽查。它是根据测试说明书执行样例测试的重要补充手段,是保证测试覆盖完整性的有效方式和过程。

 

E.UI测试

指测试用户界面的风格是否满足客户要求,文字是否正确,页面美工是否好看,文字,图片组合是否完美,背景是否美观,操作是否友好等;用户界面(UI)测试用于核实用户与软件之间的交互。UI测试的目标是确保用户界面会通过测试对象的功能来为用户提供相应的访问或浏览功能。另外,UI测试还可确保UI中的对象按照预期的方式运行,并符合公司或行业的标准。包括用户友好性,人性化,易操作性测试。UI测试比较主观,与测试人员的喜好有关。

 

F.回归测试

回归测试:是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误,回归测试的困难在于不好确定哪些内容应当被重新测试。