考点综合:
第一章:
1.软件测试:使用人工或自动手段来运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别”。
软件测试的根本目的是:以尽可能少的时间和人力发现并改正软件中潜在的各种故障和缺陷,提高软件的质量。一个好的测试用例在于发现至今尚未被发现的故障
2.软件测试与软件开发的关系:软件测试贯穿于软件开发的整个生命周期。
3.软件测试过程:(1)单元测试:检测程序模块中有无故障存在;(2)集成测试:在单元测试的基础上将各个模块组装起来,发现与接口有关的模块之间的问题;(3)确认测试:对照需求规格说明书,对软件产品进行评估确定其是否满足软件需求过程。(4)系统测试:针对系统中的各个组成部分(软件,硬件,相关外围设备,数据采集机构以及操作人员)等进行综合的测试;(6)验收测试:将最终产品与最终用户的当前需求进行比较的过程,是软件开发结束后软件产品向用户交付之前的最后一项质量检验活动。
4.测试在软件开发各阶段的作用:
(1)项目规划阶段:负责整个测试阶段的监控;(2)需求分析阶段:确定测试需求分析,制定系统测试计划;(3)概要设计与详细设计阶段:制定集成测试计划和单元测试计划;(4)程序编写阶段:开发相应的测试代码或测试脚本;(5)测试阶段:实施测试,并提交相应的测试报告。
5.V模型和W模型的主要区别:V模型特点:非常明确地表明了测试的不同级别,清晰地展示了软件测试与开发之间的关系,W模型形象地说明了软件测试与开发的并行关系,体现了测试贯穿于整个开发过程的思想。
6.测试环境 = 硬件+软件+网络+数据准备+测试工具
7.系统测试和验收测试有何不同:系统测试目的:针对系统中各个组成部分(含软件、硬件、相关的外围设备、数据及采集和传输机构、操作人员等)进行的综合性检验,证明系统的性能。验收测试目的:向用户表明所开发的软件系统能够像用户所预定的那样工作。
第二章
黑盒测试也称功能测试或基于规格说明的测试。只关心软件的输入数据和输出结果。黑盒测试是从用户观点出发的测试,其目的是尽可能发现软件的外部行为错误。确定软件所实现的功能是否按照软件规格说明书的预期要求正常工作。
等价类:程序输入域划分为若干个互不相交的子集,称为等价类,然后从每个等价类中选取少数具有代表性的数据作为测试用例,进行测试。等价类是指输入域的某个互不相交的子集合,所有等价类的并便是整个输入域。
有效等价类:可以检验程序是否实现了规格说明预先规定的功能和性能。
无效等价类:可以检查软件功能和性能的实现是否有不符合规格说明要求的地方。
常用的等价类划分的原则:
(1) 按区间划分:如果规格说明规定了输入条件的取值范围或值的数量,则可以确定一个有效等价类和两个无效等价类。
(2) 按数值划分:如果规格说明规定了一组输入数据,而且程序要对每一个输入值分别进行处理,则可以为每一个输入值确定一个有效等价类,针对这组值确定一个无效等价类(所有不允许输入值的集合)。
(3) 按数值集合划分:如果规格说明规定了输入值的集合,则可确定一个有效等价类和一个无效等价类(该集合的有效值之外)。
(4) 按限制条件或规则划分:如果规格说明规定了输入数据必须遵守的规则或限制条件,则可以确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。
(5) 细分等价类:等价类中的各个元素在程序中的处理若不相同,则可将此等价类进一步划分成更小的等价类。
设计一个新的测试用例,尽可能多地覆盖尚未被覆盖的有效等价类,重复这一步,直到测试用例覆盖了所有的有效等价类。
设计一个新的测试用例,使其覆盖并且只覆盖一个还没有被覆盖的无效等价类。
测试用例设计
边界值分析法是一种很实用的黑盒测试用例方法,它具有很强的发现故障的能力。
在等价类划分基础上进行边界值分析测试的基本思想是:选取正好等于、刚刚大于或刚刚小于等价类边界的值作为测试数据,而不是选取等价类中的典型值或任意值做为测试数据。
对于一个n变量的程序,边界值分析测试会产生4n+1个测试用例。
对于一个n变量的程序,健壮性边界值测试将产生6n+1个测试用例.
健壮性测试最有意义的部分不是输入,而是预期的输出,观察例外情况如何处理。
在所有的黑盒测试方法中,基于决策表的测试是最严格、最具有逻辑性的测试方法。
决策表是把作为条件的所有输入的各种组合值以及对应输出值都罗列出来而形成的表格。
决策表通常由条件桩、条件项、动作桩和动作项4部分组成。
动作项和条件项紧密相关,指出在条件项的各组取值情况下应采取的动作。
对于n个条件的决策表,相应有个规则(每个条件分别取真、假值),当n较大时,决策表很繁琐。
用例场景用来描述流经用例的路径,从用例开始到结束遍历这条路径上所有基本流和备选流。
测试方法研究的目的就是在开发测试用例工作量和测试执行工作量之间做一个令人满意的折中。
物理量、变量是独立的,采用边界值分析测试和等价类测试。(结合)
如果变量不是独立的,可采用决策表测试。
黑盒测试工具:功能测试工具(主要用于检测被测程序能否达到预期的功能要求并能正常运行。
)性能测试工具:(主要用于确定软件和系统性能。)
主流的黑盒功能测试工具:Mercury Interactive公司的WinRunner
第三章:
白盒测试又称为结构测试、逻辑驱动测试或基于程序的测试。
黑盒测试也称功能测试或基于规格说明的测试。
一:控制流测试
(1)逻辑覆盖法
白盒测试的动态测试要根据程序的控制结构设计测试用例
保证一个模块中的所有独立路径至少被使用一次;
对所有逻辑值均需测试true和false;
在上下边界及可操作范围内运行所有循环;
检查内部数据结构以确保其有效性。
①语句覆盖:每一个可执行语句至少执行一次,主要缺点:对一些控制结构很迟钝,语句覆盖对逻辑运算符(||, &&)反映是迟钝的;
②判定覆盖:设计足够的测试用例,使得程序中的每个判定至少都获得一次“真值”或“假值”,或者说使得程序中的每一个取“真”分支和取“假”分支至少经历一次。因此又称为“分支覆盖”。
③条件覆盖:构造一组测试用例,使得每一判定语句中每个逻辑条件的可能值至少满足一次。完全的条件覆盖并不能保证完全的判定覆盖。完全的判定覆盖也不能保证完全的条件覆盖。
④条件判定组合覆盖:设计足够的测试用例,使得判定中每个条件的所有可能(真/假)至少出现一次,并且每个判定本身的判定结果(真/假)也至少出现一次。
⑤多条件覆盖:设计足够的测试用例,使得每个判定中条件的各种可能组合都至少出现一次。显然满足多条件覆盖的测试用例是一定满足判定覆盖、条件覆盖和条件判定组合覆盖的。
⑥修正条件判定覆盖(MCDC):程序的判定被分解为通过逻辑操作符(and, or, etc.)连接的bool条件,每个条件对于判定的结果值是独立的。
(2)基本路径测试法
n 基本路径测试法:在程序控制流图的基础上,通过分析控制流图的环路复杂性,导出基本可执行路径的集合,然后据此设计测试用例。设计出的测试用例要保证在测试中程序的每一条可执行语句至少执行一次。
n 控制流图是描述程序控制流的一种图示方式。
n 结点:假设在流程图中用菱形框表示的判定条件内没有复合条件,而一组顺序处理框可以映射为一个单一结点
n 边:控制流图中的箭头(边)表示了控制流的方向,类似于流程图中的流线,一条边必须终止于一个结点。在选择或多分支结构中分支的汇聚处,即使汇聚处没有执行语句也应该添加一个汇聚结点
n 区域:边和结点圈定的部分叫区域,当对区域计数时,图形外的部分也应记为一个区域。
程序的环路复杂性即McCabe复杂性度量。
在进行程序的基本路径测试时,从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确保程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。
独立路径是指包括一组以前没有处理的语句或条件的一条路径。
转换成强有向图之后进行计算。
在有向图G中,如果任意两个不同的顶点相互可达,则称该有向图是强连通的。
V(G) = e-n+1
只要设计出的测试用例能够确保这些基本路径的执行,就可以使得程序中的每个可执行语句至少执行一次,每个条件的取真和取假分支也能得到测试。
二:程序插桩技术:就是借助往被测程序中插入操作来实现测试目的的方法。
程序插桩类型:(1)用于测试覆盖率和测试用例有效性度量的程序插桩;(2)用于断言检测的程序插桩
三:程序变异测试
程序变异测试是一种错误驱动测试,是针对某种类型的特定程序错误而提出来的。
分为程序强变异测试与程序弱变异测试
程序变异测试技术的基本思想:
(1)对于给定的程序P,先假定程序中存在一些小错误,每假设一个错误,程序P就变成P′,如果假设了n个错误:e1,e2,…,en,则对应有n个不同的程序:P1,P2,…,Pn,这里Pi称为P的变异因子。
(2)存在测试数据Ci,使得P和Pi的输出结果是不同的。因此,根据程序P和每个变异的程序,可以求得P1,P2…,Pn的测试数据集C={C1,C2,…,Cn}。
(3)运行C,如果对每一个Ci,P都是正确的,而Pi都是错误的,这说明P的正确性较高。如果对某个Ci,P是错误的,而Pi是正确的,这说明P存在错误,而错误就是ei
弱变异方法的目标仍是要查出某一类错误,但把注意力集中在程序中的一系列基本组成部分上。
其主要思想是:
设P是一个程序,C是P的简单组成部分,若有一变异变换作用于C而生成C′,如果P′是含有C′的P的变异因子,则在弱变异方法中,要求存在测试数据,当P在此测试数据下运行时,C被执行,且至少在一次执行中,使C的产生值与C′不同。
弱变异和强变异有很多相似之处。其主要差别在于:弱变异强调的是变动程序的组成部分,根据弱变异准则,只要事先确定导致C与C′产生不同值的测试数据组,则可将程序在此测试数据组上运行,而并不实际产生其变异因子。
弱变异测试方法的主要优点是开销较小,效率较高。
静态测试就是对模块的源代码进行研读,查找错误或收集一些度量数据,并不需要对代码进行编译和仿真运行。
静态测试采用人工检测和计算机辅助静态分析手段进行检测。
动态测试:通过真正运行程序发现错误。通过有效的测试用例、对应的输入/输出关系来分析被测程序的运行情况。
静态测试三步曲:走查(Walk Through)审查(Inspection)评审(Review)
走查是一种使用静态分析方法的非正式评审过程。
审查是一种正式的检查和评估方法。
通常在审查会后进行,审查小组根据记录和报告进行评估,决定是否需要重新进行审议。
动态测试需要真正将程序运行起来,需要设计系列的测试用例保证测试的完整性和有效性。
白盒测试、黑盒测试、灰盒测试。
白盒测试工具:静态测试工具,动态测试工具,(功能确认与接口测试、覆盖测试)。
软件缺陷指的是系统或系统部件中那些导致系统或部件不能实现其功能的缺陷。是对软件产品预期属性的偏离现象。
(1)缺陷的种类
1.输入/输出缺陷 2.逻辑缺陷 3.计算缺陷 4.接口缺陷 5.数据缺陷
(2)缺陷的产生
n 疏忽造成的错误(Carelessness defect,CD)
n 不理解造成的错误(Misapprehend defect,MD)
n 二义性造成的错误(Ambiguity defect,AD)
n 遗漏造成的错误(Skip defect,SD)
软件缺陷数目的估计:
(1) 撒播模型:
N:原有的错误总数 M:人工植入的错误总数 n:程序中固有的错误 m:程序中植入的错误。
(2) Hyman模型:假设软件总的排错时间是X个月,假设经过排错,程序中将不再存在错误。让两个人共同对程序进行排错,经过足够长(X的一半或更少)的排错时间后,第一个人发现了n个错误,第二个人发现了m个错误,其中属于两个人共同发现的错误有m1个:
(3)根据测试覆盖率的预测模型
第四章:集成测试
集成(Integration)是指把多个单元组合起来形成更大的单元。
集成测试(Integration Testing)是在假定各个软件单元已经通过了单元测试的前提下,检查各个软件单元之间的相互接口是否正确。
集成测试常常会使用灰盒测试方法。
集成测试与系统测试的区别
概要设计可以清晰地表示出大型软件系统中的组件或子系统的层次构造,可为集成测试策略的选取提供重要参考依据。而集成测试可以服务于概要设计,可以检验所设计的软件架构是否存在错误和遗漏。因此,两者是相辅相成的。
传统软件层次:按集成粒度不同:
(1) 模块间集成测试
(2) 子系统内集成测试
(3) 子系统间集成测试
面向对象集成
(1)类内集成测试 (2)类间集成测试
集成的两种方法:非渐增式集成与渐增式集成
驱动模块(driver):用以模拟待测模块的上级模块。
桩模块(stub):用以模拟待测模块工作过程中所调用的模块。
目前在集成测试时普遍采用渐增式集成方法。
当使用渐增方式把模块结合到程序中去时,有自顶向下和自底向上两种集成策略。
从主控制模块开始,沿着程序的控制层次向下移动,逐渐把各个模块结合起来。在把附属于(及最终附属于)主控制模块的那些模块组装到程序结构中去时,或者使用深度优先的策略,或者使用宽度优先的策略。
自顶向下集成:
优点:
n 在测试早期即可对主控制模块进行检验。
n 若采用深度优先的结合方法,可以在早期就实现软件的一个完整功能并验证该功能。
缺点:
n 在测试初期,桩模块代替了低层模块,因此,在软件结构中没有重要的数据自下往上流。
n 自底向上结合的步骤:
(1) 把低层模块组合成实现某个特定软件子功能的族;
(2) 写一个驱动模块,协调测试数据的输入、输出;
(3) 对子功能族进行测试;
(4) 去掉驱动模块,沿软件结构自下向上移动,把子功能族组合起来形成更大的子功能族。
重复(2)~(4)步,直至构造起完整的软件结构为止。
三明治集成
三明治集成是一种混合增量式测试策略,综合了自顶向下和自底向上两种集成方法的优点。这种方法中,桩模块和驱动模块的开发工作都比较小,不过代价是在一定程度上增加了定位缺陷的难度。
集成测试用例设计
(1)为系统运行设计测试用例:起码能保证系统运行
(2)为正向测试设计用例:验证集成后的模块是否按照设计实现了预期的功能。
规范导出法:规范导出法是根据相应的规范描述来设计测试用例。每个测试用例被用来测试一个或多个规范陈述语句。
(3)为逆向测试设计用例
集成测试中的逆向测试包括分析被测接口是否实现了需求规格没有描述的功能,检查规格说明中可能出现的接口遗漏,或者判断接口定义是否有错误,以及可能出现的接口异常错误,包括接口数据本身的错误,接口数据顺序错误等。
(4)为满足特殊需求设计用例:在对模块进行单元测试和集成测试阶段就应开展满足特殊需求(安全性指标、性能指标等)的测试。可使用的主要测试分析技术规范导出法
(5)为覆盖设计测试用例:在集成测试阶段关注的覆盖主要是功能覆盖、接口覆盖。
可使用的主要测试分析技术有:功能覆盖分析 接口覆盖分析
(6)测试用例补充:应及时跟踪项目变化,按照需求增加和补充集成测试用例。
集成测试过程
测试执行的前提条件是:单元测试已经通过评审。
对象交互的测试方法,按原始类、汇集类和协作类来进行讨论。
原始类的测试使用类的单元测试方法。
有些类在它们的说明中使用对象,但是实际上从不和这些对象中的任何一个进行协作,也就是说,它们从来不请求这些对象的任何服务。相反,它们会表现出以下的一个或多个行为:
存放这些对象的引用(或指针),程序中常表现为对象之间一对多的关系
创建这些对象的实例
删除这些对象的实例
凡不是汇集类的非原始类就是协作类,该类的一个或多个操作中使用其他的对象并将其作为它们的实现中不可缺少的一部分。
面向对象集成测试常用的一些方法
(1)抽样测试 :从一组可能的测试用例中选择一个测试系列。
(2)正交阵列测试:通过定义一组交互对象的配对方式组合,以尽力限制测试配置的组合数目激增。
第五章 系统测试
1.什么是性能测试,性能测试主要包括哪几个方面?
性能测试主要检验软件是否达到需求规格说明书中规定的各类性能指标,并满足一些性能相关的约束和限制条件。
性能测试包括以下几个方面 :
(1)评估系统的能力。测试中得到的负荷和响应时间等数据可以被用于验证所计划的模型的能力,并帮助做出决策。
(2)识别系统中的弱点。受控的负荷可以被增加到一个极端的水平并突破它,从而识别系统的瓶颈或薄弱的地方。
(3)系统调优。重复运行测试,验证调整系统的活动能否得到预期的结果,从而改进软件性能。
2.什么是负载测试、压力测试、疲劳强度测试?负载测试与压力测试的区别?压力测试与性能测试的区别?
负载测试是通过逐步增加系统负载,测试系统性能的变化,并最终确定在满足性能指标的情况下,系统所能承受的最大负载量的测试。
压力测试是通过逐步增加系统负载,测试系统性能的变化,并最终确定在什么负载条件下系统性能处于失效状态,并以此来获得系统能提供的最大的服务级别的测试。
疲劳强度测试通常是采用系统稳定运行情况下能够支持的最大并发用户数或者日常运行用户数,持续执行一段时间业务,保证达到系统疲劳强度需求的业务量,通过综合分析交易执行指标和资源监控指标来确定系统处理最大工作量强度性能的过程。
压力测试与性能测试的区别
3. 负载测试计划的四个步骤及其主要内容
分析应用程序、定义测试目标、计划方案实施、检查测试目标
4. 负载压力测试需求分析(测试强度估算);测试协议选择的依据
1)80~20原理:每个工作日中80%的业务在20%的时间内完成。
2)客户端与直接压力承受的服务器之间的通讯协议是选择测试协议的唯一标准。
5. 录制Vuser脚本时主要应录制哪些内容?
主要录制用户在客户端应用程序中执行的典型业务流程。测试工具通过录制客户端和服务器之间的活动来创建脚本。
6. 容量测试的概念,容量测试与压力测试的区别
容量测试是指采用特定的手段,测试系统能够承载处理任务的极限值而进行的测试工作
区别:压力测试主要是使系统承受速度方面的超额负载,例如一个短时间之内的吞吐量。容量测试关注的是数据方面的承受能力,并且它的目的是显示系统可以处理的数据容量。它往往应用于数据库方面的测试。
7. 健壮性测试的概念;健壮性的两层含义
健壮性测试主要用于测试系统抵御错误的能力。这里的错误通常指的是由于设计缺陷而带来的系统错误。测试的重点为当出现故障时,是否能够自动恢复或忽略故障继续运行。
健壮性的两层含义:
一是高可靠性
n 它体现了软件系统的质量;
n 需要根据符合规格说明的数据选择测试用例,用于检测在正常情况下系统输出的正确性。
二是从错误中恢复的能力
n 它体现了软件系统的适应性;
n 需要在异常数据中选择测试用例,检测非正常情况下的系统行为。
8. 安全性测试的概念
安全性测试是检查系统对非法侵入的防范能力,其目的是为了发现软件系统中是否存在安全漏洞。软件安全性是指在非正常条件下不发生安全事故的能力。系统安全性设计的准则是:使非法侵入的代价超过被保护信息的价值,从而令非法侵入者无利可图。
9. 可靠性的概念;MTTF, MTTR的计算;影响软件可靠性的因素;可靠性建模的基本思想
可靠性是指产品在规定的条件下和规定的时间内完成规定功能的能力。
影响软件可靠性的因素
n 运行剖面。同样的软件在不同的运行剖面下,其可靠性的表现是不一样的。
n 软件规模。
n 软件内部结构。一般来说,内部结构越复杂的软件,所包含的缺陷数可能就越多。
n 软件的开发方法和开发环境。
n 软件的可靠性投入。
软件可靠性建模的基本思想:在测试t时间内,共发现n个故障,假设每个故障发现的时间分别为t1, t2, …, tn;或者在固定的时间周期T内,所发现的故障数目分别是f1, f2, …, fn。根据上述假设,建立软件可靠性模型以预测软件可靠性的未来行为。
恢复性测试主要检查系统的容错能力。当系统出错时,能否在指定时间间隔内修正错误并重新启动系统。
备份测试是恢复性测试的一个补充,也是恢复性测试的一个部分。备份测试的目的是验证系统在软件或者硬件失败时备份数据的能力。
兼容性测试将验证软件与其所依赖的环境的依赖程度,包括对硬件、平台软件、其他软件的依赖程度。
了解安装测试中应考虑的问题:
(1) 安装手册的评估。 (2) 安装的自动化程度测试。
(3) 安装选项和设置的测试。 (4)安装过程的中断测试。
(5) 安装顺序测试。 (6) 多环境安装测试。
(7) 安装的正确性测试。 (8) 修复安装测试与卸载测试。
可用性测试是对于用户友好性的测试,是指在设计过程中被用来改善易用性的一系列方法。
优秀用户界面的7个要素:
符合标准和规范、直观性、一致性、灵活性、舒适性、正确性、实用性
了解GUI自动化测试的3个类别:
记录回放、测试用例自动化、自动测试
文档测试主要针对系统提交给用户的文档进行验证,目标是验证软件文档是否正确记录系统的开发全过程的技术细节。通过文档测试可以改进系统的可用性、可靠性、可维护性和安装性。
正式验收测试、非正式验收测试; α测试、β测试的概念
回归测试是在软件发生变动时保证原有功能正常运作的一种测试策略和方法。回归测试不需要进行全面的测试,而是根据修改的情况进行有选择性的测试。
第六章 基于缺陷模式的软件测试
缺陷模式必须满足下列几个条件:
(1)该模式下的缺陷是符合实际的。
(2)基于该模式的缺陷数目是可以容忍的。
(3)该模式下的缺陷是可以测试的。应该存在一个算法可以检测出这些缺陷。
基于缺陷模式的软件测试技术具有如下特点:
(1)针对性强; (2)能发现其他测试技术难以发现的故障;(3)工具自动化程度高以及测试效率高。
(4)缺陷定位准确 (5)易学、易使用
缺陷模式概述:
缺陷模式是和语言本身相关的,不同的语言有着不同的缺陷模式。
软件的缺陷模式分为四个层次
n 故障模式:此类缺陷是故障,一经产生,会导致系统出错。
n 漏洞模式:此类缺陷会给系统留下安全隐患,为攻击该系统开了绿灯。
n 缺陷模式:它未必会造成系统的错误,但可能会隐含某些故障,或者是由初级软件工程师不理解造成的。
n 规则模式:软件开发总要遵循一定的规则,违反这些规则也是不允许的。
故障模式:
1. 内存泄漏的故障模式
2. 数组越界故障模式
3.使用未初始化变量故障模式
4.空指针使用故障
5.非法计算类故障
6.死循环结构模式
7. 资源泄漏故障
8. 并发故障模式
安全漏洞模式:
1. 缓冲区溢出漏洞模式
2. 被污染的数据模式
3. 竞争条件
4. 风险操作
缺陷模式
1. 低性能模式
2. 代码国际化模式
3. 疑问代码模式