探索式软件测试
2021-04-22 17:27:59 9 举报
AI智能生成
《探索式软件测试》任命软件测试人员,OA专家、开发人员、程序经理和架构师阅读,对他们的工作具有重要的启发作用。探索式软件测试作为一种富有创新精神和现实意义的测试方法,引起越来越多软件测试人员、质量保证人员和项目经理的高度重视。
作者其他创作
大纲/内容
概念
软件缺陷(bug)的根源来自于软件开发本身
软件失效是指软件运行时产生的一种不希望或不可接受的外部行为
软件失效的机理可描述为:软件错误→软件缺陷→软件故障→软件失效
书中主要谈及的缺陷:程序员引入的缺陷,运行环境导致的缺陷
预防和检测
缺陷预防
开发角度
缺陷检测
动态测试
自动化测试
缺点:维护自动化测试代码需花费大量时间
优点:重复使用率高,提高测试速度
致命弱点:“预言家难题”,很难预估测试完成情况
手工测试
测试目标:软件发布前,所有重要的任务都完成了,而剩下没做的事情都是比较次要的
不影响用户的使用和愉悦感
软件执行的4个基本任务
接收输入
产生输出
存储数据
进行运算
手工测试
优点:
1.更接近真实场景
2.容易发现与应用程序业务逻辑相关的缺陷
缺点:效率低,没有规律,不可反复使用
测试脚本
记录了实际运行哪些测试
适用于指定场景,且输出结果可判断
探索式测试
完全抛开测试脚本
测试结果、测试实例、测试文档都会在运行测试时创建
记录结果的最佳工具:截屏软件、记录击键的软件
使用含有调试信息的软件版本、调试器、代理程序
更有实效
最适用于:“敏捷开发过程”的Web应用程序
缺点:可能在测试中找不到重点,盲目测试,浪费大量时间,效率低下
指导方法
局部探索式测试法
辅助测试人员在测试过程中即时做出决定
全局探索式测试法
用于帮助测试人员设计整体测试计划和测试策略
全神贯注,集中精力
目标
理解应用程序如何工作,其接口看起来如何,实现了哪些功能
强迫软件展示其全部能力
找到缺陷
局部探索式测试法
面临选择抉择时使用探索式测试的策略
局部小范围
好处:测试人员不需要知道很多信息就可以完成细节任务
重点:把测试经验、专业知识、软件在操作环境下如何构建和运用的知识结合在一起
决策 分为5部分
输入(input)
一般定义:输入指的是由环境产生的一种刺激,该刺激导致被测试的应用程序有所响应
分为两类
原子输入(atomic input)
建议使用“等价类划分”
抽象输入(abstract input)
非法输出(illegal output)
影响因素
各种输入之间会相互影响,从而造成软件失效
输入这些值时的先后顺序也会导致问题
正向测试(postive testing)
逆向测试(negative testing)
依据开发人员的思路来构建一个非法输入值,牢抓错误信息
开发人员有三种基本方式
定义错误处理程序(error handle)
输入筛选器(input filter)
防止非法的输入值被传递给应用软件的功能代码
输入检查(input check)
是应用程序代码的一部分,通常使用类似if、then、else结构的语句实现(或case、select结构,或lookup table)
使用异常(exception)
异常处理代码把整个routine当成一个整体看待,检测其上发送的任何一个错误
常规输入/非常规输入
默认输入/用户手动输入
根据输出指导输入选择
先明确功能后确实哪些输入会引发相应输出
明确期望输出结果,考察所有用户场景,观察如何生成期望结果(主动)
先观察输出结果,再选择新的输入,并保证新输出与原先不同
抽象角度
非法输出(illegal output)
合法输出(lega output)
状态(status)
定义:
软件的 一个状态就是状态空间的一个点,它是由所有内部数据结果的取值来唯一确定
软件状态可以看成是用于描述软件记住过去发生的所有输入和输出的一种方式
数据辖域
输入和状态相结合
使用状态信息来帮助寻找相关的输入
使用状态信息来辨别重要的输入序列
代码路径(code path)
一条代码路径就是一连串的代码语句,其起始于开始语句,终止于结束语句
必须明确知道程序里可能有哪些分支,并理解哪些输入会导致软件走这条分支而不是另一条
用户数据(user date)
创建一个含有特定数据的数据存储,其含有的数据应该和软件真实用户使用的数据尽量相似
执行环境(execution environment)
使用的操作系统和其当前配置
提供输入,接收输出
全局探索式测试法
确定了如何对软件进行探索式测试的整体方向
漫游测试
商业区测试类型
用户所要使用的热门的软件特性和功能
方法
指南测试法
卖点测试法
地标测试法
极限测试法
快递测试法
深夜测试法
遍历测试法
历史区测试类型
针对老功能和缺陷修复代码
方法
恶邻测试法
博物馆测试法
上一版测试法
娱乐区测试类型
测试辅助功能,确保辅助和主线特性能结合
方法
配角测试法
深巷测试法
通宵测试法
旅游区测试类型
快速访问软件的各种功能
方法
收藏家测试法
长路径测试法
超模测试法
测一送一测试法
苏格兰酒吧测试法
旅馆区测试类型
经常被忽视或者在测试计划中较少描述的次要及辅助功能
方法
取消测试法
懒汉测试法
破旧区测试类型
试图利用每个可能的机会暗中破坏程序(故障注入,抓捕漏洞)
强迫软件做一些操作
掌握软件成功完成操作必须使用的资源
在不同程度上移除那些资源或限制使用那些资源
方法
反叛测试法
总结
逆向测试法
歹徒测试法
错序测试法
强迫症测试法
混合探索式测试技术
使用正式脚本可以为探索式测试设立一个明确的框架,探索式测试法可以提高脚本测试的有效性,为脚本中的测试用例提供更多种多样的变化
基于场景的探索式测试
有价值的场景包含
讲述用户故事
描述需求
演示产品功能
演示集成场景
描述设置和安装
描述警告和出错情形
场景操作
衍生场景
通过(静态)场景操作注入变化
插入步骤(延长场景)
增加更多数据
使用附加输入
访问新的界面
删除步骤(化繁为简,尽量减少)
替换步骤(先删后插)
重复步骤(重复单独的操作,例查询)
替换数据
理解应用程序连接和使用的数据源,确保其交互稳定
替换环境
(尽量接近用户场景)
替换硬件
替换软件
替换版本
修改本地设置
通过漫游操作注入变化
卖点测试法
地标测试法
极限测试法
深巷测试法
强迫症测试法
通宵测试法
破坏测试法
收藏夹测试法
超模测试法
配角测试法
最近邻的选择
取消测试法
混票测试法
实践中的探索式测试
出租车测试法
多元文化测试法
测试需培养的方向
明确目的
决定测试什么
从不同的深度和顺序检测,列出特性的功用
决定何时测试
明确每个缺陷应该在什么时候被发现
决定如何测试
将缺陷类别和漫游方法/测试技术相连系,明确某些缺陷最适合的方法
降低重复性
知道已经运行过哪些测试
变化测试目标、测试要点
知道什么时候注入变异
通过改变技术调整测试用例
降低暂时性
结合实际--真实环境、真实数据,用户介入
将单调变有趣
花时间进行测试分类和测试策略,减少测试运行时间(枯燥部分)
解决健忘
测试用例不是解决暂时记忆的最好方法
将漫游方法映射到软件特性和缺陷上,留下相关产品记录(结合实际练习)
作者经验总结
作者的软件戒律
1. 汝应使用大量输入反复锤炼汝之应用程序
随机测试的输入域,无限中理解有限
2. 汝应贪图汝之邻居的应用程序
兼容性
3. 汝应亲自寻找睿智的预言家
预言程序的行为,尽量将测试基准进行自动化(熟知软件行为)
4. 汝不应该崇拜无法重现的失效
5. 汝应尊重汝之模型和自动化测试
6. 汝应利用开发人员的过错与他们作对
7. 汝应醉心于谋杀应用程序(庆祝蓝屏吧 Blue Screen of Death)
好缺陷背后隐藏着更好的缺陷|(不要停止)
8. 汝应保持安息日(产品发布时刻)的圣洁
9. 汝应贪图开发人员的源代码
测试错误处理代码考虑的属性
输入类型
输入长度
边界值
软件复杂环境的构成
操作系统
文件系统
软件库或API
通过用户界面交互的人
理解软件故障和软件失效
0 条评论
下一页