软件测试的分类,概念介绍

https: www cnblogs com starstarstar p 7020566 html 软件测试的分类 按测试阶段分类:单元测试、集成测试、系

https://www.cnblogs.com/starstarstar/p/7020566.html

软件测试的分类

按测试阶段分类:单元测试、集成测试、系统测试和验收测试

单元测试:对软件中最小的可测试单元进行检查和验证。单元测试一般是针对代码的测试。不同的测试对象,有不同的单元。C语言的单元可以看成是各个函数,Java这种面向对象的语言单元可以看出每一个类,界面的功能软件单元可以看成具体的功能项。

单元测试的原则:

1、尽可能保证每一个测试用例是相互独立的,写单元测试的时候应当尽量避免使用依赖的方法。对于必须验证的依赖关系,可以考虑用集成测试的方法来验证。

2、一般单元测试是由代码的开发人员来实施,用以检验所开发的代码功能是否符合自己的设计要求。

单元测试的好处:

1、单元测试尽早发现缺陷、收益比较好。

2、有利于以后的重构,最大限度的保证后续工作的重构

3、简化集成,保证最小单元模块的稳定性和正确性,为以后的集成测试简化

4、文档,尽可能的减少文档的存在

5、用于设计,把设计思路体现在单元测试中

单元测试的缺点:

1、不可能覆盖所有的执行路径,不可能捕捉到所有路径的错误

2、每一行代码一般需要3-5行的测试代码才能完成单元测试,在投入和产出达到一个平衡

单元测试的框架:

Xunit:JUnit nunit  PHPunit  CPPUnit等

集成测试: 在单元测试的基础上,测试在将所有的软件单元按照概要设计规格说明的要求组装成模块、子系统或系统的过程中各部分工作是否达到或实现相关技术指标及要求的活动。简单来说就是,在单元测试完成的基础上,在针对已经完成单元测试的模块,并把他们组装成更高一级的子系统,针对子系统的进行的集成。测试对象是已经经过单元测试的各个模块之间的接口。

集成测试的主要实施方案:

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

2、自顶向下:是递增的组装软件结构的方法,一般是从主程序开始,沿控制层逐层向下来集成,逐层测试

3、自底向上(常用):从程序的最底层开始,逐层的向上组装,逐层的向上测试。不需要编写桩模块。

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

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

系统测试:  是经过集成测试的软件,作为计算机系统的一部分,与系统中其他部分结合起来,在实际运行环境中对计算机系统进行一系列严格有效地测试,以发现软件中潜在的问题,保证系统正常运行。系统测试一般要进行功能测试,性能测试,稳定性测试等多种类型的测试。企业中的测试岗位一般就是针对这个阶段的测试。系统测试的测试对象包括软件、计算机硬件、相关的外围设备、数据采集和传输机构、支持软件、系统相关人员等整个系统。

系统的关注点主要有系统本身的使用、关注与其他相关系统间的联通、关注系统与不同压力下的表现、关注系统在真实环境下的表现。

验收测试:  也称为交付测试,针对用户的需求、业务流程进行测试,确定系统是否满足验收标准,由用户、客户或其他授权机构决定是否接受系统。

验收测试分为:

用户验收测试:开发方在移交产品之前进行的测试

运行验收测试:从运维的层面,检查是否能够正常运行和维护

合同和规范验收测试:对现有的合同和规范进行验收测试,还有针对政府和法律的一些条文的是否合规

alpha测试:开发提供的场所和环境来运行,用户来执行

beta测试:完全脱离开发环境,用户提供的环境进行的测试

按照测试手段来分类

按照测试时对象的可见度:黑盒测试  白盒测试

按照状态分类:静态测试  动态测试

按照测试的执行方式:手工测试   自动化测试

黑盒测试主要关注:

1、是否有不正确/遗漏的功能?

2、在接口上,输入是否能够正确的接受?能否输出正确的结果?

3、是否有数据结构错误/外部信息(例如数据文件)访问错误?

4、性能上是否满足要求?

在系统测试阶段主要用黑盒测试,下面介绍黑盒测试的主要的设计方法:等价类划分、边界值分析、错误推测、因果图法、正交实验分析法、状态迁移图法、流程分析法

白盒测试对内部的逻辑十分了解,针对程序的逻辑结构来覆盖测试用例。主要的逻辑单位:语句、条件、条件组合、分支和路径。白盒测试的主要测试方法:代码检测法、静态结构分析法、静态质量度量法、逻辑覆盖法和基本路径测试法。

静态测试是指无须执行被测程序,而是通过评审软件代码/文档,度量程序静态复杂度,检查软件是否符合编程标准,借以发现编写的程序的不足之处,减少错误出现的频率。静态测试的方式:互审,走查和会议。互审一般是程序员之间相互检查,走查是指以小组的形式相互走查,会议是召开会议的形式进行代码评审,进行静态测试。

动态测试通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性等。一般来说黑盒测试相关的方法主要属于属于动态测试,白盒测试的一些代码检测等属于静态测试。

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

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

按测试类型来分类

功能测试  性能测试 部署测试 文档测试 安全测试 兼容性测试 易用性测试 本地化测试 无障碍测试 可靠性测试

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

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

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

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

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

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

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

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

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

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

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

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

其他的测试方法:

回归测试:在软件功能修改后,对软件进行重新测试以确认修改没有引入新的错误或者导致其他部分产生错误,最适合实施自动化测试。可以针对模块进行回归测试。

冒烟测试:用于确认代码中的更改会按照预期运行,且不会破坏整个版本的稳定性。针对全流程的一个关键业务的流程的验证。

monkey测试:用一些随机,稀奇古怪的方式来操作软件,以测试系统的健壮性和稳定性。andriod的sdk就有monkey测试的接口。

A/B测试:用于互联网行业,通过页面提供两个版本给用户使用并记录相关的用户行为数据,来确定更优化设计的一种测试方案。实施要点:多个方案并行实施,并用户数量达到一定的数量级;每次改动仅改动一个变量;按照某种规则进行优胜劣汰。