软件测试基础课程慕课网.docx
- 文档编号:1306473
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:17
- 大小:720.74KB
软件测试基础课程慕课网.docx
《软件测试基础课程慕课网.docx》由会员分享,可在线阅读,更多相关《软件测试基础课程慕课网.docx(17页珍藏版)》请在冰点文库上搜索。
软件测试基础教程——慕课网
课程目标
1.了解软件测试的含义
2.软件测试遵循的准则
3.软件测试有哪些分类?
分别是什么概念
4.何时开始测试?
测试方案如何设计?
5.测试流程是怎样的?
怎么提bug?
怎么写报告?
6.为什么要作自动化?
怎么做?
第一课时:
软件测试概要
一、软件测试的定义
软件测试是使用人工或自动的手段来运行或测量软件系统的过程,以检验软件系统是否满足规定的要求,并找出与预期结果之间的差异。
二、软件测试的测试的对象
需求、概要设计、详细设计、运行环境、可运行程序、源代码。
(软件测试≠程序测试)
三、软测的五大要素及两大目标
五大要素:
质量(最为核心),人员(决定因素),技术(实现手段)【测试技术,方法,测试工具】,资源【测试所需的硬件,网络环境,测试生命周期,测试时间】,流程(测试标准)【测试计划,测试执行,报告】
目标:
提升测试覆盖率及测试效率
四、软件测试所遵循的原则:
1.测试显示缺陷的存在,但不能证明系统不存在缺陷。
2.穷尽测试是不可能的,应设定及时终止的条件。
3.测试应该尽早进行。
4.缺陷具备群集特性。
越是发现问题多的模块,就是我们重点关注的对象。
5.测试的杀虫剂悖论。
在测试当中,我们采用同样的测试用例、同样的测试方法,多次、重复的来测试某一个模块,那最后我们就不能够再发现新的缺陷。
所以我们的测试用例和测试方法应该不定期的评审和修改,并增加不同的测试方法或测试用例来测试软件或系统的不同部分,从而发现更多的缺陷。
6.测试的二八原则。
就是我们应该把80%的时间或资源用在20%的重点模块上,重点测试这款软件中20%的重要模块,来达到我们测试的效率和资源配置最佳的比例。
7.测试活动依赖于测试背景。
第二课时:
软件测试阶段、手段、模式
一、软件测试阶段
软件测试按测试阶段来分类:
单元测试、集成测试、系统测试、验收测试。
(一)单元测试
是各个阶段测试的基础,是对软件中的最小可测试单元进行检查和验证。
单元是人为规定的可测试的最小的模块。
(java面向对象语言来说,最小可测试单元是每一个类)
单元测试是对代码进行测试
测试框架:
junit针对JAVAnunit针对.netphpunit针对PHPCppUnit针对C++
原则:
1.尽可能的保证各个测试用例是互相独立的。
尽量避免使用依赖的方法。
编写一个模拟的方法来取代使用外部依赖。
2.一般由代码的开发人员来实施,用以检验所开发的代码功能符合自己的设计要求。
益处:
1.能尽早发现缺陷。
2.有利于重构。
3.简化集成。
4.文档。
简化文档作用
5.用于设计。
限制:
1.不可能覆盖所有的执行路径,所以不可能保证捕捉到所有路径的错误。
2.每一行代码,一般需要3~5行测试代码才能完成单元测试。
所以存在投入和产出的一个平衡。
(二)集成测试(偏于技术角度验证)
是在单元测试完成的基础上针对已经完成单元测试的那些模块,把他们组成更高一级的模块和子系统,来针对这些子系统进行的集成。
各个最小单元模块之间的接口和子系统的集成。
主要实施方案:
1.BigBang。
也叫一次性集成。
就是把所有的东西组装好,然后再一起进行测试。
2.自顶向下。
是一个递增的组装软件结构的方法。
3.自底向上
4.核心系统集成。
5.高频集成。
高频次的不断地进行集成。
集成测试与单元测试的区别是:
1.测试对象不同
2.测试依据不同单元——主要;集成——概要
3.测试的方法不同集成测试——关注接口之间的集成;单元测试——关注单元的内部
(三)系统测试(偏于业务角度验证)
(一般测试岗位,主要集中在系统测试)
把整个系统组装以后置于真实的运行环境对这个系统进行全面的测试。
主要做功能测试、性能测试、稳定性测试等多种测试。
是将经过集成测试的软件,作为计算机系统的一个部分,与系统中其他部分结合起来,在实际运行环境下对计算机系统进行的一系列严格有效的测试,以发现软件潜在的问题,保证系统的正常运行。
关注点
1.关注系统本身的使用
2.关注系统与其他相关系统间的连通
3.关注系统在不同使用压力下的表现
4.关注系统在真实使用环境下的表现
系统测试&集成测试区别
测试对象
集成测试:
由通过了单元测试的各个模块所集成起来的构件
系统测试:
除了软件之外,还包括计算机硬件及相关的外围设备、数据采集和传输机构、支持软件、系统操作人员等整个系统
测试时间
集成测试介于单元测试和系统测试之间测试
系统测试在集成测试之后
测试内容
集成测试:
各个单元模块之间的接口
系统测试:
整个系统的功能和性能
测试角度
集成测试:
偏于技术角度的验证
系统测试:
偏于业务角度的验证
(四)验收测试
从用户的角度对系统软件的认可验收。
也称交互测试。
针对用户需求、业务流程的正式的测试,确定系统是否满足验收标准,由用户、客户或其他授权结构决定是否接受系统。
定义:
交付测试。
针对用户需求、业务流程的正式的测试、确定是否满足验收标准,由用户、客户或者其他授权机构决定是否接受系统。
验收测试细分可分为
用户验收测试:
开发交付之前
运行验收测试:
运维的层面
合同和规范验收测试:
参照约定的规范验收,还有法律法规
alpha测试:
在开发环境中,由用户进行测试
Beta测试:
脱离开发环境由用户提供的环境下进行测试
二、软件测试手段
软件测试的分类:
按可见度:
黑盒白盒
按状态:
静态、动态
按测试执行方式:
手工、自动化
(一)黑盒测试
在完全不考虑程序内部结构和特性的情况下,通过暴露出来的接口对程序进行测试程序是否能正常接收输入,正确输出,一般针对界面或可见功能
用户视角,通过结果判断
优:
1.容易实施,不需要关注内部实现,操作简单
2.更贴近用户视角,测试场景与正式场景更接近
缺:
1.覆盖率较近,只能覆盖代码量的不足40%(不了解内部实现不知道内部分支)
2.针对黑盒的自动化测试,复用率较低,维护成本较高黑盒针对功能进行测试,变动较大,用例使用率较低
主要测试的地方(关注点):
1.功能是否正确或遗漏
2.接口上输入、输出是否正确
3.数据结构或外部信息是否有访问错误
4.性能是否满足系统测试阶段主要使用黑盒测试其它各个阶段也会用到
黑盒测试的主要设计方法
1.等价类划分法:
针对程序有很多输入条件,把所有的输入把等价的归为一类,形成若干等价的代表形输入,通过典型数据进行测试用例的设计。
2.边界值分析法:
特殊的等价类划分,更关注各种边界条件,开发时容易出现失误的地方需要重点关注
3.错误推测法:
基于经验或直觉,判断出程序中容易失误的地方,从而制作测试用例例如:
特殊字符、文件不存在,或文件超大等
4.因果图法:
拿到程序的需求规格说明书,针对输入输出在因果图中看作原因和结果根据规划说明生成判断表
5.正交试验分析法:
主要用于筛选输入数据
6.状态迁移图法:
通过处理功能点的状态迁移关系,例如审批流程中的状态变化
7.流程分析法:
通过梳理逻辑程序的路径
(二)白盒测试
黑盒:
内部不可见
白盒:
逻辑结构对测试人员是透明的,又叫结构化测试或透明盒,通过对逻辑结构来设计测试用例。
用逻辑的覆盖率来测试逻辑的完整性。
逻辑的单位:
语句、条件、条件组合、分支、路径
语句覆盖:
保证每条语句至少被执行一次
判定:
条件覆盖:
覆盖表达式
分支是路径的一部分
优:
1.迫使测试人员去仔细思考软件的实现,理解原理
2.可以检测代码中的每条分支和路径
3.揭示隐藏在代码中的错误
4.对代码的测试比较彻底
缺:
1.昂贵(较高的覆盖率,工作量大)
2.无法检测代码中遗漏的路径和数据敏感性错误
3.针对代码不是针对需求,不能正确验证需求实现是否正确
白盒测试的方法:
1.代码检测法:
对代码进行检测
2.静态结构分析法:
通过测试工具分析系统结构数据结构、内部控制逻辑来制定测试用例
3.静态质量度量法:
iso标准制作度量模型
4.逻辑覆盖法:
6种主要覆盖测试方法:
语句条件条件组合分支路径条件vs判定覆盖
5.基本路径测试法:
白盒中主要的一种测试方法在程序控制流图的基础上,通过分析控制构造复杂度导出基本可执行的路径的集合进而制作测试用例的方法
6.控制流图:
描述控制流
灰盒:
介于黑、白盒测试之间的,关注输入、输出的正确性、同时也关注内部表现
结合了黑、白的测试要素,主要用于组件的测试
(三)静态测试
静态测试:
无须执行被测程序,通过评审软件文档或代码,度量复杂度,检查软件是否符合编程标准以发现程序的不足之处,减少错误出现的概率
可以通过人工,也可以通过自动化工具
方式:
互审-走查(小组)-会议(记录正式),不正式到正式的集体活动
(四)动态测试
动态测试:
通过运行被测程序,检查运行结果与预期结果的差异,并分析运行效率、正确性和健壮性等
黑盒:
主要是动态测试方法
白盒:
代码检查法和静态代码分析法就是典型的静态方法
(五)手工测试
手工测试:
由专门的测试人员从用户视角来验证软件是否满足设计要求的行为。
更适用针对深度的测试和强调主观判断的测试
手工测试方法:
众包测试、探索式测试
优:
1.易发现缺陷2.容易实施3.更具有创造性、灵性性
缺:
1.覆盖量化难2.重复测试效率低3.不一致性、可靠性低(前后不一致)4.人力资源依赖
(六)自动化测试
自动化:
使用单独的测试工具软件控制测试的自动化执行以及对预期和结果进行自动检查
自动化测试方法:
单元测试、接口测试、性能测试等
优:
1.高效率、速度快2.高复用性3.覆盖率容易度量4.准确、可靠5.不知疲劳
缺:
1.机械、发现缺陷率低,不具备创造性不灵活
2.一次性投入较大(从实施自动化测试之初、从测试工具的选型、框架的设计到自动化测试脚本的编写、维护都需要投入较大的精力和资源)
手工和自动化各有适用场景
三、软件测试模式
瀑布模型、敏捷测试、基于脚本的测试、基于风险的测试、探索式测试等。
(一)瀑布模型
瀑布模型:
项目计划、需求分析、软件设计、程序开发、软件测试、集成维护
项目计划:
制定总体的研发计划,确定主要的里程碑节点-输出项目计划书)
需求分析:
明确用户需求定义,并对定义进行清晰描述,充分理解需求,描述产品功能-输出产品需求规格说明)
软件设计:
根据需求定义,设计产品的实现方案,包括定义软件硬件的结构、组件、实现方法、接口、界面、数据-输出概要设计、详细设计
程序开发:
根据概要和详细设计具体实现,根据编程规范构建各类组件模块,输出产品版本。
软件测试:
通过独立的测试小组评估产品是否满足需求定义-输出测试报告
集成维护:
交付用户,根据用户使用情况进行维护及升级
优点:
1.强调需求、设计的作用;2.前一阶段完成后,只需关注后续阶段;
3.为项目提供了按阶段划分的检查点,里程碑清晰;4.文档规范
缺点:
1.难以适应需求的频繁变;2.项目周期后段才能看到成果,增加了风险
3.强制的里程碑、完成时间点,适应能力差;4.文档工作量大
(二)V模型(最广泛)
是瀑布模型的变种明确表明测试过程的不同级别,阶段:
单元测试-集成测试-系统测试-验收测试,并且描述了各个阶段与开发过程各个阶段的对应关系。
优点:
强调软件开发的协作和速度,反应测试活动和分析设计的关系,软件的实现和验证有机结合
缺点:
仅把关系明确对应,忽略了对需求分析的验证,对需求和功能的测试到验收测试才能发现;没有很好的体现测试的及时性
(三)W模型(双V模型)
开发与测试并行,可以尽早发现问题
优点:
1.增加了开发各个阶段的验证,测试的对象不再是对象,对需求和分析都有测试过程2.有利于及于发现项目的风险,线性的相互关系
缺点:
不能很好的支持像迭帯这样的模式
(四)X模型
解决交接和频繁集成周期的问题
(五)H模型
把测试当成一个完全独立的流程,便于尽早的完成测试,与其他流程并发进行,可以是任何流程(比如设计流程,并发流程,甚至是测试流程),可交叉。
四、软件测试模式——敏捷测试
(一)敏捷测试
定义:
AgileTesting----遵循敏捷宣言的一种测试实践
敏捷宣言:
个体与交互重于过程和工具
可用的软件重于完备的文档
客户协作重于合同谈判
响应变化重于遵循计划
敏捷测试:
1.强调从客户角度测试
2.重点关注迭代测试新功能,不在强调测试阶段
3.尽早测试,不间断测试,具备条件即测试
4.强调持续反馈
5.预防缺陷重于发现缺陷
敏捷测试VS传统测试:
传统测试
敏捷测试
测试是质量的最后保护者
开发和测试人员紧密合作,大家都有责任对软件负责
严格的变更管理
变更可以接受
预先的计划和细节准备
计划随着进展时常调整
重量级文档
只需要必要的文档
各阶段测试严格的入口和出口标准
各迭代之间没有明显入口和出口标准
更多在回归测试时进行重量级自动化测试
所有阶段都要自动测试,每个人都需要做,是项目集成一部分
严格依赖测试流程
流程不再需要严格执行
测试与开发团队相对独立
团队合作是无缝隙合作
(二)基于脚本的测试SBT
基于脚本的测试
Script(测试用例)-basedtesting
Scripted(测试脚本)testingST
先设计测试,再执行测试。
(三)探索式测试ET
ET探索式测试:
exploratorytesting
完全抛开测试脚本的测试
探索式测试分为局部探索式测试和全局探索测试
局部探索式测试五大模块
1.输入:
接受输入、产生输出、存储数据、进行运算(主要是这四种任务)测试时是从输入顺序,输出内容输出异常几个角度来考虑测试的要点
2.状态:
可分为临时状态和永久状态运行有效、阶段是有效,这种是临时状态、数据库保存、文件保存,相对来说是永久状态。
协助我们更叫有效的判断测试输入测试输出
3.代码路径:
多指代对码的覆盖(例如白盒测试覆盖的方法)
4.用户数据:
构造真实的用户数据
5.执行环境:
软件运行的操作系统系统组网的网络拓扑与系统交互的第三方系统系统的配置数据运行系统的硬件设备对测试的影响(局部测试所要考虑的要点)
全局探索式测试(漫游测试法)
1.商业区:
软件从启动到关闭,这期间主要可能使用到的功能;
2.旅馆区:
主要指软件在休息运行的功能(后台的进程,或者是定时的任务);
3.历史区:
以前测试中发现较多问题的功能;
4.旅游区:
新手使用的功能(新手指引);
5.娱乐区:
系统主要功能之外的辅助功能
6.破旧区:
系统已经废弃的或者看不到的
探索式测试流程
1.了解测试任务的重点、主要的测试方向,系统的环境,做到有个总体的思路
2.了解系统的业务逻辑,具体功能,深入学习被测系统
3.探索式测试的实施阶段,完成主要功能点的测试验收,覆盖测试
4.在上一步的基础上,发散式探索式测试,挖掘一些深层次的问题
5.对前面的测试工作的总结,整理过程的测试信息
6.缺陷大扫除
优缺点:
探索式测试的优点
探索式测试的缺点
1.更能激发测试人员的创造性和工作乐趣
1.测试管理上有局限性,较难协调和控制
2.增加了发现新的或较深入Bug的可能性
2.对于Bug的重现伤作用有限
3.在较短的时间内找到更多Bug以及对SUI(被测系统)做一个快速的评估
3.对测试人员的测试技能和业务只是深度依赖较大
4.有利于更加有效的实施自动化
4.只有在SUT已完全可用的前提下才更有作用
5.更加适用于敏捷项目
5.ET的生产率很难定义
6.减少了再简单、繁复上用例的无为编写时间
6.ET本身较难进行自动化
ST【基于脚本的测试】和ET【探索性测试】互补
实际项目实施情况:
purescripted完全参照测试用例执行,测试用例十分详细
vaguescripted写测试用例,对预期结果,执行步骤的描述简单
fragmentarytestcases不再编写测试用例,只是写一些测试点
charters详细的任务列表,写出测试对象,测试策略,可能风险,参考文档
roles给测试人员一个角色,测试人员从角色出发测试产品
freestyleET完全自由,无文档,不记录要点
STvsET
(四)基于风险的测试RBT
Risk-baseTesting:
一种基于对软件失效的风险评估并以此指导测试计划、设计、执行、结果评价的软件测试类型
风险包括:
质量风险、管理风险
风险级别=风险可能性*风险严重度
识别风险:
可能性、复杂性、时间压力、高变更率、技能水平、地理分散度
严重程度:
使用频率、失效可视性、商业损失、组织负面影响和损害、社会损失和法律责任
(五)基于模型的测试MBT
它的测试用例是从一个模型中导出所得,这个模型描述了被测系统的某些方面,通常是功能部分。
模型:
对需求功能建模
第三课时:
软件测试类型
软件测试按测试类型:
功能测试、性能测试、兼容性测试、部署测试、易用性测试、文档测试、本地化测试、安全测试、无障碍测试、可靠性测试
一、功能测试
根据产品特性、操作描述和用户方案,测试一个产品的特性和可操作行为以确定它们满足设计需求。
针对的问题:
功能错误或遗漏、界面问题、性能错误、数据及访问错误、初始化及终止错误。
功能测试工具:
商用:
QTP(web应用)、winrunner(桌面软件)、silkTest、Rationalrobot
开源:
selenium、Watir(基于ruby语言,针对web应用)、Sikuli(屏幕截图)
二、性能测试
性能测试分类
负载测试:
在测试过程中,逐步的增加负载,来观察系统的表现,最终确定出系统在正常的指标范围下的最大负载。
压力测试:
测试系统在极限情况下的压力情况,最终系统是什么样的压力环境下会导致失效,不能正常运行,确定出我们这个系统所能承受的最大极限。
稳定性测试:
一般是以稍大于正常业务量的负载进行持续的、长时间的测试,比如:
24*5,连续5天的对这个系统进行24小时的施加压力,以确定系统在较长时间的运行情况下,我们这个系统地稳定性情况。
性能指标
并发用户数VU,同时访问系统的用户数量;
每秒事务数TPS,每秒系统处理业务的数量;
系统响应时间;
设备性能,CPU等
性能测试工具
LoadRunner,Silkperformer,Jmeter(java开源的有效的测试工具),WebLoad,ApacheBench,LoadUI(专门针对接口的性能测试)
静态性能评估
开发web应用时,基于一系列web应用性能优化的最佳实践对web应用的页面进行静态分析,并给出评估结果的性能分析方法
评估的标准/工具(YSlow,PageSpeed)
应用性能管理APM
提供对系统的实时监控以实现性能管理,故障管理的解决方案
三、安全测试
安全测试:
对软件产品进行测试以确保其符合产品安全需求和质量标准
渗透测试:
通过对软件系统的恶意攻击行为来评估系统安全性的一种测试
区别:
渗透测试:
尝试去攻破软件的防御机制
安全测试:
建立全方位攻击防御机制
OWasp:
openwebapplicationsecurityproject开放的WED应用安全项目
安全测试最关注:
A.OWASPtoptenproject
1.Injection注入脚本漏洞使用户访问到不该访问的数据的目的
2.BrokenAuthenticationandSessionManagement失效的身份认证和会话管理会话劫持漏洞
3.Cross—SiteScripting(XSS)跨站脚本
4.InsecureDirectObjectReferences不安全的对象直接引用参数的保护
5.SecurityMisconfiguration安全配置类错误
6.SensitiveDataExposure敏感信息泄露信息传递没有对关键信息进行加密
7.MissingFunctionLevelAccessControl功能级别访问控制缺失,比如访问网站可以访问到用户没有权限到达的地方
8.Cross-SiteFunctionLevelAccessControl(CSRF)跨站请求伪造
9.UsingComponentswithKnownVulnerabilities使用了已知有漏洞的组件
10.UnvalidatedRedirectsadnForwards未被验证的重定向和转发(钓鱼网站)
B.测试指南testingproject
安全测试工具:
appscan(针对web),webinspect(web)nessus(服务器)nmap(端口)metasploit(攻击框架,有大量插件,渗透测试)webscarab(代理坚持,攻击路径)fortify(白盒,源代码静态测试)W3AF(web)
四、兼容性测试
(1)软件本身的兼容性:
主要是软件的向后兼容,如软件升级,以前版本的功能也能使用
(2)不同平台下的兼容性:
如在Linux系统下的ubuntu、openSUSE等,进行平台的兼容性测试
(3)对不同的设备的兼容性:
如32位、64位、如小型机、PC等
(4)软件的互操作性:
如和一些主流应用的兼容,也就是说和大众软件互通,比如和微信、微博、QQ能适用,有时是很多网站的登录
(5)浏览器兼容性:
浏览器内核不同,显示差异
浏览器兼容性测试工具:
BROWSERShots(基于真实浏览器截图比对)
BroserSandbox(通过不同的插件来实现浏览器模拟测试)
Google浏览器兼容性插件(通过代码检验)
五、文档测试
文档测试:
针对软件产品的交付品,配套的文档类部件的测试。
如用户手册,使用说明、用户帮助文档等。
文档测试关注要点:
完整性、正确性、一致性、易理解性、易浏览性
六、可靠性测试
软件的可靠性和硬件的可靠性
七、易用性测试
测试用户软件时是否感觉方便,是否能保证用户体验的测试类型
八、本地化测试
针对软件的本地化版本实施的针对性测试
本地化主要测试内容:
1.语言,书写习惯
2.时区。
日期格式、货币
3.当地风俗、法律法规
4.政治敏感内容
九、部署测试
也称安装测试,主要验证系统部署过程,并确保软件经过安装测试后可以正常使用
部署测试的主要测试内容:
1.在不同环境下的部署验证
2.参照部署文档执行,过程的合理、正确性
3.基础数据
十、无障碍性测试
也称可访问性测试,指软件需要提供便于特殊人群使用的功能,包括视障、听障、老年人、身体残疾用户等,无障碍测试则是针对这部分功能的测试。
第四课时:
其他软件测试类型
其他的一些测试类型概念:
回归测试、冒烟测试、Monkey测试、AB测试
一、回归测试
软件功能修改后,对软件进行重新测试已确认修改没有引入新的错误或导致其他部分产生错误。
回归测试的中心在关键模块和重点功能组件。
软件研发周期中会进行多次回归测试,最适合实现自动化测试。
二、Monkey测试
也称搞怪测试。
就是用一些随机、稀奇古怪的方式来操作软件,以测试系统的健壮性和稳定性。
三、冒烟测试
来自于硬件板卡验证术语
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 测试 基础 课程 慕课网