了解:
1.2 为什么要进行软件测试
- 软件测试——产品质量的保证
- 软件测试——控制成本的关键
- 软件测试——软件可靠性确认
- 软件测试——让企业具备国际竞争的实力
1.3 什么是软件测试
Bill Hetzel博士(正向思维的代表):
- 软件测试就是为程序能够按预期设想那样运行而建立足够的信心。
- “软件测试是一系列活动以评价一个程序或系统的特性或能力并确定是否达到预期的结果”
- 测试是为了验证软件是否符合用户需求,即验证软件产品是否能正常工作
Glenford J. Myers (反向思维的代表):
- 测试是为了证明程序有错,而不是证明程序无错误
- 一个好的测试用例是在于它能发现至今未发现的错误
- 一个成功的测试是发现了至今未发现的错误的测试
评估导向
缺陷预防导向
软件测试4种导向
软件测试是由“验证(Verification)”和“有效性确认(Validation)”活动构成的整体
- 验证”是检验软件是否已正确地实现了产品规格书所定义的系统功能和特性
- “有效性确认”是确认所开发的软件是否满足用户真正需求的活动。
1.4 软件测试和软件开发的关系
Sqa
软件测试与Sqa的关系
软件测试 4种导向 5大学派
了解:
软件缺陷定义
修复软件缺陷的代价
用户需求验证 代码验证 功能验证证 系统非功能特性验证
在设计阶段就是它的3~6倍,在编程阶段是它的10倍,在内部测试阶段是它的20~40倍,
在外部测试阶段是它的30~70倍,而到了产品发布出去时,这个数字就是40~1000倍,修正错误的代价不是随时间线性增长,而几乎是呈指数增长的。
结束标准
用例全部测试;覆盖率达到标准;缺陷率达到标准;其他指标达到标准。
掌握:
软件测试的分类
静态测试 /动态测试
静态测试 / 动态测试
静态测试就是静态分析,对模块的源代码进行研读,查找错误或收集一些度量数据,并不需要对代码进行编译和仿真运行。静态测试包括对软件产品的需求和设计规格说明书的评审,对程序代码的复审等。静态分析的查错和分析功能是其他方法所不能替代的,可以采用人工检测和计算机辅助静态分析手段进行检测,但越来越多地采用工具进行自动化分析。
动态测试是通过真正运行程序发现错误,通过观察代码运行过程,来获取系统行为、变量实时结果、内存、堆栈、线程以及测试覆盖度等各方面的信息,来判断系统是否存在问题,或者通过有效的测试用例,对应的输入输出关系来分析被测程序的运行情况,来发现缺陷。
回归测试
-
回归测试 (regression testing):为保证软件中新的变化(新增加的代码、代码修改等)不会对原有功能的正常使用有影响而进行的测试。也就是说,满足用户需求的原有功能不应该因为代码变化而出现任何新的问题。
压力测试
-
压力测试 (stress testing),也称负载测试 (load testing):用来检查系统在不同负载(如数据量、并发用户、连接数等)条件下的系统运行情况,特别是高负载、极限负载下的系统运行情况,以发现系统不稳定、系统性能瓶颈、内存泄漏、CPU 使用率过高等问题。
ST / ET
软件测试的工作范畴
- 软件测试工作的组织与管理:制定测试策略、测试计划,确认所采用的测试方法与规范,控制测试进度,管理测试资源。
- 测试工作的实施:编制符合标准的测试文档,搭建测试环境,开发测试脚本、与开发组织协作实现各阶段的测试活动
第三章:软件测试方法!!!!(重点)
理解:
白盒测试的概念
白盒测试也称结构测试或逻辑驱动测试,它是按照程序内部的结构测试程序,通过测试来检测产品内部动作是否按照设计规格说明书的规定正常进行,检验程序中的每条通路是否都能按预定要求正确工作。
黒盒测试的概念:
黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。
什么是测试用例?
为某个特殊目标而编制的一组测试输入、执行条件以及预期结果,以便测试某个程序路径或核实是否满足某个特定需求。指对一项特定的软件产品进行测试任务的描述,体现测试方案、方法、技术和策略。内容包括测试目标、测试环境、输入数据、测试步骤、预期结果、测试脚本等,并形成文档。
为什么要设计测试用例?
测试用例构成了设计和制定测试过程的基础。
测试的“深度”与测试用例的数量成比例。由于每个测试用例反映不同的场景、条件或经由产品的事件流,因而,随着测试用例数量的增加,对产品质量和测试流程也就越有信心。判断测试是否完全的一个主要评测方法是基于需求的覆盖,而这又是以确定、实施和/或执行的测试用例的数量为依据的。
测试工作量与测试用例的数量成比例。根据全面且细化的测试用例,可以更准确地估计测试周期各连续阶段的时间安排。
测试设计和开发的类型以及所需的资源主要都受控于测试用例。
测试用例通常根据它们所关联关系的测试类型或测试需求来分类,而且将随类型和需求进行相应地改变。最佳方案是为每个测试需求至少编制两个测试用例:
·一个测试用例用于证明该需求已经满足,通常称作正面测试用例;
·另一个测试用例反映某个无法接受、反常或意外的条件或数据,用于论证只有在所需条件下才能够满足该需求,这个测试用例称作负面测试用例。
测试用例是软件测试的核心
掌握:
白盒测试方法的分类:
语句覆盖,语句覆盖法的基本思想是设计若干测试用例,运行被测程序,使程序中的每个可执行语句至少被执行一次
判定覆盖,判定覆盖法的基本思想是设计若干用例,运行被测程序,使得程序中每个判断的取真分支和取假分支至少经历一次,即判断真假值均曾被满足
条件覆盖,条件覆盖的基本思想是设计若干测试用例,执行被测程序以后,要使每个判断中每个条件的可能取值至少满足一次。
路径覆盖,
判定-条件覆盖,
条件组合覆盖,(注意,一条语句内的条件组合)
基本路径测试法 !!!!一定要掌握
求环路复杂度的3种方法;为什么需要求环路复杂度;构造基本路径集合的方法。
黒盒测试方法的分类:
等价类划分法(等价分类法),分为有效等价类和无效等价类。有效等价类是有意义的、合理的输入数据,可检查程序是否实现了规格说明中所规定的功能和性能。无效等价类与有效等价类的意义相反
边界值分析法,
-
-
- 确定边界情况(输入或输出等价类的边界)
- 选取正好等于、刚刚大于或刚刚小于边界值作为测试数据
-
用条件覆盖法设计白盒测试用例
用等价类和边界值设计黒盒测试用例
因果图法!!,
判定表法!!!
以上设计测试用例的方法一定要掌握
有限自动机 堆栈 的 状态图、状态转化树
了解:
TMM,过程能力描述了遵循一个软件测试过程可能达到的预期结果的范围。TMM的建立,得益于以下3点:
- 充分吸收、CMM的精华;
- 基于历史演化的测试过程;
- 业界的最佳实践。
TPI,TPI是基于连续性表示法的测试过程改进的参考模型,是在软件控制、测试知识以及过往经验的基础上开发出来的
CTP, 关键测试过程(Critical Test Process,CTP)评估模型主要是一个内容参考模型,一个上下文相关的方法,并能对模型进行裁剪
STEP,STEP(Systematic Test and Evaluation Process,系统化测试和评估过程)是一个内容参考模型,认定测试是一个生命周期活动,在明确需求后开始直到系统退役。
W模型!!!!
软件测试5大学派
第五章:单元测试 集成测试
掌握:单元测试的概念,
单元测试:单元测试是对软件基本组成单元(如函数、类的方法等)进行的测试。
定义:单元测试是对软件基本组成单元进行的测试。
时机:一般在代码完成后由开发人员完成,QA人员辅助.
概念:模块, 组件, 单元
单元测试的测试人员:程序人员和开发人员
单元测试的测试方法,
检查每一条独立执行路径的测试。保证每条语句被至少执行一次。
检查局部数据结构完整性
检查模块接口是否正确
检查临界数据处理的正确性
预见、预设的各种出错处理是否正确有效
单元测试的测试依据 单元测试的依据是:详细设计和概要设计
单元测试是对软件基本组成单元进行测试。依据是:软件详细说明书。
单元测试测试的不仅仅是代码,有:接口测试、局部数据结构测试、独立路径测试、独立路径测试、边界条件测试、错误处理测试、功能测试、性能测试、内存使用测试等。
单元测试的主要目标
目标: 单元模块被正确编码
- 信息能否正确地流入和流出单元;
- 在单元工作过程中,其内部数据能否保持其完整性,包括内部数据的形式、内容及相互关系不发生错误,也包括全局变量在单元中的处理和影响。
- 在为限制数据加工而设置的边界处,能否正确工作。
- 单元的运行能否做到满足特定的逻辑覆盖。
- 单元中发生了错误,其中的出错处理措施是否有效。
掌握:集成测试的概念,
集成测试:集成测试是将软件集成起来,对模块之间的接口进行测试。
顾名思义,集成测试是将软件集成起来后进行测试。集成测试又叫子系统测试、组装测试、部件测试等。
- 模块内的集成,主要是测试模块内各个接口间的交 互集成关系;
- 子系统内的集成,测试子系统内各个模块间的交互 关系;
- 系统内的集成,测试系统内各个子系统和模块间的集成关系。
集成测试的测试人员:有经验的测试人员和开发者共同
集成测试的集成模式和经典代表
非渐增式测试模式:先分别测试每个模块,再把所有模块按设计要求放在一起结合成所要的程序,如大棒模式。
渐增式测试模式:把下一个要测试的模块同已经测试好的模块结合进来进行测试,测试完后再把下一个应该测试的模块结合起来测试。渐增式测试又可以根据每次添加模块的路线分为自顶向下测试、自底向上测试和混合测试等方式。
集成测试的测试依据;概要设计书,详细设计说明书,主要是概要设计说明书
集成测试的主要目标
集成测试,也叫组装测试或联合测试。在单元测试的基础上,将所有模块按照设计要求(如根据结构图〕组装成为子系统或系统,进行集成测试。实践表明,一些模块虽然能够单独地工作,但并不能保证连接起来也能正常的工作。程序在某些局部反映不出来的问题,在全局上很可能暴露出来,影响功能的实现。
目标在于检验与软件设计相关的程序结构问题。如数据穿过接口时可能丢失;一个模块与另一个模块可能有由于疏忽的问题而造成有害影响; 把子功能组合起来可能不产生预期的主功能;个别看起来是可以接受的误差可能积累到不能接受的程度;全程数据结构可能有错误等。
驱动程序和桩程序
第六章:系统功能测试
系统测试的概念,
系统测试(特征测试):检验系统所有元素之间协作是否合适,整个系统的性能和功能是否达到要求。其测试内容包括:功能测试,非功能测试与回归测试等。
系统测试的测试人员,软件测试工程师
系统测试的内容:功能测试,回归测试,非功能性试;
非功能性测试(特征测试)包含哪些内容:性能测试 压力测试 容量测试 安全性测试可靠性测试 容错性测试
系统测试的测试依据
需求说明书,概要设计说明书,详细设计说明书,最重要的是需求说明书。
确认测试:确认测试又称有效性测试。有效性测试是在模拟的环境下,运用黑盒测试的方法,验证被测软件是否满足需求规格说明书列出的需求。任务是验证软件的功能和性能及其他特性是否与用户的要求一致。对软件的功能和性能要求在软件需求规格说明书中已经明确规定,它包含的信息就是软件确认测试的基础。
第七章:专项测试
性能测试(performance test)就是为了发现系统性能问题或获取系统性能相关指标而进行的测试。一般在真实环境、特定负载条件下,通过工具模拟实际软件系统的运行及其操作,同时监控性能各项指标,最后对测试结果进行分析以确定系统的性能状况。
性能测试目标
负载模式
α,β测试
α测试是指软件开发公司组织内部人员模拟各类用户行对即将面市软件产品(称为α版本)进行测试,试图发现错误并修正。
经过α测试调整的软件产品称为β版本。紧随其后的β测试是指软件开发公司组织各方面的典型用户在日常工作中实际使用β版本,并要求用户报告异常情况、提出批评意见。然后软件开发公司再对β版本进行改错和完善。
第8章 软件本地化测试
I18N L10N G11N
掌握:
测试自动化的内涵
自动化测试(automated test)是相对手工测试而存在的一个概念,由手工逐个地运行测试用例的操作过程被测试工具自动执行的过程所代替。
测试工具的使用是自动化测试的主要特征
测试自动化指“一切可以由计算机系统自动完成的测试任务都已经由计算机系统或软件工具、程序来承担并自动执行”
测试自动化实现的原理
代码分析: 类似于高级编译系统,在工具中定义类/对象/函数/变量等定义规则、语法规则等,在分析时对代码进行语法扫描,找出不符合编码规范的地方。
对象识别 (Windows 对象 、Mac 对象、Web DOM对象)
脚本技术: 线性脚本 结构化脚本 数据驱动脚本、关键字驱动脚本
自动比较技术:静态比较和动态比较, 简单比较和复杂比较, 敏感性测试比较和健壮性测试比较,比较过滤器
测试自动化系统的构成:测试工具的分类、测试工具的选择、测试自动化普遍存在的问题、自动化测试的引入和应用
自动化测试的引入和应用
- 找准测试自动化的切入点
- 把测试开发纳入整个软件开发体系
- 测试自动化依赖测试流程和测试用例
- 软件测试自动化的投入较大
- 进行资源的合理调度
9.6 自动化测试框架
了解:
功能测试工具:QTP
性能测试工具:Loadrunner