第一章、引论
为什么要进行软件测试?
简答:为了保证软件质量,减少不必要的损失。
大题:- 软件的某些缺陷只有在测试时才会发现;- 提供对系统质量相关信息;- 发现缺陷越早更容易更正,预防错误的发生;- 提高产品利润- 提高企业国际竞争力
软件 =程序 + 数据 (库) + 文档 + 服务
软件测试的正面性:软件测试是一系列活动,以评价一个程序或系统的特性或能力,并确
定是否达到预期的结果,验证是否符合用户需求
软件测试的反面性:测试是为了证明程序有错,好的测试能发现至今未发现的错误
什么是软件测试?
在特定的条件下运行系统或构件,观察或记录结果,对系统的某个方面做出评价;
分析某个软件项以发现现存的和要求的条件之差别(即错误) 并评价此软件项的特性;
软件测试的定义?
标准观点来看,可以定义为“验证”和“有效性确认”活动够成的整体,即软件测试V&V。
“验证”是检验软件是否已正确地实现了软件需求规格说明书所定义的系统功能和特性。验证过程提供证据表明软件相关产品与所有生命周期活动的要求(如正确性、完整性、一致性、准确性等)一致。相当于以软件产品设计规格说明书为标准进行软件测试的活动。
“有效性确认”是确认所开发的软件是否满足用户真正需求的活动。一切从客户出发,理解客户的需求,并对软件需求定义和设计存疑,以发现需求定义和产品设计中的问题。主要通过各种软件评审活动来实现,保证让客户参加评审和测试活动。
软件测试4个阶段?(软件测试级别有哪4个?)
单元测试、集成测试、系统测试、验收测试。
单元测试 是对软件组成单元进行测试。其目的是检验软件基本组成单位的正确性。测试的对象是软件设计的最小单位:模块。又称为模块测试。
集成测试 也称联合测试(联调)、组装测试,将程序模块采用适当的集成策略组装起来,对系统的接口及集成后的功能进行正确性检测的测试工作。集成主要目的是检查软件单位之间的接口是否正确。
将软件系统看成是一个系统的测试。包括对功能、性能以及软件所运行的软硬件环境进行测试。时间大部分在系统测试执行阶段,包括回归测试和冒烟测试。
验收测试 是部署软件之前的最后一个测试操作。它是技术测试的最后一个阶段,也称为交付测试。验收测试的目的是确保软件准备就绪,按照项目合同、任务书、双方约定的验收依据文档,向软件购买者展示该软件系统满足原始需求。
第二章、软件测试的基本概念
产品质量的标准:功能性,可用性,可靠性,性能,容量
软件缺陷的定义?
内部:软件本身设计问题。
外部:不能满足用户的需求。
软件缺陷的产生?
技术问题。
软件本身。
团队工作。
软件缺陷描述:
可跟踪的信息:缺陷ID
软件缺陷基本信息:状态,标题,严重程度,重要性....
缺陷的详细描述:缺陷的详细步骤,期望结果,实际结果
测试环境:...
必要附件:...
测试的分类:
按对象分类:接口单元系统数据文档
按目的分类:可用可靠性能安全
按是否执行程序:静态动态
按是否针对内部具体结构和实现算法:黑白盒
静态测试和动态测试。
根据程序是否运行,测试可以分为静态测试和动态测试。
静态测试:
静态测试包括对软件产品的需求和设计规格说明书的评审、对程序代码的审查以及静态分析等。
静态测试主要检查代码风格,结构的正确性,书写的标准,以及安全性
动态测试:
动态测试是通过真正运行程序发现错误,通过观察代码运行过程,来获取系统行为、变量实时结果、内存、堆栈、线程以及测试覆盖度等方面的信息,来判断系统是否存在问题,或者通过有效的测试用例,对应的输入输出关系来分析被测程序的运行情况,来发现缺陷。
静态分析:
人工检测:
不依靠计算机儿完全靠人工审查或评审软件。注重:编码风格、算法的检查,也可以检查安全性、国际化和容错性等代码问题。
计算机辅助静态分析:
利用测试工具对被测程序进行特性分析,从程序中提取一些信息,以便检查程序逻辑的各种缺陷和可疑的程序构造。
软件(产品)评审。
软件评审的形式有互为评审(同行评审)、走查(小组成员讨论开会讲解)、审查(讲解提问方式,采用缺陷检查表,以会议的形式)。
文档评审。
技术评审。
管理评审。
流程评审。
管理评审和流程评审也作为软件质量保证。
软件测试是对以下内容(软件开发的四个阶段的产物)评审。
需求评审。
设计评审。
代码评审。
文档评审。
软件测试阶段:
1.单元测试
2.集成测试
3.系统测试
4.验收测试
主动测试和被动测试。
主动测试:测试人员主动相测试对象发送请求并验证返回的结果
被动测试:测试人员被动的监控产品的运行,通过一定的机制获取数据
白盒测试和黑盒测试。
白盒测试:
白盒测试,也称结构化测试或逻辑驱动测试,也就是已知产品的内部工作过程,清楚最终生成软件产品的计算机程序结构及其语句,按照程序内部的机构测试程序,检查所有内部成分是否按照规定正常进行。
白盒测试方法:
语句覆盖。 任意一次完整的流程
判定覆盖。 所有的分支语句都要经历一次
条件覆盖。 根据判定的语句,要让每个判定的条件的真假至少都执行一次(用&&||隔开的都算作独立的条件)
判定条件覆盖。 包括判定和条件覆盖
条件组合覆盖。每个判定条件的真假组合都要出现一次(尽可能的出现,不符合逻辑的就算了)
基本路径覆盖。 覆盖所有的路径组合
基本路径覆盖的步骤:
1.先计算圈复杂度,圈复杂度极为独立路径的条数
2.再找出独立路径,独立路径极为和当前现有的独立路径相比,至少出现了一个新的判定节点
黑盒测试:
黑盒测试方法,也称数据驱动测试方法,在测试时,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特征的情况下,测试人员针对软件直接进行测试,检查系统功能是否按照需求规格说明书的规定正常使用、是否能适当地接收输入数据而输出正确的结果等,检查相应的文档是否才用了正确的模板、是否满足规范要求。
黑盒测试方法:
等价类划分法。
边界值分析法。
判定表方法。
因果图法。
正交试验法。
功能图法。
错误推测法。
黑盒测试的难点:如何构造一个有效的输入。
黑盒方法
静态- 单因素 1.等价类划分 2.边界值划分- 多因素 1.因果图 2. 判定表 3.两两组合4. 正交试验法
动态- 功能图- 有限状态机
其他- 错误推测法
有了黑盒测试为什么还要进行白盒测试?
黑盒测试只能观察软件的外部表现,即使软件的输入和输出都是正确的,确并不能表示软件是正确的。
程序有可能用错误的运算方式得出正确的结果,只有白盒测试才能发现真正的原因。
白盒测试能发现程序里面的隐患,像内存泄漏、误差累计问题。在这方面黑盒测试存在严重的不足。
测试用例。
测试用例(Test Case)是为了特定的测试目的而设计的测试条件、测试数据及与之相关的测试规程的一个特定的使用用例或场景。测试用例也可以被称为有效地发现软件缺陷的最小测试执行单元。而测试脚本(Test Script)是测试工具执行的一组指令集合,是计算机能自动完成测试用例的执行,也是计算机程序的一种新式。脚本可以通录制产生,也可以直接用脚本语言编写脚本。
流程:(1)、测试需求分析;(2)、业务流程分析;(3)、测试用例设计;(4)、测试用例评审;(5)、测试用例更新完善。
第三章、软件测试方法
简答:
什么是等价类划分法?
等价类划分是把程序的输入域划分为若干部分,然后从每个部分中选取少数代表性数据作为测试用例。每一类的代表性数据在测试中的作用等价于这一类中的其他值,使用这一方法设计测试用例即为等价类划分法。
每一类的代表性数据在测试中的作用等价于这一类中的其他值,也就是说,如果某一类中的一个例子发现了错误,这一类等价类中的其他例子也能发现同样的错误;反之,如果某一类中的一个例子没有发现错误,则这一类中的其他例子也不会查出错误(除非等价类中的某些例子属于另一等价类,因为几个等价类可能相交的)。使用这一方法设计测试用例,首先必须在分析需求规格说明的基础上划分等价类,列出等价类表。
6条确定等价类的原则:
在输入条件规定了取值范围或值的个数的情况下,可以确立一个有效等价类和两个无效等价类。
在输入条件规定了输入值的集合或者规定了“必须如何”的条件情况下,可以确定一个有效等价类和一个无效等价类。
在输入条件是一个布尔量的情况下,可以确定一个有效等价类和一个无效等价类。
在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。
在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。
在确知已划分的等价类中,各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步地划分为更小的等价类。
等价类划分步骤。
1.先列出等价类表,包括输入条件,有效等价类和编号,无效等价类和编号,然后再画出测试用例表
设计一个新的测试用例,使其尽可能多地覆盖尚未覆盖的有效等价类。重复这一步,最后使得所有有效等价类均被测试用例所覆盖。
设计一个新的测试用例,使其只覆盖一个无效等价类。重复这一步是所有无效等价类均被覆盖。
边界值划分法:
“五点法”和“七点法”
五点法:最大值、略低于最大值、正常值、略高于最小值、最小值。
七点法:略大于最大值、最大值、略低于最大值、正常值、略高于最小值、最小值、略低于最小值。
判定表法:
条件桩,动作桩,条件项,动作项
因果图法:
根据判定表(原因,结果)绘制因果图法
判定表和因果图的缺点:
测试用例设计的过于简单,只能用是否回答测试用例,遇到复杂的问题难以解决
两两组合(pare-wise):
一个用例表,从尾部开始,将因子拆成两两组合的形式,若每种这种两两组合的形式,在之前的用力表里面都能找得到,那么就说明这个用例是多余的
正交法:
正交表里每个因子的水平出现次数是完全相同的,任意两列的水平搭配,每种出现的次数对等
意思就是,每种因子,在所有行里面数量要想等,就比如A出现了两次,那么BC都要出现两次。并且每行出现的因子数要想等(除了第一行全一),意思就是,第二行出现了三个因子ABC,那么第四行就要出现三个因子DEF
优点
不需穷举测试用例,对组合的情况有最好的覆盖
环路复杂度计算
边数-点数+2
功能图法:
根据系统要求,绘制状态流程图,再根据绘制的状态流程图,导出测试用例
软件测试的目的。
确保软件的质量。
正向:找软件不存在错误。
反向:找软件有错误。
以最少的人力、物力和时间找出软件中潜在的各种错误和缺陷,通过修正各种错误和缺陷保障软件质量,避免软件发布后由于潜在的软件错误和缺陷造成的隐患所带来的商业风险。同时利用测试过程中得到的测试结果和测试信息,作为后续项目开发和测试过程改进的重要输入,避免在将来的项目开发和测试中重复同样的错误;采用更加高效的测试管理手段,提高软件测试的效率和软件产品的质量。
基本路径法的步骤****。
程序的控制流图:描述程序控制流的一种图示方法。
程序圈复杂度:McCabe复杂性度量。从程序的环路复杂性可导出程序基本路径集合中的独立路径条数,这是确定程序中每个可执行语句至少执行一次所必须的测试用例数目的上界。
导出测试用例:根据圈复杂度和程序结构设计用例数据输入和预期结果。
准备测试用例:确保基本路径集中的每一条路径的执行。
什么是非增量测试与增量测试****。
增量式集成
增量式集成测试是逐步集成和逐步测试的方法,把可能出现的错误分散暴露出来,便于找出问题和修改。
优点:更早地发现模块间的接口错误,有利于错误定位;
缺点:需要编写驱动模块和桩模块;
非增量式集成
在对每个单元进行充分测试后,将所有单元全部集成起来,一次性地进行集成测试。
优点:减少测试工作量。
缺点:难以定位和解决问题,可能会发现很多错误。
驱动模块
驱动模块就是用来代替主模块,用它来调用子模块
桩模块
集成测试前要为被测模块编制一些模拟其下级模块功能的“替身”模块,以代替被测模块的接口,接受或传递被测模块的数据,这些专供测试用的“假”模块称为被测模块的桩模块。
第四章、软件测试流程和规范
X、V、W、H、模型
X模型
X模型是对V模型的改进, X模型提出针对单独的程序片段进行相互分离的编码和测试. 此后通过频繁的交接, 通过集成, 最终合成为可执行的程序。
V模型
由用户需求到验收测试。
W模型
W模型也可以看做是 "双V模型", 有两个 V, 一个是研发V, 一个是测试V, 将研发和测试的工作并行了起来, 使研发和测试的工作可以同时进行, 因此解决了V模型的三个缺点。
H模型
H模型中, 软件测试过程活动完全独立, 贯穿于整个产品的周期, 与其他流程并发地进行, 某个测试点准备就绪时, 就可以从测试准备阶段进行到测试执行阶段. 软件测试可以尽早的进行, 并且可以根据被测物的不同而分层次进行。
软件测试学派
分析学派:分析学派认为软件测试是严格的技术性的,这一派在学术界有很多支持者。
标准学派:标准学派认为软件测试是用于衡量进度的一种方式,强调成本度量和可重复的标准。
质量学派:质量学派强调过程,软件测试人员像警察一样审判开发人员,又像守门员一样保证质量。
上下文驱动学派:上下文驱动学派强调软件测试人的作用,寻找利益相关的BUG。
敏捷学派:敏捷涟派使用软件测试来验证开发是否完成,强调自动化。
第五章、单元测试与集成测试
为何要进行单元测试。
软件测试的目的之一就是尽可能早地发现软件中存在的错误,从而降低软件质量成本,测试越早进行越好,单元测试就显得更重要,也是系统的功能测试的基础。
单元测试开发人员和测试人员参与,以开发人员为主。
静态测试的标准和规范
可靠性。
可读性和维护性。
移植性。
代码评审
代码走查。
正式会议审查。
代码互评
走查与会议审查的对比。
缺陷检查表。
JUnit介绍
JUnit 是一个编写可重复测试的简单框架。它是单元测试框架的 xUnit 架构的一个实例。
测试步骤:
建立一个被JUnit测试的类。
建立其对应的JUnit Test 类。
针对自动生成的代码,进行补充修改,使其满足对特定功能的测试。
执行测试。
集成测试定义:
集成测试,也叫组装测试或联合测试。
在单元测试的基础上,将所有模块按照设计要求(如根据结构图)组装成为子系统或系统,进行集成测试。
集成测试的模式:
渐增式测试模式:模块之间按照顺序加入,逐渐扩大测试的规模和范围
非渐增式测试模式:分别测试每个模块,再把所有模块结合到一起测试
集成测试的方法:
大棒集成:分别测试每个独立的,再一次性全部组装测试
自顶向下:从主模块向子模块自上而下测试,包括深度和广度优先 能更早的发现缺陷,但是测试不充分
自底向上:从子模块向主模块自下而上测试 效率高,更全面,但对程序的主要控制接触较晚
三明治:确定一层为最重要的,上面的层自顶向下,下面的自底向上 集成上述两种测试的优点,但是中间层不能今早的得到充分的测试
第六章、系统测试
功能测试
以客户需求为导向,测试测试用例
测试的方法和黑盒测试的方法类似(等价类,边界值,因果图...)
回归测试
验证缺陷得到了正确的修复,同时对系统的变更没有影响以前的功能,以关键性模块为核心。
策略:
需要从测试用例库中选择有效的测试用例,构造一个缩减的测试用例组来完成回归测试
非功能性测试:
性能,压力,容量(采用负载测试的技术)
安全,可靠,容错(测试方法各不相同)
性能测试(包括负载,压力,容量,可靠,并发测试)
目的:为了验证系统是否达到用户提出的性能指标,同时发现系统中存在的性能瓶颈,起到优化系统的目的。
基本概念:通常验证软件的性能在正常环境和系统条件下重复使用是否还能满足性能指标。或者执行同样任务时新版本不比旧版本慢。一般还检查系统记忆容量在运行程序时会不会流失(memory leak)。比如,验证程序保存一个巨大的文件新版本不比旧版本慢。
分为客户端和服务端。
flat测试:一次加载所有用户
ramp-up测试:每秒新增用户
主要在于前期的数据设计和后期的数据分析
压力测试
长时间或超大负荷地运行测试软件,在超过服务器安全范围所能承受的最大压力值
性能指标
数据传输的吞吐量(Transactions)
•数据处理效率(Transactions per second)
•数据请求的响应时间(Response time)
•内存和CPU使用率
容量测试
通过测试预先分析出反映软件系统应用特征的某项指标的极限值,系统在其极限值状态下还能保持主要功能正常运行。
安全性测试:
测试人员假扮非法入侵者,采用各种办法试图突破防线。
范围:
系统级别的安全性
应用程序级别的安全性
方法:
基于漏洞:从软件内部考虑安全性,识别安全漏洞
基于威胁:从外部考察,识别安全威胁
容错测试:
软件在异常条件下自身是否具有防护性的措施或者某种灾难性恢复的手段。
主要包括:
1.异常数据异常操作
2.灾难恢复能力
可靠性测试:
产品在规定的条件下和规定的时间内完成规定功能的能力,表明了一个软件系统按照用户的要求和设计的目标,执行其功能的可靠程度
兼容测试:
验证软件之间是否正确地交互和共享信息
硬件兼容
软件之间兼容
数据之间兼容
向后兼容(向下兼容):可以使用软件的以前版本
向前兼容(向上兼容):可以使用软件的未来版本
横向兼容:文件的导入导出
第七章、验收测试
验收测试是部署软件之前的最后一个测试操作。在软件产品完成了单元测试、集成测试和系统测试之后,产品发布之前所进行的软件测试活动。它是技术测试的最后一个阶段,也称为交付测试。验收测试的目的是确保软件准备就绪,并且可以让最终用户将其用于执行软件的既定功能和任务。
主要包括:易用性测试,兼容性测试,安装测试,文档测试
注意:验收测试必须在实际用户运行环境中进行,由用户和测试部门共同执行
实施验收测试的常用策略有三种,它们分别是:
· 正式验收:对系统验收的延续
· 非正式验收或 Alpha 测试
· Beta 测试
您选择的策略通常建立在合同需求、组织和公司标准以及应用领域的基础上。
Alpha 测试指软件开发内部人员开始试用新产品。在实际运行环境和真实应用过程中发现测试阶段所没有发现的缺陷。经过Alpha测测试和修正的软件产品称为Beta版本。是白盒测试
Beta 测试是公司外部的典型用户试用,并要求报告异常情况,提出批评意见,然后再对Beta版本进行修正和完善,最终得到正式发布的版本。是黑盒测试
验收测试完后需要提交验收报告和交付报告
第八章、软件本地化测试
翻译验证
检查软件内文字标点,是否准确以及有无不符对应国家的法律以及文化习惯。
主要解决 技术问题 配置和兼容性问题
第九章 测试自动化
测试自动化的内涵:
手工测试的局限性:
覆盖问题
重复性问题
捕捉问题
模拟问题
效率问题
测试自动化
由手工逐个地运行测试用例的操作过程被测试工具自动执行的过程所代替。
测试工具的使用是自动化测试的主要特征
优势:
运行速度快
结果准确
高复用性
永不疲劳
可靠
独特的能力
好处:
测试周期缩短
更高质量的产品
软件过程更规范
高昂的团队士气
节省人力资源,降低企业成本
充分利用硬件资源,降低企业成本
测试自动化实现的原理
代码分析
对象识别
脚本技术
产生方式:
录制,脚本语言编写,混合
脚本的分类:
线性脚本:录制得到的
结构化脚本:类似于一个程序
数据驱动脚本:测试数据独立
关键字脚本:数据驱动脚本的逻辑扩张
脚本管理
脚本和测试数据分开
自动比较技术
版权归原作者 qq_51467754 所有, 如有侵权,请联系我们删除。