一、为什么要测试
- 软件系统越来越成为生活中不可或缺的一部分
- 缺陷不可避免
- 软件不正确执行可能会导致很多问题
二、软件测试的定义
- 软件测试,描述一种用来促进鉴定软件的正确性,完整性,安全性和质量的过程(维基百科)
- 公司主流观点:测试是一个包含计划,准备和测量活动的过程,其目的是确认被测系统的特性,并指出需求和实现之间的差异
- 其他经典定义:在规定的条件下,对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求,进行评估的一个过程
正向思维的
优点:以需求和设计为本,有利于界定测试工作的范畴和测试计划安全,针对性强,有利于质量评估工作
不足:观念以证实为主的情况下,不容易找到软件的错误,也容易忽略一些错误
反向思维:
优点:容易找到较多错误
不足:与需求和设计没有必然的关联,测试活动容易丢失重点,可能发现较多对客户使用没有影响或者影响很小的bug
三、什么是软件缺陷(bug)
软件缺陷的定义:
- 从产品内部看,软件缺陷是软件产品开发或维护过程中,所存在的错误,毛病各种问题
- 从产品外部看,软件缺陷是系统所需要实现的某种功能的失效或违背
- 软件缺陷(bug)与软件错误(error)不同,软件缺陷的范围更广,它涵盖了软件错误,还涵盖了不一致性问题,功能需求定义缺陷和产品设计缺陷等
四、软件缺陷的主要类型,对象
- 功能,特性没有实现或部分实现
- 设计不合理,存在缺陷
- 实际结果和预期结果不一致
- 运行出错,包括运行中断,系统奔溃,界面混乱等,如上网过程中浏览器异常退出
- 数据结构不正确,精度不够
- 用户不能接受其他问题,如时间过程,界面不美观
五、软件测试的目的
- 发现缺陷,并进行修复,以确保系统满足预期结果
- 质量评估,说明系统在相应时间点的质量情况,为利益干系人决策是否发布版本提供依据
- 预防缺陷,在软件生命周期,通过对测试依据(如合同要求,行业标准,法律要求等)和需求文档进行测试,可以预防将缺陷引入代码中
六、不同的测试阶段,需要考虑不同的测试目标
- 单元测试,集成测试和系统测试,测试的主要目标是尽可能的发现失效,从而识别和修正尽可能多的缺陷
- 验收测试,目标是确认系统是否按照预期工作,是建立满足需求的信心
- 有些情况下,测试的主要目标是对软件的质量进行评估,从而为利益相关人提供这样的信息:在给定的时间点发布系统版本可能存在的风险
- 回归测试,通常是为了验证在开发过程中的软件变更是否引入新的缺陷
七、软件测试的原则
- 测试可以显示缺陷的存在
- 穷尽测试是不可能的
- 测试应尽早的介入
- 缺陷具有集群性
- 杀虫剂悖论
- 测试活动依赖于测试内容,测试内容绝对测试活动
- 系统发布取决于是否满足客户需求,而不是是否还有缺陷
八、软件测试的对象
软件测试不仅仅局限于软件程序的测试,测试活动贯穿于软件开发过程的整个生命周期。因此,需求分析,概要设计,详细设计以及编码个阶段所得到的交付件,包括设计文档,源代码,应用程序乃至随软件版本发布的资料,都是软件测试的对象
九、软件质量属性
软件测试是为了保障软件质量,那什么是软件质量呢?
软件测试是为了保障软件质量,那什么是软件质量呢?
ØISO 8402(1994)定义软件的质量为:反映实体满足明确的和隐含的需求的能力的特征的总和
综合来看:软件质量是产品、组织和体系或过程的一组固有特性,反映它们满足顾客和其它相关方面要求的程度人们通常把影响软件质量的特征称为软件质量属性,用质量模型来描述,并定义为分成模型,最基本的叫做基本质量特性,
不同质量模型主要在分类、属性定义上有所不同,但都包含一些主要的特性,包括:
安全性( Security )
可靠性(Reliability)
性能及效率(Efficiency)
可用性(Usability)
可维护性(Maintainability)
兼容性( Compatibility )等。
九、软件测试的分类
- 按是否允许程序划分
静态测试 动态测试
- 按阶段划分
单元测试,集成测试,系统测试,验收测试
- 按测试用例的设计方法划分
白盒测试 黑盒测试
- 按测试针对的质量目标划分
功能测试,适用性测试,性能测试,安全测试,可靠性测试
- 其他分类方法
如按测试对象划分,资料测试,自动化测试,回归测试
单元测试
定义:对软件中最小可测试单元进行检查和验证
对象:软件基本组成单元,可以是函数,模块,类,组件等
目标:单元模块内部的逻辑结构和功能是否正确,发现程序设计或实现的逻辑错误
策略:开发人员对自己交付的代码块进行的测试(包括静态测试和动态测试)
集成测试
定义:把若干个经过单元测试的组件/模块/单元组装到一起的测试
对象:测试模块之间的接口,如操作系统,文件系统,硬件或系统之间的接口
目标:通过对模块功能,接口设计进行分析,覆盖所有的功能项目,重点的接口,重点的边界进行重点测试,确保被集成部分之间的接口正确无误
策略:可以根据系统结构,功能任务集中,事务处理顺序或其他方面来制定,为了减少在生命周期后期才发现缺陷而产生的风险,集成程度应该逐步增加,而不是将系统一下子集成为巨无霸来测试
系统测试
定义:将已经确认的软件,硬件,外设,网络等元素结合在一起,进行各种组装测试和确认测试
对象:完整的软件系统/产品,测试环境应该尽量和最终的目标和生产环境相一致,从而减少不能发现和环境相关的失效的风险
目标:验证整个系统是否满足预定的功能和非功能需求,找出需求规格不符或与矛盾的地方
策略:基于不同方面的测试,如基于风险评估,需求规格说明,业务过程,use case,系统测试通常由独立测试团队进行
验收测试
定义:由客户,用户,系统的其他利用相关者,进行的确认是否可以接受一些系统的一个验证性测试
对象:系统。系统的某部分或特定的系统非功能特征
目标:通过对系统功能,系统的某部分或特定的系统非功能特征进行测试,来确定系统是否满足客户需求,并且能够进行商用,建立信息。发现缺陷不是验收测试的主要目标
策略:验收测试的内容取决于应用风险,包括彻底的验收测试,简单的验收测试,互操作验收等
白盒测试
定义:根据被测对象的内部结构,设计测试用例的一种测试方法,又称为结构测试
对象:被测程序,组件
目标:按照被测对象内部的结构进行测试,确认是否达到预定要求,如检验程序中的每条通路是否能按预定要求正确工作
策略:主要应用于程序内部测试
白盒测试主要用于单元测试,程序内的代码逻辑数量庞大,无法也没有必要进行穷举,需要采用合适的测试方法进行测试
常用白盒测试方法:
Ø语句覆盖 Ø判定覆盖 Ø条件覆盖 Ø判定条件覆盖 Ø条件组合覆盖 Ø路径覆盖
黑盒测试
黑盒测试:把测试对象看做一个黑盒子,测试人员不需要参考组件或系统的内部结构,依据客户需求和规格说明书,检查程序的功能是它的功能说明,因此黑盒测试又叫功能测试或数据驱动测试
按照被测对象质量属性分类:
Ø功能测试 Ø性能测试 Ø可靠性测试 Ø安全性测试 Ø可服务性测试 Ø兼容性测试
常见测试设计方法:
Ø等价类划分:把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件
Ø边界值分析:对输入或输出的边界值进行测试的一种测试方法
Ø错误推测:基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性的进行测试的方法
Ø判定表:采用表格的形式,列出所有条件和所有结果的组合,做到无遗漏覆盖的测试方法
Ø因果图:采用图的方法对多个输入之间的组合以及输入、输出之间的因果关系进行分析的方法
Ø正交分析:从大量的试验点中选取适量的有代表性的点,应用统计学理论中推导出的正交表,作为测试输入条件
Ø功能图:根据对被测功能的状态迁移图以及逻辑功能图的覆盖进行测试用例设计的方法