课程目标
掌握软件测试相关的概念
掌握软件生命周期及个阶段相关的工作
掌握软件测试的对象和原则
了解软件开发模型
掌握软件测试模型及各模型的特点
掌握软件测试的方法和类型
了解软件测试质量以及测试与QA的关系、区别
一、测试相关概念
IT (Information Technology),即信息科技和产业的意思,
称呼: IT男/IT女 码农 搬钻
软件:按照一系特列定顺序组织的计算机数据和指令的集合 程序+数据+文件
产品:能够供给市场,被人们使用和消费,并能满足人们某种需求的任何东西,包括有形的物品、无形的服务、组织、观念或它们的组合。
项目:指一系列独特的、复杂的并相互并联的活动,这些活动有着一个明确的目标或目的,必须特定的时间、预算、资源限定内,依据规范完成。
什么是软件测试
软件测试并不神秘,快速入门并不难
性能测试
性能测试
1983,IEEE提出的软件工程标准术语,软件测试定义如下:“使用人工和自动手段来运行或测试某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果之间的差别”。
Myers:测试是为了发现错误而执行的一个程序或系统过程——《软件测试艺术》
Hezel:测试是以评价一个程序或系统属性为目标的一种活动是对软件质量的度量——《软件测试完全指南》
为什么做软件测试
一个糟糕的测试程序可能导致任务的失败
影响操作的性能和可靠性,导致维护阶段的成本提高
一个好的测试程序可以降低项目的主要成本
一个好色测试程序可以极大地帮助你定义需求和设计
一个好色测试可以迫使你在工作时必须面对和处理问题,使得修改缺陷 成本降低
一个好的测试不能弥补一个糟糕的软件项目,但是的确有助于发现很多问题,并且至少使得你今早知道你处在问题当中
测试作用:
1、尽早介入发现缺陷,减少返工、减低开发维护成本
2、持续改进过程、帮助定义需求和设计
3、提高客户满意度、扩大市场份额
4、对产品质量完成全面评估,为产品发布、部署、鉴定和决策者提供信息、
5、预防缺陷,通过缺陷分析和原因总结,规避后续同类缺陷的产生再犯
软件测试任职要求
硬实力:
学历、专业、经验、测试技术、开发技能、业务知识
软实力:
责任心、沟通能力、团队合作精神、耐心、细心、信心、风险防范意识、持续学习能力
二、软件生命周期
是测试工作的源头
软件的生命周期:
调研——需求——设计——开发(编码)——测试——上线(发布)——运维——下线
测试对象:文档+数据+程序
三、项目组成员
产品经理:从各种渠道收集产品需求,建立产品
项目经理:团队每个成员的工作分配,管理为主。会制动整体的开发计划
开发团队:设计 编写代码工作
测试团队:测试需求 制定测试用例
配置人员:版本的部署、发布工作
四、测试基本原则
1、测试时上下文相关的 (不同类型、目标、用户,测试点是不同的)
2、穷尽测试时不可能的 (所有的输入情况都做到,是不可能的)
3、测试尽早介入 (越早介入 发现缺陷的话,维护成本就越低)
4、杀虫剂悖论 (测试依赖于测试用例,每个版本使用相同的用例,其它隐藏的BUG,可能就发现不了了。需要优化用例)
5、缺陷群集性 (如果一个模块总是发现问题的话,可能还会存在其它的bug)
6、测试证明存在缺陷 (测试是为了证明系统存在bug,而不是为了证明系统不存在bug)
7、无措谬误 (不要说一个软件不存在bug了)
软件测试的对象
程序+数据+文档
五、软件开发模型
意思是:每一个环节的工作,都建立在上一环节的完成的基础上。
对每个环节完成的输出文档质量要求比较高
如果后期发现问题,维护成本比较高
相对于瀑布模型做了优化,需求分析阶段,要出一个输出物原型图设计。跟客户确定没问题之后,在开展后续工作
对输出文档要求不高,一旦有人员变动得时候,就增加了后期的维护成本
前两种更关注与流程
迭代:先把主要的一些功能开发 发布上线,根据后期客户反馈,再优化更新
特色:再进行2-6周迭代任务的时候,每日都有站立会。汇报工作进度、遇到的问题、今天计划完成的任务。
测试人员不是按照部门来分的,是按照产品线来分的。测试和开发是合并在一起的
六、软件测试模型
左边是整个软件开发工程的工作阶段,右边是测试的工作阶段
单元测试:通常都是由开发自己本身完成的。验证编码
集成测试:依赖于详细设计文档 接口的链条 例如:支付宝付款与银行
系统测试:依赖于需求文档。把我们被测得软件作为系统中的一个元素,在不同的系统中的兼容性等
验收测试:最终使用系统得人,会进行验收测试。
前三个环节,主要是对于输出物文档进行测试
W模型是在实际工作当中,用的是最多的一种
七、软件测试阶段
需求测试
返工:70%~85%由于需求
重点:检查需求规格说明书 srs
1)完成性
2)正确性
3)一致性
4)可行性:在需求规格提到的功能,是不是可实现的
5)无二义性:不同的人看到文档理解的意思要保持一致
6)健壮性
7)可测试性:实现与否 要说清楚
9)可修改性
单元测试
单元:函数、类
单元测试是针对软件基本组成单元(软件设计最小单位)来进行正确性检验的测试工作
集成测试
集成测试是对单元之间及单元与第三方接口之间的测试,目的是验证接口是否与设计相符,是否与需求相符。(即检测软件模块对《概要设计说明书》的符合程度)
集成策略:自底向上(需要开发个驱动模块)或自顶向下(需要开发桩) 渐增式
系统测试
系统测试是将已经集成好的软件系统,作为整个基于计算机系统的一个元素,与计算机硬件、外设、某些支持软件、数据和人员等其他系统元素结合在一起,在实际运行(使用)环境下对计算机系统进行一些列的测试工作
系统测试的目的在于通过与《需求规格说明书》作比较,发现软件与系统需求定义不符合或矛盾的地方
确认测试
又称有效性测试,它的任务是验证软件的有效性,即验证软件的功能和性能及气他特性是否与用户要求一致。 若能达到这一要求,则表明开发的软件是合格的。
UAT测试
User Acceptace Test 用户接受度测试
验证系统的可用性
回归测试
回归测试(Regression Testing):软件在测试或其他活动中发现的缺陷经过修改后进行的测试。 目的是验证缺陷得到了正确的修复,同时对系统的变更没有影响以前的功能
回归测试策略(1)
完全重复测试:
重新执行所有在前期测试阶段建立的测试用例,来确认问题修改的正确性和修改的扩散局部影响性
选择性重复测试:
既有选择地重新执行部分在前期测试阶段建立的测试用例,来测试被修改的程序
八、软件测试类型
功能测试
概念:功能测试是根据产品的需求规格说明书和测试需求列表,验证参评的功能实现是否符合产品的需求规格
目标:功能测试主要是为了发现以下几类错误:
性能测试
性能测试(Performance Testin)就是用来测试软件在集成系统中的运行性能的
性能测试的目标是度量系统相对于预定义目标的差距
性能测试必须要有工具支持,市面上有一些专门用于GUI或Web的性能测试工具,如Loadrunner、Jmeter、Silkperformer
性能测试收集信息
CPU使用情况
IO使用情况
内存使用情况
信道使用情况
每个模块执行时间百分比
指令随时间的跟踪路径
负载测试
负载测试是超过被测对象标准性能符合指标下,验证系统的负载承受能力。并要求超负荷秦光霞,依然正常实现业务功能。
负载测试是通过不断对被测对象施加负荷,观察被测对象在不同负荷下的性能表现。
压力测试:
压力测试(Stress Testing)的目的是调查系统在其资源超负荷的情况下的表现,尤其感兴趣的是这些对系统处理时间有什么影响。这类测试在一种需要反常数量、频率或资源的方式下执行系统。
容量测试
容量测试(Volume Testing)的目的是是系统承受超额的数据容量来发现它是否能够正确处理
容量测试是面向数据的,并且它的目的是显示系统可以处理目标内确定的数据容量
安全性测试
GUI(用户界面测试)
GUI测试主要包括两方面的内容:
界面实现与界面设计的吻合程度;确认界面处理的正确性
可用性测试
一些测试人员应当关注的可用性问题
过分复杂的功能或者指令;
困难的安装过程;
错误信息不准确或者过于简单;
用户被迫去记住太多的信息
语法、格式和定义不一致
安装卸载测试
定义:
系统的可安装性测试,主要是根据软件的测试特性列表、软件安装、配置文档,设计安装过程的测试用例,发现软件在安装过程中的错误