仅为学习记录~
软件测试的定义
软件测试的对象–程序、数据和文档
软件测试的目的–保证软件质量,保证软件和系统符合相关法律、技术标准、应用需求,降低软件产品的产品风险和应用风险
GB/T给出了验证与确认的描述,称为V&V 验证–对应的是需求,找相关的客观证据来证实规定的需求已经得到了满足 确认–通过提供客观证据来证明针对某一功能和特定应用需求得到了满足
GB/T32422的定义,软件中出现了瑕疵或缺点,导致无法满足用户的需求或者规格说明书的要求,称为缺陷
软件缺陷主要产生在需求分析阶段和设计阶段,需求分析阶段40%,设计阶段30%,编码阶段30%
需求分析阶段(通过评审可以降低缺陷率)
设计阶段–缺陷较隐蔽,通过评审可以降低缺陷率
编码阶段–缺陷较容易发现
缺陷越早发现,修复代价越低 优先级用于表达、评估、解决缺陷的优先程度 严重性指缺陷失效后最大的影响程度
GB/T25000.1指在规定条件下软件产品满足明确或隐含要求的能力
质量保证是以保证各项质量管理工作实际有效的进行和完成为目的的活动体系
质量保证是管理性活动
软件测试是技术性活动
软件测试是质量保证活动中的一个子项,是质量保证中一个很重要的技术手段
测试用例–为某个特定目的而开发的输入、执行条件、预期结果的一个集合
要点
作用
测试策略是软件测试的原则、方法的集合
测试策略的方法
软件策略的确定主要是测试的需求以及测试风险的评估结果来决定,基于测试需求、风险评估结果去定义测试的范围、要求,选择合适的测试方法,然后去制定测试启动、测试停止、测试完成的标准和条件
测试策略的输入
测试策略的输出
制定测试策略过程
测试需求必须是可观测、可测评的 软件需求与测试需求以及测试用例不是一对一关系 测试需求可能有许多来源
V模型是对瀑布模型的优化,强调了测试的重要性,从本质上还是没有改变瀑布模型的特点 左边部分表示开发阶段,右边部分表示测试阶段
体现了测试工作应尽早和不断地开始的原则(工程性原则) 第一个V表示开发过程,第二个V表示测试过程 W模型仍然没有把软件测试独立出来,还是依赖于开发过程
H模型把测试流程从开发过程中独立了出来,不需依赖于开发过程 在软件开发过程中,任何一个时间点上,只要具备了测试的条件,就开展测试工作,兼顾了测试的效率和联合性,适用于各种规模的软件测试
以应付需求为核心,进行持续、有意义的沟通和迭代,强调的是各方人员之间的相互协作 敏捷测试模型对测试人员要求较高,要求测试人员沟通高效、理解需求能力足够
软件有变动的情况需要进行回归测试
组装时需要考虑的问题 1.在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失 2.一个模块的功能是否回对另一个模块的功能产生不利的影响 3.各个子功能组合起来,能否达到预期要求的父功能 4.全局数据结构是否有问题 5.单个模块的误差累积起来,是否会放大,以致达到不能接受的程度 模块组装方式 一次性组装方式:节省人力,如果没有问题的话成立,在测试过程中发现问题时,很难定位问题出现在哪里,反而浪费工时 增量式组装方式: 1.自顶向下的增量方式 2.自底向上的增量方式 桩模块/驱动模块–是一个底层的驱动模块
组装时需要考虑的问题 1.在把各个模块连接起来的时候,穿越模块接口的数据是否会丢失 2.一个模块的功能是否回对另一个模块的功能产生不利的影响 3.各个子功能组合起来,能否达到预期要求的父功能 4.全局数据结构是否有问题 5.单个模块的误差累积起来,是否会放大,以致达到不能接受的程度
模块组装方式 一次性组装方式:节省人力,如果没有问题的话成立,在测试过程中发现问题时,很难定位问题出现在哪里,反而浪费工时 增量式组装方式: 1.自顶向下的增量方式 2.自底向上的增量方式 桩模块/驱动模块–是一个底层的驱动模块
标准–为了在一定范围内获得最佳秩序经协商一致,并由公认机构批准共同使用和重复使用的一种规范性文档,是标准化活动的核心产物
标准化–为了获得在一定范围内的最佳秩序,对现实的问题和潜在问题,制定共同使用和重复使用的条款的一种活动
软件测试标准化的作用
使用质量 使用质量–从用户角度来看待软件的质量 有效性–用户实现确定目标的准确性和完备性 效率–用户实现目标准确性和完备性过程中所消耗的资源的情况 满意度–产品在指定的使用周境中用户要求满足的程度 抗风险性–产品或系统在经济状况、人的生命健康、环境潜在的风险因素 周境覆盖–在指定的周境中,能够被使用的程度
产品质量:系统/软件产品质量
功能性–在指定的条件下使用,产品或系统提供满足用户明确或隐含功能的程度,功能的特性:完备性、正确性、适合性、依从性 测试方法:等价类、边界值法、因果图法、判定表法、场景法
用例:正常用例、异常用例
完备性–功能集对指定用户的覆盖程度,X=1-A/B 正确性–提供所需的精度,X=1-A/B 适合性–功能与指定任务之间的实现程度,X=1-A/B 依从性–对相关标准、约定的遵循程度
时间特性–响应时间、处理时间、吞吐率是否满足需求 资源利用率–所使用的资源数量、资源类型满足需求的程度 容量–参数最大需求的程度,对象处理大量的数据,确定是否达到了将使软件发生故障的极限;给定时间内,能够持续处理的最大负载或工作量
测试类型:基准测试、并发测试、压力测试、负载测试、稳定性测试、极限测试、场景测试、吞吐量测试
共存性–在与其他产品共享通用的环境,或者共享资源的环境下,产品能够有效执行所需的功能,且不会对其他产品功能造成影响的程度 互操作性–各组件之间能够进行数据的交换
可辨识性–用户能够辨识产品是否能够完成其目标的程度。描述的完整率、演示覆盖率、产品标识可辨识、入口点的自描述性 易学性–学习使用产品的程度。帮助系统和文档的完整性、自动填充默认输入字段、差错信息易理解性、用户界面的自解释性 易操作性–操作和控制的难易程度。操作一致性、消息的明确性、功能的易定制性 用户差错防御性–预防用户犯错的程度。抵御误操作、用户输入差错纠正 用户界面舒适性–让用户感到舒服的程度 易访问性–广泛特征为个体使用的程度。特殊群体的易访问性、支持的语种的充分性
成熟性–在正常运行下,满足可靠性要求的程度。故障密度、故障修复率、平均失效间隔时间(MTBF)、周期失效率 可用性–在需要使用时,能够进行数据操作。系统可用性、平均宕机时间 容错性–硬件发生错误时,软件是否能正常运行。避免失效率、组件的冗余度 易恢复性–软件失效时,是否能恢复受影响的数据,以及重建的程度。平均恢复时间、数据备份完整性、数据恢复能力
保密性–只有被授权的用户才可以访问。访问控制性、数据加密正确性 完整性–防止非授权的访问和篡改计算机的程度 抗抵赖性–活动发生后能够正视且不否认的程度 可核查性–实体活动可以进行追溯的程度。用户审计跟踪的完整性、系统日志存储 真实性–对身份、标识进行核实符合其声明的程度。鉴别机制的充分性、鉴别规则的符合性
模块化–组件发生变更后,对其他组件影响的程度 可重用性–资产能够被重复利用于多个系统或用于其他资产建设的程度。资产的可重用性、编码规则符合ing 易分析性–评估变更的难易程度。日志完整性、诊断功能有效性 易修改性–被有效修改而不会引入新的缺陷。扩充系统应用、软件版本更新方式、软件版本更新时的数据操作、系统参数配置、用户权限配置 易测试性–是否满足有效性和效率的程度
适应性–在软件环境变更下,能够有效率的去使用的程度 易安装性–安装卸载的有效性和效率 易替换性–产品能够替换另一个同样用途产品的程度
RUSP–直接就可以使用的产品
RUSP要求–产品说明要求、用户文档集要求、软件质量要求
测试文档集要求–规定了对产品进行测试时,需要整理编写的测试文档的集合
符合性评价细则–适用于产品的说明、交互的软件
38534修改采用了国际标准29119,主要适用于企业和评测机构,去规范测试过程,建立自己的软件测试流程,提高测试人员的能力
定义了开发和管理组织级测试规格说明书的过程,包括组织级测试方针、策略、规程、资产的维护
组织级测试过程的输入
活动和任务
结果
信息项
定义了涵盖任何测试阶段、测试项目的管理过程,包括3个子过程,分别为测试策划过程、测试监测和控制过程、测试完成过程
目的–用于制定测试计划
输入
信息项–测试计划
目的–设计测试用例、测试规程
目的–建立和维护所需的测试环境,并获得相关状态告知利益相关方
目的–在准备的测试环境中,运行测试设计和实现中的用例集、测试规程
目的–向利益相关方报告执行结果,并另一步的操作后续
信息项–事件报告
目的–保证测试工作按照规格说明书进行的
目的–对测试项目进行总结
信息项–测试完成报告
定义动态测试通用的过程,包括4个子过程,分别为测试设计和实现过程、测试环境构建和维护过程、测试执行过程、测试事件报告过程
不运行程序代码的情况下,通过质量准则对测试项进行检查的测试
目的–通过人工的方式或相关的工具对代码进行走查、审计,去发现代码中的问题
依据–软件规格说明书
特点–不考虑程序的内部结构和逻辑,只关注程序是否能按照规格说明书使用
可解决的问题
等价类划分–依据程序规格说明书,把程序的输入域分成若干个部分,从每个部分中选择少数的测试数据,代表该区域进行测试
价值–减少了工作量,提高了效率
等价类–某个输入域的子集,在该子集中,各个输入数据对应的程序产生的错误是等效的 有效等价类–在需求规格说明书,合理、有意义的输入数据构成的集合 无效等价类–在需求规格说明书,不合理、无意义的输入数据构成的集合
等价类划分步骤
等价类划分原则
测试用例的设计步骤
分类树–等价类划分的另一种方式,将输入域划分为子集的方法,在ai中广泛应用
与等价类的区别–区域之间是否存在重叠的情况,等价类允许有重叠的现象,分类树完全不相交
设计测试用例的步骤
边界值分析–在等价类的基础上,选择测试数据为边界
二值基本边界值分析–边界值要挑正边界以及边界外的最小单位值
三值基本边界值分析–边界、超过边界最小的变化单位,边界内的最小的变化单位
最坏情况边界分析–“多缺陷”假设
健壮性最坏情况测试–实际上是三值边界
语法测试–针对于形式规格说明书的测试技术
语法测试测试用例的设计规则
组合测试–运用于多选项的测试技术
组合测试输入数据要求
组合测试的实施步骤
判定表–适用于条件存在制约的场景
判断表组成–条件桩、条件项、动作桩、动作项
判定表建立
适合使用判定表设计测试用例的条件
因果图适用于输入和输出之间存在约束的情况
因果图导出测试用例的步骤
状态转移测试–软件若干个状态之间的转换条件或转换路径抽象出来,从覆盖所有的装填转移路径的角度去设计测试用例,关注状态转移是否正确
状态转移测试的步骤
通过去描述所经过的路径,来确定工作的过程,遍历所有可能的场景,完成对系统的测试
场景法=基本流+备选流
取一个随机值对系统进行测试
静态测试技术是指在不运行程序代码的情况下,通过质量准则对软件系统进行检查的测试技术
常见技术为代码检查、编码规则检查、静态分析
在编译和动态测试之前进行代码检查,能够快速找出软件的缺陷,而且看到的是缺陷的本质,有效去发现30%-70%的逻辑设计和编码的缺陷,但是测试效率较低,对测试人员的经验和知识有一定的要求
具体检查形式为代码审查、代码走查 代码审查–根据所使用的语言和编码的规范,确定审查所有的检查单,检查检查单中的设计是否符合软件规格说明书,主要目的检查代码逻辑、结构、可读性等方面
代码走查–由测试组的人员,集体去扮演计算机的角色,沿着程序的逻辑逐步去运行设计好的测试用例,来检查软件是否存在缺陷
代码检查的常见项目
静态分析法是根据既定的外生变量值求得内生变量的分析方法,是对已发生的经济活动成果,进行综合性的对比分析的一种分析方法
控制流分析 数据流分析 接口分析 表达式分析
通过生成程序的有效控制流头来对代码进行分析,圆圈表示一个节点,一般对应一个语句或是一组语句,箭头表示控制流的方向
汇聚节点–在执行过程中,没有共同执行的语句,需要加一个空结点作为汇聚节点
圈复杂度
圈度复杂性建议
独立路径条数= V(g)
函数调用关系图 扇入-函数被调用的数量,扇入越大,被重复利用性越高,通用性越强 扇出-完成其功能需要调用其他模块的数量,扇出不建议大于7
通过“定义-使用对”能发现缺陷
主要是检查接口一致性
表达式分析纠正的错误
覆盖要求:选择足够多的测试数据,每条语句都要遍历 语句测试覆盖度较低,对于逻辑或、与写错的逻辑语句中,可能会检测不出来
对于逻辑或、与的逻辑语句中,可能会检测不出来,测试覆盖项为每一个分支
分支测试与判定测试的区别
每一个判定语句的取值,以及判定条件的取值,都要被覆盖 对于逻辑或、与写错的逻辑语句中,可能会检测不出来
每一个判定中所有条件的取值的组合 覆盖强度最强,但是测试工作量较大
1.MC/DC首先要求实现分支条件覆盖 2.再次基础上,对于每一个条件C,要求存在符合一下条件的两次计算:
定义–使用 定义–给变量赋值的过程,一个变量可能会进行多次定义 使用–用到了变量但是没有赋值,分为计算使用、谓词使用 计算使用–一个变量定义其他变量,或者作为其他变量的输出 谓词使用–作为判定的条件
特征集–要测试的程序代码
测试条件–定义-使用对
测试覆盖项
词法和语法分析
程序插桩和驱动技术
ESTCA覆盖准则
层次LCSAJ覆盖准则
最小用例数计算
基于测试人员对以往测试项目中的经验,去设计相关的测试用例,用于预测软件的缺陷和失效
软件错误类型
估算错误数量的方法
基于现在的相关知识,去探索性测试
目的–帮助测试人员理解测试需求
分类
探索性测试风格
探索性测试的相关方法
探索性测试的优点
探索性测试的局限
通过设计对应的检查点,去检查软件对于检查点的情况是否符合需求
构建检查表–基于经验、对用户重要内容的了解、对软件错误的原因和方式的理解、检查项源于以往的经验总结且可测试量
支持测试类型–各种类型测试
基于代码检查表测试的主要检查点
软件测试成本构成:直接成本(测试人工成本、测试环境成本、测试工具成本)、间接成本(办公成本、管理成本)
软件测试成本调整因子
自动化测试–把人为的手动测试行为转化为机器执行的过程
自动化测试
自动化测试的目的:帮助测试寻找问题、协助问题的诊断、节省测试时间
自动化测试的分类
自动化的优点
自动化的缺点
自动化测试局限性领域
自动化测试不正确的期望
自动化测试的通用架构 自动化测试时间策略
适合使用自动化测试工具的情形
开展自动化测试的必要条件
优点
缺点
工具实现
优点–把测试用例生成问题灵活转化为在特定软件对象的输入域中搜索更优的问题
局限性
工具实现–Sapienz
测试工具的选择
自动化测试语言的选择
测试输入的设计与实现
测试输出结果的收集与分析
制定测试计划阶段
内容、目标 要达到的质量要求尽量明确 让利益相关方都能理解并达成共识
设计测试 确定目标、选取合适的测试设计技术 执行测试 明确测试工具、确定测试环境、确定测试轮次
各种资源 说服项目利益相关方进行足够的测试投入
基于风险的测试计划制定
风险测试的相关概念 风险–在软件测试项目中,带来的不确定性和可能发生危险的情况,危险一旦发生会对项目产生影响 风险识别–识别可能对测试项目产生影响的风险,并形成一个文档 风险分析–对识别出来的风险进行优先级排列(定性分析),给出量化指标(定量分析) 风险控制–风险管理计划、风险降低、风险化解
测试计划内容 一般应用于商业产品、非安全攸关的产品或服务
风险识别是基于风险测试的起点,主要方法为专家访谈、头脑风暴、采用风险框架、检查表 风险识别-其他获取风险的来源
实际上基于风险的测试计划中的风险分析
上市后产品中允许的残留风险发生概率估计–设置质量目标
与利益相关方沟通,参考竞品来获取对产品质量的总体期望 对于全新的产品或无法从利益相关方处获取信息的,则从测试经理的经验/测试团队的头脑风暴/产品的使用场景的列举,推算使用场景中出现失效的受容忍的程度
对产品开发测试中遇到风险发生概率的处理原则
风险的优先级: R=P×I R=(C-P)×I
风险与缓解措施:测试策略
一般性的缓解措施指南(系统复杂性非常高)
测试风险缓解措施的基本步骤
各测试设计技术对应的测试条件描述
测试执行方法的设计和指导的内容
单元测试设计与实施
集成测试设计与实施
集成测试工具应具备的功能
验收测试设计与实施
分层架构是一种软件架构的范式,将软件分为若干个层次,每一层有各自的职责,层和层之间通过接口来交互和传递信息
分层架构的优点
分层架构的缺点
表示层负责业务和视图的展开
常规测试项
基于web端的表示层测试
基于pc端的表示层测试
基于移动端的表示层测试
表示层测试设计和实施的原则
服务层为表示层提供各种服务的支持
服务层质量特性
服务接口层测试设计和实施的原则
接口测试质量评估的原则
业务逻辑层负责业务的规则、逻辑的实现
业务逻辑层质量特性
针对功能点的功能性质量特性
针对业务流的功能性质量特性
业务逻辑层测试策略
数据层提供数据管理服务
数据层质量特性
数据库安全性策略–一般用基于规格说明的测试技术,以人工功能检查为主要形式,检查内容为用户及口令管理、授权和审计管理、数据加密
性能效率策略–采用TPC的性能测试标准和规范
数据的可靠性策略–联机备份、故障恢复
数据的正确性与完整性策略–采用基于规格说明的测试方法,以手工测试为主,测试内容为数据库存储数据的方式、数据类型和长度、数据日期和时间字段、国际化、字符集编码
数据库功能性策略–安装与配置、数据库存储管理、模式对象管理、非模式对象管理、交互查询工具、性能检测与调优、数据迁移工具、作业管理
数据迁移策略–数据迁移测试的原则、数据迁移涉及的用例、数据迁移的测试方法 数据迁移的原则
数据迁移涉及的用例
数据迁移的测试方法
事件驱动架构软件测试是指通过事件进行通信的一种软件架构,关注事件的产生、识别、处理、响应的状态变化
事件驱动架构的优点
事件驱动架构的缺点
事件驱动结构支持的功能
功能性
可靠性
性能效率
易用性
信息安全性
兼容性
维护性
可移植性–在事件驱动架构下,一般很少出现移植性问题
通常采用分层测试策略
单元测试
集成测试–围绕核心功能来设计
系统测试–一般不安排
单元测试–集中在事件处理逻辑中
集成测试
系统测试
内核只是最小的功能称为微内核结构
核心系统–能运行的最小模块
插件模块
插件注册表–每个模块的基本信息(名称、数据规约、远程访问协议)
微内核模式的核心
微内核架构设计的关键点–插件管理(插件注册表)、插件连接(通信方式连接规范)、插件通信(通信机制)
微内核架构的优点
微内核架构的缺点
可靠性–应用的稳定性,包括崩溃、闪退、兼容性降低、效率变低
由需求文档确定本次需求的目标
单元测试–各模块测试,确认功能正常
分布式架构是若干独立计算机的特点
特点:内部由多个独立计算机组成,外部呈现是单个系统
分布式架构的组件
代价
数据一致性相关
事物处理相关
并发、互斥相关
远程调用和通信相关
运维相关
常见质量目标
总体思想–分而治之,然后再进行综合
接口测试
移动终端平台–Android、iOS
移动应用软件特点
测试方法–人工测试、脚本编程测试
脚本编程测试
移动应用软件测试的挑战–脚本编程测试的局限性、网络基础设施与架构的多样性、移动设备多样性的挑战
功能测试
性能测试
易用性测试
信息安全测试
可移植性测试
网络测试
物联网能够让所有被独立运行的物理对象联系在一起
物联网的三个典型特征
物联网应用的三项关键技术–感知层、网络传输层、应用层
安全架构
物联网安全架构的设备层
物联网安全架构的通信层
物联网安全架构的云平台层
物联网安全架构的全生存周期管理层
物联网测试中面临的挑战
物联网测试类型
物联网渗透测试技术
渗透测试流程
大数据是指无法在一定时间内用常规的软件工具进行捕捉、管理和数量的数据
大数据的特点
大数据测试面临的挑战
大数据质量检测的测试策略
大数据测试流程
人工智能是一种思维与响应的方式,是与人的方式相似思维的计算机技术
人工智能新的特性
人工智能对软件测试技术发展的影响
人工智能是否会取代软件测试人员
人工智能技术在自动化软件测试方面
机器学习在软件测试中的应用