软件质量保证与测试笔记——江湖救急版
Powered by DZY
以下部分图片来源于老师课件,仅供学习交流使用,侵权致删!
Ch1 软件质量与测试概念
-
软件质量的定义
软件质量是“反映实体满足明确的和隐含的需求的能力的特性的总和”。具体地说,软件质量是软件符合明确叙述的功能和性能需求、文档中明确描述的开发标准、以及所有专业开发的软件都应具有的和隐含特征相一致的程度。
-
满足用户需求
-
建立合理的进度、成本与功能的关系
-
具备扩展性和灵活性
-
能有效的处理例外情况
-
保持成本和性能的平衡
-
-
质量保证和质量控制的概念
质量保证:为了确保软件开发过程和结果符合预期的要求,而建立的一系列规程,以及依照规程和计划采取的一系列活动,以及结果评价。
质量控制:为了达到产品的品质要求所采取的作业技术和活动。
-
软件缺陷的定义
只要是软件中存在的问题,最终表现为用户所需要的功能没有完全实现,没有满足用户的最终要求
-
从产品内部看,软件缺陷是产品开发或维护过程中所存在的错误、毛病等各种问题。
-
从产品外部看,软件缺陷是系统所需要实现的某种功能的失效或者违背。
-
用户的期望没被满足
-
软件功能执行时发生错误
-
Defect = bug
缺陷举例:
- 性能:运行太慢
- 不一致性:CTRL+S不是保存,是其他的
- 缺陷的表现形式有很多种,不仅仅表现为功能失效方面,还体现在其他方面。 例如,
- 数据结果不精确,精度不够
- 实际结果和预期结果不一致
- 用户界面出错、混乱、不美观
- 运行中断、系统崩溃
-
- 错误:发生在编写程序的过程
- 故障:是一个或者多个错误的表现
- 失效:当执行错误代码段导致错误状态并传播到程序输出时,会发生失效
- 事故:发生故障时不显示任何消息
缺陷什么时候发生
- 软件没有做规范中说它应该做的事情
- 软件做了一些规范说它不应该做的事情
- 软件做了规范中没有提到的事情
- 软件没有做产品说明书中没有提到但应该做的事情
- 软件难以理解,难以使用,速度慢…
IBM研究结果表明:缺陷存在逐级放大的趋势
-
了解软件测试
软件测试的定义
软件测试是为了发现错误而执行程序的过程。是有计划的、成体系的重要步骤(is the essential step which is planned and systematic),是软件质量保证的关键步骤
为什么测试?
基于安全性和经济角度,为了发现软件的错误,降低软件的风险
软件测试是为了发现错误而执行程序的过程。
一个好的测试能在第一时间发现程序中存在的错误。 一个好的测试是发现了至今尚未发现的错误。
测试的类型
-
按照测试生成的来源
- 黑盒测试/功能性测试
- 白盒测试/结构性测试
-
按照生命周期的阶段
- 单元测试
- 集成测试
- 系统测试
-
按照测试活动的目的
-
-
按被测对象的特征
-
-
按测试过程的模型
-
Testing in waterfall model 瀑布模型中的测试
缺点:不能对上一步的模型进行调整
-
Testing in V-model V型试验
在开发周期的每个阶段显式地指定测试活动
-
Spiral testing 螺旋测试
应用于软件增量时,每个增量都可能是最终将应用程序交付给客户的原型
-
Agile testing 敏捷测试
要求团队与客户的良好合作
用于极限编程
-
Test-driven development (TDD) 测试驱动开发(TDD)
Requirements specified as tests(规定为试验的要求)
-
软件测试在软件开发中的角色
贯穿整个软件开发周期
测试规则
- 尽早测试,经常测试
- 集成应用程序开发和测试生命周期
- 使测试方法形式化
- 制定全面的测试计划
- 同时使用静态和动态测试
- 定义你期望的结果
- 了解应用程序背后的业务原因
- 使用多个级别和类型的测试
- 评审和检查工作(静态测试的范围),会降低成本
- 不要让程序员检查他们自己的工作
软件测试的重要功能
- Verification 验证,软件开发过程,比对需求规格说明
- Validation确认,从用户角度考虑
测试test和调试debug
- 测试条件已知,规程可定义,结果可预知
- 测试可以计划,过程可控;调试不可控
- 测试是检验,调试是推理过程
- 测试除了表明程序正确还要验证程序如何处理失败,调试表明正确
- 测试可不了解设计细节,调试必须了解设计细节
- 测试可自动化,调试无法自动化
了解软件测试的基本原则
-
-
20%的模块有时候有80%的缺陷
-
尽早测试,经常测试
-
集成应用程序开发和测试生命周期。
使测试方法形式化
制定全面的测试计划
同时使用静态和动态测试。
-
定义你期望的结果
了解应用程序背后的业务原因
使用多个级别和类型的测试
评审和检查工作(静态测试的范围),会降低成本
不要让程序员检查他们自己的工作。
-
测试通过的规则:
是否执行了所有测试用例
功能设计是否完成是否有足够的bug
-
什么是测试用例:
如果系统按照其规范操作,则用于测试系统的输入和这些输入的预测输出。
-
测试用例的设计原则:
避免模糊vague的测试用例
相似函数应进行抽象和分类classified
避免复杂的测试用例
给定测试用例,必须要有预期结果
-
了解软件质量
- 什么是质量:
- 用户视角
- 开发者视角
- 质量的评判标准——度量criteria
- validity有效性
- generality普遍性
- interoperability互操作性
- 软件质量涉及的活动包括
- 过程process,质量保证
- 产品product,质量控制
- 质量预防和检测
- It’s all about the End-user
- 什么是质量:
-
名词解释
Ch2 质量保证 & (质量控制——面向产品)
-
软件质量控制(SQC) 概念和方法
什么是质量控制
-
质量保证行动提供了一种手段,以控制和衡量项目、过程或设施的特征,以满足既定的要求。
-
维持产品或服务质量以满足特定需求的操作技术和活动;也使用这些技术和活动
-
质量控制活动是以工作产品为导向的
他们测量产品,发现不足之处,并提出改进建议。
这些活动的直接结果是对产品的更改。
这些变化可以是单行代码的改变,也可以是产品从设计到重新设计。
他们评估evaluate产品,发现弱点并提出改进建议。
测试和评审是QC活动的例子,因为它们通常导致对产品的更改,而不是过程。
QC活动通常是质量保证(QA)活动的起点。
质量控制方法
-
Goal question metric approach 目标问题度量法
-
GQM方法是一种系统化的方法,用于将组织的目标裁剪(tailor)并集成到度量目标中,并将其细化为可度量的值。它有助于系统地推导测量计划
-
-
GQM过程:
制定一套公司项目目标生成以可量化的方式尽可能完整地定义这些目标的问题
-
好处:
实现这个范例最重要的好处是它始终关注您为什么要收集度量
-
经验法则:
平均故障密度average fault density是每千行源代码1.9次。
管理功能的故障密度fault density for management functions 是分发功能故障密度的三倍。
控制台功能的故障密度fault density for console functions是分发功能故障密度的两倍。
在分发软件中纠正错误所需的平均工作量是纠正管理功能错误所需工作量的5倍。
-
-
-
SQC 模型和技术
-
Risk management approach 风险管理方法RM
-
软件风险管理过程分为两个活动:
1)软件风险评估assessment
2)软件风险控制
每个活动都涉及到一些不同的任务
- 风险评估的不确定性
- 不确定性是风险概念和风险评估中的一个关键概念
- 概率分析Probabilistic analysis 是处理风险分析中涉及的不确定性的主要方法
- 风险评估的不确定性
-
-
-
基于PDCA的扩展——TSQC
-
质量控制模型中的参数不孤立且具有相关性
-
在质量控制中要对这些参数进行调节达到平衡
-
参数
-
产品:所有可交付物
-
过程:所有活动的集合
-
资源:活动的物质基础(人力、技术、设备、时间、资金等)
-
-
-
-
软件质量保证
- 什么是质量保证
-
软件质量保证包括:
审查和审计软件产品和活动,以验证它们是否符合适用的程序和标准。
向经理和软件项目团队成员提供这些审查和审核的结果
-
为什么关注质量保证
法律责任、成本效益、客户需
-
SQA方法:
-
软件质量标准
-
-
常用软件质量标准:
-
CMM的目标
改进现有的软件开发过程
-
CMM的五个成熟度级别
-
CMM的缺点
-
CMMI(能力成熟度模型集成)
它为组织应该做什么提供了明确的定义,以促进行为,从而提高性能,并允许集成不同的组织功能
-
缺点
-
-
Ch3 软件质量度量
-
Metrics and Software Metrics度量和软件度量
-
Software Metrics Baseline Process基准过程
-
度量特征
-
为什么使用测量measure
-
为什么使用度量matric
- 更准确的、类似的测量
- 度量不是目标,目标是通过度量、分析和反馈来提高软件开发的质量
-
什么是软件度量?
软件度量被定义为一个单元,它可以定量地确定软件过程、产品或项目具有某种属 性的程度。
-
度量是与软件系统、过程或相关工件相关的任何类型的度量
-
度量种类:
-
过程度量
-
产品度量product
-
项目度量project
-
-
测量种类
-
规范化度量
-
-
-
-
-
-
将功能复杂性乘以针对每个功能的相应权重, 然后将这些值相加以确定子系统的UFP(未调整功能点)。
-
-
-
-
-
-
-
-
-
-
Software Quality Metrics 软件质量度量
-
Ch4 黑盒测试(用户角度)
-
什么是黑盒测试
-
-
-
测试用例就是设计一个情况,软件程序在这种情况下,必须能够正常运行并且达到程序所设计的执行结果
-
测试用例的设计原则特征
-
Equivalence Partitioning 等价类划分
-
等价类定义
-
等价类划分方法
-
-
测试用例设计规则
-
用尽可能少的测试用例来覆盖所有有效等价类
-
-
设计测试用例时需保证所有有效等价类被覆盖到(1-3)
-
在单缺陷假设(Single defect hypothesis)中
- 设计无效等价类的测试用例时,只含一个无效等价类(4-7),其他有效就可以
-
对于多个变量来测试两个及以上缺陷,8-14更需要
-
-
-
例题
-
单缺陷测试用例设计
-
-
Boundary Value Analysis 边界值分析
-
-
-
边界值分析是基于单缺陷假设single fault的
-
边值分析的简单推广,即考虑健壮性设计,超出有效范围的值略大于最大值(max+)和略小于最小值(min-)的值
-
加上健壮性的边界值分析
-
例题
如果考虑健壮性
-
实际产生测试用例时删除重复的用例组合,保留一个就行
-
总结
-
-
Decision Tables决策表(健壮性最强,考虑情况最全面)
-
-
决策表阅读指南
合并1-4:以提高测试效率,“-”包含了yes,no的情况
四个框中分别为条件桩,行动桩,条件条目,行动条目
-
例题
-
准则
-
练习
-
-
Cause-Effect Graphing因果图
-
回顾/复习
- 等价分类法和边界值分析法的缺点是没有检查各种输入条件的组合。
- 要检查输入条件的组合并非易事,因为即使可以将输入条件分成等价类,但它们的组合情况可能很多,如果没有一个系统的方法是难以设计测试用例的。
- 借助因果图列出输入数据的各种组合与程序对应动作效果之间的阶段联系,构造判定表,由此设计测试用例是生成测试用例的有效办法。
-
什么是因果图
-
因果图中使用的表示法
-
约束:(原因间、结果间)
-
因果图设计的步骤
-
练习
-
缺点
不易理解
-
-
Orthogonal Array Testing 正交实验
-
-
多次单因素实验
-
正交测试设计
-
正交表
-
例题
-
正交表测试步骤
选出的正交表不能保证包含所有测试用例
-
-
Scenario Testing常规实验
-
场景测试
它是一个软件测试活动,它使用场景用例,或者简单的场景,这些场景基于一个假设的故事来帮助人们思考一个复杂的问题或者测试环境的系统。
-
理想的场景有五个关键特征
-
用例的重要流事件
-
步骤
-
Ch5 白盒测试
-
什么是白盒测试
-
分类
-
主要用于单元测试
-
白盒测试需要遵循的原则
-
为什么不能进行穷举测试
-
四代白盒测试
-
逻辑覆盖
-
语句覆盖 Statement coverage
-
决定/判定覆盖 Decision / decision coverage
-
条件覆盖 Conditional coverage
-
条件/决定覆盖 Condition / decision override
-
条件组合覆盖 Conditional combination coverage
-
路径覆盖 Path coverage
-
-
N-S图
-
控制流程图
-
例题
-
例题
-
基础路径测试
-
例题
-
总结
-
循环测试
- 简单循环
-
嵌套循环
-
-
-
数据流测试(不是重点)
-
突变测试(了解,不是重点)
-
白盒测试与黑盒测试的比较
Ch6 单元测试
-
什么是单元测试
-
按阶段进行测试是一种基本的测试策略,单元测试是执行过程中的第一阶段。
-
-
-
-
-
-
-
单元测试的分类
-
-
单元测试的策略
-
自顶向下的单元测试
测试顶级首先,单元由顶层调用存根,然后测试第二层次,作为驱动模块的单元测试顺序
-
自底向上的单元测试
首先对底层模块进行测试,为其设置驱动模块,然后对上层模块进行测试,将已测试模块依次作为存根进行测试
-
隔离测试(最方便,减少了对其他单元的依赖)
不考虑模块之间的关系,设计每个模块的子模块和驱动模块
-
-
单元测试分析
- 单元测试准则
- 怎样使用Junit
Ch7 集成测试
- 多个单元测试出来以后,再进行集成测试
- 集成测试介绍
- 集成测试策略
- 集成测试分析
- 集成测试用例设计
- 集成测试流程
- 集成测试环境
- 集成测试原则
Ch8 系统测试
-
系统测试概念
-
系统测试方法
- 系统测试过程
Ch9 性能测试
-
什么是性能
-
并发用户数
- 并发用户平均
- 登录会话数
- 平均登录会话长度
- 检查周期长度
- 峰值并发用户
- 例题
- 吞吐量
- 休眠时间 Dormancy time
-
什么是性能测试
压力测试是在强负载下的测试
-
性能测试有哪些类型
-
如何进行性能测试?
Ch11 测试管理
-
测试指标/度量
-
缺陷管理
-
软件测试生命周期
-
具备自动化软件测试的基本知识
-
自动化测试工具