探索式软件测试
‐-‐用用户输入入
软件的核心功能: 1. 接收输入 2. 产生输出 3. 存储数据 4. 进行运算 程序的错误处理程序是重点 大量的代码除了处理程序的正常逻辑之外, 还需要大量的代码处理各种错误和异常情况
五要素之一-‐-‐-‐-‐-‐用用户输入入
异常处理代码 错误的提示信息比较笼统 确认异常产生的输入,进行修改和引申变化,确认出现 异常的函数,通过运行调用此函数的测试用例,尝试查询是 否可以发现新的缺陷
五要素之一-‐-‐-‐-‐-‐用用户输入入
O 常规输入
没有特定的格式或含义,开发计划中的输 入,真实用户经常用的输入。 例如:输入字母和数字等 O 非常规输入
五要素之一-‐-‐-‐-‐-‐用用户输入入
O 考虑各种输入之间会相互影响 O 输入值的顺序
例如:
1. 单独搜索cd无问题,单独搜索视频无问题,
混合搜索视频和cd则有问题 2. a和b的输入,组合:ab,ba。 3. abc的组合输入:abc ,bac,bca等 4. 购物车测试,先买书,结账。为空的时候 结账,买一本后结账,然后再买一本。
自动化测试
擅长找到的问题: 1. 程序崩溃 2. 系统死机 3. 程序挂起 4. 突发异常 5. 原有能用的功能出现问题 过度的依赖自动化测试会成为程序的最终成 功带来隐患
手工测试
O 由人来动手进行测试 O 手脑并用,充分发挥测试人员的聪明才智 O 设计出真实的用户情况 O 在真实的用户环境中使用真实的用户数据 O 可以识别出显而易见的缺陷和难以察觉的缺
在比较特殊的情况下才会发生,或者某些特殊条 件才会出发的输入。 例如:输入Ctrl+c、shift+c、esc、Alt、Ctrl键 操作系统的保留字 不同的字符集,本地化的问题
五要素之一-‐-‐-‐-‐-‐用用户输入入
O 默认输入
在空白的文本框种不输入任何东西 程序界面元素设定的默认值 测试方法: 为空的时候直接提交程序处理 去掉页面默认值后,提交程序处理 修改默认值,增加?减少?变换类型 等方式
探索式测试
完全抛开测试用例,使用定义的比较笼统的 测试用例,则称之为探索式测试。 特点: 1. 根据收集到的信息,天马行空,自由发挥 2. 测试结果、测试实例和测试文档在测试执 行时创建 3. 探索式测试适用于“敏捷开发过程” 4. 测试人员有可能没有测试重点
探索式测试方方法
O 局部探索式测试法
试任务,局部测试的重点是把测试经验、 专业知识、软件在操作环境下如何构建和 运行的知识结合在一起,使我们在测试过 程中做出正确的决定。
测试的无穷特性
测试运行时的表现是否符合设计预期 2. 用户为了某个功能而购买了软件,可是该软 件是否实现了这个功能? 3. 软件运行时,是否足够快、足够安全、足够 稳定,等等? 解决以上问题的方式:在某个特定操作环境中运 行该软件,并且模拟软件预期的使用方式来输入 这些值。 问题:输入的内容太多、组合方式太多、可运行 环境太多
1.
缺陷检测
O 自动化测试
通过编写代码来测试一个应用 O 手工测试 使用程序的用户界面,手工输入数据进行测 试
关于自动化测试
O 需要测试人员编写代码---开发人员 O 花费太多的时间来开发测试代码,而减少了测试
项目的时间。 O 自动化测试很炫,可以重复执行很多次 O 自动化测试适合在测试环境中运行 O 预言家的难题: 如何才能知道被测试软件确实完成了他应完成 的任务? 被测软件是否输出了正确的结果? 在运行中是否会带来副作用
测试的目标
目标: 所有的重要任务都完成了,而剩下没做的事 情是比较次要的,我们做到这一点就可以尽 早尽可能地降低发布风险。 方法: 测试是一个不停进行抉择的过程。测试人员 必须理解运行测试用例时和分析现有信息所 涉及的各种复杂性,这有助于从多种可行方 案中做出正确的选择。
局部探索式测试法
O 测试人员不需要知道很多信息就可以完成测
陷 O 善于发现应用程序业务逻辑相关的错误
手工测试
缺点: O 手工测试很慢,没有规律 O 不可反复使用 O 发现问题后也不能重现 O 测试人员的水平决定了手工测试的质量 O 使用细化的测试用例进行测试,则缺少变通 建议: 测试用例不要使用太细节的描述,而是描述一些 笼统的用户使用场景。 手工测试也可以使用自动化测试工具
五要素之一-‐-‐-‐-‐-‐状态
O 电话的状态: (接电话动作作为输入)
O 如果电话连接的电话网没有开通,电话就不
会有什么反应。或者发出一个错误的回应 O 如果当前电话没有在振铃,电话就会发出一 个拨号音 O 如果当前电话正在振铃,电话就会被接通, 用户可以和其他人通话
五要素之一-‐-‐-‐-‐-‐状态
局部探索式测试法
总结: O 五要素的内容组合无穷尽,我们在测试过程 中尽可能获取5要素种的各种信息,来为我 们的测试决策提供素材。 O 局部探索式测试的每一步都是根据软件过去 和当前的运行状况、软件在测试时表现出 来的各种行为和软件运行时的各种信息来 即时决定。
全局探索测试
探索测试的几个目标: O 理解应用程序如何工作,它的接口看起来怎样, 它实现了哪些功能 提供必要信息,给测试人员提供测试切入点 尽可能发现新的、没有被探索过的功能 O 强迫软件展示其全部能力 验证软件可以达到设计和发布要求 O 找到缺陷 探索各种软件的极端情况来发现潜在的问 题。发现未被测试过的功能或者是包含缺点多的 功能。
编写出正式的测试用例,测试人员根据测 试用例来执行。 O 在执行正式的测试用例的同时,可以使用探 索式测试来让测试用例更加的丰富和富有 变化,提高测试代码的覆盖率,找到更多 的bug。
⺫目目前测试的现状
O 招聘广告:
急需一名软件测试人员,该职位要求根据那些 乱七八糟且只有半截的规格说明书(如果还找到 的话)来测试一个高度复杂且基本不带文档支持 的软件产品。不要指望当初的开发人员,他们基 本不远也不会帮助你。该产品的使用环境复杂, 支持多用户、多平台和多语言,和其他很多必须 支持的环境。我们不清楚如何定义它们,但安全 性和性能是最重要的,而且该软件发布后不允许 出现任何问题,否则我们就玩完了。
1.
测试的原则
O 把测试工作简化为先在所有输入(或者运行
环境等)的全体集合中选择一个子集,然 后在输入时使用选中的子集,最后通过推 理认定是否这些输入已经足够多了。 O 最终产品发布后,在进行测试已经无法提高 已发布代码的质量了。 O 对于无限的测试,我们唯一的希望寄托于我 们选择了正确的输入和其他测试决策。 O 随机测试不是好的测试方法,因为他缺少必 要的策略
五要素之一-‐-‐-‐-‐-‐运行环境
五要素的前4个如果都被充分测试了,但是如果软件迁移到一个新的运行 环境,则一样有可能无法运行成功。 环境本身就是一种输入源 环境包含的要素很负责,列举一些: 操作系统 当前配置 其他应用程序 网络拓扑 驱动程序 文件系统 网络带宽 性能 测试环境很关键,很难测试
五要素之一-‐-‐-‐-‐-‐用用户输入入
O 使用输出来指导输入
把程序的主要输出结果列出来,确定哪些输入 会引发这些输出。 输入和输出配对,保证大部分场景都被测试过 考虑多次输入(相同值和不同值),对输出的 影响 从保存起来的输出结果思考,改动这些值或者 改变他们的功能(大小和类型等),可以测试该 值对此系统的一些影响
五要素之一-‐-‐-‐-‐-‐状态
状态: O 软件的一个状态就是状态控件中的一个点,它 由所有内部数据结构的取值来唯一确定。 O 通俗的说:当个输入、一些输入或者全部输入 会被软件“记住”,从而让软件看起来不同。 O 状态是软件所有变量的交叉积,状态的无穷尽。 应用程序和其运行环境进行交互和接收到的所 有输入导致软件状态发生变化。 O 可以使用等价类方法来进行一些状态测试
使用用竞争对手手的操作手手册来测试自自己己的应用用 程序
卖点测试法
软件中最核心的功能,用户希望使用的功能 就是卖点。 销售人员会花费大量时间来给用户演示这些 程序的卖点,他们会创造出很多出彩的使用 场景。 测试人员应该和销售人员保持好关系,获取 各种销售方面的信息,来进一步探索软件的 使用场景
地标测试法
O 错误处理程序(error handler)
1.
2.
方式
3.
输入筛选器 用户防止非法的输入值被传递给应用程序的功能代码。 确认开发人员是否正确实现了筛选器 确认是否可以绕过输入的屏蔽器 输入检查 通过if then else case select 等方式实现 测试人员关注错误提示信息,挖掘其他可以触发错误的
一条代码路径就是一连串的代码语句,它起 始于软件开始运行的语句,终止于一条特定 的语句。 O 一个程序有很多条代码路径,总量非常大。 O 测试人员必须清楚程序里面有哪些分支。 O 尽量测试所有知道的分支,尝试探索发现未 知的分支 O 可以分析代码覆盖率,基本评估自己的测试 覆盖程度
五要素之一-‐-‐-‐-‐-‐用用户数据
针对测试对象的局部内容进行测试的策略,例 如:一个页面、一个输入框等的测试策略。 O 全局探索式测试法 使用测试集用来确定软件是否已经满足正式发 布所需达到的质量标准。 测试集中的测试用例都是相互有联系的整体 确定了如何对软件进行探索式测试的整体方向
传统的测试和探索式测试
O 两者的关系为互补关系,而不是对立关系 O 传统测试通过收集来的各种信息和文档,
光荣之路软件测试培训 --吴老
大纲
O 自动化测试 O 手工测试 O 局部探索式测试法 O 全局探索式测试法 O 混合探索式测试技术 O 漫游与测试中的棘手问题
手手工工测试
软件缺陷(Bug)的根源: 来自软件开发本身! 两种缺陷: 程序员引入的缺陷 运行环境导致的缺陷
缺陷预防和检测