软件测试复习重点.docx
《软件测试复习重点.docx》由会员分享,可在线阅读,更多相关《软件测试复习重点.docx(33页珍藏版)》请在冰豆网上搜索。
软件测试复习重点
第1章
1.重要
1.软件测试的正面性观点【验证软件正常工作】
✧软件测试就是为程序能够按预期设想那样运行而建立足够的信心
✧【软件测试是一系列活动已评价一个程序或系统的特性或能力是否达到预期的结果】
✧测试是为了验证软件是否符合用户需求,即验证软件产品是够能正常工作
2.软件测试的反面性观点【测试是为了证明成粗有错误】
测试是为了发现错误而执行的一个程序或者系统的过程
3.IEEE的软件测试定义
使用人工或自动手段来运行或测试某个系统的过程,其目的是在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别
4.什么是“验证
“验证”是检验软件是否已正确地实现了产品规格书所定义的系统功能和特性
5.什么是“有效性确认”
“有效性确认”是确认所开发的软件是否满足用户真正需求的活动
[软件测试是由“验证(Verification)”和“有效性确认(Validation)”活动构成的整体]
6.软件测试和软件开发的关系
2.次重要
1.为什么要进行软件测试
1.软件总存在缺陷
2.软件中存在的缺陷给我们带来的算是是巨大的
3.测试所有工程学科的基本组成单元,自然也是软件开发的重要组成部分。
4.软件人员水平越高,找出问题的时间越早,软件越容易更正,产品发布后越稳定
2.软件测试的其它观点
风险的观点:
软件测试就是对风险的不断评估,引导软件开发的工,进而将最终发布的软件所存在的风险降到最低
经济的观点:
以最小的代价获得最高的软件产品质量
第2章
1.重要
1.ISO8492对质量的定义
质量是产品或服务多满足明示或暗示需求能力的固有特性和特征的集合
2.IEEE对软件质量的定义
软件产品满足规定的和隐含的于需求能力有关的全部特性和特征
3.McCall软件质量模型
4.IEEE(1983)729软件缺陷一个标准的定义
从产品内部看,软件缺陷是软件产品开发或维护过程中所存在的错误、毛病等各种问题;
从外部看,软件缺陷是系统所需要实现的某种功能的失效或违背。
5.软件缺陷的产生原因
1.技术问题(算法语法错误等)2.团队合作(误解)3.软件本省(文档错误,用户适用场合等)
6.软件缺陷构成
规格说明书缺陷最多
7.什么是软件评审及其分类
评审是对软件元素或者项目状态的一种评估手段,以确定其是否与计划的结果保持一致,并使其得到改进。
分类:
管理评审、技术评审、文档评审、流程评审
[软件测试包含技术和文档评审,管理评审和流程评审则属于软件质量保证的组织和过程管理的活动内容]
8.什么是软件质量保证
软件质量保证是通过对软件产品有计划地进行评审和审计来验证软件是否合乎标准的系统工程,通过协调、审查、跟踪以获取有用信息,形成分析结果以指导软件过程。
9.软件测试的分类
2.次重要
1.什么是产品质量
是人们实践产物的属性和行为,是可以认识,可以科学地描述的。
并且可以通过一些方法和人类活动,来改进质量.
质量模型:
McCall模型,Boehm模型,ISO9126模型
2.什么是过程质量
软件能力成熟度模型CMM
国际标准过程模型ISO9000
软件过程改进和能力决断SPICE
3.ISO9126软件内部/外部质量
4.软件缺陷的主要类型/现象
1.功能、特性没有实现或部分实现
2.设计不合理,存在缺陷
3.实际结果和预期结果不一致
4.运行出错,包括运行中断、系统崩溃、界面混乱
5.数据结果不正确、精度不够
6.用户不能接受的其他问题,如存取时间过长、界面不美观
5.SQA与软件测试有什么关系和区别
SQA是管理工作、审查对象是流程、强调以预防为主
测试是技术工作、测试对象是产品、主要是以事后检查
SQA指导测试、监控测试
测试为SQA提供依据
第3章
1.重要
1.什么是静态的和动态的测试
静态测试包括对软件产品的需求和设计规格说明书的评审、对程序代码的复审等
动态测试是通过真正运行程序发现错误,通过观察代码运行过程,来获取系统信息,对系统行为进行验证。
2.什么是自动测试和手工测试
3.什么是黑盒和白盒测试
白盒:
已知程序的内部工作过程黑盒:
完全不考虑程序内部结构和内部特性
4.什么是主动测试和被动测试
主动测试方法:
测试人员主动向被测试对象发送请求、或借助数据、事件驱动被测试对象的行为,从而验证被测试对象的反应或输出结果
被动测试方法:
测试人员不干预产品的运行,而是被动地监控产品在实际环境中运行,通过一定的被动机制来获得系统运行的数据,包括输入、输出数据.
5.什么是形式化方法
形式化方法实际上就是基于数学的方法来描述目标软件系统属性的一种技术
6.什么是基于模型的软件测试
基于模型的测试(Model-basedtesting,MBT)是利用模型来生成相应的测试用例,然后根据实际结果和原先预想的结果的差异来测试系统
先从概念上形成模型,然后试图用数学的方法来描述这个模型,形成仿真模型,完成所需的测试
7.语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖的概念,以及测试用例的设计。
✧语句:
覆盖每个可执行语句
✧判定:
每个判断的取真分支和取假分支至少经历一次,即判断真假值均曾被满足【又称为分支覆盖】
✧条件:
每个判断中每个条件的可能取值至少满足一次。
(不考虑通过的路径)
✧判定条件:
判断条件中的所有条件可能取值至少执行一次,同时,所有判断的可能结果至少执行一次【假如两个判断,每个判断2个条件,则需要2个测试用例,即T1T2T3T4F1F2F3F4】p34
✧条件组合:
每个条件的所有可能至少出现一次,并且每个判断本身的判定结果也至少出现一次。
【需要4个,即T1T2T1F2F1T2F1F2T3T4...,然后覆盖这8个组合,即T1T2T3T4,T1F2T3F4,F1T2F3T4,F1F2F3F4】p35
8.基本路径测试的概念
在程序控制流程的基础上,分析控制构造的环路复杂性,导出基本可执行路径集合,从而设计测试用例。
9.依据代码绘制程序控制流图
10.计算流图的圈复杂度M-N+2
11.确定线性独立路径的基本集合P37
独立路径:
至少引入一系列新的处理语句或条件的任何路径
由基本集导出的测试用例,保证每行代码语句至少被执行一次;基本集合不一定唯一
12.等价类划分法、边界值分析法、判定表方法的概念,以及测试用例的设计
ONE.有效等价类无效等价类
1.格式**位数字含有非数字字符
小于**位。
。
。
。
。
。
2.范围[]()(][)小于0大于
测试用例输入数据覆盖等价类
1*******
2*****
针对Test函数按照基本路径测试方法设计测试用例。
intTest(inti_count,inti_flag)
{
1inti_temp=0;
2while(i_count>0){
3if(0==i_flag){
4i_temp=i_count+100;
break;
}else{
5if(1==i_flag)
{
6i_temp=i_temp+10;
}else{
7i_temp=i_temp+20;
}
}
8i_count--;
}
9returni_temp;
}
先画程序流程图(流程控制图),然后计算环路复杂度,环路复杂度为G,则找出G条基本路径。
TWO.判定表:
条件:
动作:
然后画表格,N个条件2^N列
THREE.边界值分析:
范围:
1》输入条件规定了值得范围,则取刚刚达到这个范围的边界值和刚刚超过边界的值(最大值、比最大值大一、最小值、比最小值小一)
2》规定了值的个数,则用最大个数、比最大个数大一、最小个数、比最小个数小一
3》给出的输入域或者输出域是有序集合(有序表、顺序文件),则应选取集合的第一个和最后一个元素作为测试数据
13.因果图法、正交试验法的概念
因果图法多种输入条件的组合,产生多种结果设计测试用例
正交试验法依据Galois理论,从大量的(实验)数据(测试例)中挑选适量的有代表的点(条件组合),从而合理地安排实验(测试)的一种科学实验设计方法。
L8(2^7)代表8行7列【正交表】
2.次重要
1.通过维恩图考察测试
2.功能图法
功能图由状态迁移图(STD)和逻辑功能模型(LFM)构成
功能图法是综合运用黑盒方法和白盒方法来设计测试用例,即整体上选用白盒方法——路径覆盖、分支和条件覆盖等,而局部上选用的是黑盒方法——决策表或因果图方法
3.错误推测法
基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性地设计测试用例
4.形式化的具体方法
基于模型的方法,如Z语言、B语言等
代数方法,如OBJ、CLEAR、ASL、ACT等
过程代数方法,如CSP、CCS、ACP、LOTOS、TPCCS等
基于逻辑的方法,如区间时序逻辑、Hoare逻辑、模态逻辑、时序逻辑、时序代理模型等。
基于网络的方法
5.形式化验证的一些具体方法
1.有限状态机(FSM)或扩展有限状态机(EFSM)2.SPIN和线性时态语言
3.UML语义转换4.标准RBAC模型5.扩展的RBAC模型和基于粒计算的RBAC模型 6.符号模型检验7.BAN逻辑模型
6.软件测试模型
故障模型安全漏洞模型差性能模型并发故障模型不良习惯模型
代码国际化模型易诱骗代码模型
7.扩展有限状态机方法
EFSM在FSM模型基础上增加了动作和转移的条件,以处理数据流问题,FSM只能处理系统的控制流问题
8.基于风险的测试
基于风险的测试是指评估测试的优先级,先做高优先级的测试,如果时间或精力不够,低优先级的测试可以暂时先不做
9.模糊测试方法
模糊测试(Fuzztesting)方法,简单的说,就是构造大量的随机数据作为系统的输入,从而检验系统在各种数据情况下是否会出现问题
模糊测试方法可模拟黑客对系统发动攻击测试
10.ALAC测试和随机测试方法
ALAC,是Act-like-a-customer(象客户那样做)的简写,ALAC测试方法是一种基于客户使用产品的知识开发出来的测试方法,它的出发点是著名的Pareto80/20规律
第4章
1.重要
1.用V模型诠释软件测试过程
【v模型不同步,W模型同步】
2.W模型
3.TMM【吸收CMM的精华,基于历史演化的测试过程,业界的最佳实践】
组成:
(1)5个别级的一系列测试能力成熟度的定义,每个级别的组成包括到期目标、到期子目标活动、任务和职责等。
(2)一套评价模型,包括一个成熟度问卷、评估程序 和团队选拔培训指南。
2.次重要
1.TMap
TMap(TestManagementApproach,测试管理方法)是一种结构化的、基于风险策略的测试方法体系,目的能更早地发现缺陷,以最小的成本、有效地、彻底地完成测试任务,以减少软件发布后的支持成本。
TMap所定义的测试生命周期由计划和控制、准备、说明、执行和完成等阶段组成【TMap的基石:
与软件开发生命周期一致的测试生命周期L,组织O,基础设施和工具I,技术T】
2.TPI基于连续性表示法的测试过程改进的参考模型,是在软件控制、测试知识以及过往经验的基础上开发出来的
1.4个级别,A最低;
2.度量工具—检查点,发现问题;
3.建议帮助解决问题
3.CTP
关键测试过程(CTP)评估模型主要是一个内容参考模型,一个上下文相关的方法,并能对模型进行裁剪
使用CTP的过程改进,始于对现有测试过程的评估,通过评估以识别过程的强弱,并结合组织的需要提供改进的意见
计划、准备、执行和完善;计划和完善主要是管理工作,准备和执行是实践工作
4.STEP
STEP(系统化测试和评估过程)是一个内容参考模型,认定测试是一个生命周期活动,在明确需求后开始直到系统退役。
STEP与CTP比较类似,而不像TMMI和TPI,并不要求改进需要遵循特定的顺序。
某些情况下,STEP评估模型可以与TPI成熟度模型结合起来使用
5.软件测试标准和规范
对软件测试的流程过程化并对每一个过程元素进行明确的界定,形成完整的规范体系。
【角色的确定进入的准则输入项活动过程输出项验证与确认退出的准则度量】
6.建立软件测试管理和评判体系
第5章
1.重要
1.什么是单元测试【代码完成后,由开发人员完成】
单元测试是对软件基本组成单元进行的测试
2.单元测试的目标和任务概述
目标:
单元模块被正确编码【出题可能是问哪个不是单元测试】
✓信息能否正确地流入和流出单元;
✓在单元工作过程中,其内部数据能否保持其完整性,包括内部数据的形式、内容及相互关系不发生错误,也包括全局变量在单元中的处理和影响。
✓在为限制数据加工而设置的边界处,能否正确工作。
✓单元的运行能否做到满足特定的逻辑覆盖。
✓单元中发生了错误,其中的出错处理措施是否有效。
任务概述:
1.检查每一条独立执行路径的测试,保证每条语句被至少执行一次【算符错,初值错,精度错】
2.检查局部数据结构完整性【无初值或初始化错,不相容,越界,地址异常,从未使用】
3.模块接口是否正确【参数不一致,全程变量不一致,外部输入输出】
4.检查临界数据处理的正确性【合法非合法数据处理,边界值内合法、外不合法边界数据处理】
5.预见、预设的各种出错处理是否正确有效【输出的信息难以理解,记录册无不对,出错前系统已介入】
3.静态测试技术【走查【逻辑错误】、审查【缺陷检查表】、评审】
不运行被测试程序,对代码通过检查、阅读进行分析。
4.什么是驱动程序和桩程序
驱动模块(driver):
对底层或子层模块进行测试所编写的调用这些模块的程序。
桩模块(stub):
对顶层或上层模块进行测试时所编写的替代下层模块的程序。
驱动:
调用底层模块的程序
桩模块:
替代下层模块的程序
JUnit概述
JUnit是一个开源的java测试框架,它是XUnit测试体系架构的一种实现
JUnit是一个开放源代码的Java测试框架,用在编写和运行可重复的的测试上,它是单元测试框架体系xUnit的一个实例,包括如下特性:
用于测试期望结果的断言;用于共享共同测试数据的测试工具;用于方便地组织和运行测试的测试套件
JUnit单元测试框架设计的三个目标:
✓简化测试的编写,这种简化包括测试框架的学习和实际测试单元的编写
✓使测试单元保持持久性
✓可以利用既有的测试来编写相关的测试
JUnit的版本:
JUnit以jar包形式提供
2.次重要
1.单元测试常用工具简介
Junit、Junit+Ant构建自动的单元测试、CheckStyle(源程序是否与代码规范相符)/PMD(检查java源文件中潜在问题)与FindBug(不检查java源文件,查找javabytecode中的潜在bug)的使用、SourceMonitor(检测代码复杂度)
第6章
1.重要
1.什么是集成测试和系统测试
集成测试:
将已分别通过测试的单元按设计要求组合起来再进行的测试,以检查这些单元之间的接口是否存在问题
系统测试:
(经过集成测试之后,各模块间接口存在的问题基本已消除,测试开始进入系统测试)
一般由若干个不同的测试组成,目的是充分运行系统,验证整个系统是否满足非佛那个能行的质量需求
2.集成测试的模式
非渐增式测试模式:
先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序,如大棒模式。
渐增式测试模式:
把下一个要测试的模块同已经测试好的模块结合起来进行测试,测试完以后再把下一个应该测试的模块结合进来测试。
3.自顶向下和自底向上集成方法
自顶向下:
从主控模块(“主程序”)开始,沿着软件的控制层次向下移动,从而逐渐把各个模块结合起来。
在组长过程中,可以使用深度优先策略(先序遍历)和或宽度优先策略(层次遍历)。
【优点:
无需测试驱动程序,早期发现上层模块接口的错误】
【缺点:
需要桩程序,底层模块错误发现较晚,在早期不能充分展开人力】
自底向上:
从“原子”模块(即在软件结构最底层的模块)开始集成以进行测试。
【混合法:
对软件结构中较上层,使用的是“自顶向下”法;对软件结构中较下层,使用“自底向上”法】
4.什么是功能测试
根据产品规格说明书,来检验被测试的系统是否满足各方面功能的使用要求
5.什么是回归测试
回归测试的目的:
所做的修改达到了预定的目的,如错误得到了改正,新功能得到了实现,能够适应新的运行环境等;不影响软件原有功能的正确性。
6.性能测试、压力测试、容量测试、安全性测试、可靠性测试、容错性测试的概念【非功能测试】
✓性能测试通过测试以确定系统运行时的性能表现,如得到运行速度、响应时间、占有系统资源等系统数据。
【重复使用率较高,重点在于前期数据的设计与后期数据的分析】
✓压力测试(Stresstest),也称为强度测试、负载测试。
压力测试是模拟实际应用的软硬件环境及用户使用过程的系统负荷,长时间或超大负荷地运行测试软件,来测试被测系统的性能、可靠性、稳定性等。
[本质破坏]
【并发性能测试(重点):
即逐渐增加并发虚拟用户数负载,直到系统的瓶颈或者不能接受的性能点[ramp-up测试]
疲劳强度测试:
采用系统稳定运行情况下能够支持的最大并发用户数或者日常运行用户数,持续执行一段时间业务[Flat测试]
大数据量测试:
】
✓容量测试目的是通过测试预先分析出反映软件系统应用特征的某项指标的极限值(如最大并发用户数、数据库记录数等),系统在其极限值状态下还能保持主要功能正常运行。
容量测试还将确定测试对象在给定时间内能够持续处理的最大负载或工作量。
✓安全性测试是检查系统对非法侵入的防范能力。
安全测试期间,测试人员假扮非法入侵者,采用各种办法试图突破防线
✓测量软件系统的可靠性,可靠性是产品在规定的条件下和规定的时间内完成规定功能的能力【可靠性的三个要素:
规定的时间(可靠性体现在运行阶段)、规定的环境条件(不同的环境可靠性不同)、规定的功能(任务和功能有关)】
✓容错性测试是检查软件在异常条件下自身是否具有防护性的措施或者某种灾难性恢复的手段。
如当系统出错时,能否在指定时间间隔内修正错误并重新启动系统。
容错性测试包括两个方面:
输入异常数据或进行异常操作,以检验系统的保护性;灾难恢复性测试
7.负载模拟的概念
并发用户+思考时间+每次请求的数据量+负载模式
并发用户:
在同一时间做同一件事情或者同样的操作的用户
思考时间:
浏览器在收到响应后到提交下一个请求之间的间隔时间
负载模式:
就是加载的方式,如是一次建立多个并发连接,还是逐渐增加连接数,还有如随机加载、峰谷交替加载等
8.“flat”测试和ramp-up测试的概念【性能测试的两种负载类型】
“Flat”测试:
对于一次给定的测试,应该取响应时间和吞吐量的平均值。
精确地获得这些值的唯一方法是一次加载所有的用户,然后在预定的时间段内持续运行。
【疲劳强度测试(大数据量测试)】
Ramp-up测试:
用户是交错上升的(每几秒增加一些新用户)。
ramp-up测试不能产生精确和可重现的平均值,这是因为由于用户的增加是每次一部分,系统的负载在不断地变化。
其优点是,可以看出随着系统负载的改变,测量值是如何改变的,据此选择要运行的flat测试的范围【并发性能测试】
2.次重要
1.大棒集成方法【非渐增式测试】
先是对每一个子模块进行测试(单元测试阶段),然后将所有模块一次性的全部集成起来进行集成测试【难确定出错的真正位置,规模较小的应用系统中使用】
2.三明治集成方法【自两头向中间集成】
它将自顶向下和自底向上的集成方法有机地结合起来,不需要写桩程序因为在测试初自底向上集成已经验证了底层模块的正确性。
【缺点是:
在真正集成之前每一个独立的模块没有完全测试过】
改进的三明治,自两头向中间集成,且保证每个模块得到单独的测试,使测试进行得比较彻底。
3.峰谷测试【性能测试】
兼有容量规划ramp-up测试和渗入测试的特征,目标是确定从高负载(例如系统高峰时间的负载)恢复、转为几乎空闲、然后再攀升到高负载、再降低的能力。
4.渗入测试【性能测试】
渗入测试所需时间较长,它使用固定数目的并发用户测试系统的总体健壮性。
这些测试将会通过内存泄漏、增加的垃圾收集(GC)或系统的其他问题,显示因长时间运行而出现的任何性能降低。
建议运行两次测试——一次使用较低的用户负载(要在系统容量之下,以便不会出现执行队列),一次使用较高的负载(以便出现积极的执行队列)。
5.性能规划测试【性能测试】
性能规划类型的测试其目标是找出在特定的环境下,给定应用程序的性能可以达到何种程度。
例如,如果要以5秒或更少的响应时间支持8,000个当前用户,需要多少个服务器?
加载用户以模拟负载状态:
最好的方法是模拟高峰时间用户与服务器通信的状况。
如果用户负载状态是在一段时间内逐步达到的,选择ramp-up测试,每隔几秒增加x个用户;如果所有用户是在一个非常短的时间内同时与系统通信,就应该使用flat测试,将所有的用户同时加载到服务器
确定容量的最好方法:
结合两种负载类型的优点,并运行一系列的测试。
如:
首先使用ramp-up测试确定系统支持的用户范围,该范围内不同的并发用户负载进行一系列的flat测试,更精确地确定系统的容量。
6.基准测试【性能测试】
基准测试的关键是要获得一致的、可再现的结果。
【flat运行是获得基准测试数据的理想模式】
将系统置于相同的高负载下,将请求之间间隔时间设为零。
这样服务器会立即超载,并开始构建执行队列。
如果请求(虚拟用户)数保持一致,基准测试的结果会非常精确flat运行是获得基准测试数据的理想模式
【质量三个纬度:
功能、性能、可靠性】
第7章
1.重要
1.什么是验收测试
验收测试(AcceptanceTest):
在软件产品完成了功能测试和系统测试之后、产品发布之前所进行的软件测试活动它是技术测试的最后一个阶段,也称为交付测试。
2.α测试
α测试是指软件开发公司组织内部人员模拟各类用户行对即将面市软件产品(称为α版本)进行测试,试图发现错误并修正。
3.β测试
β测试是指软件开发公司组织各方面的典型用户在日常工作中实际使用β版本,并要求用户报告异常情况、提出批评意见。
然后软件开发公司再对β版本进行改错和完善。
4.用户界面的7个要素,及其概念
符合标准和规范。
直观性。
一致性。
灵活性。
舒适性。
正确性。
实用性。
5.兼容性测试
软件兼容性测试是指验证软件之间是否正确地交互和共享信息。
向后兼容是指可以使用软件的以前版本。
向前兼容指的是可以使用软件的未来版本。
2.次重要
1.验收测试的过程和主要内容
过程:
✓制定测试计划,测试项,测试策略及验收通过准则,并经过客户参与的计划评审。
✓建立测试环境,设计测试用例,并经过评审。
✓准备测试数据,执行测试用例,记录测试结果。
✓分析测试结果,根据验收通过准则分析测试结果,作出验收是否通过及测试评价。