在我做QA的第一天,我就决定把那些眼花缭乱的各类测试名词搞个清清楚楚。
最近才细读了老大介绍的软件测试方法和技术一书,o,my,终于有机会把它们全都搞清楚了,因为种种好说但懒得说的原因,就把它们都总结下来写在这里~
第二章第四节讲述了软件测试的分类和阶段,
软件测试可以分别按测试范围、测试目的、测试对象、测试过程分类。
1.按测试范围分类
●单元测试
●组件测试
●集成测试
●系统测试
●验收测试
●安装测试
2.按测试目的分类
◆正确性测试
●白盒测试
●黑盒测试
◆性能测试
◆可靠性测试
●强壮性测试
●异常处理测试
●负载测试
◆安全性测试
3.按测试对象分类
●单元测试
●组件测试
●模块测试
●程序测试
●系统测试
●文档测试
4.按测试过程分类
●需求阶段的测试
●设计阶段的测试
●程序阶段的测试
●测试结果的评估
●安装测试
●验收测试
●测试变化:维护
5.其他测试技术和方法
●回归测试:为了保证软件中新的变化(修改)不会对原有功能的正常使用有影响而进行的测试。回归测试更适合于使用软件自动化测试工具。
●压力测试:用来检查系统在大负荷条件下的运行情况。在非正常的巨大负荷下,某些动作和输入大量重复,输入大数,对数据库进行非常复杂的查询等,以确定在什么情况下系统响应速度下降或是出现故障。
●恢复测试:在系统崩溃、硬件故障,或者其他灾难发生之后,重新恢复系统和数据的能力测试。
●安全测试:测试系统在应付非授权的内部、外部访问、故意损坏时的系统防护能力。
●兼容性测试:测试在特殊的硬件、软件、操作系统、网络环境下的软件表现。
测试的阶段
软件测试贯穿软件产品开发的整个生命周期--软件项目一开始,软件测试也就开始了,从产品的需求分析审查到最后的验收测试、安装测试结束。
从过程来看,软件测试是由一系列的不同测试阶段所组成的,这些阶段分为:
1.规格说明书审查
测试人员要参与系统或产品需求分析,认真阅读有关用户需求分析文档,真正理解客户的需求,检查规格说明书对产品描述的准确性、一致性等,为今后熟悉应用系统、编写测试计划、设计测试用例等做好准备工作。
2.系统和程序设计审查
代码会审(公司coding review的最佳中文翻译)是一种静态的白盒测试方法,是由一组人通过阅读、讨论来审查程序结构、代码风格、算法等的过程。
3.单元测试
在编码阶段,针对每个模块进行测试,主要使用白盒测试方法,从程序的内部结构出发设计测试用例,检查程序模块或组件已实现的功能和定义的功能是否一致,以及编码中是否存在错误。单元测试一般由测试人员和编程人员共同完成,编程人员有时起主要作用。
4.集成测试
也称组装测试、联合测试、子系统测试,在单元测试的基础上,将模块按照设计要求组装起来同时进行测试,主要目的是发现与接口有关的模块之间的问题。
5.功能测试
功能测试一般须在完成集成测试后进行,而且是针对应用系统进行测试。功能测试是基于产品功能说明书,是在已知产品所应具有的功能,从用户角度来进行功能验证,以确定每个功能是否都能正常使用。
6.确认测试
确认软件的功能和性能达到用户的合理的期待。确认测试也称有效性测试,验证软件的功能和性能及其他特性是否与用户的要求一致。如果加入用户信息,也称验收测试。
7.系统测试
最终与系统中其他部分配套运行,进行系统测试,即,将软件放在整个计算机环境下,包括软硬件平台、某些支持软件、数据和人员等,在实际运行环境下进行一系列的测试,包括恢复测试、安全测试、强度测试和性能测试等。
8.验收测试
9.安装测试
指按照软件产品安装手册或相应的文档,在一个和用户使用该产品完全一样的环境中或相当于用户使用的环境中,进行一步一步安装的同时所做的测试。
我只做过2345,后面的几个测试阶段有时候太相似啦,对于小的项目把它们和在一起测算啦。
重点明确以下几个测试方法的概念和开展测试的思路。
单元测试
单元测试自己也做过,老早就关注了这种测试方法,目前做的SDK的测试和单元测试也有很大的相似性,单元测试的理论也是一大篇,每一点看起来都是那么的重要,这里主要记录单元测试的方法,记住到底怎么做单元测试,不要和别的测试搞混啦。
测试方法:以白盒测试方法为主,辅以黑盒测试方法。
单元测试需要达到以下一些具体目标:
1. 信息能否正确地流入和流出单元;
2. 在单元工作过程中,其内部数据能否保持其完整性,包括内部数据的形式、内容及相互关系不发生错误,也包括全局变量在单元中的处理和影响。
3. 在为限制数据加工而设置的边界处,是否正确工作。
4. 单元的运行能否做到满足特定的逻辑覆盖。
5. 单元中发生了错误,其中的出错处理措施是否有效。
单元测试任务:
1. 模块接口测试。
2. 模块局部数据结构测试。
3. 模块边界条件测试。
4. 模块中所有独立执行通路测试。
5. 模块的各条错误处理通路测试。
白盒测试在单元测试中的应用技术有逻辑驱动发和基本路径测试法。这两种方法不考虑软件的功能实现。基于对模块内部结构的清晰了解,要求做到验证内部动作是否按照规格说明书的规定正常进行,按照程序内部的结构测试程序,检验程序中的每条通路是否都能按预定要求正确工作。
1. 语句覆盖:选择足够的测试用例,使程序中每一条可执行语句至少被执行一次。
2. 判定覆盖:选择足够的测试用例,使得程序中每一个分支判断的每一种可能结构都至少被执行一次,判定覆盖也叫分支覆盖。
3. 条件覆盖:选择足够的测试用例,使得程序中每一个分支判断的每一个条件的可能结果都至少被执行一次。
4. 判定/条件覆盖:选择足够的测试用例,使得同时满足判定覆盖和条件覆盖。
5. 条件组合覆盖:选择足够的测试用例,使得程序中每一个分支判断中每一个条件的每一种可能组合结果都至少被执行一次。
6. 路径覆盖:选择足够的测试用例,使得程序中所有的可能路径都至少被执行一次。
7. 循环测试:在上下边界及可操作范围内运行所有的循环。
黑盒测试方法主要运用于单元的功能和性能方面的测试。
黑盒测试常用的技术和方法包括:
1. 等价类划分法
2. 边界值分析法
3. 错误推测法
4. 因果图法
5. 功能图法
在功能性测试方面通常会利用三种数据来进行测试,即正常数据,边缘数据和错误数据。
单元测试的常用工具
有些开发的集成环境就提供了一些测试的工具,另外,还有专业的测试工具,按测试的范围和功能,可分为以下一些种类:
1. 静态分析工具;
2. 代码规范审核工具;
3. 内存和资源检查工具;
4. 测试数据生成工具;
5. 测试框架工具;
6. 测试结果比较工具;
7. 测试度量工具;
8. 测试文档生成和管理工具;
集成测试(Integration test)
集成测试是将已分别通过测试的单元按设计要求组合起来再进行的测试,以检测这些单元之间的接口是否存在问题。
测试方法:集成测试阶段是以黑盒测试为主。
集成方法:
1. 自顶向下和自底向上集成方法
2. 大棒和三明治集成方法
3. 持续集成
功能测试
主要是根据产品规格说明书,来检验被测试的系统是否满足各方面的使用要求。
有时黑盒测试也被称为功能测试。
功能测试的方法:
1. 等价类划分法,将测试数据等价划分,同类归纳
2. 边界值分析法,验证边界值
3. 错误推测法,根据经验推测哪里可能出现错误
4. 因果图法,分析各种组合
5. 组合分析法,考虑参数之间的影响,基于每对参数组合的测试技术
系统测试
通常意义上的系统测试包括:
1. 压力测试
2. 容量测试
3. 性能测试
4. 安全测试
5. 容错测试
回归测试
回归测试的目的:是在程序有修改的情况下保证原有功能正常的一种测试策略和方法,因为这时的测试不需要进行全面测试,从头到尾测试一遍,而是根据修改的情况进行有效测试。
回归测试的方法,应该兼顾效率和有效性两个方面,
1. 再测试全部用例
2. 基于风险选择测试
3. 基于操作剖面选择测试
4. 再测试修改的部分
压力测试
是一种需要反常数据、频率或资源的方式下,执行可重复的负载测试,以检查程序对异常情况的抵抗能力,找出性能瓶颈。压力测试总是迫使系统在异常的资源配置下运行,例如以下几种情况:
1. 当中断的正常频率为每秒1~2个时,运行每秒产生10个中断的测试用例。
2. 定量地增长数据输入率,检查对数据处理的反应能力
3. 运行需要最大存储空间(或其他资源)的测试用例
4. 运行可能导致虚存操作系统崩溃或大量数据对磁盘进行存取操作的测试用例等
容量测试
容量测试的目的是同坐测试预先分析出反映软件系统应用特征的某项指标极限值(如最大并发用户数、数据库记录数等),系统在其极限值状态下还能保持主要功能正常运行。容量测试还将确定测试对象在给定时间内能够持续处理的最大负载或工作量。
性能测试
通过测试确定系统运行是的性能表现,如得到运行速度、响应时间、占有系统资源等方面的系统数据。
安全性测试
安全性是“使伤害或损害的风险限制在可接受的水平内”。
安全性测试是检查系统对非法侵入的防范能力。
可靠性测试
可靠性是产品在规定的条件下和规定的时间内完成规定功能的能力,它的概率度量称为可靠度。
在可靠性测试中,可以考虑进行“强化输入”,即输入比正常输入更恶劣(合理程度的恶劣)的数据,如果软件在强化输入下可靠,就能说明比正规输入下可靠得多。
容错性测试
容错性测试值检查软件在异常条件下自身是否具有防护性的措施或某种灾难性恢复的手段。当系统出错时,能否在指定时间间隔内修正错误并重新启动系统。
验收测试
包括;
易用性测试
兼容性测试
安装测试
文档测试
兼容性测试
软件的兼容性测试是指验证软件之间是否能正确地交互和共享信息。交互可以是同时运行于同一台计算机上,或在相隔甚远的不同计算机上的两个程序之间进行。
安装测试
注意以下几点:
1. 是否需要专业人员安装
2. 软件安装说明书有无对安装环境做限制和要求。
3. 安装过程时都简单,容易掌握。
4. 安装过程 时都有明显的、合理的提示信息。
5. 安装过程中时都会出现不可预见的或不可修复的错误
6. 安装程序时都占用系统资源和原系统冲突,是否会影响原系统的安全性。
7. 软件安装的完整性和灵活性
8. 软件使用的许可号码或注册号码的验证
9. 升级安装后原有应用程序是否可正常运行
10. 卸载测试也是安装测试的一部分。